docs: def evaluate(self, values):
          ''' Evaluates the expression to an integer
  
          values is a dictionnary that associates n-bit variables to integer
          values. Every symbolic variables used in the expression must be
          represented. 
  
          For instance, let x and y 4-bit variables, and e = x+y:
  
          >>> mba = MBA(4)
          >>> x = mba.var('x')
          >>> y = mba.var('y')
          >>> e = x+y
  
          To evaluate e with x=4 and y=5, we can do:
  
          >>> e.eval({x: 4, y: 5})
          9
  
          If a variable is missing from values, an exception will occur. (x
          or y in the example above)
          '''
          ret = self.mba.evaluate(self.vec, values)
          if isinstance(ret, six.integer_types):
              return ret
          return self.from_vec(self.mba, ret)