In [1]:
import pymc3 as pm
from theano import tensor as tt

with pm.Model() as commute_time:
    # Walk Ossington Station -> HackLab.to
    walk_ossington_hacklab = pm.Normal('walk_ossington_hacklab', 45, 5)
    
    # Walk Dufferin Station -> HackLab.to
    walk_dufferin_hacklab = pm.Normal('walk_dufferin_hacklab', 30, 5)
    
    # Walk Queen Station -> HackLab.to
    walk_queen_hacklab = pm.Normal('walk_queen_hacklab', 60, 5)
    
    # Queen Street Car -> HackLab.to
    take_streetcar_queen_hacklab = pm.Bernoulli('take_streetcar_queen_hacklab', 0.2)
    streetcar_queen_hacklab = pm.Normal('streetcar_queen_hacklab', 15, 5)
    
    # Dufferin Bus -> HackLab.to
    take_bus_dufferin_hacklab = pm.Bernoulli('take_bus_dufferin_hacklab', 0.1)
    bus_dufferin_hacklab = pm.Normal('bus_dufferin_hacklab', 15, 5)
    
    total_time = pm.Deterministic(
        'total_time',
        tt.switch(
            walk_ossington_hacklab,
            tt.switch(
                walk_dufferin_hacklab,
                tt.switch(
                    walk_queen_hacklab,
                    tt.switch(
                        take_streetcar_queen_hacklab,
                        streetcar_queen_hacklab,
                        tt.switch(
                            take_bus_dufferin_hacklab,
                            bus_dufferin_hacklab
                        )
                    )
                )
            )
        )
    )
    
    trace = pm.sample(size = 1000)


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-1-cd05d14fd7da> in <module>()
     33                         tt.switch(
     34                             take_bus_dufferin_hacklab,
---> 35                             bus_dufferin_hacklab
     36                         )
     37                     )

/usr/local/lib/python3.6/site-packages/theano/gof/op.py in __call__(self, *inputs, **kwargs)
    613         """
    614         return_list = kwargs.pop('return_list', False)
--> 615         node = self.make_node(*inputs, **kwargs)
    616 
    617         if config.compute_test_value != 'off':

/usr/local/lib/python3.6/site-packages/theano/tensor/elemwise.py in make_node(self, *inputs)
    480         inputs = list(map(as_tensor_variable, inputs))
    481         out_dtypes, out_broadcastables, inputs = self.get_output_info(
--> 482             DimShuffle, *inputs)
    483         outputs = [TensorType(dtype=dtype, broadcastable=broadcastable)()
    484                    for dtype, broadcastable in izip(out_dtypes,

/usr/local/lib/python3.6/site-packages/theano/tensor/elemwise.py in get_output_info(self, dim_shuffle, *inputs)
    422         shadow = self.scalar_op.make_node(
    423             *[get_scalar_type(dtype=i.type.dtype).make_variable()
--> 424               for i in inputs])
    425 
    426         target_length = max([input.type.ndim for input in inputs])

/usr/local/lib/python3.6/site-packages/theano/scalar/basic.py in make_node(self, *inputs)
   1039             if len(inputs) != self.nin:
   1040                 raise TypeError("Wrong number of inputs for %s.make_node (got %i(%s), expected %i)" %
-> 1041                                 (self, len(inputs), str(inputs), self.nin))
   1042         inputs = [as_scalar(input) for input in inputs]
   1043         outputs = [t() for t in self.output_types([input.type

TypeError: Wrong number of inputs for Switch.make_node (got 2((<int64>, <float64>)), expected 3)

In [ ]:
pm.traceplot(trace);