def METHOD_NAME(cls, user_cfg_dict):
    # Check validation
    cls.setup_user_cfg_cls()
    user_cfg = cls.user_cfg_cls(**user_cfg_dict)
    file_current_dir = Path(__file__).resolve().parent
    with open(file_current_dir / "nodepred.jinja-py", "r") as f:
        template = Template(f.read())
    render_cfg = copy.deepcopy(user_cfg_dict)
    model_code = NodeModelFactory.get_source_code(
        user_cfg_dict["model"]["name"]
    )
    render_cfg["model_code"] = model_code
    render_cfg["model_class_name"] = NodeModelFactory.get_model_class_name(
        user_cfg_dict["model"]["name"]
    )
    render_cfg.update(
        DataFactory.get_generated_code_dict(
            user_cfg_dict["data"]["name"], '**cfg["data"]'
        )
    )
    generated_user_cfg = copy.deepcopy(user_cfg_dict)
    if "split_ratio" in generated_user_cfg["data"]:
        generated_user_cfg["data"].pop("split_ratio")
    generated_user_cfg["data_name"] = generated_user_cfg["data"].pop("name")
    generated_user_cfg.pop("pipeline_name")
    generated_user_cfg.pop("pipeline_mode")
    generated_user_cfg["model_name"] = generated_user_cfg["model"].pop(
        "name"
    )
    generated_user_cfg["general_pipeline"]["optimizer"].pop("name")
    generated_train_cfg = copy.deepcopy(user_cfg_dict["general_pipeline"])
    generated_train_cfg["optimizer"].pop("name")
    if user_cfg_dict["data"].get("split_ratio", None) is not None:
        render_cfg["data_initialize_code"] = "{}, split_ratio={}".format(
            render_cfg["data_initialize_code"],
            user_cfg_dict["data"]["split_ratio"],
        )
    render_cfg["user_cfg_str"] = f"cfg = {str(generated_user_cfg)}"
    render_cfg["user_cfg"] = user_cfg_dict
    return template.render(**render_cfg)