Repository: cookiecutter/cookiecutter

Issue:
getting a parameters original choices
* Cookiecutter version: 2.1.1
* Template project url: github.com/kjaymiller/cookiecutter_relecloud
* Python version: Python 3.11.0
* Operating System: MacOS Ventura - 13.4.1 (22F82)

### Description:

If my cookiecutter.json has:

```json
{
    "cc_options": [1, 2, 3, 4]
}
```
is there a way to get all of the options.

### What I've run:

```jinja
{{cookiecutter.json}}
```

```jinja
{{cookiecutter.cc_options}}
```

### Expected outcome

I would like some attibute that would give me my original options.  Perhaps if you call the value with an underscore in front.

```jinja
{{cookiecutter._cc_options}} >>> [1,2,3,4]
```

another option could be to have the original values preserved in a variable

```jinja
{{cookiecutter.source_values.cc_options}} >>> [1,2,3,4]
```


Discussion:
Another option would be to store the original sources as `_cookiecutter` in the context with the original values.

https://github.com/cookiecutter/cookiecutter/blob/ca8d9ddd3cf7bc8d9e5cf3ee5aab57020bf23077/cookiecutter/main.py#L107C8-L108C75

Instead:

```python
# cookiecutter/main.py
def main():
     ...
      with import_patch:
            context[_cookiecutter] = context['cookiecutter']
            context['cookiecutter'] = prompt_for_config(context, no_input)
 ```


Resolving patch:
diff --git a/cookiecutter/main.py b/cookiecutter/main.py
--- a/cookiecutter/main.py
+++ b/cookiecutter/main.py
@@ -102,6 +102,9 @@ def cookiecutter(
             extra_context=extra_context,
         )
 
+        # preserve the original cookiecutter options
+        context['_cookiecutter'] = context['cookiecutter']
+
         # prompt the user to manually configure at the command line.
         # except when 'no-input' flag is set
         with import_patch:


Test patch:
diff --git a/tests/fake-repo-tmpl-_cookiecutter/cookiecutter.json b/tests/fake-repo-tmpl-_cookiecutter/cookiecutter.json
new file mode 100644
--- /dev/null
+++ b/tests/fake-repo-tmpl-_cookiecutter/cookiecutter.json
@@ -0,0 +1,20 @@
+{
+  "full_name": "Audrey Roy",
+  "email": "audreyr@gmail.com",
+  "github_username": "audreyr",
+  "project_name": "Fake Project Templated",
+  "test_list": [
+    1,
+    2,
+    3,
+    4
+  ],
+  "test_dict": {
+    "foo": "bar"
+  },
+  "repo_name": "{{ cookiecutter.project_name|lower|replace(' ', '-') }}",
+  "project_short_description": "This is a fake project.",
+  "release_date": "2013-07-28",
+  "year": "2013",
+  "version": "0.1"
+}
diff --git a/tests/fake-repo-tmpl-_cookiecutter/{{cookiecutter.repo_name}}/README.rst b/tests/fake-repo-tmpl-_cookiecutter/{{cookiecutter.repo_name}}/README.rst
new file mode 100644
--- /dev/null
+++ b/tests/fake-repo-tmpl-_cookiecutter/{{cookiecutter.repo_name}}/README.rst
@@ -0,0 +1,5 @@
+============
+Fake Project
+============
+
+Blah!!!!
diff --git a/tests/test_cli.py b/tests/test_cli.py
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -1,5 +1,4 @@
 """Collection of tests around cookiecutter's command-line interface."""
-
 import json
 import os
 import re
@@ -394,13 +393,17 @@ def test_echo_undefined_variable_error(output_dir, cli_runner):
     assert message in result.output
 
     context = {
+        '_cookiecutter': {
+            'github_username': 'hackebrot',
+            'project_slug': 'testproject',
+        },
         'cookiecutter': {
             'github_username': 'hackebrot',
             'project_slug': 'testproject',
             '_template': template_path,
             '_repo_dir': template_path,
             '_output_dir': output_dir,
-        }
+        },
     }
     context_str = json.dumps(context, indent=4, sort_keys=True)
     assert context_str in result.output
diff --git a/tests/test_main.py b/tests/test_main.py
--- a/tests/test_main.py
+++ b/tests/test_main.py
@@ -2,6 +2,32 @@
 from cookiecutter.main import cookiecutter
 
 
+def test_original_cookiecutter_options_preserved_in__cookiecutter(
+    monkeypatch,
+    mocker,
+    user_config_file,
+):
+    """Preserve original context options.
+
+    Tests you can access the original context options via
+    `context['_cookiecutter']`.
+    """
+    monkeypatch.chdir('tests/fake-repo-tmpl-_cookiecutter')
+    mock_generate_files = mocker.patch('cookiecutter.main.generate_files')
+    cookiecutter(
+        '.',
+        no_input=True,
+        replay=False,
+        config_file=user_config_file,
+    )
+    assert mock_generate_files.call_args[1]['context']['_cookiecutter'][
+        'test_list'
+    ] == [1, 2, 3, 4]
+    assert mock_generate_files.call_args[1]['context']['_cookiecutter'][
+        'test_dict'
+    ] == {"foo": "bar"}
+
+
 def test_replay_dump_template_name(
     monkeypatch, mocker, user_config_data, user_config_file
 ):