Open ronnac opened 3 years ago
Hmm. What is the output of libpython-clj2.python/initialize!
?
Show: Project-Only All Hide: Clojure Java REPL Tooling Duplicates (13 frames hidden)
Unhandled java.lang.Exception Failed to find a valid python library!
python.clj: 84 libpython-clj2.python/initialize!
python.clj: 43 libpython-clj2.python/initialize!
RestFn.java: 397 clojure.lang.RestFn/invoke
REPL: 5 pycloj.core/eval18091
core.clj: 3202 clojure.core/eval
core.clj: 3198 clojure.core/eval
AFn.java: 152 clojure.lang.AFn/applyToHelper
AFn.java: 144 clojure.lang.AFn/applyTo
core.clj: 667 clojure.core/apply
core.clj: 1977 clojure.core/with-bindings*
RestFn.java: 425 clojure.lang.RestFn/invoke
main.clj: 437 clojure.main/repl/read-eval-print/fn
main.clj: 458 clojure.main/repl/fn
main.clj: 368 clojure.main/repl
RestFn.java: 1523 clojure.lang.RestFn/invoke
AFn.java: 22 clojure.lang.AFn/run
AFn.java: 22 clojure.lang.AFn/run
Thread.java: 832 java.lang.Thread/run
OK, this is helpful.
What python environment system are you using?
Ah, ok, could you include ch.qos.logback/logback-classic {:mvn/version "1.1.3"}
in your dependencies? This will allow logging to work in your case. The issue there is something brought in slf4j (libpython-clj does not do this) and there is no logger registered. logback-classic
is a reasonable default there.
Ok, thank you! Here's the log:09:52:17.516 [nREPL-session-8fc689b3-7c50-4710-83f0-d3011ce988c2] INFO li\bpython-clj2.python.info - Detecting startup info for Python executable /data/data/com.termux/files/usr/bin/python3.909:52:19.396 [nREPL-session-8fc689b3-7c50-4710-83f0-d3011ce988c2] INFO libpython-clj2.python - Startup info {:lib-version "3.9", :java-library-path-addendum "/data/data/com.termux/files/usr/lib", :exec-prefix "/data/data/com.termu\x/files/usr", :executable "/data/data/com.termux/files/usr/bin/python3.9", :libnames ("/data/data/com.termux/files/usr/lib/libpython3.9.so.1.0" "python3.9"), :prefix "/data/data/com.termux/files/usr", :base-prefix "/data/data/com.t\ermux/files/usr", :libname "/data/data/com.termux/files/usr/lib/libpython3.9.so.1.0", :base-exec-prefix "/data/data/com.termux/files/usr", :python-home "/data/data/com.termux/files/usr", :version [3 9 2], :platform "linux"}09:52:19.405 [nREPL-session-8fc689b3-7c50-4710-83f0-d3011ce988c2] INFO libpython-clj2.python - Prefixing java library path: /data/data/com.termux/files/usr/libExecution error at libpython-clj2.python/initialize! (python.clj:84).Failed to find a valid python library!
OK, so does "/data/data/com.termux/files/usr/lib/libpython3.9.so.1.0" exist? Or any libpython*so file in that location?
The problem just comes down to finding the correct shared library to load if there is one. Note that some python distributions do not install the shared library in which case embedded is your only pathway forward. Then you problem becomes trying to find 'libjvm.so' :-). Either way, you have to find the shared libraries the system depends on; either libpythonX.so if you are embedding python in the JVM or libjvm.so if you are embedding the JVM in a python process :-).
The library does exist. I also checked (System/getProperty "java.library.path");; => "/data/data/com.termux/files/usr/l\ib:/usr/java/packages/lib:/lib:/usr/lib"I ran the first part of find-library (from https://github.com/cnuernber/dtype-next/blob/master/src/tech/v3/datatype/ffi.clj)(concat ["libpython3.9.so.1.0"] (->> (clojure.string/split (System/getProperty "java.library.path") #":") (map (comp str #(java.nio.file.Paths/get % (into-array String \ [(System/mapLibraryName "libpython3.9.so.1.0")])))) (filter #(.exists (clojure.java.io/file (str %))))));; => ("libpython3.9.so.1.0")It does find the library.
Right, ok. But something about the library is failing to load.
What if you call:
(libpython-clj2.python.ffi/set-library! "/data/data/com.termux/files/usr/lib/libpython3.9.so.1.0")
Assuming that is the exact right string. Or even (System/load "/data/data/com.termux/files/usr/lib/libpython3.9.so.1.0")
?
There are a couple possibilities. JNA may be unable to load the library itself:
(com.sun.jna.NativeLibrary/getInstance libname)
Or perhaps there are symbols missing or some compact build or something like that. Symbols missing we can work around if we know which symbols are missing but straight up failure to load means that the jvm process doesn't include a shared library dependency that libpython.so expects--this would be unlikely.
I made some progress:
In my .bashrc I added
export LD_LIBRARY_PATH=/data/data/com.termux/files/usr/lib
(that's where my libpython3.9.so is)
Now the py-initialize runs successfully.
However, when I try to load numpy I get:
Execution error at libpython-clj2.python/path->py-obj (python.clj:624).
Failed to find module or class numpy
I added the PYTHONPATH in .bashrc, to no avail:
export PYTHONPATH=/data/data/com.termux/files/usr/lib/python3.9/site-packages
The context is that termux is a prefixed environment. The standard Linux folder usr is found under /data/data/com.termux/files/usr. Is there a way to inform libpython-clj2 about that prefix?
(require-python '[sys])
;; => :ok
(identity sys/path)
;; => ['', '/data/data/com.termux/files/\
usr/lib/python39.zip', '/data/data/com.t\
ermux/files/usr/lib/python3.9', '/data/d\
ata/com.termux/files/usr/lib/python3.9/l\
ib-dynload', '/data/data/com.termux/file\
s/usr/lib/python3.9/site-packages', '/da\
ta/data/com.termux/files/usr/lib/python3\
.9/site-packages/matplotlib-3.3.2+1648.g\
d51638e40-py3.9-linux-armv8l.egg', '/dat\
a/data/com.termux/files/usr/lib/python3.\
9/site-packages/kiwisolver-1.3.1-py3.9-l\
inux-armv8l.egg', '/data/data/com.termux\
/files/usr/lib/python3.9/site-packages/c\
ycler-0.10.0-py3.9.egg', '/data/data/com\
.termux/files/usr/lib/python3.9/site-pac\
kages/numpy-1.19.4-py3.9-linux-armv8l.eg\
g', '/data/data/com.termux/files/usr/lib\
/python3.9/site-packages/scipy-1.6.0-py3\
.9-linux-armv8l.egg']
So, numpy is on the path. Still it can't find it.
I wonder where the numpy shared library is. Does it just say can't find module or is there more output in terms of exactly what is going on such as a shared library linker error. Numpy itself has a shared library unless it is statically linked into the python executable which in this case it might be. Where is the numpy shared library?
Python may be designed to run from a single executable in your case in which case the embedded pathway is your best option.
I will also definitely check the embedded pathway. I just want to make sure I haven't missed anything. The error message is just "Failed to find module or class numpy", nothing else.
What would be the name of a numpy shared library?
I am also considering building numpy from source, but I can't find an option to include the shared library.
I really don't know but if it is installed via a pip extension then it has to build a shared library and put it somewhere. This library has to be on the LD_LIBRARY_PATH or somehow Python could setup a system where it always checks a certain location before it let's the system linker attempt to find the lib.
I would do something like find /data/data/com.termux/files/usr/lib/ -name "*numpy*so*"
and see what pops up.
Alas, there is no *numpy*so*
file.
I tried to provide the complete numpy path to (require-python "/data/data/com.termux/files/usr/lib/...") but it cuts the path whenever it finds a dot. How can I escape dots?
I don't think require-python will work that way. If you want to test that, use (py/import-module "/data/data/com.termux/files/usr/lib/...")
I believe numpy requires binary code to run so if there is no numpy shared module then numpy's functionality has to be baked into either the python shared library or the python executable. Using nm -D libname
on both the executable and the shared library should be instructive as you should see a bunch of numpy symbols.
Basically just the python code isn't enough to load numpy; you need the C implementation also so manually forcing the system to load the module I do not think will work.
/d/d/c/f/u/bin nm -D python3.9 U Py_BytesMain 00001eb4 D FINI_ARRAY 00001eac D INIT_ARRAY 00001ea4 D PREINIT_ARRAY 00002000 A bss_start U cxa_atexit@LIBC U __libc_init@LIBC U __register_atfork@LIBC 00002000 A _edata 00002004 A _end 000004d0 T _start
/d/d/c/f/u/libnm -D libpython3.9.so > ~/nm_libpython3.9.txt```
001076c0 T PyAST_CompileEx 00107304 T PyAST_CompileObject 000f355c T PyAST_FromNode 000efdd4 T PyAST_FromNodeObject 000ef540 T PyAST_Validate 0012ec4c T PyArena_AddPyObject 0012eb9e T PyArena_Free 0012ebcc T PyArena_Malloc 0012eb30 T PyArena_New 001172bc T PyArg_Parse 00117354 T PyArg_ParseTuple 00117a8c T PyArg_ParseTupleAndKeywords 00119944 T PyArg_UnpackTuple 00117978 T PyArg_VaParse 00118464 T PyArg_VaParseTupleAndKeywords 00118f88 T PyArg_ValidateKeywordArguments 0006de18 T PyAsyncGen_New 002236d0 D PyAsyncGen_Type 00228578 D PyBaseObject_Type 0004fad0 T PyBool_FromLong 0021d310 D PyBool_Type 0004c342 T PyBuffer_FillContiguousStrides 0004c384 T PyBuffer_FillInfo 0004bd1c T PyBuffer_FromContiguous 0004bbb2 T PyBuffer_GetPointer 0004ba40 T PyBuffer_IsContiguous 0004b828 T PyBuffer_Release 0004bc60 T PyBuffer_SizeFromFormat 0008c4cc T PyBuffer_ToContiguous 0021d894 D PyByteArrayIter_Type 000511f8 T PyByteArray_AsString 00051324 T PyByteArray_Concat 000510b0 T PyByteArray_FromObject 00051134 T PyByteArray_FromStringAndSize 00051210 T PyByteArray_Resize 000511f4 T PyByteArray_Size 0021d788 D PyByteArray_Type 0021dfac D PyBytesIter_Type 0005932c T PyBytes_AsString 0005935c T PyBytes_AsStringAndSize 0005a57c T PyBytes_Concat 0005a950 T PyBytes_ConcatAndDel 000592a4 T PyBytes_DecodeEscape 00057f14 T PyBytes_FromFormat 00057850 T PyBytes_FromFormatV 00059b40 T PyBytes_FromObject 00057754 T PyBytes_FromString 00057620 T PyBytes_FromStringAndSize 000593e0 T PyBytes_Repr 000592f8 T PyBytes_Size 0021db14 D PyBytes_Type 0005f768 T PyCFunction_Call 0008ff78 T PyCFunction_GetFlags 0008ff08 T PyCFunction_GetFunction 0008ff3c T PyCFunction_GetSelf 0008f9aa T PyCFunction_NewEx 002268e4 D PyCFunction_Type 0008f9b0 T PyCMethod_New 00226818 D PyCMethod_Type 00075ccc T PyCallIter_New 00224824 D PyCallIter_Type 00093884 T PyCallable_Check 00060810 T PyCapsule_GetContext 000607d4 T PyCapsule_GetDestructor 00060798 T PyCapsule_GetName 00060730 T PyCapsule_GetPointer 00060960 T PyCapsule_Import 000606f0 T PyCapsule_IsValid 00060698 T PyCapsule_New 00060920 T PyCapsule_SetContext 000608e0 T PyCapsule_SetDestructor 000608a0 T PyCapsule_SetName 0006084c T PyCapsule_SetPointer 0021e19c D PyCapsule_Type 00060b90 T PyCell_Get 00060b40 T PyCell_New 00060bc8 T PyCell_Set 0021e290 D PyCell_Type 0021ebe0 D PyClassMethodDescr_Type 00075180 T PyClassMethod_New 00224370 D PyClassMethod_Type 000628e0 T PyCode_Addr2Line 00061e68 T PyCode_New 00061f44 T PyCode_NewEmpty 0006189c T PyCode_NewWithPosOnlyArgs 0012ca08 T PyCode_Optimize 0021e5ec D PyCode_Type 00105dd8 T PyCodec_BackslashReplaceErrors 001053e8 T PyCodec_Decode 00105130 T PyCodec_Decoder 00105294 T PyCodec_Encode 00105108 T PyCodec_Encoder 001057e4 T PyCodec_IgnoreErrors 00105190 T PyCodec_IncrementalDecoder 00105158 T PyCodec_IncrementalEncoder 00105044 T PyCodec_KnownEncoding 00105730 T PyCodec_LookupError 001061d8 T PyCodec_NameReplaceErrors 00104c08 T PyCodec_Register 001056bc T PyCodec_RegisterError 001058b4 T PyCodec_ReplaceErrors 001051c8 T PyCodec_StreamReader 00105290 T PyCodec_StreamWriter 001057b0 T PyCodec_StrictErrors 00105a58 T PyCodec_XMLCharRefReplaceErrors 001079a2 T PyCompile_OpcodeStackEffect 00107788 T PyCompile_OpcodeStackEffectWithJump 00063734 T PyComplex_AsCComplex 00063610 T PyComplex_FromCComplex 00063668 T PyComplex_FromDoubles 00063704 T PyComplex_ImagAsDouble 000636d4 T PyComplex_RealAsDouble 0021e860 D PyComplex_Type 0012236c T PyConfig_Clear 00122630 T PyConfig_InitIsolatedConfig 001225a0 T PyConfig_InitPythonConfig 001230f4 T PyConfig_Read 00123014 T PyConfig_SetArgv 00122fb0 T PyConfig_SetBytesArgv 00122728 T PyConfig_SetBytesString 001226a0 T PyConfig_SetString 00123074 T PyConfig_SetWideStringList 0022b4c4 D PyContextToken_Type 00113978 T PyContextVar_Get 00113848 T PyContextVar_New 00113be0 T PyContextVar_Reset 00113a70 T PyContextVar_Set 0022b3f8 D PyContextVar_Type 001135b8 T PyContext_Copy 00113664 T PyContext_CopyCurrent 0011370c T PyContext_Enter 0011379c T PyContext_Exit 0011351c T PyContext_New 0022b32c D PyContext_Type 0006dc28 T PyCoro_New 002233fc D PyCoro_Type 0006606c T PyDescr_NewClassMethod 0006614c T PyDescr_NewGetSet 000660dc T PyDescr_NewMember 000659d4 T PyDescr_NewMethod 000661bc T PyDescr_NewWrapper 002259f0 D PyDictItems_Type 002255f4 D PyDictIterItem_Type 0022545c D PyDictIterKey_Type 00225528 D PyDictIterValue_Type 00225924 D PyDictKeys_Type 00066230 T PyDictProxy_New 0021efd8 D PyDictProxy_Type 0022578c D PyDictRevIterItem_Type 002256c0 D PyDictRevIterKey_Type 00225858 D PyDictRevIterValue_Type 00225c50 D PyDictValues_Type 00084ca0 T PyDict_Clear 00086a88 T PyDict_Contains 00086050 T PyDict_Copy 000843cc T PyDict_DelItem 00087830 T PyDict_DelItemString 000839b0 T PyDict_GetItem 0008765a T PyDict_GetItemString 00083ad4 T PyDict_GetItemWithError 00086534 T PyDict_Items 000863bc T PyDict_Keys 00086044 T PyDict_Merge 00085884 T PyDict_MergeFromSeq2 00083304 T PyDict_New 000835f8 T PyDict_Next 0008665c T PyDict_SetDefault 00083d18 T PyDict_SetItem 00087724 T PyDict_SetItemString 00086390 T PyDict_Size 0022518c D PyDict_Type 00085b6c T PyDict_Update 00086480 T PyDict_Values 00228088 D PyEllipsis_Type 0021f5f0 D PyEnum_Type 001155b8 T PyErr_BadArgument 00115950 T PyErr_BadInternalCall 00173a84 T PyErr_CheckSignals 00115154 T PyErr_Clear 00134c38 T PyErr_Display 00114f20 T PyErr_ExceptionMatches 00115128 T PyErr_Fetch 00115a48 T PyErr_Format 001159a8 T PyErr_FormatV 00115204 T PyErr_GetExcInfo 00114e80 T PyErr_GivenExceptionMatches 00115a9c T PyErr_NewException 00115c10 T PyErr_NewExceptionWithDoc 00115640 T PyErr_NoMemory 00115110 T PyErr_NormalizeException 00114e6c T PyErr_Occurred 00133998 T PyErr_Print 001344c4 T PyErr_PrintEx 00116c64 T PyErr_ProgramText 00116b60 T PyErr_ProgramTextObject 000db5e8 T PyErr_ResourceWarning 001149cc T PyErr_Restore 0011526c T PyErr_SetExcInfo 001157b8 T PyErr_SetFromErrno 0011577c T PyErr_SetFromErrnoWithFilename 00115680 T PyErr_SetFromErrnoWithFilenameObject 00115690 T PyErr_SetFromErrnoWithFilenameObjects 001158f8 T PyErr_SetImportError 001157c8 T PyErr_SetImportErrorSubclass 00173bac T PyErr_SetInterrupt 00114dd4 T PyErr_SetNone 00114d74 T PyErr_SetObject 00114e24 T PyErr_SetString 00116676 T PyErr_SyntaxLocation 0011667c T PyErr_SyntaxLocationEx 0011671c T PyErr_SyntaxLocationObject 000db690 T PyErr_WarnEx 000dc378 T PyErr_WarnExplicit 000dc44c T PyErr_WarnExplicitFormat 000db758 T PyErr_WarnExplicitObject 000db54c T PyErr_WarnFormat 00116670 T PyErr_WriteUnraisable 000fe244 T PyEval_AcquireLock 000fe408 T PyEval_AcquireThread 0005fd80 T PyEval_CallFunction 0005fef8 T PyEval_CallMethod 0005f91c T PyEval_CallObjectWithKeywords 000fea9c T PyEval_EvalCode 000feae0 T PyEval_EvalCodeEx 000feb44 T PyEval_EvalFrame 000feb60 T PyEval_EvalFrameEx 00104894 T PyEval_GetBuiltins 00104880 T PyEval_GetFrame 00104a1c T PyEval_GetFuncDesc 001049c4 T PyEval_GetFuncName 00104974 T PyEval_GetGlobals 00104930 T PyEval_GetLocals 000fe240 T PyEval_InitThreads 00104990 T PyEval_MergeCompilerFlags 000fe26c T PyEval_ReleaseLock 000fe448 T PyEval_ReleaseThread 000fe534 T PyEval_RestoreThread 000fe4f8 T PyEval_SaveThread 001045c0 T PyEval_SetProfile 001046f4 T PyEval_SetTrace 000fddfc T PyEval_ThreadsInitialized 00221d54 D PyExc_ArithmeticError 00221c84 D PyExc_AssertionError 002212c4 D PyExc_AttributeError 0021f8c4 D PyExc_BaseException 002201b4 D PyExc_BlockingIOError 00220424 D PyExc_BrokenPipeError 00222304 D PyExc_BufferError 00222b24 D PyExc_BytesWarning 00220354 D PyExc_ChildProcessError 002204f4 D PyExc_ConnectionAbortedError 00220284 D PyExc_ConnectionError 002205c4 D PyExc_ConnectionRefusedError 00220694 D PyExc_ConnectionResetError 00222574 D PyExc_DeprecationWarning 00220de4 D PyExc_EOFError 00239f60 B PyExc_EnvironmentError 0021f994 D PyExc_Exception 00220764 D PyExc_FileExistsError 00220834 D PyExc_FileNotFoundError 00221e24 D PyExc_FloatingPointError 002228b4 D PyExc_FutureWarning 0021fcd4 D PyExc_GeneratorExit 00239f64 B PyExc_IOError 0021ff44 D PyExc_ImportError 00222984 D PyExc_ImportWarning 00221464 D PyExc_IndentationError 002216d4 D PyExc_IndexError 00220aa4 D PyExc_InterruptedError 00220904 D PyExc_IsADirectoryError 002217a4 D PyExc_KeyError 0021fe74 D PyExc_KeyboardInterrupt 00221604 D PyExc_LookupError 00222234 D PyExc_MemoryError 00220014 D PyExc_ModuleNotFoundError 00221124 D PyExc_NameError 002209d4 D PyExc_NotADirectoryError 00221054 D PyExc_NotImplementedError 002200e4 D PyExc_OSError 00221ef4 D PyExc_OverflowError 00222644 D PyExc_PendingDeprecationWarning 00220b74 D PyExc_PermissionError 00220c44 D PyExc_ProcessLookupError 00220f84 D PyExc_RecursionError 00222164 D PyExc_ReferenceError 00222bf4 D PyExc_ResourceWarning 00220eb4 D PyExc_RuntimeError 002227e4 D PyExc_RuntimeWarning 0021fb34 D PyExc_StopAsyncIteration 0021fc04 D PyExc_StopIteration 00221394 D PyExc_SyntaxError 00222714 D PyExc_SyntaxWarning 00222094 D PyExc_SystemError 0021fda4 D PyExc_SystemExit 00221534 D PyExc_TabError 00220d14 D PyExc_TimeoutError 0021fa64 D PyExc_TypeError 002211f4 D PyExc_UnboundLocalError 00221ae4 D PyExc_UnicodeDecodeError 00221a14 D PyExc_UnicodeEncodeError 00221944 D PyExc_UnicodeError 00221bb4 D PyExc_UnicodeTranslateError 00222a54 D PyExc_UnicodeWarning 002224a4 D PyExc_UserWarning 00221874 D PyExc_ValueError 002223d4 D PyExc_Warning 00221fc4 D PyExc_ZeroDivisionError 00067860 T PyExceptionClass_Name 0006780c T PyException_GetCause 00067838 T PyException_GetContext 00067714 T PyException_GetTraceback 0006781a T PyException_SetCause 00067846 T PyException_SetContext 00067724 T PyException_SetTraceback 0006f0c4 T PyFile_FromFd 0006f150 T PyFile_GetLine 0006f6e4 T PyFile_NewStdPrinter 0006f878 T PyFile_OpenCode 0006f7d4 T PyFile_OpenCodeObject 0006f778 T PyFile_SetOpenCodeHook 0006f38c T PyFile_WriteObject 0006f49c T PyFile_WriteString 0022aab0 D PyFilter_Type 0006fef8 T PyFloat_AsDouble 0006fc58 T PyFloat_FromDouble 0006fcd0 T PyFloat_FromString 0006fac0 T PyFloat_GetInfo 0006fa90 T PyFloat_GetMax 0006faa8 T PyFloat_GetMin 00223c5c D PyFloat_Type 000737b8 T PyFrame_BlockPop 0007377c T PyFrame_BlockSetup 000739c8 T PyFrame_FastToLocals 000737e8 T PyFrame_FastToLocalsWithError 00073c42 T PyFrame_GetBack 00073c38 T PyFrame_GetCode 00073248 T PyFrame_GetLineNumber 000739e0 T PyFrame_LocalsToFast 0007373c T PyFrame_New 00224064 D PyFrame_Type 00098278 T PyFrozenSet_New 00227eac D PyFrozenSet_Type 00074a80 T PyFunction_GetAnnotations 000749cc T PyFunction_GetClosure 000747d8 T PyFunction_GetCode 0007485c T PyFunction_GetDefaults 00074804 T PyFunction_GetGlobals 00074914 T PyFunction_GetKwDefaults 00074830 T PyFunction_GetModule 000747d4 T PyFunction_New 0007468c T PyFunction_NewWithQualName 00074aac T PyFunction_SetAnnotations 000749f8 T PyFunction_SetClosure 00074888 T PyFunction_SetDefaults 00074940 T PyFunction_SetKwDefaults 00224240 D PyFunction_Type 00117288 T PyFuture_FromAST 00117060 T PyFuture_FromASTObject 0014ac68 T PyGC_Collect 00132be4 T PyGILState_Check 00132c3c T PyGILState_Ensure 00132bc8 T PyGILState_GetThisThreadState 00132ca0 T PyGILState_Release 0006da34 T PyGen_New 0006d974 T PyGen_NewWithQualName 00223230 D PyGen_Type 0021edf0 D PyGetSetDescr_Type 0012ee04 T PyHash_GetFuncDef 0011fa78 T PyImport_AddModule 0011f984 T PyImport_AddModuleObject 00120fbc T PyImport_AppendInittab 0011fab4 T PyImport_ExecCodeModule 0011fc20 T PyImport_ExecCodeModuleEx 0011fc88 T PyImport_ExecCodeModuleObject 0011fae8 T PyImport_ExecCodeModuleWithPathnames 00120ee4 T PyImport_ExtendInittab 00237ab8 D PyImport_FrozenModules 0011fda8 T PyImport_GetImporter 0011f648 T PyImport_GetMagicNumber 0011f6b0 T PyImport_GetMagicTag 0011eae4 T PyImport_GetModule 0011ea8c T PyImport_GetModuleDict 00120140 T PyImport_Import 00120114 T PyImport_ImportFrozenModule 0011ff28 T PyImport_ImportFrozenModuleObject 0011e8b8 T PyImport_ImportModule 00120d60 T PyImport_ImportModuleLevel 00120598 T PyImport_ImportModuleLevelObject 00120304 T PyImport_ImportModuleNoBlock 0022e858 D PyImport_Inittab 00120dac T PyImport_ReloadModule 0004d8cc T PyIndex_Check 0016d614 T PyInitabc 000dfcb0 T PyInitast 001643a4 T PyInitcodecs 0016a910 T PyInitcollections 00167834 T PyInitfunctools 00120e64 T PyInitimp 001792ac T PyInitio 001784c0 T PyInitlocale 00168e18 T PyInitoperator 0018b62c T PyInitpeg_parser 001734b8 T PyInitsignal 0015a734 T PyInitsre 001750d4 T PyInitstat 000c76e4 T PyInitstring 0018b63c T PyInitsymtable 00177030 T PyInitthread 00189de8 T PyInittracemalloc 00167574 T PyInitweakref 00172f24 T PyInit_atexit 00158774 T PyInit_errno 0018899c T PyInit_faulthandler 0014ab60 T PyInit_gc 0016e7a0 T PyInit_itertools 0014cee8 T PyInit_posix 0015a290 T PyInit_pwd 00175b58 T PyInit_time 0018b978 T PyInit_xxsubtype 0006147c T PyInstanceMethod_Function 00061430 T PyInstanceMethod_New 0021e4fc D PyInstanceMethod_Type 00131b58 T PyInterpreterState_Clear 00131ec4 T PyInterpreterState_Delete 00132074 T PyInterpreterState_Get 00132278 T PyInterpreterState_GetDict 001320b0 T PyInterpreterState_GetID 001329a8 T PyInterpreterState_Head 001329b8 T PyInterpreterState_Main 00131a4c T PyInterpreterState_New 001329c8 T PyInterpreterState_Next 0013222c T PyInterpreterState_ThreadHead 0004f600 T PyIter_Check 0004e6ac T PyIter_Next 00224b3c D PyListIter_Type 00224c48 D PyListRevIter_Type 000762f8 T PyList_Append 000774b8 T PyList_AsTuple 000760fc T PyList_GetItem 000763c4 T PyList_GetSlice 000761e4 T PyList_Insert 00076018 T PyList_New 00077464 T PyList_Reverse 00076160 T PyList_SetItem 000764a0 T PyList_SetSlice 000760d4 T PyList_Size 00076af0 T PyList_Sort 002248fc D PyList_Type 00227894 D PyLongRangeIter_Type 0007d648 T PyLong_AsDouble 0007ab08 T PyLong_AsLong 0007aa0c T PyLong_AsLongAndOverflow 0007b5a4 T PyLong_AsLongLong 0007b828 T PyLong_AsLongLongAndOverflow 0007acc8 T PyLong_AsSize_t 0007ab68 T PyLong_AsSsize_t 0007ac28 T PyLong_AsUnsignedLong 0007b668 T PyLong_AsUnsignedLongLong 0007b6f0 T PyLong_AsUnsignedLongLongMask 0007ad68 T PyLong_AsUnsignedLongMask 0007b308 T PyLong_AsVoidPtr 0007a878 T PyLong_FromDouble 0007a40c T PyLong_FromLong 0007b36c T PyLong_FromLongLong 0007a798 T PyLong_FromSize_t 0007b4a0 T PyLong_FromSsize_t 0007c9d8 T PyLong_FromString 0007d314 T PyLong_FromUnicode 0007d344 T PyLong_FromUnicodeObject 0007a5b8 T PyLong_FromUnsignedLong 0007a698 T PyLong_FromUnsignedLongLong 0007b304 T PyLong_FromVoidPtr 0007ef7c T PyLong_GetInfo 00224d50 D PyLong_Type 0022ab9c D PyMap_Type 0004ea68 T PyMapping_Check 0004eb08 T PyMapping_GetItemString 0004ec3c T PyMapping_HasKey 0004ebd0 T PyMapping_HasKeyString 0004edd0 T PyMapping_Items 0004ec64 T PyMapping_Keys 0004ea84 T PyMapping_Length 0004eb60 T PyMapping_SetItemString 0004af1c T PyMapping_Size 0004ee24 T PyMapping_Values 0012a2dc T PyMarshal_Init 00128fe4 T PyMarshal_ReadLastObjectFromFile 00128fae T PyMarshal_ReadLongFromFile 0012913c T PyMarshal_ReadObjectFromFile 001290dc T PyMarshal_ReadObjectFromString 00128f6e T PyMarshal_ReadShortFromFile 00126798 T PyMarshal_WriteLongToFile 00126a48 T PyMarshal_WriteObjectToFile 0012a1a4 T PyMarshal_WriteObjectToString 0009575c T PyMem_Calloc 000957ac T PyMem_Free 00095634 T PyMem_GetAllocator 00095744 T PyMem_Malloc 000956e4 T PyMem_RawCalloc 00095734 T PyMem_RawFree 000956cc T PyMem_RawMalloc 00095718 T PyMem_RawRealloc 00095790 T PyMem_Realloc 00094be8 T PyMem_SetAllocator 00094f84 T PyMem_SetupDebugHooks 0021ece8 D PyMemberDescr_Type 001376dc T PyMember_GetOne 00137808 T PyMember_SetOne 0008bf6c T PyMemoryView_FromBuffer 0008bc90 T PyMemoryView_FromMemory 0008c030 T PyMemoryView_FromObject 0008c144 T PyMemoryView_GetContiguous 0022653c D PyMemoryView_Type 0021eb14 D PyMethodDescr_Type 00060e5c T PyMethod_Function 00060eb4 T PyMethod_New 00060e88 T PyMethod_Self 0021e3e0 D PyMethod_Type 00090394 T PyModuleDef_Init 00226a88 D PyModuleDef_Type 000906f0 T PyModule_AddFunctions 0012ae08 T PyModule_AddIntConstant 0012ad48 T PyModule_AddObject 0012ae4a T PyModule_AddStringConstant 0012ae8c T PyModule_AddType 00090550 T PyModule_Create2 00090b44 T PyModule_ExecDef 00090838 T PyModule_FromDefAndSpec2 00090e30 T PyModule_GetDef 00090d14 T PyModule_GetDict 00090dac T PyModule_GetFilename 00090d48 T PyModule_GetFilenameObject 00090c34 T PyModule_GetName 00090cac T PyModule_GetNameObject 00090e58 T PyModule_GetState 000904e4 T PyModule_New 000903d8 T PyModule_NewObject 000907ec T PyModule_SetDocString 00226b54 D PyModule_Type 00033564 T PyNode_AddChild 00107710 T PyNode_Compile 0003391e T PyNode_Free 00033408 T PyNode_ListTree 00033514 T PyNode_New 0004d86c T PyNumber_Absolute 0004c914 T PyNumber_Add 0004c778 T PyNumber_And 0004b2fc T PyNumber_AsSsize_t 0004c5d0 T PyNumber_Check 0004c8b0 T PyNumber_Divmod 0004dc94 T PyNumber_Float 0004cbe8 T PyNumber_FloorDivide 0004d3d8 T PyNumber_InPlaceAdd 0004cf94 T PyNumber_InPlaceAnd 0004d2a0 T PyNumber_InPlaceFloorDivide 0004d030 T PyNumber_InPlaceLshift 0004d5f8 T PyNumber_InPlaceMatrixMultiply 0004d494 T PyNumber_InPlaceMultiply 0004ce5c T PyNumber_InPlaceOr 0004d730 T PyNumber_InPlacePower 0004d694 T PyNumber_InPlaceRemainder 0004d0cc T PyNumber_InPlaceRshift 0004d168 T PyNumber_InPlaceSubtract 0004d33c T PyNumber_InPlaceTrueDivide 0004cef8 T PyNumber_InPlaceXor 0004d8e4 T PyNumber_Index 0004d80c T PyNumber_Invert 0004d9b8 T PyNumber_Long 0004c7dc T PyNumber_Lshift 0004cb84 T PyNumber_MatrixMultiply 0004ca5c T PyNumber_Multiply 0004d74c T PyNumber_Negative 0004c5fc T PyNumber_Or 0004d7ac T PyNumber_Positive 0004cd14 T PyNumber_Power 0004ccb0 T PyNumber_Remainder 0004c840 T PyNumber_Rshift 0004c84c T PyNumber_Subtract 0004de04 T PyNumber_ToBase 0004cc4c T PyNumber_TrueDivide 0004c714 T PyNumber_Xor 002261ec D PyODictItems_Type 00226014 D PyODictIter_Type 00226100 D PyODictKeys_Type 002262d8 D PyODictValues_Type 0008a6ac T PyODict_DelItem 0008a550 T PyODict_New 0008a570 T PyODict_SetItem 00225f28 D PyODict_Type 0014c9fc T PyOS_AfterFork 0014c9bc T PyOS_AfterFork_Child 0014c980 T PyOS_AfterFork_Parent 0014c870 T PyOS_BeforeFork 0014cdcc T PyOS_FSPath 00173c60 T PyOS_InitInterrupts 00239b34 B PyOS_InputHook 00173de4 T PyOS_InterruptOccurred 00047dfc T PyOS_Readline 00239b38 B PyOS_ReadlineFunctionPointer 00140328 T PyOS_double_to_string 00130964 T PyOS_getsig 00140048 T PyOS_mystricmp 0013ffec T PyOS_mystrnicmp 001308c0 T PyOS_setsig 0012b940 T PyOS_snprintf 00140154 T PyOS_string_to_double 0012bc98 T PyOS_strtol 0012b9e0 T PyOS_strtoul 0012b9ac T PyOS_vsnprintf 00092458 T PyObject_ASCII 0004b860 T PyObject_AsCharBuffer 0006f4fc T PyObject_AsFileDescriptor 0004b938 T PyObject_AsReadBuffer 0004b93c T PyObject_AsWriteBuffer 000924bc T PyObject_Bytes 0005f750 T PyObject_Call 00091eac T PyObject_CallFinalizer 00091ee8 T PyObject_CallFinalizerFromDealloc 0005fb08 T PyObject_CallFunction 00060648 T PyObject_CallFunctionObjArgs 0005fe28 T PyObject_CallMethod 0006033c T PyObject_CallMethodObjArgs 0005f0a0 T PyObject_CallNoArgs 0005f99c T PyObject_CallObject 000958a8 T PyObject_Calloc 0004b7a4 T PyObject_CheckBuffer 0004b7bc T PyObject_CheckReadBuffer 000d973c T PyObject_ClearWeakRefs 0004be44 T PyObject_CopyData 0004b5c0 T PyObject_DelItem 0004b748 T PyObject_DelItemString 00093898 T PyObject_Dir 0004c42c T PyObject_Format 000958f8 T PyObject_Free 0014baec T PyObject_GC_Del 0014bb68 T PyObject_GC_IsFinalized 0014bb3c T PyObject_GC_IsTracked 0014b7e8 T PyObject_GC_Track 0014b848 T PyObject_GC_UnTrack 000945ce T PyObject_GET_WEAKREFS_LISTPTR 00093108 T PyObject_GenericGetAttr 000887dc T PyObject_GenericGetDict 0009375c T PyObject_GenericSetAttr 00093760 T PyObject_GenericSetDict 0009569c T PyObject_GetArenaAllocator 00092c08 T PyObject_GetAttr 00092b48 T PyObject_GetAttrString 0004b9fc T PyObject_GetBuffer 0004b13c T PyObject_GetItem 0004e618 T PyObject_GetIter 00092fcc T PyObject_HasAttr 00092c80 T PyObject_HasAttrString 00092af8 T PyObject_Hash 00092ad0 T PyObject_HashNotImplemented 0014b876 T PyObject_IS_GC 00091d7c T PyObject_Init 00091dbc T PyObject_InitVar 0004ee78 T PyObject_IsInstance 0004f074 T PyObject_IsSubclass 00092a60 T PyObject_IsTrue 0004afa0 T PyObject_Length 0004afc8 T PyObject_LengthHint 00095890 T PyObject_Malloc 00093810 T PyObject_Not 00091fa0 T PyObject_Print 000958dc T PyObject_Realloc 000921fc T PyObject_Repr 00092898 T PyObject_RichCompare 000927c4 T PyObject_RichCompareBool 00093340 T PyObject_SelfIter 000956b4 T PyObject_SetArenaAllocator 00092d0c T PyObject_SetAttr 00092ca8 T PyObject_SetAttrString 0004b430 T PyObject_SetItem 0004ae90 T PyObject_Size 000920ec T PyObject_Str 0004ae58 T PyObject_Type 0005f510 T PyObject_VectorcallDict 00060238 T PyObject_VectorcallMethod 001356fc T PyParser_ASTFromFile 00135618 T PyParser_ASTFromFileObject 001355c8 T PyParser_ASTFromString 00134c90 T PyParser_ASTFromStringObject 001358b0 T PyParser_ClearError 00048602 T PyParser_ParseFile 00048628 T PyParser_ParseFileFlags 00048794 T PyParser_ParseFileFlagsEx 00048818 T PyParser_ParseFileObject 00047f1c T PyParser_ParseString 00047fba T PyParser_ParseStringFlags 00047f3c T PyParser_ParseStringFlagsFilename 00047fda T PyParser_ParseStringFlagsFilenameEx 0004804c T PyParser_ParseStringObject 001358cc T PyParser_SetError 001358d0 T PyParser_SimpleParseFile 00135760 T PyParser_SimpleParseFileFlags 00135940 T PyParser_SimpleParseString 001357d8 T PyParser_SimpleParseStringFlags 00135840 T PyParser_SimpleParseStringFlagsFilename 00047c4c T PyPegen_ASTFromFileObject 00047bfc T PyPegen_ASTFromFilename 00047b44 T PyPegen_ASTFromString 00047bb4 T PyPegen_ASTFromStringObject 000964b0 T PyPickleBuffer_FromObject 0009650c T PyPickleBuffer_GetBuffer 00096564 T PyPickleBuffer_Release 0022744c D PyPickleBuffer_Type 0012e060 T PyPreConfig_InitIsolatedConfig 0012e010 T PyPreConfig_InitPythonConfig 0021f440 D PyProperty_Type 00227788 D PyRangeIter_Type 0022767c D PyRange_Type 0021f6fc D PyReversed_Type 001359a4 T PyRun_AnyFile 001359e0 T PyRun_AnyFileEx 0013335c T PyRun_AnyFileExFlags 00135a34 T PyRun_AnyFileFlags 00135a7c T PyRun_File 00135ac6 T PyRun_FileEx 00134d70 T PyRun_FileExFlags 00135b12 T PyRun_FileFlags 00135cec T PyRun_InteractiveLoop 001333b4 T PyRun_InteractiveLoopFlags 00135c84 T PyRun_InteractiveOne 00133e00 T PyRun_InteractiveOneFlags 00133dd0 T PyRun_InteractiveOneObject 00135b5e T PyRun_SimpleFile 00135b66 T PyRun_SimpleFileEx 0013351c T PyRun_SimpleFileExFlags 00135b84 T PyRun_SimpleString 00133e74 T PyRun_SimpleStringFlags 00135b6c T PyRun_String 00133ed0 T PyRun_StringFlags 0022ed84 D PySTEntry_Type 00139514 T PyST_GetScope 00075b7c T PySeqIter_New 00224738 D PySeqIter_Type 0004de60 T PySequence_Check 0004df84 T PySequence_Concat 0004ea3c T PySequence_Contains 0004ea38 T PySequence_Count 0004b698 T PySequence_DelItem 0004e3f8 T PySequence_DelSlice 0004e768 T PySequence_Fast 0004b388 T PySequence_GetItem 0004e2c8 T PySequence_GetSlice 0004ea50 T PySequence_In 0004e0e8 T PySequence_InPlaceConcat 0004e1d4 T PySequence_InPlaceRepeat 0004ea64 T PySequence_Index 0004df00 T PySequence_Length 0004e6dc T PySequence_List 0004e034 T PySequence_Repeat 0004b510 T PySequence_SetItem 0004e35c T PySequence_SetSlice 0004de7c T PySequence_Size 0004e490 T PySequence_Tuple 0022799c D PySetIter_Type 000985a8 T PySet_Add 00098334 T PySet_Clear 00098484 T PySet_Contains 00098514 T PySet_Discard 0009820c T PySet_New 000986f8 T PySet_Pop 000982e4 T PySet_Size 00227c80 D PySet_Type 0009b600 T PySlice_AdjustIndices 0009b474 T PySlice_GetIndices 0009b686 T PySlice_GetIndicesEx 0009b2dc T PySlice_New 0022815c D PySlice_Type 0009b54c T PySlice_Unpack 001324c8 T PyState_AddModule 001323f0 T PyState_FindModule 001325ac T PyState_RemoveModule 00075318 T PyStaticMethod_New 002244a0 D PyStaticMethod_Type 00121f3a T PyStatus_Error 00121f82 T PyStatus_Exception 00121f60 T PyStatus_Exit 00121f6e T PyStatus_IsError 00121f78 T PyStatus_IsExit 00121f48 T PyStatus_NoMemory 00121f30 T PyStatus_Ok 00223ae0 D PyStdPrinter_Type 0009bee4 T PyStructSequence_GetItem 0009c710 T PyStructSequence_InitType 0009beec T PyStructSequence_InitType2 0009be7c T PyStructSequence_New 0009c714 T PyStructSequence_NewType 0009bedc T PyStructSequence_SetItem 00229408 D PySuper_Type 00139474 T PySymtable_Build 00137c70 T PySymtable_BuildObject 00137f38 T PySymtable_Free 001394b8 T PySymtable_Lookup 0013aba4 T PySys_AddAuditHook 0013b078 T PySys_AddWarnOption 0013afd8 T PySys_AddWarnOptionUnicode 0013b18c T PySys_AddXOption 0013aa90 T PySys_Audit 0013c910 T PySys_FormatStderr 0013c7d0 T PySys_FormatStdout 0013a684 T PySys_GetObject 0013b2e0 T PySys_GetXOptions 0013b140 T PySys_HasWarnOptions 0013af24 T PySys_ResetWarnOptions 0013c5b8 T PySys_SetArgv 0013c438 T PySys_SetArgvEx 0013a6ec T PySys_SetObject 0013c358 T PySys_SetPath 0013ab40 T PySys_WriteStderr 0013c5cc T PySys_WriteStdout 00131d38 T PyThreadState_Clear 001326e0 T PyThreadState_Delete 001327d4 T PyThreadState_DeleteCurrent 00132884 T PyThreadState_Get 001328e4 T PyThreadState_GetDict 0013291c T PyThreadState_GetFrame 0013292a T PyThreadState_GetID 00132918 T PyThreadState_GetInterpreter 0013229e T PyThreadState_New 001329cc T PyThreadState_Next 00132930 T PyThreadState_SetAsyncExc 001328a8 T PyThreadState_Swap 0013e6d8 T PyThread_GetInfo 0013e59c T PyThread_ReInitTLS 0013e524 T PyThread_acquire_lock 0013e124 T PyThread_acquire_lock_timed 0013dfd0 T PyThread_allocate_lock 0013e544 T PyThread_create_key 0013e57c T PyThread_delete_key 0013e580 T PyThread_delete_key_value 0013dfb0 T PyThread_exit_thread 0013e098 T PyThread_free_lock 0013e598 T PyThread_get_key_value 0013e5f8 T PyThread_get_stacksize 0013df14 T PyThread_get_thread_ident 0013df74 T PyThread_get_thread_native_id 0013dd28 T PyThread_init_thread 0013e45c T PyThread_release_lock 0013e586 T PyThread_set_key_value 0013e610 T PyThread_set_stacksize 0013de28 T PyThread_start_new_thread 0013e698 T PyThread_tss_alloc 0013e59e T PyThread_tss_create 0013e5c6 T PyThread_tss_delete 0013e6b0 T PyThread_tss_free 0013e5f0 T PyThread_tss_get 0013e6d4 T PyThread_tss_is_created 0013e5dc T PyThread_tss_set 00033e1c T PyToken_OneChar 0003405c T PyToken_ThreeChars 00033ee4 T PyToken_TwoChars 0013eb24 T PyTraceBack_Here 0013f1dc T PyTraceBack_Print 0022f3ec D PyTraceBack_Type 0018a1fc T PyTraceMalloc_Track 0018a36c T PyTraceMalloc_Untrack 002284a0 D PyTupleIter_Type 0009cc0c T PyTuple_GetItem 0009d03c T PyTuple_GetSlice 0009cadc T PyTuple_New 0009cd64 T PyTuple_Pack 0009cc5c T PyTuple_SetItem 0009cbe4 T PyTuple_Size 00228310 D PyTuple_Type 0009e69c T PyType_ClearCache 0009ea70 T PyType_FromModuleAndSpec 000a0e44 T PyType_FromSpec 0009ea68 T PyType_FromSpecWithBases 0009e858 T PyType_GenericAlloc 0009e904 T PyType_GenericNew 0009e9b2 T PyType_GetFlags 000a0e88 T PyType_GetModule 000a0ec8 T PyType_GetModuleState 000a0e50 T PyType_GetSlot 0009e90c T PyType_IsSubtype 0009e70c T PyType_Modified 0009f370 T PyType_Ready 00228644 D PyType_Type 00067e94 T PyUnicodeDecodeError_Create 000678b4 T PyUnicodeDecodeError_GetEncoding 00067be4 T PyUnicodeDecodeError_GetEnd 00067954 T PyUnicodeDecodeError_GetObject 00067d3c T PyUnicodeDecodeError_GetReason 00067a68 T PyUnicodeDecodeError_GetStart 00067cde T PyUnicodeDecodeError_SetEnd 00067e08 T PyUnicodeDecodeError_SetReason 00067b5e T PyUnicodeDecodeError_SetStart 00067e60 T PyUnicodeEncodeError_Create 00067864 T PyUnicodeEncodeError_GetEncoding 00067b6c T PyUnicodeEncodeError_GetEnd 00067904 T PyUnicodeEncodeError_GetObject 00067cec T PyUnicodeEncodeError_GetReason 000679f4 T PyUnicodeEncodeError_GetStart 00067cd8 T PyUnicodeEncodeError_SetEnd 00067ddc T PyUnicodeEncodeError_SetReason 00067b58 T PyUnicodeEncodeError_SetStart 0022a200 D PyUnicodeIter_Type 00067ec8 T PyUnicodeTranslateError_Create 00067c60 T PyUnicodeTranslateError_GetEnd 000679a4 T PyUnicodeTranslateError_GetObject 00067d8c T PyUnicodeTranslateError_GetReason 00067ae4 T PyUnicodeTranslateError_GetStart 00067ce4 T PyUnicodeTranslateError_SetEnd 00067e34 T PyUnicodeTranslateError_SetReason 00067b64 T PyUnicodeTranslateError_SetStart 000be808 T PyUnicode_Append 000bea28 T PyUnicode_AppendAndDel 000b955c T PyUnicode_AsASCIIString 000ba792 T PyUnicode_AsCharmapString 000b2890 T PyUnicode_AsDecodedObject 000b2900 T PyUnicode_AsDecodedUnicode 000b2d98 T PyUnicode_AsEncodedObject 000b29ec T PyUnicode_AsEncodedString 000b426c T PyUnicode_AsEncodedUnicode 000b949e T PyUnicode_AsLatin1String 000b8e10 T PyUnicode_AsRawUnicodeEscapeString 000b0a34 T PyUnicode_AsUCS4 000b0c10 T PyUnicode_AsUCS4Copy 000b7e6a T PyUnicode_AsUTF16String 000b768a T PyUnicode_AsUTF32String 000b5564 T PyUnicode_AsUTF8 000b53c0 T PyUnicode_AsUTF8AndSize 000b6d58 T PyUnicode_AsUTF8String 000b5722 T PyUnicode_AsUnicode 000b5568 T PyUnicode_AsUnicodeAndSize 000c7424 T PyUnicode_AsUnicodeCopy 000b87f0 T PyUnicode_AsUnicodeEscapeString 000b18b8 T PyUnicode_AsWideChar 000b1a48 T PyUnicode_AsWideCharString 000b9b9c T PyUnicode_BuildEncodingMap 000bdbc0 T PyUnicode_Compare 000bddd0 T PyUnicode_CompareWithASCIIString 000be610 T PyUnicode_Concat 000be280 T PyUnicode_Contains 000af190 T PyUnicode_CopyCharacters 000bb818 T PyUnicode_Count 000b1f7c T PyUnicode_Decode 000b23a8 T PyUnicode_DecodeASCII 000b95ac T PyUnicode_DecodeCharmap 000b4438 T PyUnicode_DecodeFSDefault 000b4490 T PyUnicode_DecodeFSDefaultAndSize 000b288c T PyUnicode_DecodeLatin1 000b4410 T PyUnicode_DecodeLocale 000b4304 T PyUnicode_DecodeLocaleAndSize 000b8a68 T PyUnicode_DecodeRawUnicodeEscape 000b237c T PyUnicode_DecodeUTF16 000b7694 T PyUnicode_DecodeUTF16Stateful 000b2392 T PyUnicode_DecodeUTF32 000b6d60 T PyUnicode_DecodeUTF32Stateful 000b5980 T PyUnicode_DecodeUTF7 000b5984 T PyUnicode_DecodeUTF7Stateful 000b65ea T PyUnicode_DecodeUTF8 000afe0c T PyUnicode_DecodeUTF8Stateful 000b879c T PyUnicode_DecodeUnicodeEscape 000b29ac T PyUnicode_Encode 000b952c T PyUnicode_EncodeASCII 000ba754 T PyUnicode_EncodeCharmap 000bb34c T PyUnicode_EncodeDecimal 000b2f10 T PyUnicode_EncodeFSDefault 000b904a T PyUnicode_EncodeLatin1 000b2e00 T PyUnicode_EncodeLocale 000b9020 T PyUnicode_EncodeRawUnicodeEscape 000b7e2c T PyUnicode_EncodeUTF16 000b764c T PyUnicode_EncodeUTF32 000b65ac T PyUnicode_EncodeUTF7 000b6d28 T PyUnicode_EncodeUTF8 000b8a3c T PyUnicode_EncodeUnicodeEscape 000b50ac T PyUnicode_FSConverter 000b5180 T PyUnicode_FSDecoder 000bd1e4 T PyUnicode_Fill 000bc018 T PyUnicode_Find 000bc73e T PyUnicode_FindChar 000c4ff0 T PyUnicode_Format 000b1d60 T PyUnicode_FromEncodedObject 000b187c T PyUnicode_FromFormat 000b0c18 T PyUnicode_FromFormatV 000afff4 T PyUnicode_FromKindAndData 000b1cfc T PyUnicode_FromObject 000b1c1c T PyUnicode_FromOrdinal 000afe24 T PyUnicode_FromString 000afdc4 T PyUnicode_FromStringAndSize 000af94c T PyUnicode_FromUnicode 000afa20 T PyUnicode_FromWideChar 000b28f4 T PyUnicode_GetDefaultEncoding 000b57b8 T PyUnicode_GetLength 000ae228 T PyUnicode_GetMax 000b577c T PyUnicode_GetSize 000c71e4 T PyUnicode_InternFromString 000c71b8 T PyUnicode_InternImmortal 000afebc T PyUnicode_InternInPlace 000beb12 T PyUnicode_IsIdentifier 000bcc64 T PyUnicode_Join 000aea00 T PyUnicode_New 000c2094 T PyUnicode_Partition 000c2744 T PyUnicode_RPartition 000c2dd8 T PyUnicode_RSplit 000b57e8 T PyUnicode_ReadChar 000bf15c T PyUnicode_Replace 000af67c T PyUnicode_Resize 000be0d8 T PyUnicode_RichCompare 000c0760 T PyUnicode_Split 000bd358 T PyUnicode_Splitlines 000bef50 T PyUnicode_Substring 000bc984 T PyUnicode_Tailmatch 000bb238 T PyUnicode_TransformDecimalToASCII 000bb024 T PyUnicode_Translate 000ba7b6 T PyUnicode_TranslateCharmap 00229a9c D PyUnicode_Type 000b5874 T PyUnicode_WriteChar 0005f5a0 T PyVectorcall_Call 000d96d8 T PyWeakref_GetObject 000d94f4 T PyWeakref_NewProxy 000d935c T PyWeakref_NewRef 00122140 T PyWideStringList_Append 00122070 T PyWideStringList_Insert 0021ef0c D PyWrapperDescr_Type 0006647c T PyWrapper_New 0022ac88 D PyZip_Type 000fe680 T Py_AddPendingCall 00130820 T Py_AtExit 0012aa10 T Py_BuildValue 0014a698 T Py_BytesMain 00247620 B Py_BytesWarningFlag 00135be0 T Py_CompileString 00134fb8 T Py_CompileStringExFlags 00135c30 T Py_CompileStringFlags 00134f24 T Py_CompileStringObject 00247604 B Py_DebugFlag 00091d64 T Py_DecRef 001474dc T Py_DecodeLocale 0024762c B Py_DontWriteBytecodeFlag 00147534 T Py_EncodeLocale 001303d4 T Py_EndInterpreter 00104b74 T Py_EnterRecursiveCall 00130848 T Py_Exit 0012fe58 T Py_ExitStatusException 001304b4 T Py_FatalError 00130910 T Py_FdIsInteractive 00247674 B Py_FileSystemDefaultEncodeErrors 0024766c B Py_FileSystemDefaultEncoding 00130290 T Py_Finalize 0012fe98 T Py_FinalizeEx 00247624 B Py_FrozenFlag 00116d60 T Py_FrozenMain 0006c64c T Py_GenericAlias 0022303c D Py_GenericAliasType 00122358 T Py_GetArgcArgv 00033004 T Py_GetBuildInfo 0011b764 T Py_GetCompiler 0011b770 T Py_GetCopyright 0012c700 T Py_GetExecPrefix 0012c658 T Py_GetPath 0011b77c T Py_GetPlatform 0012c6e8 T Py_GetPrefix 0012c4dc T Py_GetProgramFullPath 0012c730 T Py_GetProgramName 0012c718 T Py_GetPythonHome 000fe9f8 T Py_GetRecursionLimit 0011b788 T Py_GetVersion 00247670 B Py_HasFileSystemDefaultEncoding 00247638 B Py_HashRandomizationFlag 00247628 B Py_IgnoreEnvironmentFlag 00091d58 T Py_IncRef 0012fe94 T Py_Initialize 0012fdd8 T Py_InitializeEx 0012fa50 T Py_InitializeFromConfig 00247614 B Py_InspectFlag 00247610 B Py_InteractiveFlag 0012f418 T Py_IsInitialized 0024763c B Py_IsolatedFlag 00104bdc T Py_LeaveRecursiveCall 0014a570 T Py_Main 000fe884 T Py_MakePendingCalls 001303d0 T Py_NewInterpreter 0024761c B Py_NoSiteFlag 00247630 B Py_NoUserSiteDirectory 00247618 B Py_OptimizeFlag 0012f840 T Py_PreInitialize 0012f80c T Py_PreInitializeFromArgs 0012f7d4 T Py_PreInitializeFromBytesArgs 0024760c B Py_QuietFlag 0009436c T Py_ReprEnter 00094404 T Py_ReprLeave 00149d58 T Py_RunMain 0012c3d0 T Py_SetPath 0012c570 T Py_SetProgramName 0012c504 T Py_SetPythonHome 000fea0c T Py_SetRecursionLimit 001221f4 T Py_SetStandardStreamEncoding 00135240 T Py_SymtableString 00135190 T Py_SymtableStringObject 000c7350 T Py_UNICODE_strcat 000c73ea T Py_UNICODE_strchr 000c736e T Py_UNICODE_strcmp 000c7328 T Py_UNICODE_strcpy 000c7324 T Py_UNICODE_strlen 000c73c0 T Py_UNICODE_strncmp 000c7336 T Py_UNICODE_strncpy 000c7400 T Py_UNICODE_strrchr 00247600 B Py_UTF8Mode 00247634 B Py_UnbufferedStdioFlag 0006f640 T Py_UniversalNewlineFgets 0012ab20 T Py_VaBuildValue 00247608 B Py_VerboseFlag 0022b258 D Py_hexdigits 000f35a4 T _PyAST_GetDocString 000f767c T _PyAST_Optimize 0004f8de T _PyAccu_Accumulate 0004fa98 T _PyAccu_Destroy 0004fa00 T _PyAccu_Finish 0004f9bc T _PyAccu_FinishAsList 0004f8c0 T _PyAccu_Init 00117a40 T _PyArg_BadArgument 0011986c T _PyArg_CheckPositional 00119a30 T _PyArg_NoKeywords 00119ad0 T _PyArg_NoKwnames 00119a80 T _PyArg_NoPositional 0011743c T _PyArg_ParseStack 0011866c T _PyArg_ParseStackAndKeywords 00118e3c T _PyArg_ParseStackAndKeywords_SizeT 0011792c T _PyArg_ParseStack_SizeT 0011854c T _PyArg_ParseTupleAndKeywordsFast 001185dc T _PyArg_ParseTupleAndKeywordsFast_SizeT 001183f8 T _PyArg_ParseTupleAndKeywords_SizeT 001173c8 T _PyArg_ParseTuple_SizeT 00117308 T _PyArg_Parse_SizeT 00118fd4 T _PyArg_UnpackKeywords 001199cc T _PyArg_UnpackStack 00118e80 T _PyArg_VaParseTupleAndKeywordsFast 00118f04 T _PyArg_VaParseTupleAndKeywordsFast_SizeT 001184d8 T _PyArg_VaParseTupleAndKeywords_SizeT 001179dc T _PyArg_VaParse_SizeT 0012dc00 T _PyArgv_AsWstrList 002237e8 D _PyAsyncGenASend_Type 002239cc D _PyAsyncGenAThrow_Type 002238b4 D _PyAsyncGenWrappedValue_Type 00239b48 B _PyByteArray_empty_string 00235e74 D _PyBytesIOBuffer_Type 00057cba T _PyBytesWriter_Alloc 00057ef8 T _PyBytesWriter_Dealloc 00057d8c T _PyBytesWriter_Finish 00057ca8 T _PyBytesWriter_Init 00058e5c T _PyBytesWriter_Prepare 0005aa7c T _PyBytesWriter_Resize 00057d18 T _PyBytesWriter_WriteBytes 00058eac T _PyBytes_DecodeEscape 00057f50 T _PyBytes_FormatEx 00059950 T _PyBytes_FromHex 000595e8 T _PyBytes_Join 0005a684 T _PyBytes_Resize 0006292a T _PyCode_CheckLineNumber 00062000 T _PyCode_ConstantKey 000629a4 T _PyCode_GetExtra 000629ec T _PyCode_SetExtra 00105068 T _PyCodecInfo_GetIncrementalDecoder 001050fc T _PyCodecInfo_GetIncrementalEncoder 0010566c T _PyCodec_DecodeText 0010561c T _PyCodec_EncodeText 00104ffc T _PyCodec_Forget 00104d8c T _PyCodec_Lookup 00105558 T _PyCodec_LookupTextEncoding 00146658 T _PyComplex_FormatAdvancedWriter 00122520 T _PyConfig_InitCompatConfig 00113518 T _PyContext_NewHamtForTests 00223508 D _PyCoroWrapper_Type 00133190 T _PyCrossInterpreterData_Lookup 00132ffc T _PyCrossInterpreterData_NewObject 00133000 T _PyCrossInterpreterData_RegisterClass 00132f20 T _PyCrossInterpreterData_Release 00095964 T _PyDebugAllocatorStats 00087ea0 T _PyDictView_Intersect 00087e18 T _PyDictView_New 00082f68 T _PyDict_CheckConsistency 00086b0c T _PyDict_Contains 00082f04 T _PyDict_DebugMallocStats 000877ec T _PyDict_DelItemId 000849cc T _PyDict_DelItemIf 00084408 T _PyDict_DelItem_KnownHash 00087638 T _PyDict_GetItemId 00083b60 T _PyDict_GetItemIdWithError 00083bc8 T _PyDict_GetItemStringWithError 00083a7c T _PyDict_GetItem_KnownHash 00083424 T _PyDict_HasOnlyStringKeys 000836c8 T _PyDict_MaybeUntrack 0008604c T _PyDict_MergeEx 000837d4 T _PyDict_NewPresized 00084e38 T _PyDict_Next 00085510 T _PyDict_Pop 00087690 T _PyDict_SetItemId 00084380 T _PyDict_SetItem_KnownHash 000869f8 T _PyDict_SizeOf 00115918 T _PyErr_BadInternalCall 001152cc T _PyErr_ChainExceptions 001153a0 T _PyErr_ChainStackItem 00173b9c T _PyErr_CheckSignals 00173ac0 T _PyErr_CheckSignalsTstate 00114ca0 T _PyErr_Clear 001344d8 T _PyErr_Display 00114f1c T _PyErr_ExceptionMatches 001150f4 T _PyErr_Fetch 00114c60 T _PyErr_Format 00115564 T _PyErr_FormatFromCause 0011546c T _PyErr_FormatFromCauseTstate 001151ac T _PyErr_GetExcInfo 001149e4 T _PyErr_GetTopmostException 0011560c T _PyErr_NoMemory 00114f34 T _PyErr_NormalizeException 00134150 T _PyErr_Print 00114954 T _PyErr_Restore 00114d88 T _PyErr_SetKeyError 00114dd0 T _PyErr_SetNone 00114a04 T _PyErr_SetObject 00114de8 T _PyErr_SetString 00069f3c T _PyErr_TrySetFromCause 0011614c T _PyErr_WriteUnraisableMsg 000fe5cc T _PyEval_AddPendingCall 001044f4 T _PyEval_CallTracing 00104490 T _PyEval_EvalCodeWithName 000feb7c T _PyEval_EvalFrameDefault 0010486c T _PyEval_GetAsyncGenFinalizer 00104808 T _PyEval_GetAsyncGenFirstiter 001048b8 T _PyEval_GetBuiltinId 001047a4 T _PyEval_GetCoroutineOriginTrackingDepth 000fddcc T _PyEval_GetSwitchInterval 00104b44 T _PyEval_RequestCodeExtraIndex 0010481c T _PyEval_SetAsyncGenFinalizer 001047b8 T _PyEval_SetAsyncGenFirstiter 001047a0 T _PyEval_SetCoroutineOriginTrackingDepth 00104534 T _PyEval_SetProfile 000fddbc T _PyEval_SetSwitchInterval 00104654 T _PyEval_SetTrace 000fe4ec T _PyEval_SignalAsyncExc 000fe55c T _PyEval_SignalReceived 00104a74 T _PyEval_SliceIndex 00104ae0 T _PyEval_SliceIndexNotNone 00070524 T _PyFloat_DebugMallocStats 00146538 T _PyFloat_FormatAdvancedWriter 00070540 T _PyFloat_Pack2 00070740 T _PyFloat_Pack4 00070918 T _PyFloat_Pack8 00070b20 T _PyFloat_Unpack2 00070bb0 T _PyFloat_Unpack4 00070cd8 T _PyFloat_Unpack8 00073c1c T _PyFrame_DebugMallocStats 0005f780 T _PyFunction_Vectorcall 0014ad1c T _PyGC_CollectIfEnabled 0014ad20 T _PyGC_CollectNoFail 0014aa78 T _PyGC_InitState 00132b3c T _PyGILState_GetInterpreterStateUnsafe 00132b64 T _PyGILState_Reinit 0006d67c T _PyGen_FetchStopIterationValue 0006d034 T _PyGen_Finalize 0006d264 T _PyGen_Send 0006d5ac T _PyGen_SetStopIterationValue 0022e220 D _PyHamtItems_Type 0022e2ec D _PyHamtKeys_Type 0022e3b8 D _PyHamtValues_Type 0022e5f4 D _PyHamt_ArrayNode_Type 0022e6c0 D _PyHamt_BitmapNode_Type 0022e78c D _PyHamt_CollisionNode_Type 0022e528 D _PyHamt_Type 002490cc B _PyIO_empty_bytes 002490c8 B _PyIO_empty_str 00249064 B _PyIO_str_close 00249068 B _PyIO_str_closed 0024906c B _PyIO_str_decode 00249070 B _PyIO_str_encode 00249074 B _PyIO_str_fileno 00249078 B _PyIO_str_flush 0024907c B _PyIO_str_getstate 00249080 B _PyIO_str_isatty 00249084 B _PyIO_str_newlines 00249088 B _PyIO_str_nl 0024908c B _PyIO_str_peek 00249090 B _PyIO_str_read 00249094 B _PyIO_str_read1 00249098 B _PyIO_str_readable 0024909c B _PyIO_str_readall 002490a0 B _PyIO_str_readinto 002490a4 B _PyIO_str_readline 002490a8 B _PyIO_str_reset 002490ac B _PyIO_str_seek 002490b0 B _PyIO_str_seekable 002490b4 B _PyIO_str_setstate 002490b8 B _PyIO_str_tell 002490bc B _PyIO_str_truncate 002490c0 B _PyIO_str_writable 002490c4 B _PyIO_str_write 0011e8e4 T _PyImport_AcquireLock 0011f83c T _PyImport_FindExtensionObject 0011f7f4 T _PyImport_FixupBuiltin 0011f6c0 T _PyImport_FixupExtensionObject 0011eacc T _PyImport_GetModuleId 0011eac0 T _PyImport_IsInitialized 0011e950 T _PyImport_ReleaseLock 0011ebc0 T _PyImport_SetModule 0011ebdc T _PyImport_SetModuleString 00075abc T _PyInterpreterID_LookUp 00075a20 T _PyInterpreterID_New 00224620 D _PyInterpreterID_Type 00131f94 T _PyInterpreterState_DeleteExceptMain 001319cc T _PyInterpreterState_Enable 001326d8 T _PyInterpreterState_GetConfig 001331e8 T _PyInterpreterState_GetEvalFrameFunc 00075a64 T _PyInterpreterState_GetIDObject 00132240 T _PyInterpreterState_GetMainModule 001321d4 T _PyInterpreterState_IDDecref 001321a8 T _PyInterpreterState_IDIncref 00132168 T _PyInterpreterState_IDInitref 001320e0 T _PyInterpreterState_LookUpID 00132234 T _PyInterpreterState_RequireIDRef 00132230 T _PyInterpreterState_RequiresIDRef 001331ee T _PyInterpreterState_SetEvalFrameFunc 00076000 T _PyList_DebugMallocStats 00076814 T _PyList_Extend 0007b0f0 T _PyLong_AsByteArray 0007ab38 T _PyLong_AsInt 00135e00 T _PyLong_AsTime_t 0007a2c4 T _PyLong_Copy 00224e1c D _PyLong_DigitValue 0007e508 T _PyLong_DivmodNear 0007bb94 T _PyLong_Format 00145d68 T _PyLong_FormatAdvancedWriter 0007c992 T _PyLong_FormatBytesWriter 0007c95c T _PyLong_FormatWriter 0007d400 T _PyLong_Frexp 0007aeb0 T _PyLong_FromByteArray 0007d278 T _PyLong_FromBytes 0014ca4c T _PyLong_FromGid 0007a150 T _PyLong_FromNbIndexOrNbInt 0007a0a0 T _PyLong_FromNbInt 00135e38 T _PyLong_FromTime_t 0014ca3c T _PyLong_FromUid 0007db6c T _PyLong_GCD 0007d97c T _PyLong_Lshift 0007a244 T _PyLong_New 0007ae5c T _PyLong_NumBits 0023a444 B _PyLong_One 0007d738 T _PyLong_Rshift 0007ae48 T _PyLong_Sign 0007bb44 T _PyLong_Size_t_Converter 0007b9f0 T _PyLong_UnsignedInt_Converter 0007ba90 T _PyLong_UnsignedLongLong_Converter 0007ba40 T _PyLong_UnsignedLong_Converter 0007b988 T _PyLong_UnsignedShort_Converter 0023a440 B _PyLong_Zero 00226470 D _PyManagedBuffer_Type 00094708 T _PyMem_GetAllocatorName 00095068 T _PyMem_GetCurrentAllocatorName 00095810 T _PyMem_RawStrdup 000957bc T _PyMem_RawWcsdup 00094614 T _PyMem_SetDefaultAllocator 000947b0 T _PyMem_SetupAllocators 00095850 T _PyMem_Strdup 0021f164 D _PyMethodWrapper_Type 00091234 T _PyModuleSpec_IsInitializing 00090e80 T _PyModule_Clear 00090e8c T _PyModule_ClearDict 00090594 T _PyModule_CreateInitialized 00091aa4 T _PyNamespace_New 00226d4c D _PyNamespace_Type 00033980 T _PyNode_SizeOf 00226ee0 D _PyNone_Type 0022705c D _PyNotImplemented_Type 00173d98 T _PyOS_InterruptOccurred 00173f40 T _PyOS_IsMainThread 00239b30 B _PyOS_ReadlineTState 001371c0 T _PyOS_URandom 001374e4 T _PyOS_URandomNonblock 0022f50c D _PyOS_opterr 0022f510 D _PyOS_optind 00091c34 T _PyObject_AssertFailed 0005f694 T _PyObject_Call 0005fdd4 T _PyObject_CallFunction_SizeT 0005ffc8 T _PyObject_CallMethodId 0006058c T _PyObject_CallMethodIdObjArgs 00060168 T _PyObject_CallMethodId_SizeT 00060098 T _PyObject_CallMethod_SizeT 0005fa78 T _PyObject_Call_Prepend 00091b38 T _PyObject_CheckConsistency 00132d40 T _PyObject_CheckCrossInterpreterData 00095aa4 T _PyObject_DebugMallocStats 00094344 T _PyObject_DebugTypeStats 000922f4 T _PyObject_Dump 0005f158 T _PyObject_FastCallDictTstate 000925b4 T _PyObject_FunctionStr 0014ba14 T _PyObject_GC_Calloc 0014b89c T _PyObject_GC_Malloc 0014ba1a T _PyObject_GC_New 0014ba48 T _PyObject_GC_NewVar 0014bab0 T _PyObject_GC_Resize 00093110 T _PyObject_GenericGetAttrWithDict 00093588 T _PyObject_GenericSetAttrWithDict 00092efc T _PyObject_GetAttrId 00132dc4 T _PyObject_GetCrossInterpreterData 0009330c T _PyObject_GetDictPtr 0009336c T _PyObject_GetMethod 00092f7c T _PyObject_HasAttrId 0004afa2 T _PyObject_HasLen 00092e34 T _PyObject_IsAbstract 00091bf8 T _PyObject_IsFreed 00093028 T _PyObject_LookupAttr 0009279c T _PyObject_LookupAttrId 0009e95c T _PyObject_LookupSpecial 0005f22c T _PyObject_MakeTpCall 00091e00 T _PyObject_New 00091e48 T _PyObject_NewVar 00093348 T _PyObject_NextNotImplemented 0004f3d0 T _PyObject_RealIsInstance 0004f4e4 T _PyObject_RealIsSubclass 00093006 T _PyObject_SetAttrId 0022b8a4 D _PyParser_Grammar 00219a74 D _PyParser_TokenNames 0012dfc0 T _PyPreConfig_InitCompatConfig 002476a0 B _PyRuntime 001318bc T _PyRuntimeState_Fini 001317e0 T _PyRuntimeState_Init 00131914 T _PyRuntimeState_ReInitThreads 0012f3c8 T _PyRuntime_Finalize 0012f398 T _PyRuntime_Initialize 0004f620 T _PySequence_BytesToCharpArray 0004e844 T _PySequence_IterSearch 00227f80 D _PySet_Dummy 00098650 T _PySet_NextEntry 00098818 T _PySet_Update 00173e34 T _PySignal_AfterFork 0009b394 T _PySlice_FromIndices 0009b730 T _PySlice_GetLongIndices 0005f538 T _PyStack_AsDict 0013243c T _PyState_AddModule 0013a660 T _PySys_GetObjectId 0013ac60 T _PySys_GetSizeOf 0022f240 D _PySys_ImplCacheTag 0022f23c D _PySys_ImplName 0013a6a8 T _PySys_SetObjectId 0013271c T _PyThreadState_DeleteCurrent 00132818 T _PyThreadState_DeleteExcept 001328c0 T _PyThreadState_GetDict 001323b0 T _PyThreadState_Init 001323ac T _PyThreadState_Prealloc 00131f8c T _PyThreadState_Swap 00132874 T _PyThreadState_UncheckedGet 001329d0 T _PyThread_CurrentFrames 0013e50c T _PyThread_at_fork_reinit 001367d2 T _PyTime_AsMicroseconds 001366f8 T _PyTime_AsMilliseconds 001366f4 T _PyTime_AsNanosecondsObject 00136660 T _PyTime_AsSecondsDouble 00136c74 T _PyTime_AsTimespec 0013688c T _PyTime_AsTimeval 00136b14 T _PyTime_AsTimevalTime_t 001369e4 T _PyTime_AsTimeval_noraise 00136650 T _PyTime_FromMillisecondsObject 001362be T _PyTime_FromNanoseconds 001362c0 T _PyTime_FromNanosecondsObject 001362b0 T _PyTime_FromSeconds 0013641c T _PyTime_FromSecondsObject 00136348 T _PyTime_FromTimespec 001363a8 T _PyTime_FromTimeval 00136e3c T _PyTime_GetMonotonicClock 00136ea8 T _PyTime_GetMonotonicClockWithInfo 00136f90 T _PyTime_GetPerfCounter 00136f8c T _PyTime_GetPerfCounterWithInfo 00136ce0 T _PyTime_GetSystemClock 00136d48 T _PyTime_GetSystemClockWithInfo 00137024 T _PyTime_Init 00135da0 T _PyTime_MulDiv 00135e40 T _PyTime_ObjectToTime_t 00136020 T _PyTime_ObjectToTimespec 00136298 T _PyTime_ObjectToTimeval 0013716c T _PyTime_gmtime 00137100 T _PyTime_localtime 0018a638 T _PyTraceMalloc_GetTraceback 0018a3dc T _PyTraceMalloc_NewReference 0013ebfc T _PyTraceback_Add 00094548 T _PyTrash_begin 0009447c T _PyTrash_deposit_object 000944c8 T _PyTrash_destroy_chain 0009457c T _PyTrash_end 000944a4 T _PyTrash_thread_deposit_object 0009450c T _PyTrash_thread_destroy_chain 0009ca5c T _PyTuple_DebugMallocStats 0009cce8 T _PyTuple_MaybeUntrack 0009d604 T _PyTuple_Resize 0009e9b8 T _PyType_CalculateMetaclass 0009e464 T _PyType_CheckConsistency 0009e554 T _PyType_GetDocFromInternalDoc 0009e5fc T _PyType_GetTextSignatureFromInternalDoc 000a0f18 T _PyType_Lookup 0009e994 T _PyType_LookupId 0009e840 T _PyType_Name 00067ef8 T _PyUnicodeTranslateError_Create 000b1860 T _PyUnicodeWriter_Dealloc 000b1784 T _PyUnicodeWriter_Finish 000b148c T _PyUnicodeWriter_Init 000b7214 T _PyUnicodeWriter_PrepareInternal 000b9504 T _PyUnicodeWriter_PrepareKindInternal 000b14ac T _PyUnicodeWriter_WriteASCIIString 000c4714 T _PyUnicodeWriter_WriteChar 000c4994 T _PyUnicodeWriter_WriteLatin1String 000c476e T _PyUnicodeWriter_WriteStr 000c4892 T _PyUnicodeWriter_WriteSubstring 000b41ae T _PyUnicode_AsASCIIString 000b4200 T _PyUnicode_AsLatin1String 000b3148 T _PyUnicode_AsUTF8String 000b5728 T _PyUnicode_AsUnicode 000ae234 T _PyUnicode_CheckConsistency 000b0964 T _PyUnicode_Copy 000b7e74 T _PyUnicode_DecodeUnicodeEscape 000be20c T _PyUnicode_EQ 000b9fb0 T _PyUnicode_EncodeCharmap 000b3150 T _PyUnicode_EncodeUTF16 000b3948 T _PyUnicode_EncodeUTF32 000b62e8 T _PyUnicode_EncodeUTF7 000bdfa0 T _PyUnicode_EqualToASCIIId 000bdf10 T _PyUnicode_EqualToASCIIString 000aeba8 T _PyUnicode_FastCopyCharacters 000bd178 T _PyUnicode_FastFill 000b0768 T _PyUnicode_FindMaxChar 00145580 T _PyUnicode_FormatAdvancedWriter 000c4c4c T _PyUnicode_FormatLong 000aff54 T _PyUnicode_FromASCII 000afe68 T _PyUnicode_FromId 000bb574 T _PyUnicode_InsertThousandsGrouping 000d881c T _PyUnicode_IsAlpha 000d87dc T _PyUnicode_IsCaseIgnorable 000d879c T _PyUnicode_IsCased 000d8188 T _PyUnicode_IsDecimalDigit 000d8208 T _PyUnicode_IsDigit 000d8002 T _PyUnicode_IsLinebreak 000d82c8 T _PyUnicode_IsLowercase 000d8248 T _PyUnicode_IsNumeric 000d8288 T _PyUnicode_IsPrintable 000d8084 T _PyUnicode_IsTitlecase 000d8308 T _PyUnicode_IsUppercase 000d7f50 T _PyUnicode_IsWhitespace 000d8104 T _PyUnicode_IsXidContinue 000d80c4 T _PyUnicode_IsXidStart 000bccb0 T _PyUnicode_JoinArray 000af450 T _PyUnicode_Ready 000bea4a T _PyUnicode_ScanIdentifier 000d8144 T _PyUnicode_ToDecimalDigit 000d81c0 T _PyUnicode_ToDigit 000d8670 T _PyUnicode_ToFoldedFull 000d83f4 T _PyUnicode_ToLowerFull 000d83a0 T _PyUnicode_ToLowercase 000cfe00 T _PyUnicode_ToNumeric 000d84c8 T _PyUnicode_ToTitleFull 000d8030 T _PyUnicode_ToTitlecase 000d859c T _PyUnicode_ToUpperFull 000d8348 T _PyUnicode_ToUppercase 000bb080 T _PyUnicode_TransformDecimalAndSpaceToASCII 000beb92 T _PyUnicode_XStrip 000dca4c T _PyWarnings_Init 0022a6f4 D _PyWeakref_CallableProxyType 000d8874 T _PyWeakref_ClearRef 000d885c T _PyWeakref_GetWeakrefCount 0022a628 D _PyWeakref_ProxyType 0022a468 D _PyWeakref_RefType 00122190 T _PyWideStringList_AsList 00121f8a T _PyWideStringList_Clear 00121fb8 T _PyWideStringList_Copy 0012214e T _PyWideStringList_Extend 000922f0 T _Py_BreakPoint 0012aa98 T _Py_BuildValue_SizeT 0005f014 T _Py_CheckFunctionResult 0022b1b8 D _Py_CheckRecursionLimit 000fea34 T _Py_CheckRecursiveCall 001222ec T _Py_ClearArgcArgv 00122290 T _Py_ClearStandardStreamEncoding 0012f4ac T _Py_CoerceLegacyLocale 000945c8 T _Py_Dealloc 001474aa T _Py_DecodeLocaleEx 000b6600 T _Py_DecodeUTF8Ex 000b69e2 T _Py_DecodeUTF8_surrogateescape 0013ecc0 T _Py_DisplaySourceLine 00228154 D _Py_EllipsisObject 001475e8 T _Py_EncodeLocaleEx 0014758c T _Py_EncodeLocaleRaw 000b6a88 T _Py_EncodeUTF8Ex 0021d270 D _Py_FalseStruct 0013075c T _Py_FatalErrorFormat 00130490 T _Py_FatalErrorFunc 000fdddc T _Py_FatalError_TstateNULL 0004f794 T _Py_FreeCharPArray 00095908 T _Py_GetAllocatedBlocks 00133204 T _Py_GetConfig 00124e84 T _Py_GetConfigsAsDict 0012dfa0 T _Py_GetEnv 000ae190 T _Py_GetErrorHandler 001474a4 T _Py_GetForceASCII 00148184 T _Py_GetLocaleconvNumeric 0014cb54 T _Py_Gid_Converter 00134024 T _Py_HandleSystemExit 0012eddc T _Py_HashBytes 0012ec80 T _Py_HashDouble 0012edce T _Py_HashPointer 0012edc8 T _Py_HashPointerRaw 00247680 B _Py_HashSecret 0012f908 T _Py_InitializeMain 0012f408 T _Py_IsCoreInitialized 0012f3e8 T _Py_IsFinalizing 0012f46c T _Py_IsLocaleCoercionTarget 0012f428 T _Py_LegacyLocaleDetected 00106ef8 T _Py_Mangle 00130294 T _Py_NewInterpreter 00091f7c T _Py_NewReference 00226e24 D _Py_NoneStruct 00227128 D _Py_NotImplementedStruct 00247650 B _Py_PackageContext 0012f84c T _Py_PreInitializeFromConfig 0012f6a4 T _Py_PreInitializeFromPyArgv 00130804 T _Py_PyAtExit 001474a8 T _Py_ResetForceASCII 00130860 T _Py_RestoreSignals 0012f598 T _Py_SetLocaleFromEnv 0012c5e4 T _Py_SetProgramFullPath 0014cc4c T _Py_Sigset_Converter 00135058 T _Py_SourceAsString 00226e2c D _Py_SwappedOp 001351c4 T _Py_SymtableStringObjectFlags 0021d260 D _Py_TrueStruct 0014ca5c T _Py_Uid_Converter 00247698 B _Py_UnhandledKeyboardInterrupt 0012ac00 T _Py_VaBuildStack 0012ad2c T _Py_VaBuildStack_SizeT 0012ab90 T _Py_VaBuildValue_SizeT 00147f60 T _Py_abspath 0004bc2e T _Py_add_one_to_index_C 0004bc02 T _Py_add_one_to_index_F 001c113b R _Py_ascii_whitespace 001317b4 T _Py_bit_length 00063550 T _Py_c_abs 000632b2 T _Py_c_diff 000632ec T _Py_c_neg 00063424 T _Py_c_pow 00063300 T _Py_c_prod 0006333a T _Py_c_quot 00063278 T _Py_c_sum 0012a9a4 T _Py_convert_optional_to_ssize_t 001e3f04 R _Py_ctype_table 001e4304 R _Py_ctype_tolower 001e4404 R _Py_ctype_toupper 00147488 T _Py_device_encoding 00143280 T _Py_dg_dtoa 00143248 T _Py_dg_freedtoa 00140bf8 T _Py_dg_infinity 00140bd0 T _Py_dg_stdnan 00140c20 T _Py_dg_strtod 001480bc T _Py_dup 00147ab4 T _Py_fopen 00147b40 T _Py_fopen_obj 00147608 T _Py_fstat 00147602 T _Py_fstat_noraise 00148100 T _Py_get_blocking 0012e490 T _Py_get_env_flag 001476c0 T _Py_get_inheritable 0012df38 T _Py_get_xoption 0003305c T _Py_gitidentifier 00033050 T _Py_gitversion 0011e558 T _Py_hashtable_clear 0011e024 T _Py_hashtable_compare_direct 0011e63c T _Py_hashtable_destroy 0011e352 T _Py_hashtable_foreach 0011e340 T _Py_hashtable_get 0011e020 T _Py_hashtable_hash_ptr 0011e498 T _Py_hashtable_new 0011e3a8 T _Py_hashtable_new_full 0011e200 T _Py_hashtable_set 0011e02e T _Py_hashtable_size 0011e088 T _Py_hashtable_steal 00147f54 T _Py_isabs 00147850 T _Py_open 0014796c T _Py_open_noraise 00140098 T _Py_parse_inf_or_nan 00247654 B _Py_path_config 00147c34 T _Py_read 00148130 T _Py_set_blocking 001476f0 T _Py_set_inheritable 001477e0 T _Py_set_inheritable_async_safe 00147650 T _Py_stat 0012e444 T _Py_str_to_int 001406c4 T _Py_strhex 00140b38 T _Py_strhex_bytes 00140bb6 T _Py_strhex_bytes_with_sep 00140ba0 T _Py_strhex_with_sep 00140250 T _Py_string_to_number_with_underscores 00227170 D _Py_tracemalloc_config 001479dc T _Py_wfopen 00148024 T _Py_wgetcwd 00147dc8 T _Py_wreadlink 00147e98 T _Py_wrealpath 00147cc0 T _Py_write 00147d80 T _Py_write_noraise U aeabi_memclr@LIBC_N U aeabi_memclr4@LIBC_N U aeabi_memclr8@LIBC_N U aeabi_memcpy@LIBC_N U aeabi_memcpy4@LIBC_N U aeabi_memmove@LIBC_N U aeabi_memmove4@LIBC_N U aeabi_memset@LIBC_N U aeabi_memset4@LIBC_N U aeabi_memset8@LIBC_N 00237b49 A bss_start U __cxa_atexit@LIBC w cxa_begin_cleanup w cxa_call_unexpected U cxa_finalize@LIBC w cxa_type_match U errno@LIBC w gnu_Unwind_Find_exidx@LIBC_N U libc_current_sigrtmax@LIBC U libc_current_sigrtmin@LIBC U register_atfork@LIBC U sched_cpualloc@LIBC U __sched_cpucount@LIBC U sched_cpufree@LIBC U stack_chk_fail@LIBC U stack_chk_guard@LIBC 00237b49 A _edata 002492b4 A _end U _exit@LIBC U abort@LIBC U access@LIBC U alarm@LIBC U atan2@LIBC U calloc@LIBC U ceil@LIBC U chdir@LIBC U chmod@LIBC U chown@LIBC U chroot@LIBC U clearerr@LIBC U clock@LIBC U clock_getres@LIBC U clock_gettime@LIBC U clock_settime@LIBC U close@LIBC U closedir@LIBC U dlerror@LIBC U dlopen@LIBC U dlsym@LIBC U dup@LIBC U dup2@LIBC U dup3@LIBC U environ@LIBC U execv@LIBC U execve@LIBC U exit@LIBC U exp@LIBC U fchdir@LIBC U fchmod@LIBC U fchmodat@LIBC U fchown@LIBC U fchownat@LIBC U fclose@LIBC U fcntl@LIBC U fdatasync@LIBC U fdopen@LIBC U fdopendir@LIBC U feof@LIBC U ferror@LIBC U fflush@LIBC U fgets@LIBC U fileno@LIBC U flockfile@LIBC U floor@LIBC U fmod@LIBC U fopen@LIBC U fork@LIBC U forkpty@LIBC U fpathconf@LIBC U fprintf@LIBC U fputc@LIBC U fputs@LIBC U fread@LIBC U free@LIBC U frexp@LIBC U fstat@LIBC U fstatat@LIBC U fstatvfs@LIBC U fsync@LIBC U ftell@LIBC U ftruncate64@LIBC U funlockfile@LIBC U futimens@LIBC U fwrite@LIBC U getc@LIBC U getc_unlocked@LIBC U getcwd@LIBC U getegid@LIBC U getenv@LIBC U geteuid@LIBC U getgid@LIBC U getgrouplist@LIBC U getgroups@LIBC U getitimer@LIBC U getlogin@LIBC U getpgid@LIBC U getpgrp@LIBC U getpid@LIBC U getppid@LIBC U getpriority@LIBC U getpwnam_r@LIBC U getpwuid_r@LIBC U getresgid@LIBC U getresuid@LIBC U getrlimit@LIBC U getrusage@LIBC U getsid@LIBC U gettimeofday@LIBC U getuid@LIBC U gmtime_r@LIBC U hypot@LIBC U initgroups@LIBC U ioctl@LIBC U isalnum@LIBC U isatty@LIBC U isxdigit@LIBC U kill@LIBC U killpg@LIBC U lchown@LIBC U ldexp@LIBC U localeconv@LIBC U localtime_r@LIBC U lockf64@LIBC_N U log@LIBC U lseek64@LIBC U lstat@LIBC U malloc@LIBC U memchr@LIBC U memcmp@LIBC U memcpy@LIBC U memrchr@LIBC U mkdir@LIBC U mkdirat@LIBC U mkfifo@LIBC U mkfifoat@LIBC U mknod@LIBC U mknodat@LIBC U mktime@LIBC U mmap64@LIBC U modf@LIBC U munmap@LIBC U nice@LIBC U open@LIBC U openat@LIBC U opendir@LIBC U openpty@LIBC U pathconf@LIBC U pause@LIBC U perror@LIBC U pipe@LIBC U pipe2@LIBC U posix_fadvise64@LIBC U posix_fallocate64@LIBC U pow@LIBC U pread64@LIBC U preadv64@LIBC_N U printf@LIBC U pthread_attr_destroy@LIBC U pthread_attr_init@LIBC U pthread_attr_setstacksize@LIBC U pthread_cond_destroy@LIBC U pthread_cond_init@LIBC U pthread_cond_signal@LIBC U pthread_cond_timedwait@LIBC U pthread_cond_wait@LIBC U pthread_condattr_init@LIBC U pthread_condattr_setclock@LIBC U pthread_create@LIBC U pthread_detach@LIBC U pthread_exit@LIBC U pthread_getcpuclockid@LIBC U pthread_getspecific@LIBC U pthread_key_create@LIBC U pthread_key_delete@LIBC U pthread_kill@LIBC U pthread_mutex_destroy@LIBC U pthread_mutex_init@LIBC U pthread_mutex_lock@LIBC U pthread_mutex_trylock@LIBC U pthread_mutex_unlock@LIBC U pthread_self@LIBC U pthread_setspecific@LIBC U pthread_sigmask@LIBC U puts@LIBC U pwrite64@LIBC U pwritev64@LIBC_N U qsort@LIBC U raise@LIBC U read@LIBC U readdir@LIBC U readlink@LIBC U readlinkat@LIBC U readv@LIBC U realloc@LIBC U realpath@LIBC U rename@LIBC U renameat@LIBC U rewind@LIBC U rewinddir@LIBC U rmdir@LIBC U round@LIBC U sched_get_priority_max@LIBC U sched_get_priority_min@LIBC U sched_getaffinity@LIBC U sched_getparam@LIBC U sched_getscheduler@LIBC U sched_rr_get_interval@LIBC U sched_setaffinity@LIBC U sched_setparam@LIBC U sched_setscheduler@LIBC U sched_yield@LIBC U select@LIBC U sendfile64@LIBC U setbuf@LIBC U setegid@LIBC U setenv@LIBC U seteuid@LIBC U setgid@LIBC U setgroups@LIBC U setitimer@LIBC U setlocale@LIBC U setpgid@LIBC U setpgrp@LIBC U setpriority@LIBC U setregid@LIBC U setresgid@LIBC U setresuid@LIBC U setreuid@LIBC U setrlimit@LIBC U setsid@LIBC U setuid@LIBC U setvbuf@LIBC U sigaction@LIBC U sigaddset@LIBC U sigaltstack@LIBC U sigemptyset@LIBC U sigfillset@LIBC U siginterrupt@LIBC U sigismember@LIBC U sigpending@LIBC U sigtimedwait@LIBC U sigwait@LIBC U sigwaitinfo@LIBC U sincos@LIBC U sprintf@LIBC U stat@LIBC U statvfs@LIBC U stderr@LIBC U stdin@LIBC U stdout@LIBC U strchr@LIBC U strcmp@LIBC U strcpy@LIBC U strcspn@LIBC U strerror@LIBC U strftime@LIBC U strlen@LIBC U strncmp@LIBC U strncpy@LIBC U strrchr@LIBC U strsignal@LIBC U strstr@LIBC U strtol@LIBC U strtoul@LIBC U symlink@LIBC U symlinkat@LIBC U sync@LIBC U syscall@LIBC U sysconf@LIBC U system@LIBC U tcgetpgrp@LIBC U tcsetpgrp@LIBC U time@LIBC U times@LIBC U tolower@LIBC U toupper@LIBC U truncate64@LIBC U ttyname_r@LIBC U tzname@LIBC U umask@LIBC U uname@LIBC U ungetc@LIBC U unlink@LIBC U unlinkat@LIBC U unsetenv@LIBC U utimensat@LIBC U vfprintf@LIBC U vsnprintf@LIBC U wait@LIBC U wait4@LIBC U waitid@LIBC U waitpid@LIBC U wcscat@LIBC U wcschr@LIBC U wcscmp@LIBC U wcscoll@LIBC U wcscpy@LIBC U wcslen@LIBC U wcsncat@LIBC U wcsncmp@LIBC U wcsncpy@LIBC U wcsrchr@LIBC U wcstok@LIBC U wcstol@LIBC U wcstombs@LIBC U wcsxfrm@LIBC U wmemcmp@LIBC U write@LIBC U writev@LIBC
Hmm.. I don't see the numpy symbols in there, honestly.
Here is one article that sort of mirrors what we are trying to do:
https://stackoverflow.com/questions/46984168/static-linking-python-library-to-c-c-with-numpy
I tried something else:
(importlib/import_module "numpy")
Show: Project-Only All Hide: Clojure Java REPL Tooling Duplicates (13 frames hidden)
Unhandled java.lang.Exception
Traceback (most recent call last): File
"/data/data/com.termux/files/usr/lib/python3.9/site-packages/numpy-1.19.4-py3.9-linux-armv8l.egg/numpy/core/init.py",
line 22, in
Yes, that is telling us that things aren't finding the shared libraries they need to find. Something is off and we need to find those libraries and update the LD_LIBRARY_PATH variable.
I am having this issue as well, running via lein on Windows. It pops up only when I try to import libpython-clj2.require.
Incidentally, when I checked "java.library.path", I noticed that the prefixed python-path was "C:\\path\\to\\python\\lib:C:\\...\\OpenJDK\\jdk-17.0.1\\bin;C:\\...;"
and so on.
Note the colon at the end of the added prefix, added by libpython-clj2.python.ffi/append-java-library-path!
. I would expect that to be a semicolon instead, considering the format of the rest of the path. Could this be the issue preventing detection of the Python library?
The first questions I have is is there are a python shared library on the system at all. Is there libpython.dll or something like that? Python can be compiled as a single static executable so there isn't necessarily always a shared library to load in the first place.
I can see a python3.dll and a python310.dll in the Python310 folder. Nothing called "libpython.dll" in there or any of its subfolders, though.
Incidentally, the path to Python310 was itself being directly appended to the java path (along with the colon at the end), rather than any individual file.
The normal windows directory separator in the path variable is a semi-colon as the colon is used as a drive separator.
What is the full output of the failed initialization?
Sorry, was distracted by some non-Clojure work the past few days.
Here's the code and corresponding output.
EDIT: Just a note, my use of the word "colon" was intentional. The library path (accessed with (System/getProperty)) starts with
"C:\\Python310\\lib:C:\\Python310\\lib:C:\\Program Files\\OpenJDK\\jdk-17.0.1\\bin;C:\\"
whereas I would have expected
"C:\\Python310\\lib;C:\\Python310\\lib;C:\\Program Files\\OpenJDK\\jdk-17.0.1\\bin;C:\\"
Code :
(ns
...
(:require
...
[libpython-clj2.python :as py]
...
))
...
(require '[libpython-clj2.python :refer [py. py.. py.-] :as py])
(py/initialize!)
(require '[libpython-clj2.require :refer [require-python] :as py-require])
(require-python '[numpy :as np])
(defn numpy-test []
(->>
(np/array [1 2 3 5 4 3 1])
np/unique))
...
Error output:
2. Unhandled clojure.lang.Compiler$CompilerException
Error compiling .../core.clj at (114:1)
#:clojure.error{:phase :compile-syntax-check,
:line 114,
:column 1,
:source
".../core.clj"}
Compiler.java: 7652 clojure.lang.Compiler/load
REPL: 1 clojure-main.core/eval107268
REPL: 1 clojure-main.core/eval107268
Compiler.java: 7181 clojure.lang.Compiler/eval
Compiler.java: 7136 clojure.lang.Compiler/eval
core.clj: 3202 clojure.core/eval
core.clj: 3198 clojure.core/eval
interruptible_eval.clj: 87 nrepl.middleware.interruptible-eval/evaluate/fn/fn
AFn.java: 152 clojure.lang.AFn/applyToHelper
AFn.java: 144 clojure.lang.AFn/applyTo
core.clj: 667 clojure.core/apply
core.clj: 1977 clojure.core/with-bindings*
core.clj: 1977 clojure.core/with-bindings*
RestFn.java: 425 clojure.lang.RestFn/invoke
interruptible_eval.clj: 87 nrepl.middleware.interruptible-eval/evaluate/fn
main.clj: 437 clojure.main/repl/read-eval-print/fn
main.clj: 437 clojure.main/repl/read-eval-print
main.clj: 458 clojure.main/repl/fn
main.clj: 458 clojure.main/repl
main.clj: 368 clojure.main/repl
RestFn.java: 1523 clojure.lang.RestFn/invoke
interruptible_eval.clj: 84 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 56 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 152 nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
AFn.java: 22 clojure.lang.AFn/run
session.clj: 218 nrepl.middleware.session/session-exec/main-loop/fn
session.clj: 217 nrepl.middleware.session/session-exec/main-loop
AFn.java: 22 clojure.lang.AFn/run
Thread.java: 833 java.lang.Thread/run
1. Caused by java.lang.Exception
Failed to find a valid python library!
python.clj: 87 libpython-clj2.python/initialize!
python.clj: 46 libpython-clj2.python/initialize!
RestFn.java: 397 clojure.lang.RestFn/invoke
core.clj: 114 clojure-main.core/eval107288
core.clj: 114 clojure-main.core/eval107288
Compiler.java: 7181 clojure.lang.Compiler/eval
Compiler.java: 7640 clojure.lang.Compiler/load
REPL: 1 clojure-main.core/eval107268
REPL: 1 clojure-main.core/eval107268
Compiler.java: 7181 clojure.lang.Compiler/eval
Compiler.java: 7136 clojure.lang.Compiler/eval
core.clj: 3202 clojure.core/eval
core.clj: 3198 clojure.core/eval
interruptible_eval.clj: 87 nrepl.middleware.interruptible-eval/evaluate/fn/fn
AFn.java: 152 clojure.lang.AFn/applyToHelper
AFn.java: 144 clojure.lang.AFn/applyTo
core.clj: 667 clojure.core/apply
core.clj: 1977 clojure.core/with-bindings*
core.clj: 1977 clojure.core/with-bindings*
RestFn.java: 425 clojure.lang.RestFn/invoke
interruptible_eval.clj: 87 nrepl.middleware.interruptible-eval/evaluate/fn
main.clj: 437 clojure.main/repl/read-eval-print/fn
main.clj: 437 clojure.main/repl/read-eval-print
main.clj: 458 clojure.main/repl/fn
main.clj: 458 clojure.main/repl
main.clj: 368 clojure.main/repl
RestFn.java: 1523 clojure.lang.RestFn/invoke
interruptible_eval.clj: 84 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 56 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 152 nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
AFn.java: 22 clojure.lang.AFn/run
session.clj: 218 nrepl.middleware.session/session-exec/main-loop/fn
session.clj: 217 nrepl.middleware.session/session-exec/main-loop
AFn.java: 22 clojure.lang.AFn/run
Thread.java: 833 java.lang.Thread/run
I meant the output of the info process, so the stdout of the program not just the exception trace - the python info pathway tells us a lot of information. For example on my computer:
user> (py/initialize!)
Jan 14, 2022 6:43:49 AM clojure.tools.logging$eval5948$fn__5951 invoke
INFO: Detecting startup info
Jan 14, 2022 6:43:49 AM clojure.tools.logging$eval5948$fn__5951 invoke
INFO: Startup info {:lib-version "3.9", :java-library-path-addendum "/home/chrisn/miniconda3/lib", :exec-prefix "/home/chrisn/miniconda3", :executable "/home/chrisn/miniconda3/bin/python3", :libnames ("python3.9m" "python3.9"), :prefix "/home/chrisn/miniconda3", :base-prefix "/home/chrisn/miniconda3", :libname "python3.9m", :base-exec-prefix "/home/chrisn/miniconda3", :python-home "/home/chrisn/miniconda3", :version [3 9 1], :platform "linux"}
Jan 14, 2022 6:43:49 AM clojure.tools.logging$eval5948$fn__5951 invoke
INFO: Prefixing java library path: /home/chrisn/miniconda3/lib
Jan 14, 2022 6:43:50 AM clojure.tools.logging$eval5948$fn__5951 invoke
INFO: Loading python library: python3.9
Jan 14, 2022 6:43:50 AM clojure.tools.logging$eval5948$fn__5951 invoke
INFO: Reference thread starting
:ok
Let's try calling initialize! directly before calling require-python and passing in the library path explicitly - note there are a host of options there.
It is really encouraging that you have the shared library on the system. So we know we should be able to load it. One issue with require-python is it needs to scan the metadata of the module and thus it calls initialize! itself automatically and often this works fine but when it doesn't work it means the user needs to call initialize! manually before require-python is called.
Well, I don't think our problems are identical, and maybe I have missed something from the instructions, but in my setup, the namespace libpython-clj2.metadata
can not be found as well.
I run python3.9 via anaconda, and initialize libpython in this way:
(py/initialize! :python-executable "/home/empy/anaconda3/bin/python3.9"
:library-path "home/empy/anaconda3/lib/libpython3.9.so")
this works. But whenever I try to (require '[libpython-clj2.require :refer [require-python]])
I get the following:
2. Unhandled clojure.lang.Compiler$CompilerException
Error compiling libpython_clj2/require.clj at (1:1)
#:clojure.error{:phase :compile-syntax-check,
:line 1,
:column 1,
:source "libpython_clj2/require.clj"}
1. Caused by java.lang.Exception
namespace 'libpython-clj2.metadata' not found
Well, I don't think our problems are identical, and maybe I have missed something from the instructions, but in my setup, the namespace
libpython-clj2.metadata
can not be found as well.I run python3.9 via anaconda, and initialize libpython in this way:
(py/initialize! :python-executable "/home/empy/anaconda3/bin/python3.9" :library-path "home/empy/anaconda3/lib/libpython3.9.so")
this works. But whenever I try to
(require '[libpython-clj2.require :refer [require-python]])
I get the following:2. Unhandled clojure.lang.Compiler$CompilerException Error compiling libpython_clj2/require.clj at (1:1) #:clojure.error{:phase :compile-syntax-check, :line 1, :column 1, :source "libpython_clj2/require.clj"} 1. Caused by java.lang.Exception namespace 'libpython-clj2.metadata' not found
@Empyreans this is probably a separate issue, possibly related to some others. Could you open a new ticket for it so we can make sure you get the help you're looking for?
The metadata namespace works by first importing a set of python modules. It may be that those modules do not exist or are missing an api.
What happens if, after initialization, you manually call these methods - https://github.com/clj-python/libpython-clj/blob/master/src/libpython_clj2/metadata.clj#L20
(def builtins (import-module "builtins"))
(def inspect (import-module "inspect"))
(def argspec (get-attr inspect "getfullargspec"))
(def py-source (get-attr inspect "getsource"))
(def py-sourcelines (get-attr inspect "getsourcelines"))
(def py-file (get-attr inspect "getfile"))
(def types (import-module "types"))
(def fn-type
(call-attr builtins "tuple"
[(get-attr types "FunctionType")
(get-attr types "BuiltinFunctionType")]))
(def method-type
(call-attr builtins "tuple"
[(get-attr types "MethodType")
(get-attr types "BuiltinMethodType")]))
(def isinstance? (get-attr builtins "isinstance"))
(def fn? #(isinstance? % fn-type))
(def method? #(isinstance? % method-type))
(def doc #(try
(get-attr % "__doc__")
(catch Exception e
"")))
(def get-pydoc doc)
(def vars (get-attr builtins "vars"))
(def pyclass? (get-attr inspect "isclass"))
(def pymodule? (get-attr inspect "ismodule"))
(def importlib (py/import-module "importlib"))
(def importlib_util (import-module "importlib.util"))
(def reload-module (py/get-attr importlib "reload"))
If all that loads after the initialize! call then I really can't see why the metadata namespace would not load.
libpython-clj
project.clj: (defproject pycloj "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license {:name "EPL-2.0 OR GPL-2.0-or-la\ ter WITH Classpath-exception-2.0" :url "https://www.eclipse.org/l\ egal/epl-2.0/"} :dependencies [[org.clojure/clojure "1.10\ .2"] [clj-python/libpython-clj \ "2.00-beta-10"] ] :repl-options {:init-ns pycloj.core})
core.clj:
(ns pycloj.core (:require [libpython-clj2.python :as py] [libpython-clj2.require :refer [require-python]]))
Syntax error compiling at (libpython_clj2/require.clj:1:1). namespace 'libpython-clj2.metadata' not found
Running on Samsung A10 32bit termux terminal session
java --version openjdk 14.0.2 2020-07-14 OpenJDK Runtime Environment AdoptOpenJDK (build 14.0.2+12) OpenJDK Server VM AdoptOpenJDK (build 14.0.2+12, mixed mode, sharing)