prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  st.json collapse parameter
  _(Note, you don't have to fill out every section here. They're just here for guidance. That said, nicely detailed feature requests are more likely to get eng attention sooner)_
  
  ### Problem
  
  Have a parameter for st.json(body, collapse) where the default is `False` but you can set it to `True`. This would allow developers to choose if the json file is expanded or collapsed when rendered on the Streamlit app.
  
  Requested by a community member, link to forum post: 
  https://discuss.streamlit.io/t/json-collapse-option/17159
  
  ### Solution
  
  **MVP:** a parameter to set the view of a json file on the first render in Streamlit
  
  
  
  </issue>
  <code>
  [start of e2e/scripts/st_json.py]
  1 # Copyright 2018-2022 Streamlit Inc.
  2 #
  3 # Licensed under the Apache License, Version 2.0 (the "License");
  4 # you may not use this file except in compliance with the License.
  5 # You may obtain a copy of the License at
  6 #
  7 #    http://www.apache.org/licenses/LICENSE-2.0
  8 #
  9 # Unless required by applicable law or agreed to in writing, software
  10 # distributed under the License is distributed on an "AS IS" BASIS,
  11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12 # See the License for the specific language governing permissions and
  13 # limitations under the License.
  14 
  15 import streamlit as st
  16 
  17 data = {"foo": "bar"}
  18 st.json(data)
  19
  [end of e2e/scripts/st_json.py]
  [start of lib/streamlit/elements/json.py]
  1 # Copyright 2018-2022 Streamlit Inc.
  2 #
  3 # Licensed under the Apache License, Version 2.0 (the "License");
  4 # you may not use this file except in compliance with the License.
  5 # You may obtain a copy of the License at
  6 #
  7 #    http://www.apache.org/licenses/LICENSE-2.0
  8 #
  9 # Unless required by applicable law or agreed to in writing, software
  10 # distributed under the License is distributed on an "AS IS" BASIS,
  11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12 # See the License for the specific language governing permissions and
  13 # limitations under the License.
  14 
  15 import json
  16 from typing import cast
  17 
  18 import streamlit
  19 from streamlit.proto.Json_pb2 import Json as JsonProto
  20 from streamlit.state import AutoSessionState
  21 
  22 
  23 class JsonMixin:
  24     def json(self, body):
  25         """Display object or string as a pretty-printed JSON string.
  26 
  27         Parameters
  28         ----------
  29         body : Object or str
  30             The object to print as JSON. All referenced objects should be
  31             serializable to JSON as well. If object is a string, we assume it
  32             contains serialized JSON.
  33 
  34         Example
  35         -------
  36         >>> st.json({
  37         ...     'foo': 'bar',
  38         ...     'baz': 'boz',
  39         ...     'stuff': [
  40         ...         'stuff 1',
  41         ...         'stuff 2',
  42         ...         'stuff 3',
  43         ...         'stuff 5',
  44         ...     ],
  45         ... })
  46 
  47         .. output::
  48            https://share.streamlit.io/streamlit/docs/main/python/api-examples-source/data.json.py
  49            height: 385px
  50 
  51         """
  52         import streamlit as st
  53 
  54         if isinstance(body, AutoSessionState):
  55             body = body.to_dict()
  56 
  57         if not isinstance(body, str):
  58             try:
  59                 body = json.dumps(body, default=repr)
  60             except TypeError as err:
  61                 st.warning(
  62                     "Warning: this data structure was not fully serializable as "
  63                     "JSON due to one or more unexpected keys.  (Error was: %s)" % err
  64                 )
  65                 body = json.dumps(body, skipkeys=True, default=repr)
  66 
  67         json_proto = JsonProto()
  68         json_proto.body = body
  69         return self.dg._enqueue("json", json_proto)
  70 
  71     @property
  72     def dg(self) -> "streamlit.delta_generator.DeltaGenerator":
  73         """Get our DeltaGenerator."""
  74         return cast("streamlit.delta_generator.DeltaGenerator", self)
  75
  [end of lib/streamlit/elements/json.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/e2e/scripts/st_json.py b/e2e/scripts/st_json.py
  --- a/e2e/scripts/st_json.py
  +++ b/e2e/scripts/st_json.py
  @@ -16,3 +16,4 @@
   
   data = {"foo": "bar"}
   st.json(data)
  +st.json(data, expanded=False)
  diff --git a/lib/streamlit/elements/json.py b/lib/streamlit/elements/json.py
  --- a/lib/streamlit/elements/json.py
  +++ b/lib/streamlit/elements/json.py
  @@ -21,7 +21,12 @@
   
   
   class JsonMixin:
  -    def json(self, body):
  +    def json(
  +        self,
  +        body,
  +        *,  # keyword-only arguments:
  +        expanded=True,
  +    ):
           """Display object or string as a pretty-printed JSON string.
   
           Parameters
  @@ -31,6 +36,11 @@
               serializable to JSON as well. If object is a string, we assume it
               contains serialized JSON.
   
  +        expanded : bool
  +            An optional boolean that allows the user to set whether the initial
  +            state of this json element should be expanded. Defaults to True.
  +            This argument can only be supplied by keyword.
  +
           Example
           -------
           >>> st.json({
  @@ -66,6 +76,7 @@
   
           json_proto = JsonProto()
           json_proto.body = body
  +        json_proto.expanded = expanded
           return self.dg._enqueue("json", json_proto)
   
       @property
  
verification_info: {"golden_diff": "diff --git a/e2e/scripts/st_json.py b/e2e/scripts/st_json.py\n--- a/e2e/scripts/st_json.py\n+++ b/e2e/scripts/st_json.py\n@@ -16,3 +16,4 @@\n \n data = {\"foo\": \"bar\"}\n st.json(data)\n+st.json(data, expanded=False)\ndiff --git a/lib/streamlit/elements/json.py b/lib/streamlit/elements/json.py\n--- a/lib/streamlit/elements/json.py\n+++ b/lib/streamlit/elements/json.py\n@@ -21,7 +21,12 @@\n \n \n class JsonMixin:\n-    def json(self, body):\n+    def json(\n+        self,\n+        body,\n+        *,  # keyword-only arguments:\n+        expanded=True,\n+    ):\n         \"\"\"Display object or string as a pretty-printed JSON string.\n \n         Parameters\n@@ -31,6 +36,11 @@\n             serializable to JSON as well. If object is a string, we assume it\n             contains serialized JSON.\n \n+        expanded : bool\n+            An optional boolean that allows the user to set whether the initial\n+            state of this json element should be expanded. Defaults to True.\n+            This argument can only be supplied by keyword.\n+\n         Example\n         -------\n         >>> st.json({\n@@ -66,6 +76,7 @@\n \n         json_proto = JsonProto()\n         json_proto.body = body\n+        json_proto.expanded = expanded\n         return self.dg._enqueue(\"json\", json_proto)\n \n     @property\n", "issue": "st.json collapse parameter\n_(Note, you don't have to fill out every section here. They're just here for guidance. That said, nicely detailed feature requests are more likely to get eng attention sooner)_\r\n\r\n### Problem\r\n\r\nHave a parameter for st.json(body, collapse) where the default is `False` but you can set it to `True`. This would allow developers to choose if the json file is expanded or collapsed when rendered on the Streamlit app.\r\n\r\nRequested by a community member, link to forum post: \r\nhttps://discuss.streamlit.io/t/json-collapse-option/17159\r\n\r\n### Solution\r\n\r\n**MVP:** a parameter to set the view of a json file on the first render in Streamlit\r\n\r\n\n", "before_files": [{"content": "# Copyright 2018-2022 Streamlit Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#    http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport streamlit as st\n\ndata = {\"foo\": \"bar\"}\nst.json(data)\n", "path": "e2e/scripts/st_json.py"}, {"content": "# Copyright 2018-2022 Streamlit Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#    http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport json\nfrom typing import cast\n\nimport streamlit\nfrom streamlit.proto.Json_pb2 import Json as JsonProto\nfrom streamlit.state import AutoSessionState\n\n\nclass JsonMixin:\n    def json(self, body):\n        \"\"\"Display object or string as a pretty-printed JSON string.\n\n        Parameters\n        ----------\n        body : Object or str\n            The object to print as JSON. All referenced objects should be\n            serializable to JSON as well. If object is a string, we assume it\n            contains serialized JSON.\n\n        Example\n        -------\n        >>> st.json({\n        ...     'foo': 'bar',\n        ...     'baz': 'boz',\n        ...     'stuff': [\n        ...         'stuff 1',\n        ...         'stuff 2',\n        ...         'stuff 3',\n        ...         'stuff 5',\n        ...     ],\n        ... })\n\n        .. output::\n           https://share.streamlit.io/streamlit/docs/main/python/api-examples-source/data.json.py\n           height: 385px\n\n        \"\"\"\n        import streamlit as st\n\n        if isinstance(body, AutoSessionState):\n            body = body.to_dict()\n\n        if not isinstance(body, str):\n            try:\n                body = json.dumps(body, default=repr)\n            except TypeError as err:\n                st.warning(\n                    \"Warning: this data structure was not fully serializable as \"\n                    \"JSON due to one or more unexpected keys.  (Error was: %s)\" % err\n                )\n                body = json.dumps(body, skipkeys=True, default=repr)\n\n        json_proto = JsonProto()\n        json_proto.body = body\n        return self.dg._enqueue(\"json\", json_proto)\n\n    @property\n    def dg(self) -> \"streamlit.delta_generator.DeltaGenerator\":\n        \"\"\"Get our DeltaGenerator.\"\"\"\n        return cast(\"streamlit.delta_generator.DeltaGenerator\", self)\n", "path": "lib/streamlit/elements/json.py"}]}