<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def TempFilePath(suffix = "", prefix = "tmp", dir = None):
 # pylint: disable=redefined-builtin """Creates a temporary file based on the environment configuration. If no directory is specified the file will be placed in folder as specified by the `TEST_TMPDIR` environment variable if available or fallback to `Test.tmpdir` of the current configuration if not. If directory is specified it must be part of the default test temporary directory. Args: suffix: A suffix to end the file name with. prefix: A prefix to begin the file name with. dir: A directory to place the file in. Returns: An absolute path to the created file. Raises: ValueError: If the specified directory is not part of the default test temporary directory. """

  precondition.AssertType(suffix, Text)
  precondition.AssertType(prefix, Text)
  precondition.AssertOptionalType(dir, Text)

  root = _TempRootPath()
  if not dir:
    dir = root
  elif root and not os.path.commonprefix([dir, root]):
    raise ValueError("path '%s' must start with '%s'" % (dir, root))

  # `mkstemp` returns an open descriptor for the file. We don't care about it as
  # we are only concerned with the path, but we need to close it first or else
  # the file will remain open until the garbage collectors steps in.
  desc, path = tempfile.mkstemp(suffix=suffix, prefix=prefix, dir=dir)
  os.close(desc)
  return path