# Theano Compilation error

**URL:** <https://discourse.pymc.io/t/theano-compilation-error/7306>\
**Category:** Questions\
**Tags:** theano\
**Created:** [April 22, 2021, 7:22am UTC](https://discourse.pymc.io/t/theano-compilation-error/7306 "2021-04-22T07:22:59Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rudi](https://avatars.discourse-cdn.com/v4/letter/r/50afbb/32.png) [@Rudi](https://discourse.pymc.io/u/Rudi)\
**Post date:** [April 22, 2021, 7:22am UTC](https://discourse.pymc.io/t/theano-compilation-error/7306/1 "2021-04-22T07:22:59Z")

</div>

Hello pmyc3 experts,

I am trying to solve a problem using Pymc3. (The problem is the example 9.1 of the book “parameter estimation and inverse problems”.)

It returns “Exception: ("Compilation failed (return status=1)”.

I cannot solve this issue.

I tried “PyMC3 installation on Windows” instruction ([this link](https://github.com/pymc-devs/pymc3#installation)) several times on both my laptop and PC, however it works on my PC but not on my laptop.

I am using Jupyter Notebook and use following commands in Anaconda Pawershell to install libraries on my system:

**conda remove theano**

**pip install pymc3**

**conda install -c conda-forge theano-pymc**

**conda install m2w64-toolchain**

**pip install arviz==0.11.1**

**conda install -c anaconda libpython**

resulting following libraries:

**Running on PyMC3 v3.11.2**

**Running on arviz v0.11.1**

**Running on numpy v1.19.2**

**Running on theano v1.1.2**

but the problem is not solved.

---

<div class="post-metadata">

**Author:** ![RandomVar](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/randomvar/32/4623_2.png) [@RandomVar](https://discourse.pymc.io/u/RandomVar)\
**Post date:** [April 22, 2021, 9:51pm UTC](https://discourse.pymc.io/t/theano-compilation-error/7306/2 "2021-04-22T21:51:17Z")

</div>

Have you tried this: [Installation Guide (Windows) · pymc-devs/pymc3 Wiki · GitHub](https://github.com/pymc-devs/pymc3/wiki/Installation-Guide-(Windows))

This has always worked for me when I have had issues.

---

<div class="post-metadata">

**Author:** ![Rudi](https://avatars.discourse-cdn.com/v4/letter/r/50afbb/32.png) [@Rudi](https://discourse.pymc.io/u/Rudi)\
**Post date:** [April 23, 2021, 9:51am UTC](https://discourse.pymc.io/t/theano-compilation-error/7306/3 "2021-04-23T09:51:40Z")

</div>

Yes, I have tried it word by word. It worked on my PC but not on my laptop. The Compilation error appears after running the “trace” command.

---

<div class="post-metadata">

**Author:** ![Rudi](https://avatars.discourse-cdn.com/v4/letter/r/50afbb/32.png) [@Rudi](https://discourse.pymc.io/u/Rudi)\
**Post date:** [April 24, 2021, 8:10am UTC](https://discourse.pymc.io/t/theano-compilation-error/7306/4 "2021-04-24T08:10:38Z")

</div>

## and these lines will appear:You can find the C code in this temporary file: C:\Users...\AppData\Local\Temp\theano\_compilation\_error\_z7al6yx8

Exception Traceback (most recent call last)  
 in   
15 t\_obs = pm.Normal(“t\_obs”, mu=water\_head(50, T, S, 60, time\_data), sigma=sigma, observed=T\_data)  
16  
—\> 17 trace = pm.sample(draws=2000, tune=1000)  
18 save\_trace= pm.save\_trace(trace, ‘my\_trace’, overwrite=True)

~.conda\envs\mypm3env\lib\site-packages\pymc3\sampling.py in sample(draws, step, init, n\_init, start, trace, chain\_idx, chains, cores, tune, progressbar, model, random\_seed, discard\_tuned\_samples, compute\_convergence\_checks, callback, jitter\_max\_retries, return\_inferencedata, idata\_kwargs, mp\_ctx, pickle\_backend, \*\*kwargs)  
494 # By default, try to use NUTS  
495 _log.info(“Auto-assigning NUTS sampler…”)  
 → 496 start_, step = init\_nuts(  
497 init=init,  
498 chains=chains,

~.conda\envs\mypm3env\lib\site-packages\pymc3\sampling.py in init\_nuts(init, chains, n\_init, model, random\_seed, progressbar, jitter\_max\_retries, \*\*kwargs)  
2185 raise ValueError(f"Unknown initializer: {init}.")  
2186  
 → 2187 step = pm.NUTS(potential=potential, model=model, \*\*kwargs)  
2188  
2189 return start, step

~.conda\envs\mypm3env\lib\site-packages\pymc3\step\_methods\hmc\nuts.py in **init** (self, vars, max\_treedepth, early\_max\_treedepth, \*\*kwargs)  
166 `pm.sample` to the desired number of tuning steps.  
167 “”"  
 → 168 super(). **init** (vars, \*\*kwargs)  
169  
170 self.max\_treedepth = max\_treedepth

~.conda\envs\mypm3env\lib\site-packages\pymc3\step\_methods\hmc\base\_hmc.py in **init** (self, vars, scaling, step\_scale, is\_cov, model, blocked, potential, dtype, Emax, target\_accept, gamma, k, t0, adapt\_step\_size, step\_rand, \*\*theano\_kwargs)  
86 vars = inputvars(vars)  
87  
—\> 88 super(). **init** (vars, blocked=blocked, model=model, dtype=dtype, \*\*theano\_kwargs)  
89  
90 self.adapt\_step\_size = adapt\_step\_size

~.conda\envs\mypm3env\lib\site-packages\pymc3\step\_methods\arraystep.py in **init** (self, vars, model, blocked, dtype, logp\_dlogp\_func, \*\*theano\_kwargs)  
252  
253 if logp\_dlogp\_func is None:  
 → 254 func = model.logp\_dlogp\_function(vars, dtype=dtype, \*\*theano\_kwargs)  
255 else:  
256 func = logp\_dlogp\_func

~.conda\envs\mypm3env\lib\site-packages\pymc3\model.py in logp\_dlogp\_function(self, grad\_vars, tempered, \*\*kwargs)  
1002 varnames = [var.name for var in grad\_vars]  
1003 extra\_vars = [var for var in self.free\_RVs if var.name not in varnames]  
 → 1004 return ValueGradFunction(costs, grad\_vars, extra\_vars, \*\*kwargs)  
1005  
1006 @property

~.conda\envs\mypm3env\lib\site-packages\pymc3\model.py in **init** (self, costs, grad\_vars, extra\_vars, dtype, casting, compute\_grads, \*\*kwargs)  
689  
690 if compute\_grads:  
 → 691 grad = tt.grad(self.\_cost\_joined, self.\_vars\_joined)  
692 grad.name = “\_\_grad”  
693 outputs = [self.\_cost\_joined, grad]

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in grad(cost, wrt, consider\_constant, disconnected\_inputs, add\_names, known\_grads, return\_disconnected, null\_gradients)  
637 assert g.type.dtype in theano.tensor.float\_dtypes  
638  
 → 639 rval = \_populate\_grad\_dict(var\_to\_app\_to\_idx, grad\_dict, wrt, cost\_name)  
640  
641 for i in range(len(rval)):

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in \_populate\_grad\_dict(var\_to\_app\_to\_idx, grad\_dict, wrt, cost\_name)  
1438 return grad\_dict[var]  
1439  
 → 1440 rval = [access\_grad\_cache(elem) for elem in wrt]  
1441  
1442 return rval

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in (.0)  
1438 return grad\_dict[var]  
1439  
 → 1440 rval = [access\_grad\_cache(elem) for elem in wrt]  
1441  
1442 return rval

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_grad\_cache(var)  
1391 for idx in node\_to\_idx[node]:  
1392  
 → 1393 term = access\_term\_cache(node)[idx]  
1394  
1395 if not isinstance(term, Variable):

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_term\_cache(node)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in (.0)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_grad\_cache(var)  
1391 for idx in node\_to\_idx[node]:  
1392  
 → 1393 term = access\_term\_cache(node)[idx]  
1394  
1395 if not isinstance(term, Variable):

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_term\_cache(node)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in (.0)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_grad\_cache(var)  
1391 for idx in node\_to\_idx[node]:  
1392  
 → 1393 term = access\_term\_cache(node)[idx]  
1394  
1395 if not isinstance(term, Variable):

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_term\_cache(node)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in (.0)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_grad\_cache(var)  
1391 for idx in node\_to\_idx[node]:  
1392  
 → 1393 term = access\_term\_cache(node)[idx]  
1394  
1395 if not isinstance(term, Variable):

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_term\_cache(node)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in (.0)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_grad\_cache(var)  
1391 for idx in node\_to\_idx[node]:  
1392  
 → 1393 term = access\_term\_cache(node)[idx]  
1394  
1395 if not isinstance(term, Variable):

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_term\_cache(node)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in (.0)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_grad\_cache(var)  
1391 for idx in node\_to\_idx[node]:  
1392  
 → 1393 term = access\_term\_cache(node)[idx]  
1394  
1395 if not isinstance(term, Variable):

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_term\_cache(node)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in (.0)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_grad\_cache(var)  
1391 for idx in node\_to\_idx[node]:  
1392  
 → 1393 term = access\_term\_cache(node)[idx]  
1394  
1395 if not isinstance(term, Variable):

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_term\_cache(node)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in (.0)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_grad\_cache(var)  
1391 for idx in node\_to\_idx[node]:  
1392  
 → 1393 term = access\_term\_cache(node)[idx]  
1394  
1395 if not isinstance(term, Variable):

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_term\_cache(node)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in (.0)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_grad\_cache(var)  
1391 for idx in node\_to\_idx[node]:  
1392  
 → 1393 term = access\_term\_cache(node)[idx]  
1394  
1395 if not isinstance(term, Variable):

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_term\_cache(node)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in (.0)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_grad\_cache(var)  
1391 for idx in node\_to\_idx[node]:  
1392  
 → 1393 term = access\_term\_cache(node)[idx]  
1394  
1395 if not isinstance(term, Variable):

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_term\_cache(node)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in (.0)  
1059 inputs = node.inputs  
1060  
 → 1061 output\_grads = [access\_grad\_cache(var) for var in node.outputs]  
1062  
1063 # list of bools indicating if each output is connected to the cost

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_grad\_cache(var)  
1391 for idx in node\_to\_idx[node]:  
1392  
 → 1393 term = access\_term\_cache(node)[idx]  
1394  
1395 if not isinstance(term, Variable):

~.conda\envs\mypm3env\lib\site-packages\theano\gradient.py in access\_term\_cache(node)  
1218 )  
1219  
 → 1220 input\_grads = node.op.L\_op(inputs, node.outputs, new\_output\_grads)  
1221  
1222 if input\_grads is None:

~.conda\envs\mypm3env\lib\site-packages\theano\tensor\elemwise.py in L\_op(self, inputs, outs, ograds)  
562  
563 # compute grad with respect to broadcasted input  
 → 564 rval = self.\_bgrad(inputs, outs, ograds)  
565  
566 # TODO: make sure that zeros are clearly identifiable

~.conda\envs\mypm3env\lib\site-packages\theano\tensor\elemwise.py in \_bgrad(self, inputs, outputs, ograds)  
666 ret.append(None)  
667 continue  
 → 668 ret.append(transform(scalar\_igrad))  
669  
670 return ret

~.conda\envs\mypm3env\lib\site-packages\theano\tensor\elemwise.py in transform(r)  
657 return DimShuffle((), [“x”] \* nd)(res)  
658  
 → 659 new\_r = Elemwise(node.op, {})(\*[transform(ipt) for ipt in node.inputs])  
660 return new\_r  
661

~.conda\envs\mypm3env\lib\site-packages\theano\tensor\elemwise.py in (.0)  
657 return DimShuffle((), [“x”] \* nd)(res)  
658  
 → 659 new\_r = Elemwise(node.op, {})(\*[transform(ipt) for ipt in node.inputs])  
660 return new\_r  
661

~.conda\envs\mypm3env\lib\site-packages\theano\tensor\elemwise.py in transform(r)  
657 return DimShuffle((), [“x”] \* nd)(res)  
658  
 → 659 new\_r = Elemwise(node.op, {})(\*[transform(ipt) for ipt in node.inputs])  
660 return new\_r  
661

~.conda\envs\mypm3env\lib\site-packages\theano\graph\op.py in **call** (self, \*inputs, \*\*kwargs)  
251  
252 if config.compute\_test\_value != “off”:  
 → 253 compute\_test\_value(node)  
254  
255 if self.default\_output is not None:

~.conda\envs\mypm3env\lib\site-packages\theano\graph\op.py in compute\_test\_value(node)  
124  
125 # Create a thunk that performs the computation  
 → 126 thunk = node.op.make\_thunk(node, storage\_map, compute\_map, no\_recycling=)  
127 thunk.inputs = [storage\_map[v] for v in node.inputs]  
128 thunk.outputs = [storage\_map[v] for v in node.outputs]

~.conda\envs\mypm3env\lib\site-packages\theano\graph\op.py in make\_thunk(self, node, storage\_map, compute\_map, no\_recycling, impl)  
632 )  
633 try:  
 → 634 return self.make\_c\_thunk(node, storage\_map, compute\_map, no\_recycling)  
635 except (NotImplementedError, MethodNotDefined):  
636 # We requested the c code, so don’t catch the error.

~.conda\envs\mypm3env\lib\site-packages\theano\graph\op.py in make\_c\_thunk(self, node, storage\_map, compute\_map, no\_recycling)  
598 print(f"Disabling C code for {self} due to unsupported float16")  
599 raise NotImplementedError(“float16”)  
 → 600 outputs = cl.make\_thunk(  
601 input\_storage=node\_input\_storage, output\_storage=node\_output\_storage  
602 )

~.conda\envs\mypm3env\lib\site-packages\theano\link\c\basic.py in make\_thunk(self, input\_storage, output\_storage, storage\_map)  
1201 “”"  
1202 init\_tasks, tasks = self.get\_init\_tasks()  
 → 1203 cthunk, module, in\_storage, out\_storage, error\_storage = self. **compile** (  
1204 input\_storage, output\_storage, storage\_map  
1205 )

~.conda\envs\mypm3env\lib\site-packages\theano\link\c\basic.py in **compile** (self, input\_storage, output\_storage, storage\_map)  
1136 input\_storage = tuple(input\_storage)  
1137 output\_storage = tuple(output\_storage)  
 → 1138 thunk, module = self.cthunk\_factory(  
1139 error\_storage,  
1140 input\_storage,

~.conda\envs\mypm3env\lib\site-packages\theano\link\c\basic.py in cthunk\_factory(self, error\_storage, in\_storage, out\_storage, storage\_map)  
1632 for node in self.node\_order:  
1633 node.op.prepare\_node(node, storage\_map, None, “c”)  
 → 1634 module = get\_module\_cache().module\_from\_key(key=key, lnk=self)  
1635  
1636 vars = self.inputs + self.outputs + self.orphans

~.conda\envs\mypm3env\lib\site-packages\theano\link\c\cmodule.py in module\_from\_key(self, key, lnk)  
1189 try:  
1190 location = dlimport\_workdir(self.dirname)  
 → 1191 module = lnk.compile\_cmodule(location)  
1192 name = module. **file**  
1193 assert name.startswith(location)

~.conda\envs\mypm3env\lib\site-packages\theano\link\c\basic.py in compile\_cmodule(self, location)  
1541 try:  
1542 \_logger.debug(f"LOCATION {location}")  
 → 1543 module = c\_compiler.compile\_str(  
1544 module\_name=mod.code\_hash,  
1545 src\_code=src\_code,

~.conda\envs\mypm3env\lib\site-packages\theano\link\c\cmodule.py in compile\_str(module\_name, src\_code, location, include\_dirs, lib\_dirs, libs, preargs, py\_module, hide\_symbols)  
2544 # difficult to read.  
2545 compile\_stderr = compile\_stderr.replace(“\n”, ". “)  
 → 2546 raise Exception(  
2547 f"Compilation failed (return status={status}): {compile\_stderr}”  
2548 )

Exception: ('Compilation failed (return status=1):

---

<div class="post-metadata">

**Author:** ![AlxndrMlk](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/alxndrmlk/32/4767_2.png) [@AlxndrMlk](https://discourse.pymc.io/u/AlxndrMlk)\
**Post date:** [February 4, 2022, 2:53pm UTC](https://discourse.pymc.io/t/theano-compilation-error/7306/5 "2022-02-04T14:53:08Z")

</div>

I have a similar problem, even though I followed the installation guide.

I am getting `Theano compilation error` after trying to run a model.

---

<div class="post-metadata">

**Author:** ![W\_H](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/w_h/32/4981_2.png) [@W\_H](https://discourse.pymc.io/u/W_H)\
**Post date:** [March 25, 2022, 11:05am UTC](https://discourse.pymc.io/t/theano-compilation-error/7306/6 "2022-03-25T11:05:58Z")

</div>

I also faced the same problem. After removing the package `m2w64-toolchain`, the model can run successfully.
