Created
April 6, 2016 09:57
-
-
Save rutj3/b239778e0d05359d367e150483dc60a3 to your computer and use it in GitHub Desktop.
Numba_types
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"from numba import float32, float64, jitclass\n", | |
"import numba" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"'0.25.0'" | |
] | |
}, | |
"execution_count": 2, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"numba.__version__" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Scalars work fine" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"278.1499938964844" | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"spec = [('celcius', float32),\n", | |
" ('kelvin', float32)]\n", | |
"\n", | |
"@jitclass(spec)\n", | |
"class conv_scalar(object):\n", | |
" def __init__(self):\n", | |
" \n", | |
" self.celcius = 5.0\n", | |
" \n", | |
" def calc_kelvin(self): \n", | |
" \n", | |
" self.kelvin = self.celcius + 273.15\n", | |
" \n", | |
"conv_test = conv_scalar()\n", | |
"conv_test.calc_kelvin()\n", | |
"conv_test.kelvin\n", | |
" " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Arrays work with casted constants:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([ 278.1499939], dtype=float32)" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"spec = [('celcius', float32[:]),\n", | |
" ('kelvin', float32[:])]\n", | |
"\n", | |
"@jitclass(spec)\n", | |
"class conv_array_typed(object):\n", | |
" def __init__(self):\n", | |
" \n", | |
" self.celcius = float32([5.0])\n", | |
" \n", | |
" def calc_kelvin(self): \n", | |
" \n", | |
" self.kelvin = self.celcius + float32(273.15)\n", | |
" \n", | |
"conv_test = conv_array_typed()\n", | |
"conv_test.calc_kelvin()\n", | |
"conv_test.kelvin\n", | |
" \n", | |
" " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Arrays dont work with un-casted constants:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": false | |
}, | |
"outputs": [ | |
{ | |
"ename": "TypingError", | |
"evalue": "Failed at nopython (nopython frontend)\nInternal error at <numba.typeinfer.CallConstraint object at 0x0000000007DA8550>:\n--%<-----------------------------------------------------------------\nTraceback (most recent call last):\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\lowering.py\", line 196, in lower_block\n self.lower_inst(inst)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\lowering.py\", line 327, in lower_inst\n return impl(self.builder, (target, value))\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\targets\\base.py\", line 541, in wrapped\n return impl(self, builder, sig, args, attr)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\targets\\imputils.py\", line 148, in res\n return real_impl(context, builder, sig, args, attr)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\jitclass\\base.py\", line 346, in attr_impl\n setattr(data, attr, val)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\cgutils.py\", line 151, in __setattr__\n self[self._datamodel.get_field_position(field)] = value\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\cgutils.py\", line 165, in __setitem__\n value = self._cast_member_from_value(index, value)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\cgutils.py\", line 237, in _cast_member_from_value\n return model.as_data(self._builder, val)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\datamodel\\models.py\", line 481, in as_data\n struct = builder.insert_value(struct, el, [i])\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\llvmlite\\ir\\builder.py\", line 768, in insert_value\n instr = instructions.InsertValue(self.block, agg, value, idx, name=name)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\llvmlite\\ir\\instructions.py\", line 517, in __init__\n % (typ, list(indices), agg.type, elem.type))\nTypeError: Can only insert float* at [4] in {i8*, i8*, i64, i64, float*, [1 x i64], [1 x i64]}: got double*\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\typeinfer.py\", line 114, in propagate\n constraint(typeinfer)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\typeinfer.py\", line 317, in __call__\n self.resolve(typeinfer, typevars, fnty)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\typeinfer.py\", line 344, in resolve\n sig = context.resolve_function_type(fnty, pos_args, kw_args)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\typing\\context.py\", line 125, in resolve_function_type\n return func.get_call_type(self, args, kws)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\types\\functions.py\", line 102, in get_call_type\n return self.template(context).apply(args, kws)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\typing\\templates.py\", line 185, in apply\n sig = generic(args, kws)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\jitclass\\base.py\", line 285, in generic\n sig = disp_type.get_call_type(self.context, args, kws)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\types\\functions.py\", line 153, in get_call_type\n template, pysig, args, kws = self.dispatcher.get_call_template(args, kws)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\dispatcher.py\", line 251, in get_call_template\n self.compile(tuple(args))\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\dispatcher.py\", line 506, in compile\n cres = self._compiler.compile(args, return_type)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\dispatcher.py\", line 85, in compile\n flags=flags, locals=self.locals)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 690, in compile_extra\n return pipeline.compile_extra(func)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 378, in compile_extra\n return self.compile_bytecode(bc, func_attr=self.func_attr)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 387, in compile_bytecode\n return self._compile_bytecode()\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 671, in _compile_bytecode\n res = pm.run(self.status)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 257, in run\n raise patched_exception\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 249, in run\n stage()\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 616, in stage_nopython_backend\n self._backend(lowerfn, objectmode=False)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 571, in _backend\n lowered = lowerfn()\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 558, in backend_nopython_mode\n self.flags)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 816, in native_lowering_stage\n lower.lower()\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\lowering.py\", line 123, in lower\n self.lower_normal_function(self.fndesc)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\lowering.py\", line 158, in lower_normal_function\n entry_block_tail = self.lower_function_body()\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\lowering.py\", line 183, in lower_function_body\n self.lower_block(block)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\lowering.py\", line 201, in lower_block\n raise LoweringError(msg, inst.loc)\nnumba.errors.LoweringError: Failed at nopython (nopython mode backend)\nInternal error:\nTypeError: Can only insert float* at [4] in {i8*, i8*, i64, i64, float*, [1 x i64], [1 x i64]}: got double*\nFile \"<ipython-input-5-bd0fe7b9da15>\", line 12\n--%<-----------------------------------------------------------------\n\nFile \"<string>\", line 3", | |
"output_type": "error", | |
"traceback": [ | |
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[1;31mTypingError\u001b[0m Traceback (most recent call last)", | |
"\u001b[1;32m<ipython-input-5-bd0fe7b9da15>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 14\u001b[0m \u001b[0mconv_test\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mconv_array_untyped\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 15\u001b[1;33m \u001b[0mconv_test\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcalc_kelvin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 16\u001b[0m \u001b[0mconv_test\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mkelvin\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32mC:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\jitclass\\boxing.py\u001b[0m in \u001b[0;36mwrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 62\u001b[0m \u001b[1;33m@\u001b[0m\u001b[0mwraps\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 63\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 64\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 65\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 66\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32mC:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\dispatcher.py\u001b[0m in \u001b[0;36m_compile_for_args\u001b[1;34m(self, *args, **kws)\u001b[0m\n\u001b[0;32m 286\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 287\u001b[0m \u001b[0mreal_args\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtypeof_pyval\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 288\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcompile\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtuple\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mreal_args\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 289\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 290\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0minspect_llvm\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msignature\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32mC:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\dispatcher.py\u001b[0m in \u001b[0;36mcompile\u001b[1;34m(self, sig)\u001b[0m\n\u001b[0;32m 504\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 505\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_cache_misses\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0msig\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 506\u001b[1;33m \u001b[0mcres\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_compiler\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcompile\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mreturn_type\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 507\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0madd_overload\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcres\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 508\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_cache\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msave_overload\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msig\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcres\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32mC:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\dispatcher.py\u001b[0m in \u001b[0;36mcompile\u001b[1;34m(self, args, return_type)\u001b[0m\n\u001b[0;32m 83\u001b[0m \u001b[0mimpl\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 84\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mreturn_type\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mreturn_type\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 85\u001b[1;33m flags=flags, locals=self.locals)\n\u001b[0m\u001b[0;32m 86\u001b[0m \u001b[1;31m# Check typing error if object mode is used\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 87\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mcres\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtyping_error\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m \u001b[1;32mand\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mflags\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0menable_pyobject\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32mC:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\u001b[0m in \u001b[0;36mcompile_extra\u001b[1;34m(typingctx, targetctx, func, args, return_type, flags, locals, library)\u001b[0m\n\u001b[0;32m 688\u001b[0m pipeline = Pipeline(typingctx, targetctx, library,\n\u001b[0;32m 689\u001b[0m args, return_type, flags, locals)\n\u001b[1;32m--> 690\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mpipeline\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcompile_extra\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 691\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 692\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32mC:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\u001b[0m in \u001b[0;36mcompile_extra\u001b[1;34m(self, func)\u001b[0m\n\u001b[0;32m 376\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 377\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 378\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcompile_bytecode\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfunc_attr\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfunc_attr\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 379\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 380\u001b[0m def compile_bytecode(self, bc, lifted=(), lifted_from=None,\n", | |
"\u001b[1;32mC:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\u001b[0m in \u001b[0;36mcompile_bytecode\u001b[1;34m(self, bc, lifted, lifted_from, func_attr)\u001b[0m\n\u001b[0;32m 385\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlifted_from\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlifted_from\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 386\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfunc_attr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfunc_attr\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 387\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_compile_bytecode\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 388\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 389\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mcompile_internal\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mbc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfunc_attr\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mDEFAULT_FUNCTION_ATTRIBUTES\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32mC:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\u001b[0m in \u001b[0;36m_compile_bytecode\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 669\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 670\u001b[0m \u001b[0mpm\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfinalize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 671\u001b[1;33m \u001b[0mres\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpm\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstatus\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 672\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mres\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 673\u001b[0m \u001b[1;31m# Early pipeline completion\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32mC:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\u001b[0m in \u001b[0;36mrun\u001b[1;34m(self, status)\u001b[0m\n\u001b[0;32m 255\u001b[0m \u001b[1;31m# No more fallback pipelines?\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 256\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mis_final_pipeline\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 257\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mpatched_exception\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 258\u001b[0m \u001b[1;31m# Go to next fallback pipeline\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 259\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32mC:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\u001b[0m in \u001b[0;36mrun\u001b[1;34m(self, status)\u001b[0m\n\u001b[0;32m 247\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 248\u001b[0m \u001b[0mevent\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstage_name\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 249\u001b[1;33m \u001b[0mstage\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 250\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0m_EarlyPipelineCompletion\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 251\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32mC:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\u001b[0m in \u001b[0;36mstage_nopython_frontend\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 473\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 474\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreturn_type\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 475\u001b[1;33m self.locals)\n\u001b[0m\u001b[0;32m 476\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 477\u001b[0m with self.fallback_context('Function \"%s\" has invalid return type'\n", | |
"\u001b[1;32mC:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\u001b[0m in \u001b[0;36mtype_inference_stage\u001b[1;34m(typingctx, interp, args, return_type, locals)\u001b[0m\n\u001b[0;32m 797\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 798\u001b[0m \u001b[0minfer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbuild_constraint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 799\u001b[1;33m \u001b[0minfer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpropagate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 800\u001b[0m \u001b[0mtypemap\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrestype\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcalltypes\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0minfer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0munify\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 801\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32mC:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\typeinfer.py\u001b[0m in \u001b[0;36mpropagate\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 611\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdebug\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpropagate_finished\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 612\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0merrors\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 613\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0merrors\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 614\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 615\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0madd_type\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvar\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtp\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0munless_locked\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;31mTypingError\u001b[0m: Failed at nopython (nopython frontend)\nInternal error at <numba.typeinfer.CallConstraint object at 0x0000000007DA8550>:\n--%<-----------------------------------------------------------------\nTraceback (most recent call last):\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\lowering.py\", line 196, in lower_block\n self.lower_inst(inst)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\lowering.py\", line 327, in lower_inst\n return impl(self.builder, (target, value))\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\targets\\base.py\", line 541, in wrapped\n return impl(self, builder, sig, args, attr)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\targets\\imputils.py\", line 148, in res\n return real_impl(context, builder, sig, args, attr)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\jitclass\\base.py\", line 346, in attr_impl\n setattr(data, attr, val)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\cgutils.py\", line 151, in __setattr__\n self[self._datamodel.get_field_position(field)] = value\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\cgutils.py\", line 165, in __setitem__\n value = self._cast_member_from_value(index, value)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\cgutils.py\", line 237, in _cast_member_from_value\n return model.as_data(self._builder, val)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\datamodel\\models.py\", line 481, in as_data\n struct = builder.insert_value(struct, el, [i])\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\llvmlite\\ir\\builder.py\", line 768, in insert_value\n instr = instructions.InsertValue(self.block, agg, value, idx, name=name)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\llvmlite\\ir\\instructions.py\", line 517, in __init__\n % (typ, list(indices), agg.type, elem.type))\nTypeError: Can only insert float* at [4] in {i8*, i8*, i64, i64, float*, [1 x i64], [1 x i64]}: got double*\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\typeinfer.py\", line 114, in propagate\n constraint(typeinfer)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\typeinfer.py\", line 317, in __call__\n self.resolve(typeinfer, typevars, fnty)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\typeinfer.py\", line 344, in resolve\n sig = context.resolve_function_type(fnty, pos_args, kw_args)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\typing\\context.py\", line 125, in resolve_function_type\n return func.get_call_type(self, args, kws)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\types\\functions.py\", line 102, in get_call_type\n return self.template(context).apply(args, kws)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\typing\\templates.py\", line 185, in apply\n sig = generic(args, kws)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\jitclass\\base.py\", line 285, in generic\n sig = disp_type.get_call_type(self.context, args, kws)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\types\\functions.py\", line 153, in get_call_type\n template, pysig, args, kws = self.dispatcher.get_call_template(args, kws)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\dispatcher.py\", line 251, in get_call_template\n self.compile(tuple(args))\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\dispatcher.py\", line 506, in compile\n cres = self._compiler.compile(args, return_type)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\dispatcher.py\", line 85, in compile\n flags=flags, locals=self.locals)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 690, in compile_extra\n return pipeline.compile_extra(func)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 378, in compile_extra\n return self.compile_bytecode(bc, func_attr=self.func_attr)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 387, in compile_bytecode\n return self._compile_bytecode()\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 671, in _compile_bytecode\n res = pm.run(self.status)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 257, in run\n raise patched_exception\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 249, in run\n stage()\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 616, in stage_nopython_backend\n self._backend(lowerfn, objectmode=False)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 571, in _backend\n lowered = lowerfn()\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 558, in backend_nopython_mode\n self.flags)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\compiler.py\", line 816, in native_lowering_stage\n lower.lower()\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\lowering.py\", line 123, in lower\n self.lower_normal_function(self.fndesc)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\lowering.py\", line 158, in lower_normal_function\n entry_block_tail = self.lower_function_body()\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\lowering.py\", line 183, in lower_function_body\n self.lower_block(block)\n File \"C:\\Miniconda3\\envs\\ip_numba\\lib\\site-packages\\numba\\lowering.py\", line 201, in lower_block\n raise LoweringError(msg, inst.loc)\nnumba.errors.LoweringError: Failed at nopython (nopython mode backend)\nInternal error:\nTypeError: Can only insert float* at [4] in {i8*, i8*, i64, i64, float*, [1 x i64], [1 x i64]}: got double*\nFile \"<ipython-input-5-bd0fe7b9da15>\", line 12\n--%<-----------------------------------------------------------------\n\nFile \"<string>\", line 3" | |
] | |
} | |
], | |
"source": [ | |
"spec = [('celcius', float32[:]),\n", | |
" ('kelvin', float32[:])]\n", | |
"\n", | |
"@jitclass(spec)\n", | |
"class conv_array_untyped(object):\n", | |
" def __init__(self):\n", | |
" \n", | |
" self.celcius = float32([5.0])\n", | |
" \n", | |
" def calc_kelvin(self): \n", | |
" \n", | |
" self.kelvin = self.celcius + 273.15\n", | |
"\n", | |
"conv_test = conv_array_untyped()\n", | |
"conv_test.calc_kelvin()\n", | |
"conv_test.kelvin" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.4.4" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment