def to_statement(self, parameter_values):
missing = self.missing_parameter_values(parameter_values)<EOL>if len(missing) > <NUM_LIT:0>:<EOL><INDENT>raise InsufficientParameterValues("<STR_LIT>"<EOL>.format(self.name, [str(m) for m in missing]))<EOL><DEDENT>necessary_parameter_values = {name: value for name, value in parameter_values.items()<EOL>if name in self.parameters}<EOL>supported_intrinsics = {<EOL>RefAction.intrinsic_name: RefAction()<EOL>}<EOL>resolver = IntrinsicsResolver(necessary_parameter_values, supported_intrinsics)<EOL>definition_copy = copy.deepcopy(self.definition)<EOL>return resolver.resolve_parameter_refs(definition_copy)<EOL>
With the given values for each parameter, this method will return a policy statement that can be used
directly with IAM.

:param dict parameter_values: Dict containing values for each parameter defined in the template
:return dict: Dictionary containing policy statement
:raises InvalidParameterValues: If parameter values is not a valid dictionary or does not contain values
    for all parameters
:raises InsufficientParameterValues: If the parameter values don't have values for all required parameters