code: def _get_type(self, policy):
          
  
          # Must handle intrinsic functions. Policy could be a primitive type or an intrinsic function
  
          # Managed policies are either string or an intrinsic function that resolves to a string
          if isinstance(policy, string_types) or is_instrinsic(policy):
              return PolicyTypes.MANAGED_POLICY
  
          # Policy statement is a dictionary with the key "Statement" in it
          if isinstance(policy, dict) and "Statement" in policy:
              return PolicyTypes.POLICY_STATEMENT
  
          # This could be a policy template then.
          if self._is_policy_template(policy):
              return PolicyTypes.POLICY_TEMPLATE
  
          # Nothing matches. Don't take opinions on how to handle it. Instead just set the appropriate type.
          return PolicyTypes.UNKNOWN
docs: Returns the type of the given policy
  
          :param string or dict policy: Policy data
          :return PolicyTypes: Type of the given policy. None, if type could not be inferred