internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: pantsbuild/pants

Issue:
Docker: base image build arg detection does not support parametrized targets
**Describe the bug**
If the base image is parametrized, the dependency inference does not pick it up.

**Pants version**
`2.19.0`

**OS**
Any.

**Additional info**
[Reported](https://chat.pantsbuild.org/t/16633559/i-have-a-structure-where-i-have-a-set-of-containers-that-are#0e224a89-4839-45a4-91c5-bd9c8fa88c27) by @rbuckland 



Discussion:

Resolving patch:
diff --git a/src/python/pants/backend/docker/subsystems/dockerfile_wrapper_script.py b/src/python/pants/backend/docker/subsystems/dockerfile_wrapper_script.py
--- a/src/python/pants/backend/docker/subsystems/dockerfile_wrapper_script.py
+++ b/src/python/pants/backend/docker/subsystems/dockerfile_wrapper_script.py
@@ -28,7 +28,22 @@ class ParsedDockerfileInfo:
 
 _address_regexp = re.compile(
     r"""
-    (?://)?[^:# ]*:[^:#!@?/\= ]+(?:\#[^:#!@?= ]+)?$
+    # Optionally root:ed.
+    (?://)?
+    # Optional path.
+    [^:# ]*
+    # Optional target name.
+    (?::[^:#!@?/\= ]+)?
+    # Optional generated name.
+    (?:\#[^:#!@?= ]+)?
+    # Optional parametrizations.
+    (?:@
+      # key=value
+      [^=: ]+=[^,: ]*
+      # Optional additional `,key=value`s
+      (?:,[^=: ]+=[^,: ]*)*
+    )?
+    $
     """,
     re.VERBOSE,
 )


Test patch:
diff --git a/src/python/pants/backend/docker/subsystems/dockerfile_parser_test.py b/src/python/pants/backend/docker/subsystems/dockerfile_parser_test.py
--- a/src/python/pants/backend/docker/subsystems/dockerfile_parser_test.py
+++ b/src/python/pants/backend/docker/subsystems/dockerfile_parser_test.py
@@ -206,3 +206,39 @@ def test_generate_lockfile_without_python_backend() -> None:
             "--resolve=dockerfile-parser",
         ]
     ).assert_success()
+
+
+def test_baseimage_dep_inference(rule_runner: RuleRunner) -> None:
+    # We use a single run to grab all information, rather than parametrizing the test to save on
+    # rule invocations.
+    base_image_tags = dict(
+        BASE_IMAGE_1=":sibling",
+        BASE_IMAGE_2=":sibling@a=42,b=c",
+        BASE_IMAGE_3="else/where:weird#name@with=param",
+        BASE_IMAGE_4="//src/common:name@parametrized=foo-bar.1",
+        BASE_IMAGE_5="should/allow/default-target-name",
+    )
+
+    rule_runner.write_files(
+        {
+            "test/BUILD": "docker_image()",
+            "test/Dockerfile": "\n".join(
+                dedent(
+                    f"""\
+                    ARG {arg}="{tag}"
+                    FROM ${arg}
+                    """
+                )
+                for arg, tag in base_image_tags.items()
+            )
+            + dedent(
+                """\
+                ARG DECOY="this is not a target address"
+                FROM $DECOY
+                """
+            ),
+        }
+    )
+    addr = Address("test")
+    info = rule_runner.request(DockerfileInfo, [DockerfileInfoRequest(addr)])
+    assert info.from_image_build_args.to_dict() == base_image_tags
Repository: pantsbuild/pants

Issue:
Backport #20587 to 2.19.x to fix `Exec format error` when running Pants on Linux
**Describe the bug**
When running the command `pants` several of my coworkers have ran into `Exec format error`. This is because the shebang in the `nce/path/.../bin/pants` is longer than the 128 character limit imposed by linux and gets cutoff.

The 2.1.154 release of Pex includes a work around for this. However Pants 2.19.x currently uses [v2.1.148](https://github.com/pantsbuild/pants/blob/2.19.x/src/python/pants/backend/python/util_rules/pex_cli.py#L38).

During the `Pants Build Pex` step of the release, Pants packages itself as a pex, however it uses pex v2.1.148. This produces potentially broken Pants Pexs on linux if your home directory is sufficiently long.

I believe if we cherry picked the work done in #20587 it would solve the problem.

**Pants  version**
2.19

**OS**
Both

**Additional info**




Discussion:

Resolving patch:
diff --git a/src/python/pants/backend/python/util_rules/pex_cli.py b/src/python/pants/backend/python/util_rules/pex_cli.py
--- a/src/python/pants/backend/python/util_rules/pex_cli.py
+++ b/src/python/pants/backend/python/util_rules/pex_cli.py
@@ -35,8 +35,8 @@ class PexCli(TemplatedExternalTool):
     name = "pex"
     help = "The PEX (Python EXecutable) tool (https://github.com/pantsbuild/pex)."
 
-    default_version = "v2.1.148"
-    default_url_template = "https://github.com/pantsbuild/pex/releases/download/{version}/pex"
+    default_version = "v2.2.1"
+    default_url_template = "https://github.com/pex-tool/pex/releases/download/{version}/pex"
     version_constraints = ">=2.1.135,<3.0"
 
     @classproperty
@@ -46,8 +46,8 @@ def default_known_versions(cls):
                 (
                     cls.default_version,
                     plat,
-                    "5b1dee5a89fff25747753e917f96b8707ea62eed404d037d5f8cf8f2e80a13b7",
-                    "4197604",
+                    "e38e7052282f1855606880333a8f8c8a09458fabc5b5e5fb6c48ce11a4564a34",
+                    "4113219",
                 )
             )
             for plat in ["macos_arm64", "macos_x86_64", "linux_x86_64", "linux_arm64"]


Test patch:
Repository: pantsbuild/pants

Issue:
"export" goal docs have unclosed call out
**Describe the bug**

The warning callout about "exporting tools requires ..." seems to be unclosed:

- https://www.pantsbuild.org/2.18/reference/goals/export
- https://www.pantsbuild.org/2.19/reference/goals/export
- https://www.pantsbuild.org/2.20/reference/goals/export

![image](https://github.com/pantsbuild/pants/assets/1203825/5cfc04ee-27a7-49ba-a695-80d601aeace6)

**Pants version**
2.18 onwards

**OS**
macOS

**Additional info**
Introduced in #20604 


Discussion:

Resolving patch:
diff --git a/src/python/pants/core/goals/export.py b/src/python/pants/core/goals/export.py
--- a/src/python/pants/core/goals/export.py
+++ b/src/python/pants/core/goals/export.py
@@ -110,7 +110,9 @@ class ExportSubsystem(GoalSubsystem):
         Export Pants data for use in other tools, such as IDEs.
 
         :::caution Exporting tools requires creating a custom lockfile for them
+
         Follow [the instructions for creating tool lockfiles](../../docs/python/overview/lockfiles#lockfiles-for-tools)
+
         :::
         """
     )


Test patch:
Repository: pantsbuild/pants

Issue:
`[pex].emit_warnings` docs show `&#x3E;` literally instead of  `>`
**Describe the bug**

https://www.pantsbuild.org/2.20/reference/subsystems/pex#emit_warnings

![image](https://github.com/pantsbuild/pants/assets/1203825/3c7f7152-3f56-4d74-9e49-fe5ad4d3e7ca)


**Pants version**
2.20

**OS**
N/A

**Additional info**



Discussion:

Resolving patch:
diff --git a/src/python/pants/backend/python/util_rules/pex_environment.py b/src/python/pants/backend/python/util_rules/pex_environment.py
--- a/src/python/pants/backend/python/util_rules/pex_environment.py
+++ b/src/python/pants/backend/python/util_rules/pex_environment.py
@@ -89,8 +89,8 @@ def iter_path_entries():
 
             Note: Pants uses Pex internally in some ways that trigger some warnings at the moment,
             so enabling this may result in warnings not related to your code. See
-            <https://github.com/pantsbuild/pants/issues/20577> and
-            <https://github.com/pantsbuild/pants/issues/20586>.
+            [#20577](https://github.com/pantsbuild/pants/issues/20577) and
+            [#20586](https://github.com/pantsbuild/pants/issues/20586).
             """
         ),
     )


Test patch:
Repository: mindee/doctr

Issue:
[documents] Add basic document reader
For documents to be analyzed, we first need to add a utility for document reading (PDF mostly). The following specs would be nice to have:
- inherit for a shared reader class ("DocumentReader" for instance)
- to be located in the `doctr.documents.reader`  module

The following formats should be handled:
- [x] PDF (#8, #25): this resource would be nice to check: https://github.com/pymupdf/PyMuPDF
- [x] PNG (#30)
- [x] JPG (#30)


cc @charlesmindee 


Discussion:

Resolving patch:
diff --git a/doctr/documents/reader.py b/doctr/documents/reader.py
--- a/doctr/documents/reader.py
+++ b/doctr/documents/reader.py
@@ -8,7 +8,36 @@
 import cv2
 from typing import List, Tuple, Optional, Any
 
-__all__ = ['read_pdf']
+__all__ = ['read_pdf', 'read_img']
+
+
+def read_img(
+    file_path: str,
+    output_size: Optional[Tuple[int, int]] = None,
+    rgb_output: bool = True,
+) -> np.ndarray:
+    """Read an image file into numpy format
+
+    Example::
+        >>> from doctr.documents import read_img
+        >>> page = read_img("path/to/your/doc.jpg")
+
+    Args:
+        file_path: the path to the image file
+        output_size: the expected output size of each page in format H x W
+        rgb_output: whether the output ndarray channel order should be RGB instead of BGR.
+    Returns:
+        the page decoded as numpy ndarray of shape H x W x 3
+    """
+
+    img = cv2.imread(file_path, cv2.IMREAD_COLOR)
+    # Resizing
+    if isinstance(output_size, tuple):
+        img = cv2.resize(img, output_size[::-1], interpolation=cv2.INTER_LINEAR)
+    # Switch the channel order
+    if rgb_output:
+        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
+    return img
 
 
 def read_pdf(file_path: str, **kwargs: Any) -> List[np.ndarray]:


Test patch:
diff --git a/test/test_documents.py b/test/test_documents.py
--- a/test/test_documents.py
+++ b/test/test_documents.py
@@ -213,3 +213,30 @@ def test_read_pdf(mock_pdf):
     # 1 doc of 8 pages
     assert(len(doc_tensors) == 8)
     assert all(isinstance(page, np.ndarray) for page in doc_tensors)
+    assert all(page.dtype == np.uint8 for page in doc_tensors)
+
+
+def test_read_img(tmpdir_factory):
+
+    url = 'https://upload.wikimedia.org/wikipedia/commons/5/55/Grace_Hopper.jpg'
+    file = BytesIO(requests.get(url).content)
+    tmp_path = str(tmpdir_factory.mktemp("data").join("mock_img_file.jpg"))
+    with open(tmp_path, 'wb') as f:
+        f.write(file.getbuffer())
+
+    page = documents.reader.read_img(tmp_path)
+
+    # Data type
+    assert isinstance(page, np.ndarray)
+    assert page.dtype == np.uint8
+    # Shape
+    assert page.shape == (606, 517, 3)
+
+    # RGB
+    bgr_page = documents.reader.read_img(tmp_path, rgb_output=False)
+    assert np.all(page == bgr_page[..., ::-1])
+
+    # Resize
+    target_size = (200, 150)
+    resized_page = documents.reader.read_img(tmp_path, target_size)
+    assert resized_page.shape[:2] == target_size
Repository: mindee/doctr

Issue:
[docs] Enable documentation of multiple versions at once
As of now, the documentation that would be deployed publicly is only the latest version. The better alternative would be:
- having the latest version by default
- having the documentation of each release accessible as well using a displayed selector

Hugginface transformers did the following: https://github.com/huggingface/transformers/blob/master/.circleci/deploy.sh


Discussion:

Resolving patch:
diff --git a/docs/source/conf.py b/docs/source/conf.py
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -73,7 +73,7 @@
 #
 html_theme_options = {
     'collapse_navigation': False,
-    'display_version': True,
+    'display_version': False,
     'logo_only': False,
 }
 


Test patch:
Repository: mindee/doctr

Issue:
[docs] Add a visualization of the example script in the README
While the readme specifies how you can use the example script, it does not show any visualization examples. We could easily add one to help users.


Discussion:

Resolving patch:
diff --git a/doctr/utils/visualization.py b/doctr/utils/visualization.py
--- a/doctr/utils/visualization.py
+++ b/doctr/utils/visualization.py
@@ -56,6 +56,7 @@ def visualize_page(
     page: Dict[str, Any],
     image: np.ndarray,
     words_only: bool = True,
+    scale: float = 10,
 ) -> None:
     """Visualize a full page with predicted blocks, lines and words
 
@@ -74,9 +75,13 @@ def visualize_page(
         page: the exported Page of a Document
         image: np array of the page, needs to have the same shape than page['dimensions']
         words_only: whether only words should be displayed
+        scale: figsize of the largest windows side
     """
+    # Get proper scale and aspect ratio
+    h, w = image.shape[:2]
+    size = (scale * w / h, scale) if h > w else (scale, h / w * scale)
+    fig, ax = plt.subplots(figsize=size)
     # Display the image
-    _, ax = plt.subplots()
     ax.imshow(image)
     # hide both axis
     ax.axis('off')
@@ -111,3 +116,4 @@ def visualize_page(
 
     # Create mlp Cursor to hover patches in artists
     mplcursors.Cursor(artists, hover=2).connect("add", lambda sel: sel.annotation.set_text(sel.artist.get_label()))
+    fig.tight_layout()


Test patch:
Repository: mindee/doctr

Issue:
Demo app error when analyzing my first document
## 🐛 Bug

I tried to analyze a PNG and a PDF, got the same error. I try to change the model, didn't change anything.

## To Reproduce

Steps to reproduce the behavior:

1. Upload a PNG
2. Click on analyze document


<!-- If you have a code sample, error messages, stack traces, please provide it here as well -->
```
KeyError: 0
Traceback:
File "/Users/thibautmorla/opt/anaconda3/lib/python3.8/site-packages/streamlit/script_runner.py", line 337, in _run_script
    exec(code, module.__dict__)
File "/Users/thibautmorla/Downloads/doctr/demo/app.py", line 93, in <module>
    main()
File "/Users/thibautmorla/Downloads/doctr/demo/app.py", line 77, in main
    seg_map = predictor.det_predictor.model(processed_batches[0])[0]
```


## Additional context

First image upload


Discussion:
Hi @Morluche !
Thanks for reporting this, would you mind sharing the doc or image that you used so that we can reproduce the error please ? :pray: 
<img width="396" alt="Capture d’écran 2021-03-01 à 11 21 43" src="https://user-images.githubusercontent.com/66415445/116097331-570c3100-a6aa-11eb-82b1-90606bcb748a.png">
[dropcontact_invoice_Azq8WZSSg3AUMHCT (1).pdf](https://github.com/mindee/doctr/files/6377755/dropcontact_invoice_Azq8WZSSg3AUMHCT.1.pdf)


Resolving patch:
diff --git a/demo/app.py b/demo/app.py
--- a/demo/app.py
+++ b/demo/app.py
@@ -74,7 +74,8 @@ def main():
 
                 # Forward the image to the model
                 processed_batches = predictor.det_predictor.pre_processor(doc)
-                seg_map = predictor.det_predictor.model(processed_batches[0])[0]
+                seg_map = predictor.det_predictor.model(processed_batches[0])["proba_map"]
+                seg_map = tf.squeeze(seg_map, axis=[0, 3])
                 seg_map = cv2.resize(seg_map.numpy(), (doc[0].shape[1], doc[0].shape[0]),
                                      interpolation=cv2.INTER_LINEAR)
                 # Plot the raw heatmap


Test patch:
Repository: mindee/doctr

Issue:
[document] Check integrity of PDF --> img conversion with default DPI
The current PDF reading implies a conversion to an image. As we are using the default args for this conversion, the DPI value might be low. We need to check that the default parameter is not bringing about performance issues due to low resolution rendering.


Discussion:

Resolving patch:
diff --git a/demo/app.py b/demo/app.py
--- a/demo/app.py
+++ b/demo/app.py
@@ -48,7 +48,7 @@ def main():
     uploaded_file = st.sidebar.file_uploader("Upload files", type=['pdf', 'png', 'jpeg', 'jpg'])
     if uploaded_file is not None:
         if uploaded_file.name.endswith('.pdf'):
-            doc = DocumentFile.from_pdf(uploaded_file.read()).as_images()
+            doc = DocumentFile.from_pdf(uploaded_file.read()).as_images(output_size=(1024, 1024))
         else:
             doc = DocumentFile.from_images(uploaded_file.read())
         cols[0].image(doc[0], "First page", use_column_width=True)
diff --git a/doctr/documents/reader.py b/doctr/documents/reader.py
--- a/doctr/documents/reader.py
+++ b/doctr/documents/reader.py
@@ -97,7 +97,8 @@ def convert_page_to_numpy(
 
     Args:
         page: the page of a file read with PyMuPDF
-        output_size: the expected output size of each page in format H x W
+        output_size: the expected output size of each page in format H x W. Default goes to 840 x 595 for A4 pdf,
+        if you want to increase the resolution while preserving the original A4 aspect ratio can pass (1024, 726)
         rgb_output: whether the output ndarray channel order should be RGB instead of BGR.
 
     Returns:
diff --git a/scripts/analyze.py b/scripts/analyze.py
--- a/scripts/analyze.py
+++ b/scripts/analyze.py
@@ -21,9 +21,8 @@
 def main(args):
 
     model = ocr_predictor(args.detection, args.recognition, pretrained=True)
-
     if args.path.endswith(".pdf"):
-        doc = DocumentFile.from_pdf(args.path).as_images()
+        doc = DocumentFile.from_pdf(args.path).as_images(output_size=(1024, 1024))
     else:
         doc = DocumentFile.from_images(args.path)
 


Test patch:
Repository: mindee/doctr

Issue:
Pb: unitest text_export_size not passing on tf 2.3.1
Unitest text_export_size not OK locally on tf 2.3.1 : 

```
def test_export_sizes(test_convert_to_tflite, test_convert_to_fp16, test_quantize_model):
        assert sys.getsizeof(test_convert_to_tflite) > sys.getsizeof(test_convert_to_fp16)
>       assert sys.getsizeof(test_convert_to_fp16) > sys.getsizeof(test_quantize_model)
E       AssertionError: assert 3041 > 3041

```


Discussion:
I opened an issue about this on TF repo: https://github.com/tensorflow/tensorflow/issues/46922
Let's make a conditional test while this gets investigated by the authors :ok_hand: 
Since the unittest has been adapted by #62, I'm moving this to next milestone considering this requires feedback from the TF team

Resolving patch:
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -40,7 +40,7 @@
     "numpy>=1.16.0",
     "scipy>=1.4.0",
     "opencv-python>=4.2",
-    "tensorflow>=2.3.0",
+    "tensorflow>=2.4.0",
     "PyMuPDF>=1.16.0,<1.18.11",
     "pyclipper>=1.2.0",
     "shapely>=1.6.0",


Test patch:
diff --git a/test/test_models_export.py b/test/test_models_export.py
--- a/test/test_models_export.py
+++ b/test/test_models_export.py
@@ -40,7 +40,4 @@ def test_quantize_model(mock_model):
 
 def test_export_sizes(test_convert_to_tflite, test_convert_to_fp16, test_quantize_model):
     assert sys.getsizeof(test_convert_to_tflite) > sys.getsizeof(test_convert_to_fp16)
-    if tf.__version__ < "2.4.0":
-        assert sys.getsizeof(test_convert_to_fp16) >= sys.getsizeof(test_quantize_model)
-    else:
-        assert sys.getsizeof(test_convert_to_fp16) > sys.getsizeof(test_quantize_model)
+    assert sys.getsizeof(test_convert_to_fp16) > sys.getsizeof(test_quantize_model)
Repository: mindee/doctr

Issue:
[utils] Add visualization capabilities for independent tasks
Visualization is end-to-end for the moment dynamic, but this means that a static version is not currently available, nor that there is a visualization option for text detection or text recognition only. We should discuss and add visualization for the following blocks:
- [ ] Text detection: display bounding boxes of detected items over the image
- [ ] Text recognition: display the label and confidence in a corner of the crop


Discussion:

Resolving patch:
diff --git a/doctr/utils/visualization.py b/doctr/utils/visualization.py
--- a/doctr/utils/visualization.py
+++ b/doctr/utils/visualization.py
@@ -8,13 +8,14 @@
 import matplotlib.patches as patches
 import mplcursors
 from PIL import ImageFont, ImageDraw, Image
+from copy import deepcopy
 import numpy as np
 import cv2
 from typing import Tuple, List, Dict, Any, Union, Optional
 
 from .common_types import BoundingBox, RotatedBbox
 
-__all__ = ['visualize_page', 'synthetize_page']
+__all__ = ['visualize_page', 'synthetize_page', 'draw_boxes']
 
 
 def rect_patch(
@@ -294,3 +295,34 @@ def synthetize_page(
                 response[ymin:ymax, xmin:xmax, :] = np.array(img)
 
     return response
+
+
+def draw_boxes(
+    boxes: np.ndarray,
+    image: np.ndarray,
+    color: Optional[Tuple] = None,
+    **kwargs
+) -> None:
+    """Draw an array of relative straight boxes on an image
+
+    Args:
+        boxes: array of relative boxes, of shape (*, 4)
+        image: np array, float32 or uint8
+    """
+    h, w = image.shape[:2]
+    # Convert boxes to absolute coords
+    _boxes = deepcopy(boxes)
+    _boxes[:, [0, 2]] *= w
+    _boxes[:, [1, 3]] *= h
+    _boxes = _boxes.astype(np.int32)
+    for box in _boxes.tolist():
+        xmin, ymin, xmax, ymax = box
+        image = cv2.rectangle(
+            image,
+            (xmin, ymin),
+            (xmax, ymax),
+            color=color if isinstance(color, tuple) else (0, 0, 255),
+            thickness=2
+        )
+    plt.imshow(image)
+    plt.plot(**kwargs)


Test patch:
diff --git a/test/common/test_utils_visualization.py b/test/common/test_utils_visualization.py
--- a/test/common/test_utils_visualization.py
+++ b/test/common/test_utils_visualization.py
@@ -25,3 +25,14 @@ def test_draw_page():
     pages = _mock_pages()
     visualization.synthetize_page(pages[0].export(), draw_proba=True)
     visualization.synthetize_page(pages[0].export(), draw_proba=False)
+
+
+def test_draw_boxes():
+    image = np.ones((256, 256, 3), dtype=np.float32)
+    boxes = [
+        [0.1, 0.1, 0.2, 0.2],
+        [0.15, 0.15, 0.19, 0.2],  # to suppress
+        [0.5, 0.5, 0.6, 0.55],
+        [0.55, 0.5, 0.7, 0.55],  # to suppress
+    ]
+    visualization.draw_boxes(boxes=np.array(boxes), image=image, block=False)
Repository: mindee/doctr

Issue:
Import error synthetize_page func in streamlit demo script
## 🐛 Bug

Import bug while running the streamlit demo script

## To Reproduce

Steps to reproduce the behavior:

1. Install the current package version 
2. Run streamlit demo/app.py

Error message : ImportError: cannot import name 'synthetize_page' from 'doctr.utils.visualization' (/home/ubuntu/repos/mindee/doctr/doctr/utils/visualization.py)

## Correction 

Try to import "synthetize_page" [from](https://github.com/mindee/doctr/blob/cfc329f8b21cd7d8c08d5c9190c53bd77a3149c4/doctr/utils/visualization.py#L19) whereas it should be "synthesize_page" [here](https://github.com/mindee/doctr/blob/cfc329f8b21cd7d8c08d5c9190c53bd77a3149c4/demo/app.py#L21) . It's probably a typo. It works after renaming.


Discussion:

Resolving patch:
diff --git a/demo/app.py b/demo/app.py
--- a/demo/app.py
+++ b/demo/app.py
@@ -18,7 +18,7 @@
 
 from doctr.io import DocumentFile
 from doctr.models import ocr_predictor
-from doctr.utils.visualization import synthetize_page, visualize_page
+from doctr.utils.visualization import visualize_page
 
 DET_ARCHS = ["db_resnet50"]
 RECO_ARCHS = ["crnn_vgg16_bn", "master", "sar_resnet31"]
@@ -96,7 +96,7 @@ def main():
 
                 # Page reconsitution under input page
                 page_export = out.pages[0].export()
-                img = synthetize_page(page_export)
+                img = out.pages[0].synthesize()
                 cols[3].image(img, clamp=True)
 
                 # Display JSON


Test patch: