Changeset: 02f7e275d499 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=02f7e275d499
Modified Files:
        monetdb5/extras/pyapi/Tests/pyapi_modify_input.stable.err
        monetdb5/extras/pyapi/Tests/pyapi_numpy_numeric_nested.stable.out
        monetdb5/extras/pyapi/Tests/pyapi_returntypes.stable.err
        monetdb5/extras/pyapi/Tests/pyapi_types_huge.stable.err
        monetdb5/extras/pyapi/Tests/pyapi_types_numeric.stable.err
        monetdb5/extras/pyapi/Tests/pyapi_types_numeric.stable.out
        monetdb5/extras/pyapi/pyapi.c
        monetdb5/extras/pyapi/type_conversion.c
        monetdb5/extras/pyapi/type_conversion.h
        monetdb5/extras/pyapi/unicode.c
        monetdb5/extras/pyapi/unicode.h
        sql/backends/monet5/Tests/pyapi10.stable.err
        sql/backends/monet5/Tests/pyapi10.stable.out
        sql/backends/monet5/Tests/pyapi11.stable.out
Branch: pyapi
Log Message:

Fix for different compilers.


diffs (truncated from 468 to 300 lines):

diff --git a/monetdb5/extras/pyapi/Tests/pyapi_modify_input.stable.err 
b/monetdb5/extras/pyapi/Tests/pyapi_modify_input.stable.err
--- a/monetdb5/extras/pyapi/Tests/pyapi_modify_input.stable.err
+++ b/monetdb5/extras/pyapi/Tests/pyapi_modify_input.stable.err
@@ -31,23 +31,23 @@ stderr of test 'pyapi_modify_input` in d
 # 12:27:29 >  "mclient" "-lmal" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-30203" "--port=31030"
 # 12:27:29 >  
 
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = rstr:bat[:oid,:str] := 
pyapi.eval(nil:ptr,"arg1[0][0]='d'\nreturn(arg1)",bstr);
 ERROR = !MALException:pyapi.eval:Python exception
         !This ByteArray references to a BAT in the database, you may not 
assign to it.
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = rstr:bat[:oid,:str] := 
pyapi.eval(nil:ptr,"arg1[0].reverse()\nreturn(arg1)",bstr);
 ERROR = !MALException:pyapi.eval:Python exception
         !This ByteArray references to a BAT in the database, you may not 
reverse it.
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = rstr:bat[:oid,:str] := pyapi.eval(nil:ptr,"a = 
arg1[0].remove('a')\nreturn(arg1)",bstr);
 ERROR = !MALException:pyapi.eval:Python exception
         !This ByteArray references to a BAT in the database, you may not 
remove anything from it.
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = rstr:bat[:oid,:str] := pyapi.eval(nil:ptr,"a = 
arg1[0].pop()\nreturn(arg1)",bstr);
 ERROR = !MALException:pyapi.eval:Python exception
         !This ByteArray references to a BAT in the database, you may not 
remove anything from it.
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = result:bat[:oid,:int] := pyapi.eval(nil:ptr, 
"arg1[0]=4\nreturn(arg1)", a);
 ERROR = !MALException:pyapi.eval:Python exception
         !assignment destination is read-only
diff --git a/monetdb5/extras/pyapi/Tests/pyapi_numpy_numeric_nested.stable.out 
b/monetdb5/extras/pyapi/Tests/pyapi_numpy_numeric_nested.stable.out
--- a/monetdb5/extras/pyapi/Tests/pyapi_numpy_numeric_nested.stable.out
+++ b/monetdb5/extras/pyapi/Tests/pyapi_numpy_numeric_nested.stable.out
@@ -30,27 +30,27 @@ Ready.
 # h    t  # name
 # void dbl  # type
 #--------------------------#
-[ 0@0, 1       ]
-[ 1@0, 11      ]
-[ 2@0, 4       ]
-[ 3@0, 67      ]
-[ 4@0, 92      ]
+[ 0@0, 1.96    ]
+[ 1@0, 11.56   ]
+[ 2@0, 4.41    ]
+[ 3@0, 67.24   ]
+[ 4@0, 92.16   ]
 #io.print(a);
 #--------------------------#
 # h    t  # name
 # void dbl  # type
 #--------------------------#
-[ 0@0, 1       ]
-[ 1@0, 3       ]
-[ 2@0, 2       ]
-[ 3@0, 8       ]
-[ 4@0, 9       ]
+[ 0@0, 1.4     ]
+[ 1@0, 3.4     ]
+[ 2@0, 2.1     ]
+[ 3@0, 8.2     ]
+[ 4@0, 9.6     ]
 #io.print(x);
 #--------------------------#
 # h    t  # name
 # void dbl  # type
 #--------------------------#
-[ 0@0, 546183377       ]
+[ 0@0, 546183377.8     ]
 #io.print(s);
 #--------------------------#
 # h    t  # name
diff --git a/monetdb5/extras/pyapi/Tests/pyapi_returntypes.stable.err 
b/monetdb5/extras/pyapi/Tests/pyapi_returntypes.stable.err
--- a/monetdb5/extras/pyapi/Tests/pyapi_returntypes.stable.err
+++ b/monetdb5/extras/pyapi/Tests/pyapi_returntypes.stable.err
@@ -31,34 +31,34 @@ stderr of test 'pyapi_returntypes` in di
 # 23:33:07 >  "mclient" "-lmal" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-20340" "--port=36739"
 # 23:33:07 >  
 
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = r:bat[:oid,:int] := pyapi.eval(nil:ptr,"return(\"Test\")");
 ERROR = !MALException:pyapi.eval:Could not convert from type STRING to type int
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = (r:bat[:oid,:int], s:bat[:oid,:int]) := pyapi.eval(nil:ptr,"class 
NewClass:\n x = 5\n\nreturn(NewClass())");
 ERROR = !MALException:pyapi.eval:Unsupported result object. Expected either an 
array, a numpy array, a numpy masked array or a pandas data frame, but received 
an object of type "<type 'instance'>"
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = (r:bat[:oid,:int], s:bat[:oid,:int]) := 
pyapi.eval(nil:ptr,"return(12)");
 ERROR = !MALException:pyapi.eval:A single scalar was returned, yet we expect a 
list of 2 columns. We can only convert a single scalar into a single column, 
thus the result is invalid.
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = (r:bat[:oid,:int], s:bat[:oid,:int]) := 
pyapi.eval(nil:ptr,"return(numpy.array([12]))");
 ERROR = !MALException:pyapi.eval:A single array was returned, yet we expect a 
list of 2 columns. The result is invalid.
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = (r:bat[:oid,:int], s:bat[:oid,:int]) := 
pyapi.eval(nil:ptr,"return([12])");
 ERROR = !MALException:pyapi.eval:A single array was returned, yet we expect a 
list of 2 columns. The result is invalid.
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = r:bat[:oid,:int] := pyapi.eval(nil:ptr,"return([[33,24,55], 
[44,66,345]])");
 ERROR = !MALException:pyapi.eval:An array of size 2 was returned, yet we 
expect a list of 1 columns. The result is invalid.
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = a:bat[:oid,:str] := pyapi.eval(nil:ptr,"x = 
unicode(\"hello\")\nreturn(x.encode(\"utf32\"))");
 ERROR = !MALException:pyapi.eval:Invalid string encoding used. Please return a 
regular ASCII string, or a Numpy_Unicode object.
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = bb:bat[:oid,:int] := pyapi.eval(nil:ptr,"return (1");
 ERROR = !MALException:pyapi.eval:Could not parse Python code
         !  1. def pyfun():
         !> 2.     return (1
         !invalid syntax (<string>, line 2)
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = cc:bat[:oid,:int] := pyapi.eval(nil:ptr,"x = 4\n  x++\n\treturn (x)");
 ERROR = !MALException:pyapi.eval:Could not parse Python code
         !  1. def pyfun():
@@ -66,10 +66,10 @@ ERROR = !MALException:pyapi.eval:Could n
         !> 3.         x++
         !  4.             return (x)
         !unexpected indent (<string>, line 3)
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = (str1:bat[:oid,:str], str2:bat[:oid,:str]) := pyapi.eval(nil:ptr,"x = 
unicode(\"hello\")\nreturn(numpy.array([[x.encode(\"utf32\")], 
[x.encode(\"utf32\")]]))");
 ERROR = !MALException:pyapi.eval:Invalid string encoding used. Please return a 
regular ASCII string, or a Numpy_Unicode object.
-MAPI  = (monetdb) /var/tmp/mtest-30203/.s.monetdb.31030
+MAPI  = (monetdb) /var/tmp/mtest-10930/.s.monetdb.36894
 QUERY = (str1:bat[:oid,:str], str2:bat[:oid,:str]) := 
pyapi.eval(nil:ptr,"return(numpy.array([[\"Hëllo\", \"Hello Again\"], [\"Hello 
Again Again\",\"That's quite enough.\"]]))");
 ERROR = !MALException:pyapi.eval:Invalid string encoding used. Please return a 
regular ASCII string, or a Numpy_Unicode object.
 
diff --git a/monetdb5/extras/pyapi/Tests/pyapi_types_huge.stable.err 
b/monetdb5/extras/pyapi/Tests/pyapi_types_huge.stable.err
--- a/monetdb5/extras/pyapi/Tests/pyapi_types_huge.stable.err
+++ b/monetdb5/extras/pyapi/Tests/pyapi_types_huge.stable.err
@@ -26,14 +26,6 @@ stderr of test 'pyapi_types_huge` in dir
 # cmdline opt  embedded_r = true
 # cmdline opt  embedded_py = true
 # cmdline opt  gdk_debug = 536870922
-!PERFORMANCE WARNING: Type "hge" (128 bit) is unsupported by Numpy. The 
numbers are instead converted to python objects of type "PyLong". This means a 
python object is constructed for every huge integer and the entire column is 
copied.
-!PERFORMANCE WARNING: Type "hge" (128 bit) is unsupported by Numpy. The 
numbers are instead converted to python objects of type "PyLong". This means a 
python object is constructed for every huge integer and the entire column is 
copied.
-!PERFORMANCE WARNING: Type "hge" (128 bit) is unsupported by Numpy. The 
numbers are instead converted to python objects of type "PyLong". This means a 
python object is constructed for every huge integer and the entire column is 
copied.
-!PERFORMANCE WARNING: Type "hge" (128 bit) is unsupported by Numpy. The 
numbers are instead converted to python objects of type "PyLong". This means a 
python object is constructed for every huge integer and the entire column is 
copied.
-!PERFORMANCE WARNING: Type "hge" (128 bit) is unsupported by Numpy. The 
numbers are instead converted to python objects of type "PyLong". This means a 
python object is constructed for every huge integer and the entire column is 
copied.
-!PERFORMANCE WARNING: Type "hge" (128 bit) is unsupported by Numpy. The 
numbers are instead converted to python objects of type "PyLong". This means a 
python object is constructed for every huge integer and the entire column is 
copied.
-!PERFORMANCE WARNING: Type "hge" (128 bit) is unsupported by Numpy. The 
numbers are instead converted to python objects of type "PyLong". This means a 
python object is constructed for every huge integer and the entire column is 
copied.
-!PERFORMANCE WARNING: Type "hge" (128 bit) is unsupported by Numpy. The 
numbers are instead converted to python objects of type "PyLong". This means a 
python object is constructed for every huge integer and the entire column is 
copied.
 
 # 00:29:47 >  
 # 00:29:47 >  "mclient" "-lmal" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-30800" "--port=32717"
diff --git a/monetdb5/extras/pyapi/Tests/pyapi_types_numeric.stable.err 
b/monetdb5/extras/pyapi/Tests/pyapi_types_numeric.stable.err
--- a/monetdb5/extras/pyapi/Tests/pyapi_types_numeric.stable.err
+++ b/monetdb5/extras/pyapi/Tests/pyapi_types_numeric.stable.err
@@ -26,7 +26,6 @@ stderr of test 'pyapi_types_numeric` in 
 # cmdline opt  embedded_r = true
 # cmdline opt  embedded_py = true
 # cmdline opt  gdk_debug = 536870922
-!PERFORMANCE WARNING: Type "hge" (128 bit) is unsupported by Numpy. The 
numbers are instead converted to python objects of type "PyLong". This means a 
python object is constructed for every huge integer and the entire column is 
copied.
 
 # 19:41:50 >  
 # 19:41:50 >  "mclient" "-lmal" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-7261" "--port=31934"
diff --git a/monetdb5/extras/pyapi/Tests/pyapi_types_numeric.stable.out 
b/monetdb5/extras/pyapi/Tests/pyapi_types_numeric.stable.out
--- a/monetdb5/extras/pyapi/Tests/pyapi_types_numeric.stable.out
+++ b/monetdb5/extras/pyapi/Tests/pyapi_types_numeric.stable.out
@@ -116,10 +116,10 @@ Ready.
 # h    t  # name
 # void dbl  # type
 #--------------------------#
-[ 0@0, 180428  ]
-[ 1@0, 84      ]
-[ 2@0, 168169  ]
-[ 3@0, 17146369        ]
+[ 0@0, 180428.9383     ]
+[ 1@0, 84.6930886      ]
+[ 2@0, 168169.2777     ]
+[ 3@0, 17146369.15     ]
 [ 4@0, nil     ]
 #io.print(rint);
 #--------------------------#
diff --git a/monetdb5/extras/pyapi/pyapi.c b/monetdb5/extras/pyapi/pyapi.c
--- a/monetdb5/extras/pyapi/pyapi.c
+++ b/monetdb5/extras/pyapi/pyapi.c
@@ -30,6 +30,7 @@
 #include "type_conversion.h"
 
 //#define _PYAPI_VERBOSE_
+//#define _PYAPI_WARNINGS_
 #define _PYAPI_DEBUG_
 
 #include <stdint.h>
@@ -59,6 +60,16 @@ const char* debug_enableflag = "enable_p
 #define VERBOSE_MESSAGE(...) ((void) 0)
 #endif
 
+#ifdef _PYAPI_WARNINGS_
+#define WARNING_MESSAGE(...) {   \
+    fprintf(stderr, __VA_ARGS__);        \
+    fflush(stdout);                   \
+}
+#else
+#define WARNING_MESSAGE(...) ((void) 0)
+#endif
+
+
 #define GDK_Alloc(var, size) { \
     var = GDKzalloc(size);  \
     if (var == NULL) { \
@@ -274,13 +285,13 @@ static int pyapiInitialized = FALSE;
             if (ret->numpy_array == NULL)                                      
                                                                                
\
             {                                                                  
                                                                                
\
                 /*shared memory return*/                                       
                                                                                
\
-                VERBOSE_MESSAGE("- Shared memory map!\n");                     
                                                                                
\
+                VERBOSE_MESSAGE("- Zero copy (shared memory)!\n");             
                                                                                
        \
                 BAT_MMAP(bat, mtpe, STORE_SHARED);                             
                                                                                
\
                 ret->array_data = NULL;                                        
                                                                                
\
             }                                                                  
                                                                                
\
             else                                                               
                                                                                
\
             {                                                                  
                                                                                
\
-                VERBOSE_MESSAGE("- Memory map!\n");                            
                                                                                
\
+                VERBOSE_MESSAGE("- Zero copy!\n");                             
                                                                               \
                 BAT_MMAP(bat, mtpe, STORE_CMEM);                               
                                                                                
\
             }                                                                  
                                                                                
\
         }                                                                      
                                                                                
\
@@ -288,6 +299,8 @@ static int pyapiInitialized = FALSE;
         {                                                                      
                                                                                
\
             bat = BATnew(TYPE_void, TYPE_##mtpe, ret->count, TRANSIENT);       
                                                                                
\
             BATseqbase(bat, seqbase); bat->T->nil = 0; bat->T->nonil = 1;      
                                                                                
\
+            if (TYPE_##mtpe != TYPE_hge) WARNING_MESSAGE("!PERFORMANCE 
WARNING: You are returning a Numpy Array of type %s, which has to be converted 
to a BAT of type %s. If you return a Numpy\
+Array of type %s no copying will be needed.\n", 
PyType_Format(ret->result_type), BatType_Format(TYPE_##mtpe), 
PyType_Format(BatType_ToPyType(TYPE_##mtpe))); \
             bat->tkey = 0; bat->tsorted = 0; bat->trevsorted = 0;              
                                                                                
\
             switch(ret->result_type)                                           
                                                                                
\
             {                                                                  
                                                                                
\
@@ -948,8 +961,6 @@ str PyAPIeval(MalBlkPtr mb, MalStkPtr st
                                 goto wrapup;
                             }
                             PyArray_SETITEM((PyArrayObject*)vararray, 
PyArray_GETPTR1((PyArrayObject*)vararray, j), obj);
-                            //PyObject *obj2 = 
PyArray_GETITEM((PyArrayObject*)vararray, 
PyArray_GETPTR1((PyArrayObject*)vararray, j));
-                            //printf("%s\n", (PyStringObject*)obj2)
                         }
                         if (j == t_end) break;
                         j++;
@@ -975,7 +986,7 @@ str PyAPIeval(MalBlkPtr mb, MalStkPtr st
                     NULL);
 
                 j = 0;
-                fprintf(stderr, "!PERFORMANCE WARNING: Type \"hge\" (128 bit) 
is unsupported by Numpy. The numbers are instead converted to python objects of 
type \"PyLong\". This means a python object is constructed for every huge 
integer and the entire column is copied.\n");
+                WARNING_MESSAGE("!PERFORMANCE WARNING: Type \"hge\" (128 bit) 
is unsupported by Numpy. The numbers are instead converted to python objects of 
type \"PyLong\". This means a python object is constructed for every huge 
integer and the entire column is copied.\n");
                 BATloop(b, p, q) {
                     PyObject *obj;
                     const hge *t = (const hge *) BUNtail(li, p);
diff --git a/monetdb5/extras/pyapi/type_conversion.c 
b/monetdb5/extras/pyapi/type_conversion.c
--- a/monetdb5/extras/pyapi/type_conversion.c
+++ b/monetdb5/extras/pyapi/type_conversion.c
@@ -205,7 +205,7 @@ bool s_to_dbl(char *ptr, size_t size, db
 }
 
 
-bool utf32_to_lng(uint32_t *utf32, lng *value)
+bool utf32_to_lng(Py_UNICODE *utf32, lng *value)
 {
     size_t length = utf32_strlen(utf32);
     int i = length;
@@ -236,7 +236,7 @@ bool utf32_to_lng(uint32_t *utf32, lng *
     return true;
 }
 
-bool utf32_to_dbl(uint32_t *utf32, dbl *value)
+bool utf32_to_dbl(Py_UNICODE *utf32, dbl *value)
 {
     size_t length = utf32_strlen(utf32);
     int i = length;
@@ -268,7 +268,7 @@ bool utf32_to_dbl(uint32_t *utf32, dbl *
 }
 
 #ifdef HAVE_HGE
-bool utf32_to_hge(uint32_t *utf32, hge *value)
+bool utf32_to_hge(Py_UNICODE *utf32, hge *value)
 {
     size_t length = utf32_strlen(utf32);
     int i = length;
@@ -399,7 +399,7 @@ bool py_to_dbl(PyObject *ptr, dbl *value
     {                                                              \
         strval val;                                                \
         (void) size;                                               \
-        if (!utf32_to_##strval((uint32_t*)ptr, &val)) return false;         \
+        if (!utf32_to_##strval((Py_UNICODE*)ptr, &val)) return false;         \
         *value = (tpe)val;                                         \
         return true;                                               \
     }                                                              \
diff --git a/monetdb5/extras/pyapi/type_conversion.h 
b/monetdb5/extras/pyapi/type_conversion.h
--- a/monetdb5/extras/pyapi/type_conversion.h
+++ b/monetdb5/extras/pyapi/type_conversion.h
@@ -43,11 +43,11 @@ bool s_to_dbl(char *ptr, size_t size, db
 //! Converts a base-10 string to a lng value
 bool s_to_lng(char *ptr, size_t size, lng *value);
 //! Converts a base-10 utf32-encoded string to a lng value
-bool utf32_to_lng(uint32_t *utf32, lng *value);
+bool utf32_to_lng(Py_UNICODE *utf32, lng *value);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to