You seem to use a _really_ old version of gcc (2.91.57).
I think it came out in 1998 or 1999. Please use a newer version.

On Sat, Oct 22, 2016, Dion Oni wrote:
> Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 
> bit (Intel)] on win32
> Type "copyright", "credits" or "license()" for more information.
> >>> import theano.tensor as T
> WARNING (theano.gof.cmodule): OPTIMIZATION WARNING: Theano was not able to 
> find the g++ parameters that tune the compilation to your  specific CPU. 
> This can slow down the execution of Theano functions. Please submit the 
> following lines to Theano's mailing list so that we can fix this problem:
>  <generator object decode_iter at 0x04173E10>
> ===============================
> 00001    #include <Python.h>
> 00002    #include "theano_mod_helper.h"
> 00003    #include "structmember.h"
> 00004    #include <sys/time.h>
> 00005    
> 00006    #if PY_VERSION_HEX >= 0x03000000
> 00007    #include "numpy/npy_3kcompat.h"
> 00008    #define PyCObject_AsVoidPtr  NpyCapsule_AsVoidPtr
> 00009    #define PyCObject_GetDesc  NpyCapsule_GetDesc
> 00010    #define PyCObject_Check NpyCapsule_Check
> 00011    #endif
> 00012    
> 00013    #ifndef Py_TYPE
> 00014    #define Py_TYPE(obj) obj->ob_type
> 00015    #endif
> 00016    
> 00017    /**
> 00018    
> 00019    TODO: 
> 00020    - Check max supported depth of recursion
> 00021    - CLazyLinker should add context information to errors caught 
> during evaluation. Say what node we were on, add the traceback attached to 
> the node.
> 00022    - Clear containers of fully-useed intermediate results if allow_gc 
> is 1
> 00023    - Add timers for profiling
> 00024    - Add support for profiling space used.
> 00025    
> 00026    
> 00027      */
> 00028    static double pytime(const struct timeval * tv)
> 00029    {
> 00030      struct timeval t;
> 00031      if (!tv)
> 00032        {
> 00033          tv = &t;
> 00034          gettimeofday(&t, NULL);
> 00035        }
> 00036      return (double) tv->tv_sec + (double) tv->tv_usec / 1000000.0;
> 00037    }
> 00038    
> 00039    /**
> 00040      Helper routine to convert a PyList of integers to a c array of 
> integers.
> 00041      */
> 00042    static int unpack_list_of_ssize_t(PyObject * pylist, Py_ssize_t 
> **dst, Py_ssize_t *len,
> 00043                                      const char* kwname)
> 00044    {
> 00045      Py_ssize_t buflen, *buf;
> 00046      if (!PyList_Check(pylist))
> 00047        {
> 00048          PyErr_Format(PyExc_TypeError, "%s must be list", kwname);
> 00049          return -1;
> 00050        }
> 00051      assert (NULL == *dst);
> 00052      *len = buflen = PyList_Size(pylist);
> 00053      *dst = buf = (Py_ssize_t*)calloc(buflen, sizeof(Py_ssize_t));
> 00054      assert(buf);
> 00055      for (int ii = 0; ii < buflen; ++ii)
> 00056        {
> 00057          PyObject * el_i = PyList_GetItem(pylist, ii);
> 00058          Py_ssize_t n_i = PyNumber_AsSsize_t(el_i, PyExc_IndexError);
> 00059          if (PyErr_Occurred())
> 00060            {
> 00061              free(buf);
> 00062              *dst = NULL;
> 00063              return -1;
> 00064            }
> 00065          buf[ii] = n_i;
> 00066        }
> 00067      return 0;
> 00068    }
> 00069    
> 00070    /**
> 00071    
> 00072      CLazyLinker
> 00073    
> 00074    
> 00075      */
> 00076    typedef struct {
> 00077        PyObject_HEAD
> 00078        /* Type-specific fields go here. */
> 00079        PyObject * nodes; // the python list of nodes
> 00080        PyObject * thunks; // python list of thunks
> 00081        PyObject * pre_call_clear; //list of cells to clear on call.
> 00082        int allow_gc;
> 00083        Py_ssize_t n_applies;
> 00084        int n_vars;    // number of variables in the graph
> 00085        int * var_computed; // 1 or 0 for every variable
> 00086        PyObject ** var_computed_cells;
> 00087        PyObject ** var_value_cells;
> 00088        Py_ssize_t **dependencies; // list of vars dependencies for GC
> 00089        Py_ssize_t *n_dependencies;
> 00090    
> 00091        Py_ssize_t n_output_vars;
> 00092        Py_ssize_t * output_vars; // variables that *must* be 
> evaluated by call
> 00093    
> 00094        int * is_lazy; // 1 or 0 for every thunk
> 00095    
> 00096        Py_ssize_t * var_owner; // nodes[[var_owner[var_idx]]] is 
> var[var_idx]->owner
> 00097        int * var_has_owner; //  1 or 0
> 00098    
> 00099        Py_ssize_t * node_n_inputs;
> 00100        Py_ssize_t * node_n_outputs;
> 00101        Py_ssize_t ** node_inputs;
> 00102        Py_ssize_t ** node_outputs;
> 00103        Py_ssize_t * node_inputs_outputs_base; // node_inputs and 
> node_outputs point into this
> 00104        Py_ssize_t * node_n_prereqs;
> 00105        Py_ssize_t ** node_prereqs;
> 00106    
> 00107        Py_ssize_t * update_storage; // input cells to update with the 
> last outputs in output_vars
> 00108        Py_ssize_t n_updates;
> 00109    
> 00110        void ** thunk_cptr_fn;
> 00111        void ** thunk_cptr_data;
> 00112        PyObject * call_times;
> 00113        PyObject * call_counts;
> 00114        int do_timing;
> 00115        int need_update_inputs;
> 00116        int position_of_error; // -1 for no error, otw the index into 
> `thunks` that failed.
> 00117    } CLazyLinker;
> 00118    
> 00119    
> 00120    static void
> 00121    CLazyLinker_dealloc(PyObject* _self)
> 00122    {
> 00123      CLazyLinker* self = (CLazyLinker *) _self;
> 00124      free(self->thunk_cptr_fn);
> 00125      free(self->thunk_cptr_data);
> 00126    
> 00127      free(self->is_lazy);
> 00128    
> 00129      free(self->update_storage);
> 00130    
> 00131      if (self->node_n_prereqs)
> 00132        {
> 00133          for (int i = 0; i < self->n_applies; ++i)
> 00134            {
> 00135              free(self->node_prereqs[i]);
> 00136            }
> 00137        }
> 00138      free(self->node_n_prereqs);
> 00139      free(self->node_prereqs);
> 00140      free(self->node_inputs_outputs_base);
> 00141      free(self->node_n_inputs);
> 00142      free(self->node_n_outputs);
> 00143      free(self->node_inputs);
> 00144      free(self->node_outputs);
> 00145    
> 00146      if (self->dependencies)
> 00147        {
> 00148          for (int i = 0; i < self->n_vars; ++i)
> 00149            {
> 00150              free(self->dependencies[i]);
> 00151            }
> 00152          free(self->dependencies);
> 00153          free(self->n_dependencies);
> 00154        }
> 00155    
> 00156      free(self->var_owner);
> 00157      free(self->var_has_owner);
> 00158      free(self->var_computed);
> 00159      if (self->var_computed_cells)
> 00160        {
> 00161          for (int i = 0; i < self->n_vars; ++i)
> 00162            {
> 00163              Py_DECREF(self->var_computed_cells[i]);
> 00164              Py_DECREF(self->var_value_cells[i]);
> 00165            }
> 00166        }
> 00167      free(self->var_computed_cells);
> 00168      free(self->var_value_cells);
> 00169      free(self->output_vars);
> 00170    
> 00171      Py_XDECREF(self->nodes);
> 00172      Py_XDECREF(self->thunks);
> 00173      Py_XDECREF(self->call_times);
> 00174      Py_XDECREF(self->call_counts);
> 00175      Py_XDECREF(self->pre_call_clear);
> 00176      Py_TYPE(self)->tp_free((PyObject*)self);
> 00177    }
> 00178    static PyObject *
> 00179    CLazyLinker_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
> 00180    {
> 00181        CLazyLinker *self;
> 00182    
> 00183        self = (CLazyLinker *)type->tp_alloc(type, 0);
> 00184        if (self != NULL) {
> 00185          self->nodes = NULL;
> 00186          self->thunks = NULL;
> 00187          self->pre_call_clear = NULL;
> 00188    
> 00189          self->allow_gc = 1;
> 00190          self->n_applies = 0;
> 00191          self->n_vars = 0;
> 00192          self->var_computed = NULL;
> 00193          self->var_computed_cells = NULL;
> 00194          self->var_value_cells = NULL;
> 00195          self->dependencies = NULL;
> 00196          self->n_dependencies = NULL;
> 00197    
> 00198          self->n_output_vars = 0;
> 00199          self->output_vars = NULL;
> 00200    
> 00201          self->is_lazy = NULL;
> 00202    
> 00203          self->var_owner = NULL;
> 00204          self->var_has_owner = NULL;
> 00205    
> 00206          self->node_n_inputs = NULL;
> 00207          self->node_n_outputs = NULL;
> 00208          self->node_inputs = NULL;
> 00209          self->node_outputs = NULL;
> 00210          self->node_inputs_outputs_base = NULL;
> 00211          self->node_prereqs = NULL;
> 00212          self->node_n_prereqs = NULL;
> 00213    
> 00214          self->update_storage = NULL;
> 00215          self->n_updates = 0;
> 00216    
> 00217          self->thunk_cptr_data = NULL;
> 00218          self->thunk_cptr_fn = NULL;
> 00219          self->call_times = NULL;
> 00220          self->call_counts = NULL;
> 00221          self->do_timing = 0;
> 00222    
> 00223          self->need_update_inputs = 0;
> 00224          self->position_of_error = -1;
> 00225        }
> 00226        return (PyObject *)self;
> 00227    }
> 00228    
> 00229    static int
> 00230    CLazyLinker_init(CLazyLinker *self, PyObject *args, PyObject *kwds)
> 00231    {
> 00232        static char *kwlist[] = {
> 00233          (char*)"nodes",
> 00234          (char*)"thunks",
> 00235          (char*)"pre_call_clear",
> 00236          (char*)"allow_gc",
> 00237          (char*)"call_counts",
> 00238          (char*)"call_times",
> 00239          (char*)"compute_map_list",
> 00240          (char*)"storage_map_list",
> 00241          (char*)"base_input_output_list",
> 00242          (char*)"node_n_inputs",
> 00243          (char*)"node_n_outputs",
> 00244          (char*)"node_input_offset",
> 00245          (char*)"node_output_offset",
> 00246          (char*)"var_owner",
> 00247          (char*)"is_lazy_list",
> 00248          (char*)"output_vars",
> 00249          (char*)"node_prereqs",
> 00250          (char*)"node_output_size",
> 00251          (char*)"update_storage",
> 00252          (char*)"dependencies",
> 00253          NULL};
> 00254    
> 00255        PyObject *compute_map_list=NULL,
> 00256                 *storage_map_list=NULL,
> 00257                 *base_input_output_list=NULL,
> 00258                 *node_n_inputs=NULL,
> 00259                 *node_n_outputs=NULL,
> 00260                 *node_input_offset=NULL,
> 00261                 *node_output_offset=NULL,
> 00262                 *var_owner=NULL,
> 00263                 *is_lazy=NULL,
> 00264                 *output_vars=NULL,
> 00265                 *node_prereqs=NULL,
> 00266                 *node_output_size=NULL,
> 00267                 *update_storage=NULL,
> 00268                 *dependencies=NULL;
> 00269    
> 00270        assert(!self->nodes);
> 00271        if (! PyArg_ParseTupleAndKeywords(args, kwds, 
> "OOOiOOOOOOOOOOOOOOOO", kwlist,
> 00272                                          &self->nodes,
> 00273                                          &self->thunks,
> 00274                                          &self->pre_call_clear,
> 00275                                          &self->allow_gc,
> 00276                                          &self->call_counts,
> 00277                                          &self->call_times,
> 00278                                          &compute_map_list,
> 00279                                          &storage_map_list,
> 00280                                          &base_input_output_list,
> 00281                                          &node_n_inputs,
> 00282                                          &node_n_outputs,
> 00283                                          &node_input_offset,
> 00284                                          &node_output_offset,
> 00285                                          &var_owner,
> 00286                                          &is_lazy,
> 00287                                          &output_vars,
> 00288                                          &node_prereqs,
> 00289                                          &node_output_size,
> 00290                                          &update_storage,
> 00291                                          &dependencies
> 00292                                          ))
> 00293            return -1;
> 00294        Py_INCREF(self->nodes);
> 00295        Py_INCREF(self->thunks);
> 00296        Py_INCREF(self->pre_call_clear);
> 00297        Py_INCREF(self->call_counts);
> 00298        Py_INCREF(self->call_times);
> 00299    
> 00300        Py_ssize_t n_applies = PyList_Size(self->nodes);
> 00301    
> 00302        self->n_applies = n_applies;
> 00303        self->n_vars = PyList_Size(var_owner);
> 00304    
> 00305        if (PyList_Size(self->thunks) != n_applies) return -1;
> 00306        if (PyList_Size(self->call_counts) != n_applies) return -1;
> 00307        if (PyList_Size(self->call_times) != n_applies) return -1;
> 00308    
> 00309        // allocated and initialize thunk_cptr_data and thunk_cptr_fn
> 00310        if (n_applies)
> 00311          {
> 00312            self->thunk_cptr_data = (void**)calloc(n_applies, 
> sizeof(void*));
> 00313            self->thunk_cptr_fn = (void**)calloc(n_applies, 
> sizeof(void*));
> 00314            self->is_lazy = (int*)calloc(n_applies, sizeof(int));
> 00315            self->node_prereqs = (Py_ssize_t**)calloc(n_applies, 
> sizeof(Py_ssize_t*));
> 00316            self->node_n_prereqs = (Py_ssize_t*)calloc(n_applies, 
> sizeof(Py_ssize_t));
> 00317            assert(self->node_prereqs);
> 00318            assert(self->node_n_prereqs);
> 00319            assert(self->is_lazy);
> 00320            assert(self->thunk_cptr_fn);
> 00321            assert(self->thunk_cptr_data);
> 00322    
> 00323            for (int i = 0; i < n_applies; ++i)
> 00324              {
> 00325                PyObject * thunk = PyList_GetItem(self->thunks, i);
> 00326                //thunk is borrowed
> 00327                if (PyObject_HasAttrString(thunk, "cthunk"))
> 00328                  {
> 00329                    PyObject * cthunk = PyObject_GetAttrString(thunk, 
> "cthunk");
> 00330                    //new reference
> 00331                    assert (cthunk && PyCObject_Check(cthunk));
> 00332                    self->thunk_cptr_fn[i] = 
> PyCObject_AsVoidPtr(cthunk);
> 00333                    self->thunk_cptr_data[i] = 
> PyCObject_GetDesc(cthunk);
> 00334                    Py_DECREF(cthunk);
> 00335                    // cthunk is kept alive by membership in 
> self->thunks
> 00336                  }
> 00337    
> 00338                PyObject * el_i = PyList_GetItem(is_lazy, i);
> 00339                self->is_lazy[i] = PyNumber_AsSsize_t(el_i, NULL);
> 00340    
> 00341                /* now get the prereqs */
> 00342                el_i = PyList_GetItem(node_prereqs, i);
> 00343                assert (PyList_Check(el_i));
> 00344                self->node_n_prereqs[i] = PyList_Size(el_i);
> 00345                if (self->node_n_prereqs[i])
> 00346                  {
> 00347                    self->node_prereqs[i] = (Py_ssize_t*)malloc(
> 00348                                  
> PyList_Size(el_i)*sizeof(Py_ssize_t));
> 00349                    for (int j = 0; j < PyList_Size(el_i); ++j)
> 00350                      {
> 00351                        PyObject * el_ij = PyList_GetItem(el_i, j);
> 00352                        Py_ssize_t N = PyNumber_AsSsize_t(el_ij, 
> PyExc_IndexError);
> 00353                        if (PyErr_Occurred())
> 00354                          return -1;
> 00355                        // N < n. variables
> 00356                        assert(N < PyList_Size(var_owner));
> 00357                        self->node_prereqs[i][j] = N;
> 00358                      }
> 00359                  }
> 00360              }
> 00361          }
> 00362        if (PyList_Check(base_input_output_list))
> 00363          {
> 00364            Py_ssize_t n_inputs_outputs_base = 
> PyList_Size(base_input_output_list);
> 00365            self->node_inputs_outputs_base = 
> (Py_ssize_t*)calloc(n_inputs_outputs_base,sizeof(Py_ssize_t));
> 00366            assert(self->node_inputs_outputs_base);
> 00367            for (int i = 0; i < n_inputs_outputs_base; ++i)
> 00368              {
> 00369                PyObject *el_i = 
> PyList_GetItem(base_input_output_list, i);
> 00370                Py_ssize_t idx = PyNumber_AsSsize_t(el_i, 
> PyExc_IndexError);
> 00371                if (PyErr_Occurred()) return -1;
> 00372                self->node_inputs_outputs_base[i] = idx;
> 00373              }
> 00374            self->node_n_inputs = 
> (Py_ssize_t*)calloc(n_applies,sizeof(Py_ssize_t));
> 00375            assert(self->node_n_inputs);
> 00376            self->node_n_outputs = 
> (Py_ssize_t*)calloc(n_applies,sizeof(Py_ssize_t));
> 00377            assert(self->node_n_outputs);
> 00378            self->node_inputs = 
> (Py_ssize_t**)calloc(n_applies,sizeof(Py_ssize_t*));
> 00379            assert(self->node_inputs);
> 00380            self->node_outputs = 
> (Py_ssize_t**)calloc(n_applies,sizeof(Py_ssize_t*));
> 00381            assert(self->node_outputs);
> 00382            for (int i = 0; i < n_applies; ++i)
> 00383              {
> 00384                Py_ssize_t N;
> 00385                N = PyNumber_AsSsize_t(PyList_GetItem(node_n_inputs, 
> i),PyExc_IndexError);
> 00386                if (PyErr_Occurred()) return -1;
> 00387                assert (N <= n_inputs_outputs_base);
> 00388                self->node_n_inputs[i] = N;
> 00389                N = PyNumber_AsSsize_t(PyList_GetItem(node_n_outputs, 
> i),PyExc_IndexError);
> 00390                if (PyErr_Occurred()) return -1;
> 00391                assert (N <= n_inputs_outputs_base);
> 00392                self->node_n_outputs[i] = N;
> 00393                N = 
> PyNumber_AsSsize_t(PyList_GetItem(node_input_offset, i),PyExc_IndexError);
> 00394                if (PyErr_Occurred()) return -1;
> 00395                assert (N <= n_inputs_outputs_base);
> 00396                self->node_inputs[i] = 
> &self->node_inputs_outputs_base[N];
> 00397                N = 
> PyNumber_AsSsize_t(PyList_GetItem(node_output_offset, i),PyExc_IndexError);
> 00398                if (PyErr_Occurred()) return -1;
> 00399                assert (N <= n_inputs_outputs_base);
> 00400                self->node_outputs[i] = 
> &self->node_inputs_outputs_base[N];
> 00401              }
> 00402          }
> 00403        else
> 00404          {
> 00405            PyErr_SetString(PyExc_TypeError, "base_input_output_list 
> must be list");
> 00406            return -1;
> 00407          }
> 00408    
> 00409        // allocation for var_owner
> 00410        if (PyList_Check(var_owner))
> 00411          {
> 00412            self->var_owner = 
> (Py_ssize_t*)calloc(self->n_vars,sizeof(Py_ssize_t));
> 00413            self->var_has_owner = 
> (int*)calloc(self->n_vars,sizeof(int));
> 00414            self->var_computed = 
> (int*)calloc(self->n_vars,sizeof(int));
> 00415            self->var_computed_cells = 
> (PyObject**)calloc(self->n_vars,sizeof(PyObject*));
> 00416            self->var_value_cells = 
> (PyObject**)calloc(self->n_vars,sizeof(PyObject*));
> 00417            for (int i = 0; i < self->n_vars; ++i)
> 00418              {
> 00419                PyObject * el_i = PyList_GetItem(var_owner, i);
> 00420                if (el_i == Py_None)
> 00421                  {
> 00422                    self->var_has_owner[i] = 0;
> 00423                  }
> 00424                else
> 00425                  {
> 00426                    Py_ssize_t N = PyNumber_AsSsize_t(el_i, 
> PyExc_IndexError);
> 00427                    if (PyErr_Occurred()) return -1;
> 00428                    assert (N <= n_applies);
> 00429                    self->var_owner[i] = N;
> 00430                    self->var_has_owner[i] = 1;
> 00431                  }
> 00432                self->var_computed_cells[i] = 
> PyList_GetItem(compute_map_list, i);
> 00433                Py_INCREF(self->var_computed_cells[i]);
> 00434                self->var_value_cells[i] = 
> PyList_GetItem(storage_map_list, i);
> 00435                Py_INCREF(self->var_value_cells[i]);
> 00436              }
> 00437          }
> 00438        else
> 00439          {
> 00440            PyErr_SetString(PyExc_TypeError, "var_owner must be list");
> 00441            return -1;
> 00442          }
> 00443    
> 00444        if (dependencies != Py_None)
> 00445          {
> 00446            self->dependencies = (Py_ssize_t**)calloc(self->n_vars, 
> sizeof(Py_ssize_t *));
> 00447            self->n_dependencies = (Py_ssize_t*)calloc(self->n_vars, 
> sizeof(Py_ssize_t));
> 00448            assert(self->dependencies);
> 00449            assert(self->n_dependencies);
> 00450    
> 00451            for (int i = 0; i < self->n_vars; ++i)
> 00452              {
> 00453                PyObject *tmp = PyList_GetItem(dependencies, i);
> 00454                // refcounting - tmp is borrowed
> 00455                if (unpack_list_of_ssize_t(tmp, 
> &self->dependencies[i], &self->n_dependencies[i],
> 00456                                           "dependencies"))
> 00457                  return -1;
> 00458              }
> 00459          }
> 00460    
> 00461        if (unpack_list_of_ssize_t(output_vars, &self->output_vars, 
> &self->n_output_vars,
> 00462                                   "output_vars"))
> 00463          return -1;
> 00464        for (int i = 0; i < self->n_output_vars; ++i)
> 00465          {
> 00466            assert(self->output_vars[i] < self->n_vars);
> 00467          }
> 00468        if (unpack_list_of_ssize_t(update_storage, 
> &self->update_storage, &self->n_updates,
> 00469                                   "updates_storage"))
> 00470          return -1;
> 00471        return 0;
> 00472    }
> 00473    static void set_position_of_error(CLazyLinker * self, int 
> owner_idx)
> 00474    {
> 00475      if (self->position_of_error == -1)
> 00476        {
> 00477          self->position_of_error = owner_idx;
> 00478        }
> 00479    }
> 00480    static PyObject * pycall(CLazyLinker * self, Py_ssize_t node_idx, 
> int verbose)
> 00481    {
> 00482      // call thunk to see which inputs it wants
> 00483      PyObject * thunk = PyList_GetItem(self->thunks, node_idx);
> 00484      // refcounting - thunk is borrowed
> 00485      PyObject * rval = NULL;
> 00486      if (self->do_timing)
> 00487        {
> 00488          double t0 = pytime(NULL);
> 00489          if (verbose) fprintf(stderr, "calling via Python (node 
> %i)\n", (int)node_idx);
> 00490          rval = PyObject_CallObject(thunk, NULL);
> 00491          if (rval)
> 00492            {
> 00493              double t1 = pytime(NULL);
> 00494              double ti = PyFloat_AsDouble(
> 00495                             PyList_GetItem(self->call_times, 
> node_idx));
> 00496              PyList_SetItem(self->call_times, node_idx,
> 00497                             PyFloat_FromDouble(t1 - t0 + ti));
> 00498              PyObject * count = PyList_GetItem(self->call_counts, 
> node_idx);
> 00499              long icount = PyInt_AsLong(count);
> 00500              PyList_SetItem(self->call_counts, node_idx,
> 00501                             PyInt_FromLong(icount + 1));
> 00502          }
> 00503        }
> 00504      else
> 00505        {
> 00506          if (verbose)
> 00507            {
> 00508              fprintf(stderr, "calling via Python (node %i)\n", 
> (int)node_idx);
> 00509            }
> 00510          rval = PyObject_CallObject(thunk, NULL);
> 00511        }
> 00512      return rval;
> 00513    }
> 00514    static int c_call(CLazyLinker * self, Py_ssize_t node_idx, int 
> verbose)
> 00515    {
> 00516      void * ptr_addr = self->thunk_cptr_fn[node_idx];
> 00517      int (*fn)(void*) = (int (*)(void*))(ptr_addr);
> 00518      if (verbose) fprintf(stderr, "calling non-lazy shortcut (node 
> %i)\n", (int)node_idx);
> 00519      int err = 0;
> 00520      if (self->do_timing)
> 00521        {
> 00522          double t0 = pytime(NULL);
> 00523          err = fn(self->thunk_cptr_data[node_idx]);
> 00524          double t1 = pytime(NULL);
> 00525          double ti = 
> PyFloat_AsDouble(PyList_GetItem(self->call_times, node_idx));
> 00526          PyList_SetItem(self->call_times, node_idx, 
> PyFloat_FromDouble(t1 - t0 + ti));
> 00527          PyObject * count = PyList_GetItem(self->call_counts, 
> node_idx);
> 00528          long icount = PyInt_AsLong(count);
> 00529          PyList_SetItem(self->call_counts, node_idx, 
> PyInt_FromLong(icount+1));
> 00530        }
> 00531      else
> 00532        {
> 00533          err = fn(self->thunk_cptr_data[node_idx]);
> 00534        }
> 00535    
> 00536      if (err)
> 00537        {
> 00538          // cast the argument to a PyList (as described near line 226 
> of cc.py)
> 00539          PyObject * __ERROR = 
> ((PyObject**)self->thunk_cptr_data[node_idx])[0];
> 00540          assert (PyList_Check(__ERROR));
> 00541          assert (PyList_Size(__ERROR) == 3);
> 00542          PyObject * err_type = PyList_GetItem(__ERROR, 0); //stolen 
> ref
> 00543          PyObject * err_msg = PyList_GetItem(__ERROR, 1); //stolen ref
> 00544          PyObject * err_trace = PyList_GetItem(__ERROR, 2); //stolen 
> ref
> 00545          PyList_SET_ITEM(__ERROR, 0, Py_None); Py_INCREF(Py_None); 
> //clobbers old ref
> 00546          PyList_SET_ITEM(__ERROR, 1, Py_None); Py_INCREF(Py_None); 
> //clobbers old ref
> 00547          PyList_SET_ITEM(__ERROR, 2, Py_None); Py_INCREF(Py_None); 
> //clobbers old ref
> 00548    
> 00549          assert(!PyErr_Occurred()); // because CLinker hid the 
> exception in __ERROR aka data
> 00550          PyErr_Restore(err_type, err_msg, err_trace); //steals refs 
> to args
> 00551        }
> 00552      if (err) set_position_of_error(self, node_idx);
> 00553      return err;
> 00554    }
> 00555    static
> 00556    int lazy_rec_eval(CLazyLinker * self, Py_ssize_t var_idx, 
> PyObject*one, PyObject*zero)
> 00557    {
> 00558      PyObject *rval = NULL;
> 00559      int verbose = 0;
> 00560      int err = 0;
> 00561    
> 00562      if (verbose) fprintf(stderr, "lazy_rec computing %i\n", 
> (int)var_idx);
> 00563    
> 00564      if (self->var_computed[var_idx] || !self->var_has_owner[var_idx])
> 00565        return 0;
> 00566    
> 00567      Py_ssize_t owner_idx = self->var_owner[var_idx];
> 00568    
> 00569      // STEP 1: compute the pre-requirements of the node
> 00570      // Includes input nodes for non-lazy ops.
> 00571      for (int i = 0; i < self->node_n_prereqs[owner_idx]; ++i)
> 00572        {
> 00573          Py_ssize_t prereq_idx = self->node_prereqs[owner_idx][i];
> 00574          if (!self->var_computed[prereq_idx])
> 00575            {
> 00576              err = lazy_rec_eval(self, prereq_idx, one, zero);
> 00577              if (err) return err;
> 00578            }
> 00579          assert (self->var_computed[prereq_idx]);
> 00580        }
> 00581    
> 00582      // STEP 2: compute the node itself
> 00583      if (self->is_lazy[owner_idx])
> 00584        {
> 00585          // update the compute_map cells corresponding to the inputs 
> of this thunk
> 00586          for (int i = 0; i < self->node_n_inputs[owner_idx]; ++i)
> 00587            {
> 00588              int in_idx = self->node_inputs[owner_idx][i];
> 00589              if (self->var_computed[in_idx])
> 00590                {
> 00591                  Py_INCREF(one);
> 00592                  err = 
> PyList_SetItem(self->var_computed_cells[in_idx], 0, one);
> 00593                }
> 00594              else
> 00595                {
> 00596                  Py_INCREF(zero);
> 00597                  err = 
> PyList_SetItem(self->var_computed_cells[in_idx], 0, zero);
> 00598                }
> 00599              if (err) goto fail;
> 00600            }
> 00601    
> 00602          rval = pycall(self, owner_idx, verbose);
> 00603          // refcounting - rval is new ref
> 00604          //TODO: to prevent infinite loops
> 00605          // - consider check that a thunk does not ask for an input 
> that is already computed
> 00606          if (rval == NULL)
> 00607            {
> 00608              assert (PyErr_Occurred());
> 00609              err = 1;
> 00610              goto fail;
> 00611            }
> 00612    
> 00613          //update the computed-ness of any output cells
> 00614          for (int i = 0; i < self->node_n_outputs[owner_idx]; ++i)
> 00615            {
> 00616              int out_idx = self->node_outputs[owner_idx][i];
> 00617              PyObject * el_i = 
> PyList_GetItem(self->var_computed_cells[out_idx], 0);
> 00618              Py_ssize_t N = PyNumber_AsSsize_t(el_i, 
> PyExc_IndexError);
> 00619              if (PyErr_Occurred())
> 00620                {
> 00621                  err = -1;
> 00622                  goto pyfail;
> 00623                }
> 00624              assert (N==0 || N==1);
> 00625              self->var_computed[out_idx] = N;
> 00626            }
> 00627          if (!self->var_computed[var_idx])
> 00628            {
> 00629              /*
> 00630               * If self is not computed after the call, this means 
> that some
> 00631               * inputs are needed.  Compute the ones on the returned 
> list
> 00632               * and try to compute the current node again (with 
> recursive call).
> 00633               * This allows a node to request more nodes more than 
> once before
> 00634               * finally yielding a result.
> 00635               */
> 00636              if (!PyList_Check(rval))
> 00637                {
> 00638                  //TODO: More helpful error to help find *which node* 
> made this
> 00639                  // bad thunk
> 00640                  PyErr_SetString(PyExc_TypeError,
> 00641                                  "lazy thunk should return a list");
> 00642                  err = 1;
> 00643                  goto pyfail;
> 00644                }
> 00645    
> 00646              if (!PyList_Size(rval))
> 00647                {
> 00648                  PyErr_SetString(PyExc_ValueError,
> 00649                                  "lazy thunk returned empty list 
> without computing output");
> 00650                  err = 1;
> 00651                  goto pyfail;
> 00652                }
> 00653    
> 00654              for (int i = 0; i < PyList_Size(rval); ++i)
> 00655                {
> 00656                  PyObject * el_i = PyList_GetItem(rval, i);
> 00657                  Py_ssize_t N = PyNumber_AsSsize_t(el_i, 
> PyExc_IndexError);
> 00658                  if (PyErr_Occurred())
> 00659                    {
> 00660                      err = 1;
> 00661                      goto pyfail;
> 00662                    }
> 00663                  assert (N <= self->node_n_inputs[owner_idx]);
> 00664                  Py_ssize_t input_idx = 
> self->node_inputs[owner_idx][N];
> 00665                  err = lazy_rec_eval(self, input_idx, one, zero);
> 00666                  if (err) goto pyfail;
> 00667                }
> 00668    
> 00669              Py_DECREF(rval);
> 00670              /*
> 00671               * We intentionally skip all the end-of-function 
> processing
> 00672               * (mark outputs, GC) as it will be performed by the call
> 00673               * that actually manages to compute the result.
> 00674               */
> 00675              return lazy_rec_eval(self, var_idx, one, zero);
> 00676            }
> 00677    
> 00678          Py_DECREF(rval);
> 00679        }
> 00680      else //owner is not a lazy op. Ensure all intputs are evaluated.
> 00681        {
> 00682          // loop over inputs to owner
> 00683          // call lazy_rec_eval on each one that is not computed.
> 00684          // if there's an error, pass it up the stack
> 00685          for (int i = 0; i < self->node_n_inputs[owner_idx]; ++i)
> 00686            {
> 00687              Py_ssize_t input_idx = self->node_inputs[owner_idx][i];
> 00688              if (!self->var_computed[input_idx])
> 00689                {
> 00690                  err = lazy_rec_eval(self, input_idx, one, zero);
> 00691                  if (err) return err;
> 00692                }
> 00693              assert (self->var_computed[input_idx]);
> 00694            }
> 00695    
> 00696          // call the thunk for this owner.
> 00697          if (self->thunk_cptr_fn[owner_idx])
> 00698            {
> 00699              err = c_call(self, owner_idx, verbose);
> 00700              if (err) goto fail;
> 00701            }
> 00702          else
> 00703            {
> 00704              rval = pycall(self, owner_idx, verbose);
> 00705              //rval is new ref
> 00706              if (rval) //pycall returned normally (no exception)
> 00707                {
> 00708                  if (rval == Py_None)
> 00709                    {
> 00710                      Py_DECREF(rval); //ignore a return of None
> 00711                    }
> 00712                  else if (PyList_Check(rval))
> 00713                    {
> 00714                      PyErr_SetString(PyExc_TypeError,
> 00715                                      "non-lazy thunk should return 
> None, not list");
> 00716                      err = 1;
> 00717                      goto pyfail;
> 00718                    }
> 00719                  else // don't know what it returned, but it wasn't 
> right.
> 00720                    {
> 00721                      PyErr_SetObject(PyExc_TypeError, rval);
> 00722                      err = 1;
> 00723                      // We don't release rval since we put it in the 
> error above
> 00724                      goto fail;
> 00725                    }
> 00726                }
> 00727              else // pycall returned NULL (internal error)
> 00728                {
> 00729                  err = 1;
> 00730                  goto fail;
> 00731                }
> 00732            }
> 00733        }
> 00734    
> 00735      // loop over all outputs and mark them as computed
> 00736      for (int i = 0; i < self->node_n_outputs[owner_idx]; ++i)
> 00737        {
> 00738          self->var_computed[self->node_outputs[owner_idx][i]] = 1;
> 00739        }
> 00740    
> 00741      // Free vars that are not needed anymore
> 00742      if (self->allow_gc)
> 00743        {
> 00744          for (int i = 0; i < self->node_n_inputs[owner_idx]; ++i)
> 00745            {
> 00746              int cleanup = 1;
> 00747              Py_ssize_t i_idx = self->node_inputs[owner_idx][i];
> 00748              if (!self->var_has_owner[i_idx])
> 00749                continue;
> 00750    
> 00751              for (int j = 0; j < self->n_output_vars; ++j)
> 00752                {
> 00753                  if (i_idx == self->output_vars[j])
> 00754                    {
> 00755                      cleanup = 0;
> 00756                      break;
> 00757                    }
> 00758                }
> 00759              if (!cleanup) continue;
> 00760    
> 00761              for (int j = 0; j < self->n_dependencies[i_idx]; ++j)
> 00762                {
> 00763                  if 
> (!self->var_computed[self->dependencies[i_idx][j]])
> 00764                    {
> 00765                      cleanup = 0;
> 00766                      break;
> 00767                    }
> 00768                }
> 00769              if (!cleanup) continue;
> 00770    
> 00771              Py_INCREF(Py_None);
> 00772              err = PyList_SetItem(self->var_value_cells[i_idx], 0, 
> Py_None);
> 00773    //See the Stack gc implementation for why we change it to 2 and 
> not 0.
> 00774              self->var_computed[i_idx] = 2;
> 00775              if (err) goto fail;
> 00776            }
> 00777        }
> 00778    
> 00779      return 0;
> 00780     pyfail:
> 00781      Py_DECREF(rval);
> 00782     fail:
> 00783      set_position_of_error(self, owner_idx);
> 00784      return err;
> 00785    }
> 00786    
> 00787    static PyObject *
> 00788    CLazyLinker_call(PyObject *_self, PyObject *args, PyObject *kwds)
> 00789    {
> 00790      CLazyLinker * self = (CLazyLinker*)_self;
> 00791      static char *kwlist[] = {
> 00792        (char*)"time_thunks",
> 00793        (char *)"n_calls",
> 00794        NULL};
> 00795      int n_calls=1;
> 00796      if (! PyArg_ParseTupleAndKeywords(args, kwds, "|ii", kwlist,
> 00797                                        &self->do_timing,
> 00798                                        &n_calls))
> 00799        return NULL;
> 00800      int err = 0;
> 00801      self->position_of_error = -1;
> 00802      // create constants used to fill the var_compute_cells
> 00803      PyObject * one = PyInt_FromLong(1);
> 00804      PyObject * zero = PyInt_FromLong(0);
> 00805    
> 00806      // pre-allocate our return value
> 00807      Py_INCREF(Py_None);
> 00808      PyObject * rval = Py_None;
> 00809      //clear storage of pre_call_clear elements
> 00810      for (int call_i = 0; call_i < n_calls && (!err); ++call_i)
> 00811        {
> 00812          Py_ssize_t n_pre_call_clear = 
> PyList_Size(self->pre_call_clear);
> 00813          assert(PyList_Check(self->pre_call_clear));
> 00814          for (int i = 0; i < n_pre_call_clear; ++i)
> 00815            {
> 00816              PyObject * el_i = PyList_GetItem(self->pre_call_clear, 
> i);
> 00817              Py_INCREF(Py_None);
> 00818              PyList_SetItem(el_i, 0, Py_None);
> 00819            }
> 00820          //clear the computed flag out of all non-input vars
> 00821          for (int i = 0; i < self->n_vars; ++i)
> 00822            {
> 00823              self->var_computed[i] = !self->var_has_owner[i];
> 00824              if (self->var_computed[i])
> 00825                {
> 00826                  Py_INCREF(one);
> 00827                  PyList_SetItem(self->var_computed_cells[i], 0, one);
> 00828                }
> 00829              else
> 00830                {
> 00831                  Py_INCREF(zero);
> 00832                  PyList_SetItem(self->var_computed_cells[i], 0, zero);
> 00833                }
> 00834            }
> 00835    
> 00836          for (int i = 0; i < self->n_output_vars && (!err); ++i)
> 00837            {
> 00838              err = lazy_rec_eval(self, self->output_vars[i], one, 
> zero);
> 00839            }
> 00840    
> 00841          if (!err)
> 00842            {
> 00843              // save references to outputs prior to updating storage 
> containers
> 00844              assert (self->n_output_vars >= self->n_updates);
> 00845              Py_DECREF(rval);
> 00846              rval = PyList_New(self->n_output_vars);
> 00847              for (int i = 0; i < (self->n_output_vars); ++i)
> 00848                {
> 00849                  Py_ssize_t src = self->output_vars[i];
> 00850                  PyObject * item = 
> PyList_GetItem(self->var_value_cells[src], 0);
> 00851                  if (self->var_computed[src] != 1)
> 00852                    {
> 00853                      err = 1;
> 00854                      PyErr_Format(PyExc_AssertionError,
> 00855                                   "The compute map of output %d 
> should contain "
> 00856                                   "1 at the end of execution, not 
> %d.",
> 00857                                   i, self->var_computed[src]);
> 00858                      break;
> 00859                    }
> 00860                  Py_INCREF(item);
> 00861                  PyList_SetItem(rval, i, item);
> 00862                }
> 00863            }
> 00864    
> 00865          if (!err)
> 00866            {
> 00867              // Update the inputs that have an update rule
> 00868              for (int i = 0; i < self->n_updates; ++i)
> 00869                {
> 00870                  PyObject* tmp = PyList_GetItem(rval, 
> self->n_output_vars - self->n_updates + i);
> 00871                  Py_INCREF(tmp);
> 00872                  Py_ssize_t dst = self->update_storage[i];
> 00873                  PyList_SetItem(self->var_value_cells[dst], 0, tmp);
> 00874                }
> 00875            }
> 00876        }
> 00877    
> 00878      /*
> 00879        Clear everything that is left and not an output.  This is 
> needed
> 00880        for lazy evaluation since the current GC algo is too 
> conservative
> 00881        with lazy graphs.
> 00882      */
> 00883      if (self->allow_gc && !err)
> 00884        {
> 00885          for (Py_ssize_t i = 0; i < self->n_vars; ++i)
> 00886            {
> 00887              int do_cleanup = 1;
> 00888              if (!self->var_has_owner[i] || !self->var_computed[i])
> 00889                continue;
> 00890              for (int j = 0; j < self->n_output_vars; ++j)
> 00891                {
> 00892                  if (i == self->output_vars[j])
> 00893                    {
> 00894                      do_cleanup = 0;
> 00895                      break;
> 00896                    }
> 00897                }
> 00898              if (!do_cleanup)
> 00899                continue;
> 00900              Py_INCREF(Py_None);
> 00901              PyList_SetItem(self->var_value_cells[i], 0, Py_None);
> 00902            }
> 00903        }
> 00904      Py_DECREF(one);
> 00905      Py_DECREF(zero);
> 00906      if (err)
> 00907        {
> 00908          Py_DECREF(rval);
> 00909          return NULL;
> 00910        }
> 00911      return rval;
> 00912    }
> 00913    
> 00914    #if 0
> 00915    static PyMethodDef CLazyLinker_methods[] = {
> 00916        {
> 00917          //"name", (PyCFunction)CLazyLinker_accept, METH_VARARGS, 
> "Return the name, combining the first and last name"
> 00918        },
> 00919        {NULL}  /* Sentinel */
> 00920    };
> 00921    #endif
> 00922    
> 00923    
> 00924    static PyObject *
> 00925    CLazyLinker_get_allow_gc(CLazyLinker *self, void *closure)
> 00926    {
> 00927        return PyBool_FromLong(self->allow_gc);
> 00928    }
> 00929    
> 00930    static int
> 00931    CLazyLinker_set_allow_gc(CLazyLinker *self, PyObject *value, void 
> *closure)
> 00932    {
> 00933      if(!PyBool_Check(value))
> 00934        return -1;
> 00935    
> 00936      if (value == Py_True)
> 00937        self->allow_gc = true;
> 00938      else
> 00939        self->allow_gc = false;
> 00940      return 0;
> 00941    }
> 00942    
> 00943    static PyGetSetDef CLazyLinker_getset[] = {
> 00944      {(char*)"allow_gc",
> 00945       (getter)CLazyLinker_get_allow_gc,
> 00946       (setter)CLazyLinker_set_allow_gc,
> 00947       (char*)"do this function support allow_gc",
> 00948       NULL},
> 00949      {NULL, NULL, NULL, NULL}  /* Sentinel */
> 00950    };
> 00951    static PyMemberDef CLazyLinker_members[] = {
> 00952        {(char*)"nodes", T_OBJECT_EX, offsetof(CLazyLinker, nodes), 0,
> 00953         (char*)"list of nodes"},
> 00954        {(char*)"thunks", T_OBJECT_EX, offsetof(CLazyLinker, thunks), 
> 0,
> 00955         (char*)"list of thunks in program"},
> 00956        {(char*)"call_counts", T_OBJECT_EX, offsetof(CLazyLinker, 
> call_counts), 0,
> 00957         (char*)"number of calls of each thunk"},
> 00958        {(char*)"call_times", T_OBJECT_EX, offsetof(CLazyLinker, 
> call_times), 0,
> 00959         (char*)"total runtime in each thunk"},
> 00960        {(char*)"position_of_error", T_INT, offsetof(CLazyLinker, 
> position_of_error), 0,
> 00961         (char*)"position of failed thunk"},
> 00962        {(char*)"time_thunks", T_INT, offsetof(CLazyLinker, 
> do_timing), 0,
> 00963         (char*)"bool: nonzero means call will time thunks"},
> 00964        {(char*)"need_update_inputs", T_INT, offsetof(CLazyLinker, 
> need_update_inputs), 0,
> 00965         (char*)"bool: nonzero means Function.__call__ must implement 
> update mechanism"},
> 00966        {NULL}  /* Sentinel */
> 00967    };
> 00968    
> 00969    static PyTypeObject lazylinker_ext_CLazyLinkerType = {
> 00970    #if defined(NPY_PY3K)
> 00971        PyVarObject_HEAD_INIT(NULL, 0)
> 00972    #else
> 00973        PyObject_HEAD_INIT(NULL)
> 00974        0,                         /*ob_size*/
> 00975    #endif
> 00976        "lazylinker_ext.CLazyLinker",             /*tp_name*/
> 00977        sizeof(CLazyLinker), /*tp_basicsize*/
> 00978        0,                         /*tp_itemsize*/
> 00979        CLazyLinker_dealloc,       /*tp_dealloc*/
> 00980        0,                         /*tp_print*/
> 00981        0,                         /*tp_getattr*/
> 00982        0,                         /*tp_setattr*/
> 00983        0,                         /*tp_compare*/
> 00984        0,                         /*tp_repr*/
> 00985        0,                         /*tp_as_number*/
> 00986        0,                         /*tp_as_sequence*/
> 00987        0,                         /*tp_as_mapping*/
> 00988        0,                         /*tp_hash */
> 00989        CLazyLinker_call,          /*tp_call*/
> 00990        0,                         /*tp_str*/
> 00991        0,                         /*tp_getattro*/
> 00992        0,                         /*tp_setattro*/
> 00993        0,                         /*tp_as_buffer*/
> 00994        Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,        /*tp_flags*/
> 00995        "CLazyLinker object",      /* tp_doc */
> 00996        0,                         /* tp_traverse */
> 00997        0,                         /* tp_clear */
> 00998        0,                         /* tp_richcompare */
> 00999        0,                         /* tp_weaklistoffset */
> 01000        0,                         /* tp_iter */
> 01001        0,                         /* tp_iternext */
> 01002        0,//CLazyLinker_methods,       /* tp_methods */
> 01003        CLazyLinker_members,       /* tp_members */
> 01004        CLazyLinker_getset,        /* tp_getset */
> 01005        0,                         /* tp_base */
> 01006        0,                         /* tp_dict */
> 01007        0,                         /* tp_descr_get */
> 01008        0,                         /* tp_descr_set */
> 01009        0,                         /* tp_dictoffset */
> 01010        (initproc)CLazyLinker_init,/* tp_init */
> 01011        0,                         /* tp_alloc */
> 01012        CLazyLinker_new,           /* tp_new */
> 01013    };
> 01014    
> 01015    static PyObject * get_version(PyObject *dummy, PyObject *args)
> 01016    {
> 01017      PyObject *result = PyFloat_FromDouble(0.21);
> 01018      return result;
> 01019    }
> 01020    
> 01021    static PyMethodDef lazylinker_ext_methods[] = {
> 01022      {"get_version",  get_version, METH_VARARGS, "Get extension 
> version."},
> 01023      {NULL, NULL, 0, NULL}        /* Sentinel */
> 01024    };
> 01025    
> 01026    #if defined(NPY_PY3K)
> 01027    static struct PyModuleDef moduledef = {
> 01028            PyModuleDef_HEAD_INIT,
> 01029            "lazylinker_ext",
> 01030            NULL,
> 01031            -1,
> 01032            lazylinker_ext_methods,
> 01033            NULL,
> 01034            NULL,
> 01035            NULL,
> 01036            NULL
> 01037    };
> 01038    #endif
> 01039    #if defined(NPY_PY3K)
> 01040    #define RETVAL m
> 01041    PyMODINIT_FUNC
> 01042    PyInit_lazylinker_ext(void) {
> 01043    #else
> 01044    #define RETVAL
> 01045    PyMODINIT_FUNC
> 01046    initlazylinker_ext(void) 
> 01047    {
> 01048    #endif
> 01049        PyObject* m;
> 01050    
> 01051        lazylinker_ext_CLazyLinkerType.tp_new = PyType_GenericNew;
> 01052        if (PyType_Ready(&lazylinker_ext_CLazyLinkerType) < 0)
> 01053            return RETVAL;
> 01054    #if defined(NPY_PY3K)
> 01055        m = PyModule_Create(&moduledef);
> 01056    #else
> 01057        m = Py_InitModule3("lazylinker_ext", lazylinker_ext_methods,
> 01058                           "Example module that creates an extension 
> type.");
> 01059    #endif
> 01060        Py_INCREF(&lazylinker_ext_CLazyLinkerType);
> 01061        PyModule_AddObject(m, "CLazyLinker", (PyObject 
> *)&lazylinker_ext_CLazyLinkerType);
> 01062    
> 01063        return RETVAL;
> 01064    }
> 01065    
> ===============================
> Problem occurred during compilation with the command line below:
> C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\g++.exe -shared -g 
> -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -m32 -IC:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\lib\site-packages\numpy\core\include
>  
> -IC:\Program Files (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\include 
> -IC:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\lib\site-packages\theano\gof 
> -o 
> C:\Users\hghg\AppData\Local\Theano\compiledir_Windows-8.1-6.3.9600-SP0-Intel64_Family_6_Model_69_Stepping_1_GenuineIntel-3.5.2-32\lazylinker_ext\lazylinker_ext.pyd
>  
> C:\Users\hghg\AppData\Local\Theano\compiledir_Windows-8.1-6.3.9600-SP0-Intel64_Family_6_Model_69_Stepping_1_GenuineIntel-3.5.2-32\lazylinker_ext\mod.cpp
>  
> -LC:\Program Files (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\libs 
> -LC:\Program Files (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2 -lpython35
> g++.exe: unrecognized option `-shared'
> In file included from C:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\include\Python.h:8,
>                  from 
> C:\Users\hghg\AppData\Local\Theano\compiledir_Windows-8.1-6.3.9600-SP0-Intel64_Family_6_Model_69_Stepping_1_GenuineIntel-3.5.2-32\lazylinker_ext\mod.cpp:1:
> C:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\include\pyconfig.h:258: 
> warning: #warning "Please use an up-to-date version of gcc! (>2.91 
> recommended)"
> cc1plus.exe: Invalid option `32'
> In file included from C:\\Program Files 
> (x86)\\WinPython-32bit-3.5.2.2Qt5\\python-3.5.2\\include\\Python.h:132,
>                  from 
> C:\\Users\\hghg\\AppData\\Local\\Theano\\compiledir_Windows-8.1-6.3.9600-SP0-Intel64_Family_6_Model_69_Stepping_1_GenuineIntel-3.5.2-32\\lazylinker_ext\\mod.cpp:1:
> C:\\Program Files 
> (x86)\\WinPython-32bit-3.5.2.2Qt5\\python-3.5.2\\include\\fileutils.h:23: 
> syntax error before `;'
> C:\\Program Files 
> (x86)\\WinPython-32bit-3.5.2.2Qt5\\python-3.5.2\\include\\fileutils.h:29: 
> syntax error before `;'
> [main] 
> C:\cygnus\cygwin-b20\H-i586-cygwin32\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\cc1plus.exe
>  
> 1002 (0) handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
> [main] cc1plus 1002 (0) handle_exceptions: Dumping stack trace to 
> cc1plus.exe.core
> 
> Traceback (most recent call last):
>   File "C:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\lib\site-packages\theano\gof\lazylinker_c.py",
>  
> line 74, in <module>
>     raise ImportError()
> ImportError
> 
> During handling of the above exception, another exception occurred:
> 
> Traceback (most recent call last):
>   File "C:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\lib\site-packages\theano\gof\lazylinker_c.py",
>  
> line 91, in <module>
>     raise ImportError()
> ImportError
> 
> During handling of the above exception, another exception occurred:
> 
> Traceback (most recent call last):
>   File "<pyshell#0>", line 1, in <module>
>     import theano.tensor as T
>   File "C:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\lib\site-packages\theano\__init__.py",
>  
> line 63, in <module>
>     from theano.compile import (
>   File "C:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\lib\site-packages\theano\compile\__init__.py",
>  
> line 9, in <module>
>     from theano.compile.function_module import *
>   File "C:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\lib\site-packages\theano\compile\function_module.py",
>  
> line 22, in <module>
>     import theano.compile.mode
>   File "C:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\lib\site-packages\theano\compile\mode.py",
>  
> line 12, in <module>
>     import theano.gof.vm
>   File "C:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\lib\site-packages\theano\gof\vm.py",
>  
> line 638, in <module>
>     from . import lazylinker_c
>   File "C:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\lib\site-packages\theano\gof\lazylinker_c.py",
>  
> line 126, in <module>
>     preargs=args)
>   File "C:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\lib\site-packages\theano\gof\cmodule.py",
>  
> line 2204, in compile_str
>     (status, compile_stderr.replace('\n', '. ')))
> Exception: Compilation failed (return status=1): g++.exe: unrecognized 
> option `-shared'. In file included from C:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\include\Python.h:8,.            
>       
> from 
> C:\Users\hghg\AppData\Local\Theano\compiledir_Windows-8.1-6.3.9600-SP0-Intel64_Family_6_Model_69_Stepping_1_GenuineIntel-3.5.2-32\lazylinker_ext\mod.cpp:1:.
>  
> C:\Program Files 
> (x86)\WinPython-32bit-3.5.2.2Qt5\python-3.5.2\include\pyconfig.h:258: 
> warning: #warning "Please use an up-to-date version of gcc! (>2.91 
> recommended)". cc1plus.exe: Invalid option `32'. In file included from 
> C:\\Program Files 
> (x86)\\WinPython-32bit-3.5.2.2Qt5\\python-3.5.2\\include\\Python.h:132,.      
>             
> from 
> C:\\Users\\hghg\\AppData\\Local\\Theano\\compiledir_Windows-8.1-6.3.9600-SP0-Intel64_Family_6_Model_69_Stepping_1_GenuineIntel-3.5.2-32\\lazylinker_ext\\mod.cpp:1:.
>  
> C:\\Program Files 
> (x86)\\WinPython-32bit-3.5.2.2Qt5\\python-3.5.2\\include\\fileutils.h:23: 
> syntax error before `;'. C:\\Program Files 
> (x86)\\WinPython-32bit-3.5.2.2Qt5\\python-3.5.2\\include\\fileutils.h:29: 
> syntax error before `;'. [main] 
> C:\cygnus\cygwin-b20\H-i586-cygwin32\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\cc1plus.exe
>  
> 1002 (0) handle_exceptions: Exception: STATUS_ACCESS_VIOLATION. [main] 
> cc1plus 1002 (0) handle_exceptions: Dumping stack trace to 
> cc1plus.exe.core. 
> >>> 
> 
> -- 
> 
> --- 
> You received this message because you are subscribed to the Google Groups 
> "theano-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.


-- 
Pascal

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"theano-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to