/usr/share/pyshared/sunpinyin/pyslm.pyx is in python-sunpinyin 2.0.3+git20140127-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 2007 Sun Microsystems, Inc. All Rights Reserved.
#
# The contents of this file are subject to the terms of either the GNU Lesser
# General Public License Version 2.1 only ("LGPL") or the Common Development and
# Distribution License ("CDDL")(collectively, the "License"). You may not use this
# file except in compliance with the License. You can obtain a copy of the CDDL at
# http://www.opensource.org/licenses/cddl1.php and a copy of the LGPLv2.1 at
# http://www.opensource.org/licenses/lgpl-license.php. See the License for the
# specific language governing permissions and limitations under the License. When
# distributing the software, include this License Header Notice in each file and
# include the full text of the License in the License file as well as the
# following notice:
#
# NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
# (CDDL)
# For Covered Software in this distribution, this License shall be governed by the
# laws of the State of California (excluding conflict-of-law provisions).
# Any litigation relating to this License shall be subject to the jurisdiction of
# the Federal Courts of the Northern District of California and the state courts
# of the State of California, with venue lying in Santa Clara County, California.
#
# Contributor(s):
#
# If you wish your version of this file to be governed by only the CDDL or only
# the LGPL Version 2.1, indicate your decision by adding "[Contributor]" elects to
# include this software in this distribution under the [CDDL or LGPL Version 2.1]
# license." If you don't indicate a single choice of license, a recipient has the
# option to distribute your version of this file under either the CDDL or the LGPL
# Version 2.1, or to extend the choice of license to its licensees as provided
# above. However, if you add LGPL Version 2.1 code and therefore, elected the LGPL
# Version 2 license, then the option applies only if the new code is made subject
# to such option by the copyright holder.
cdef extern from "slm.h":
ctypedef union CThreadSlm_TState "CThreadSlm::TState":
void setIdx (unsigned int idx)
void setLevel (unsigned int level)
unsigned int getLevel()
unsigned int getIdx()
ctypedef struct CThreadSlm "CThreadSlm":
bint load(char *filename, bint MMap)
bint isUseLogPr()
void free()
double transferNegLog (CThreadSlm_TState history, unsigned int wid, CThreadSlm_TState result)
double transfer (CThreadSlm_TState history, unsigned int wid, CThreadSlm_TState result)
CThreadSlm_TState history_state_of(CThreadSlm_TState st)
CThreadSlm_TState historify(CThreadSlm_TState st)
unsigned int lastWordId(CThreadSlm_TState st)
CThreadSlm *new_CThreadSlm "new CThreadSlm" ()
void del_CThreadSlm "delete" (CThreadSlm *slm)
cdef class SlmState:
cdef public int level, idx
def __cinit__(self, level=0, idx=0):
self.level = level
self.idx = idx
def __richcmp__ (self, other, op):
equal = self.level == other.level and self.idx == other.idx
if op == 2: return equal
elif op == 3: return not equal
else: return NotImplemented
def __hash__ (self):
return ((self.level, self.idx)).__hash__()
def __str__(self):
return "[level=%d, idx=%d]" % (self.level, self.idx)
cdef inline pystate_to_cstate (state, CThreadSlm_TState *st):
st.setLevel (state.level)
st.setIdx (state.idx)
cdef class Slm:
cdef CThreadSlm *thisptr
def __cinit__(self):
self.thisptr = new_CThreadSlm()
def __dealloc__(self):
del_CThreadSlm (self.thisptr)
def load (self, fname):
return self.thisptr.load(fname, True)
def is_using_log_pr(self):
return self.thisptr.isUseLogPr()
def free(self):
self.thisptr.free()
def transfer_neglog(self, history, wid):
cdef CThreadSlm_TState his, ret
pystate_to_cstate (history, &his)
pr = self.thisptr.transferNegLog(his, wid, ret)
return pr, SlmState(ret.getLevel(), ret.getIdx())
def transfer(self, history, wid):
cdef CThreadSlm_TState his, ret
pystate_to_cstate (history, &his)
pr = self.thisptr.transfer(his, wid, ret)
return pr, SlmState(ret.getLevel(), ret.getIdx())
def history_state_of(self, state):
cdef CThreadSlm_TState st, ret
pystate_to_cstate (state, &st)
ret = self.thisptr.history_state_of(st)
return SlmState(ret.getLevel(), ret.getIdx())
def historify (self, state):
cdef CThreadSlm_TState st
pystate_to_cstate (state, &st)
self.thisptr.historify(st)
state.level = int(st.getLevel())
state.idx = int(st.getIdx())
def last_word_id (self, state):
cdef CThreadSlm_TState st
pystate_to_cstate (state, &st)
return self.thisptr.lastWordId(st)
# -*- indent-tabs-mode: nil -*- vim:et:ts=4
|