提交 44e5c993 authored 作者: Jakub Sygnowski's avatar Jakub Sygnowski

raising python errors instead of c asserts

上级 031400a6
...@@ -801,24 +801,35 @@ CLazyLinker_call(PyObject *_self, PyObject *args, PyObject *kwds) ...@@ -801,24 +801,35 @@ CLazyLinker_call(PyObject *_self, PyObject *args, PyObject *kwds)
&output_subset_ptr)) &output_subset_ptr))
return NULL; return NULL;
int err = 0;
// parse an output_subset list // parse an output_subset list
// it is stored as a bool list of length n_output_vars: calculate a var or not // it is stored as a bool list of length n_output_vars: calculate a var or not
char *output_subset = NULL; char *output_subset = NULL;
int output_subset_size = -1; int output_subset_size = -1;
if (output_subset_ptr != NULL) if (output_subset_ptr != NULL)
{ {
assert (PyList_Check(output_subset_ptr)); if (! PyList_Check(output_subset_ptr))
output_subset_size = PyList_Size(output_subset_ptr);
output_subset = (char*)calloc(self->n_output_vars, sizeof(char));
for (int it = 0; it < output_subset_size; ++it)
{ {
PyObject *elem = PyList_GetItem(output_subset_ptr, it); err = 1;
assert (PyInt_Check(elem)); PyErr_SetString(PyExc_RuntimeError, "Output_subset is not a list");
output_subset[PyInt_AsLong(elem)] = 1; }
else
{
output_subset_size = PyList_Size(output_subset_ptr);
output_subset = (char*)calloc(self->n_output_vars, sizeof(char));
for (int it = 0; it < output_subset_size; ++it)
{
PyObject *elem = PyList_GetItem(output_subset_ptr, it);
if (! PyInt_Check(elem))
{
err = 1;
PyErr_SetString(PyExc_RuntimeError, "Some elements of output_subset list are not int");
}
output_subset[PyInt_AsLong(elem)] = 1;
}
} }
} }
int err = 0;
self->position_of_error = -1; self->position_of_error = -1;
// create constants used to fill the var_compute_cells // create constants used to fill the var_compute_cells
PyObject * one = PyInt_FromLong(1); PyObject * one = PyInt_FromLong(1);
......
...@@ -842,7 +842,7 @@ class VM_Linker(link.LocalLinker): ...@@ -842,7 +842,7 @@ class VM_Linker(link.LocalLinker):
if (self.callback is not None or self.callback_input is not None or if (self.callback is not None or self.callback_input is not None or
(config.profile and config.profile_memory) or (config.profile and config.profile_memory) or
self.allow_partial_eval): (self.allow_partial_eval and not self.use_cloop)):
if self.use_cloop and (self.callback is not None or if self.use_cloop and (self.callback is not None or
self.callback_input is not None): self.callback_input is not None):
...@@ -850,9 +850,9 @@ class VM_Linker(link.LocalLinker): ...@@ -850,9 +850,9 @@ class VM_Linker(link.LocalLinker):
if self.use_cloop and config.profile_memory: if self.use_cloop and config.profile_memory:
warnings.warn( warnings.warn(
'CVM does not support memory profile, using Stack VM.') 'CVM does not support memory profile, using Stack VM.')
if self.use_cloop and self.allow_partial_eval: if not self.use_cloop and self.allow_partial_eval:
warnings.warn( warnings.warn(
'CVM does not support partial evaluation yet, ' 'LoopGCdoes not support partial evaluation, '
'using Stack VM.') 'using Stack VM.')
# Needed for allow_gc=True, profiling and storage_map reuse # Needed for allow_gc=True, profiling and storage_map reuse
deps = self.compute_gc_dependencies(storage_map) deps = self.compute_gc_dependencies(storage_map)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论