def METHOD_NAME(ufl_object, form_compiler_options: Optional[dict] = None,
             jit_options: Optional[dict] = None):
    """Compile UFL object with FFCx and CFFI.
    Args:
        ufl_object: Object to compile, e.g. ``ufl.Form``.
        form_compiler_options: Options used in FFCx compilation of
            this form. Run ``ffcx --help`` at the command line to see
            all available options. Takes priority over all other option
            values.
        jit_options: Options used in CFFI JIT compilation of C code
            generated by FFCx. See ``python/dolfinx/jit.py`` for all
            available options. Takes priority over all other option
            values.
    Returns:
        (compiled object, module, (header code, implementation code))
    Notes:
        Priority ordering of options controlling DOLFINx JIT
        compilation from highest to lowest is:
        -  **jit_options** (API)
        -  **$PWD/dolfinx_jit_options.json** (local options)
        -  **$XDG_CONFIG_HOME/dolfinx/dolfinx_jit_options.json**
           (user options)
        -  **DOLFINX_DEFAULT_JIT_OPTIONS** in `dolfinx.jit`
        Priority ordering of options controlling FFCx from highest to
        lowest is:
        -  **form_compiler_optionss** (API)
        -  **$PWD/ffcx_options.json** (local options)
        -  **$XDG_CONFIG_HOME/ffcx/ffcx_options.json** (user options)
        -  **FFCX_DEFAULT_OPTIONS** in `ffcx.options`
        `$XDG_CONFIG_HOME` is `~/.config/` if the environment variable is not set.
        The contents of the `dolfinx_options.json` files are cached
        on the first call. Subsequent calls to this function use this
        cache.
        Example `dolfinx_jit_options.json` file:
            **{ "cffi_extra_compile_args": ["-O2", "-march=native" ],  "cffi_verbose": True }**
    """
    p_ffcx = ffcx.get_options(form_compiler_options)
    p_jit = get_options(jit_options)
    # Switch on type and compile, returning cffi object
    if isinstance(ufl_object, ufl.Form):
        r = ffcx.codegeneration.jit.compile_forms([ufl_object], options=p_ffcx, **p_jit)
    elif isinstance(ufl_object, ufl.FiniteElementBase):
        r = ffcx.codegeneration.jit.compile_elements([ufl_object], options=p_ffcx, **p_jit)
    elif isinstance(ufl_object, ufl.Mesh):
        r = ffcx.codegeneration.jit.compile_coordinate_maps([ufl_object], options=p_ffcx, **p_jit)
    elif isinstance(ufl_object, tuple) and isinstance(ufl_object[0], ufl.core.expr.Expr):
        r = ffcx.codegeneration.jit.compile_expressions([ufl_object], options=p_ffcx, **p_jit)
    else:
        raise TypeError(type(ufl_object))
    return (r[0][0], r[1], r[2])