code: def evaluate(self, name, variables=None):
          
  
          # Get the rule and predeclaration
          rule = self._rules.get(name)
          default = self._defaults.get(name)
  
          # Short-circuit if we don't have either
          if rule is None and default is None:
              return authorization.Authorization(False)
  
          # Marry the attribute defaults
          attrs = {}
          if default:
              attrs.update(default.attrs)
          if rule:
              attrs.update(rule.attrs)
  
          # Select the rule we'll actually use
          if rule is None:
              rule = default
  
          # Construct the context
          ctxt = self.context_class(self, attrs, variables or {})
  
          # Execute the rule
          try:
              with ctxt.push_rule(name):
                  rule.instructions(ctxt)
          except Exception as exc:
              # Fail closed
              return authorization.Authorization(False, attrs)
  
          # Return the authorization result
          return ctxt.authz
docs: Evaluate a named rule.
  
          :param name: The name of the rule to evaluate.
          :param variables: An optional dictionary of variables to make
                            available during evaluation of the rule.
  
          :returns: An instance of
                    ``policies.authorization.Authorization`` with the
                    result of the rule evaluation.  This will include
                    any authorization attributes.