We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Make process-images case-insensitive to file types.
File: `contrib/scripts/process_images.py`
When processing a folder with `--extension=jpg`, `JPG` files will be ignored.

Would be nice to have a file type handler that converts the extension to the unique format, e.g. if a folder has mixed file extensions like 'jpg', 'JPG', 'JPEG', 'jpeg', we should be able to read them all using `--extension=jpg`. 

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `catalyst/contrib/scripts/process_images.py`
Content:
```
1 #!/usr/bin/env python
2 # usage:
3 # catalyst-data process-images \
4 #   --in-dir ./data_in \
5 #   --out-dir ./data_out \
6 #   --num-workers 4 \
7 #   --max-size 224 \
8 #   --clear-exif \
9 #   --grayscale
10 
11 import argparse
12 from functools import wraps
13 import os
14 from pathlib import Path
15 
16 import cv2
17 import numpy as np
18 
19 from catalyst.utils import (
20     boolean_flag, get_pool, imread, imwrite, Pool, tqdm_parallel_imap
21 )
22 
23 # Limit cv2's processor usage
24 # cv2.setNumThreads() doesn't work
25 os.environ["OMP_NUM_THREADS"] = "1"
26 os.environ["MKL_NUM_THREADS"] = "1"
27 cv2.ocl.setUseOpenCL(False)
28 
29 
30 def build_args(parser):
31     parser.add_argument(
32         "--in-dir",
33         required=True,
34         type=Path,
35         help="Raw data folder path")
36 
37     parser.add_argument(
38         "--out-dir",
39         required=True,
40         type=Path,
41         help="Processed images folder path")
42 
43     parser.add_argument(
44         "--num-workers", "-j",
45         default=1,
46         type=int,
47         help="Number of workers to parallel the processing")
48 
49     parser.add_argument(
50         "--extension",
51         default="jpg",
52         type=str,
53         help="Input images extension. JPG is default.")
54 
55     parser.add_argument(
56         "--max-size",
57         default=None,
58         required=False,
59         type=int,
60         help="Output images size. E.g. 224, 448")
61 
62     boolean_flag(
63         parser,
64         "clear-exif",
65         default=True,
66         help="Clear EXIF data")
67 
68     boolean_flag(
69         parser,
70         "grayscale",
71         default=False,
72         help="Read images in grayscale")
73 
74     boolean_flag(
75         parser,
76         "expand-dims",
77         default=True,
78         help="Expand array shape for grayscale images")
79 
80     return parser
81 
82 
83 def parse_args():
84     parser = argparse.ArgumentParser()
85     build_args(parser)
86     args = parser.parse_args()
87     return args
88 
89 
90 # <--- taken from albumentations - https://github.com/albu/albumentations --->
91 
92 def py3round(number):
93     """Unified rounding in all python versions."""
94     if abs(round(number) - number) == 0.5:
95         return int(2.0 * round(number / 2.0))
96 
97     return int(round(number))
98 
99 
100 def preserve_channel_dim(func):
101     """Preserve dummy channel dim."""
102     @wraps(func)
103     def wrapped_function(img, *args, **kwargs):
104         shape = img.shape
105         result = func(img, *args, **kwargs)
106         if len(shape) == 3 and shape[-1] == 1 and len(result.shape) == 2:
107             result = np.expand_dims(result, axis=-1)
108         return result
109 
110     return wrapped_function
111 
112 
113 def _func_max_size(img, max_size, interpolation, func):
114     height, width = img.shape[:2]
115 
116     scale = max_size / float(func(width, height))
117 
118     if scale != 1.0:
119         out_size = tuple(py3round(dim * scale) for dim in (width, height))
120         img = cv2.resize(img, out_size, interpolation=interpolation)
121     return img
122 
123 
124 @preserve_channel_dim
125 def longest_max_size(img, max_size, interpolation):
126     return _func_max_size(img, max_size, interpolation, max)
127 
128 # <--- taken from albumentations - https://github.com/albu/albumentations --->
129 
130 
131 class Preprocessor:
132     def __init__(
133         self,
134         in_dir: Path,
135         out_dir: Path,
136         max_size: int = None,
137         clear_exif: bool = True,
138         grayscale: bool = False,
139         expand_dims: bool = True,
140         extension: str = "jpg",
141         interpolation=cv2.INTER_LANCZOS4,
142     ):
143         self.in_dir = in_dir
144         self.out_dir = out_dir
145         self.grayscale = grayscale
146         self.expand_dims = expand_dims
147         self.max_size = max_size
148         self.clear_exif = clear_exif
149         self.extension = extension
150         self.interpolation = interpolation
151 
152     def preprocess(self, image_path: Path):
153         try:
154             if self.extension in ("jpg", "JPG", "jpeg", "JPEG"):
155                 image = np.array(
156                     imread(
157                         uri=image_path,
158                         grayscale=self.grayscale,
159                         expand_dims=self.expand_dims,
160                         exifrotate=not self.clear_exif))
161             else:  # imread does not have exifrotate for non-jpeg type
162                 image = np.array(
163                     imread(
164                         uri=image_path,
165                         grayscale=self.grayscale,
166                         expand_dims=self.expand_dims))
167         except Exception as e:
168             print(f"Cannot read file {image_path}, exception: {e}")
169             return
170 
171         if self.max_size is not None:
172             image = longest_max_size(image, self.max_size, self.interpolation)
173 
174         target_path = self.out_dir / image_path.relative_to(self.in_dir)
175         target_path.parent.mkdir(parents=True, exist_ok=True)
176 
177         image = image.clip(0, 255).round().astype(np.uint8)
178         imwrite(target_path, image)
179 
180     def process_all(self, pool: Pool):
181         images = [*self.in_dir.glob(f"**/*.{self.extension}")]
182         tqdm_parallel_imap(self.preprocess, images, pool)
183 
184 
185 def main(args, _=None):
186     args = args.__dict__
187     args.pop("command", None)
188     num_workers = args.pop("num_workers")
189 
190     with get_pool(num_workers) as p:
191         Preprocessor(**args).process_all(p)
192 
193 
194 if __name__ == "__main__":
195     args = parse_args()
196     main(args)
197
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/catalyst/contrib/scripts/process_images.py b/catalyst/contrib/scripts/process_images.py
--- a/catalyst/contrib/scripts/process_images.py
+++ b/catalyst/contrib/scripts/process_images.py
@@ -8,6 +8,7 @@
 #   --clear-exif \
 #   --grayscale
 
+from typing import List  # isort:skip
 import argparse
 from functools import wraps
 import os
@@ -17,7 +18,8 @@
 import numpy as np
 
 from catalyst.utils import (
-    boolean_flag, get_pool, imread, imwrite, Pool, tqdm_parallel_imap
+    boolean_flag, get_pool, has_image_extension, imread, imwrite, Pool,
+    tqdm_parallel_imap
 )
 
 # Limit cv2's processor usage
@@ -46,12 +48,6 @@
         type=int,
         help="Number of workers to parallel the processing")
 
-    parser.add_argument(
-        "--extension",
-        default="jpg",
-        type=str,
-        help="Input images extension. JPG is default.")
-
     parser.add_argument(
         "--max-size",
         default=None,
@@ -137,7 +133,6 @@
         clear_exif: bool = True,
         grayscale: bool = False,
         expand_dims: bool = True,
-        extension: str = "jpg",
         interpolation=cv2.INTER_LANCZOS4,
     ):
         self.in_dir = in_dir
@@ -146,24 +141,19 @@
         self.expand_dims = expand_dims
         self.max_size = max_size
         self.clear_exif = clear_exif
-        self.extension = extension
         self.interpolation = interpolation
 
     def preprocess(self, image_path: Path):
         try:
-            if self.extension in ("jpg", "JPG", "jpeg", "JPEG"):
-                image = np.array(
-                    imread(
-                        uri=image_path,
-                        grayscale=self.grayscale,
-                        expand_dims=self.expand_dims,
-                        exifrotate=not self.clear_exif))
-            else:  # imread does not have exifrotate for non-jpeg type
-                image = np.array(
-                    imread(
-                        uri=image_path,
-                        grayscale=self.grayscale,
-                        expand_dims=self.expand_dims))
+            _, extension = os.path.splitext(image_path)
+            kwargs = {
+                "grayscale": self.grayscale, "expand_dims": self.expand_dims
+            }
+            if extension.lower() in {"jpg", "jpeg"}:
+                # imread does not have exifrotate for non-jpeg type
+                kwargs["exifrotate"] = not self.clear_exif
+
+            image = np.array(imread(uri=image_path, **kwargs))
         except Exception as e:
             print(f"Cannot read file {image_path}, exception: {e}")
             return
@@ -178,7 +168,14 @@
         imwrite(target_path, image)
 
     def process_all(self, pool: Pool):
-        images = [*self.in_dir.glob(f"**/*.{self.extension}")]
+        images: List[Path] = []
+        for root, dirs, files in os.walk(self.in_dir):
+            root = Path(root)
+            images.extend([
+                root / filename for filename in files
+                if has_image_extension(filename)
+            ])
+
         tqdm_parallel_imap(self.preprocess, images, pool)

{"golden_diff": "diff --git a/catalyst/contrib/scripts/process_images.py b/catalyst/contrib/scripts/process_images.py\n--- a/catalyst/contrib/scripts/process_images.py\n+++ b/catalyst/contrib/scripts/process_images.py\n@@ -8,6 +8,7 @@\n #   --clear-exif \\\n #   --grayscale\n \n+from typing import List  # isort:skip\n import argparse\n from functools import wraps\n import os\n@@ -17,7 +18,8 @@\n import numpy as np\n \n from catalyst.utils import (\n-    boolean_flag, get_pool, imread, imwrite, Pool, tqdm_parallel_imap\n+    boolean_flag, get_pool, has_image_extension, imread, imwrite, Pool,\n+    tqdm_parallel_imap\n )\n \n # Limit cv2's processor usage\n@@ -46,12 +48,6 @@\n         type=int,\n         help=\"Number of workers to parallel the processing\")\n \n-    parser.add_argument(\n-        \"--extension\",\n-        default=\"jpg\",\n-        type=str,\n-        help=\"Input images extension. JPG is default.\")\n-\n     parser.add_argument(\n         \"--max-size\",\n         default=None,\n@@ -137,7 +133,6 @@\n         clear_exif: bool = True,\n         grayscale: bool = False,\n         expand_dims: bool = True,\n-        extension: str = \"jpg\",\n         interpolation=cv2.INTER_LANCZOS4,\n     ):\n         self.in_dir = in_dir\n@@ -146,24 +141,19 @@\n         self.expand_dims = expand_dims\n         self.max_size = max_size\n         self.clear_exif = clear_exif\n-        self.extension = extension\n         self.interpolation = interpolation\n \n     def preprocess(self, image_path: Path):\n         try:\n-            if self.extension in (\"jpg\", \"JPG\", \"jpeg\", \"JPEG\"):\n-                image = np.array(\n-                    imread(\n-                        uri=image_path,\n-                        grayscale=self.grayscale,\n-                        expand_dims=self.expand_dims,\n-                        exifrotate=not self.clear_exif))\n-            else:  # imread does not have exifrotate for non-jpeg type\n-                image = np.array(\n-                    imread(\n-                        uri=image_path,\n-                        grayscale=self.grayscale,\n-                        expand_dims=self.expand_dims))\n+            _, extension = os.path.splitext(image_path)\n+            kwargs = {\n+                \"grayscale\": self.grayscale, \"expand_dims\": self.expand_dims\n+            }\n+            if extension.lower() in {\"jpg\", \"jpeg\"}:\n+                # imread does not have exifrotate for non-jpeg type\n+                kwargs[\"exifrotate\"] = not self.clear_exif\n+\n+            image = np.array(imread(uri=image_path, **kwargs))\n         except Exception as e:\n             print(f\"Cannot read file {image_path}, exception: {e}\")\n             return\n@@ -178,7 +168,14 @@\n         imwrite(target_path, image)\n \n     def process_all(self, pool: Pool):\n-        images = [*self.in_dir.glob(f\"**/*.{self.extension}\")]\n+        images: List[Path] = []\n+        for root, dirs, files in os.walk(self.in_dir):\n+            root = Path(root)\n+            images.extend([\n+                root / filename for filename in files\n+                if has_image_extension(filename)\n+            ])\n+\n         tqdm_parallel_imap(self.preprocess, images, pool)\n", "issue": "Make process-images case-insensitive to file types.\nFile: `contrib/scripts/process_images.py`\r\nWhen processing a folder with `--extension=jpg`, `JPG` files will be ignored.\r\n\r\nWould be nice to have a file type handler that converts the extension to the unique format, e.g. if a folder has mixed file extensions like 'jpg', 'JPG', 'JPEG', 'jpeg', we should be able to read them all using `--extension=jpg`. \n", "before_files": [{"content": "#!/usr/bin/env python\n# usage:\n# catalyst-data process-images \\\n#   --in-dir ./data_in \\\n#   --out-dir ./data_out \\\n#   --num-workers 4 \\\n#   --max-size 224 \\\n#   --clear-exif \\\n#   --grayscale\n\nimport argparse\nfrom functools import wraps\nimport os\nfrom pathlib import Path\n\nimport cv2\nimport numpy as np\n\nfrom catalyst.utils import (\n    boolean_flag, get_pool, imread, imwrite, Pool, tqdm_parallel_imap\n)\n\n# Limit cv2's processor usage\n# cv2.setNumThreads() doesn't work\nos.environ[\"OMP_NUM_THREADS\"] = \"1\"\nos.environ[\"MKL_NUM_THREADS\"] = \"1\"\ncv2.ocl.setUseOpenCL(False)\n\n\ndef build_args(parser):\n    parser.add_argument(\n        \"--in-dir\",\n        required=True,\n        type=Path,\n        help=\"Raw data folder path\")\n\n    parser.add_argument(\n        \"--out-dir\",\n        required=True,\n        type=Path,\n        help=\"Processed images folder path\")\n\n    parser.add_argument(\n        \"--num-workers\", \"-j\",\n        default=1,\n        type=int,\n        help=\"Number of workers to parallel the processing\")\n\n    parser.add_argument(\n        \"--extension\",\n        default=\"jpg\",\n        type=str,\n        help=\"Input images extension. JPG is default.\")\n\n    parser.add_argument(\n        \"--max-size\",\n        default=None,\n        required=False,\n        type=int,\n        help=\"Output images size. E.g. 224, 448\")\n\n    boolean_flag(\n        parser,\n        \"clear-exif\",\n        default=True,\n        help=\"Clear EXIF data\")\n\n    boolean_flag(\n        parser,\n        \"grayscale\",\n        default=False,\n        help=\"Read images in grayscale\")\n\n    boolean_flag(\n        parser,\n        \"expand-dims\",\n        default=True,\n        help=\"Expand array shape for grayscale images\")\n\n    return parser\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser()\n    build_args(parser)\n    args = parser.parse_args()\n    return args\n\n\n# <--- taken from albumentations - https://github.com/albu/albumentations --->\n\ndef py3round(number):\n    \"\"\"Unified rounding in all python versions.\"\"\"\n    if abs(round(number) - number) == 0.5:\n        return int(2.0 * round(number / 2.0))\n\n    return int(round(number))\n\n\ndef preserve_channel_dim(func):\n    \"\"\"Preserve dummy channel dim.\"\"\"\n    @wraps(func)\n    def wrapped_function(img, *args, **kwargs):\n        shape = img.shape\n        result = func(img, *args, **kwargs)\n        if len(shape) == 3 and shape[-1] == 1 and len(result.shape) == 2:\n            result = np.expand_dims(result, axis=-1)\n        return result\n\n    return wrapped_function\n\n\ndef _func_max_size(img, max_size, interpolation, func):\n    height, width = img.shape[:2]\n\n    scale = max_size / float(func(width, height))\n\n    if scale != 1.0:\n        out_size = tuple(py3round(dim * scale) for dim in (width, height))\n        img = cv2.resize(img, out_size, interpolation=interpolation)\n    return img\n\n\n@preserve_channel_dim\ndef longest_max_size(img, max_size, interpolation):\n    return _func_max_size(img, max_size, interpolation, max)\n\n# <--- taken from albumentations - https://github.com/albu/albumentations --->\n\n\nclass Preprocessor:\n    def __init__(\n        self,\n        in_dir: Path,\n        out_dir: Path,\n        max_size: int = None,\n        clear_exif: bool = True,\n        grayscale: bool = False,\n        expand_dims: bool = True,\n        extension: str = \"jpg\",\n        interpolation=cv2.INTER_LANCZOS4,\n    ):\n        self.in_dir = in_dir\n        self.out_dir = out_dir\n        self.grayscale = grayscale\n        self.expand_dims = expand_dims\n        self.max_size = max_size\n        self.clear_exif = clear_exif\n        self.extension = extension\n        self.interpolation = interpolation\n\n    def preprocess(self, image_path: Path):\n        try:\n            if self.extension in (\"jpg\", \"JPG\", \"jpeg\", \"JPEG\"):\n                image = np.array(\n                    imread(\n                        uri=image_path,\n                        grayscale=self.grayscale,\n                        expand_dims=self.expand_dims,\n                        exifrotate=not self.clear_exif))\n            else:  # imread does not have exifrotate for non-jpeg type\n                image = np.array(\n                    imread(\n                        uri=image_path,\n                        grayscale=self.grayscale,\n                        expand_dims=self.expand_dims))\n        except Exception as e:\n            print(f\"Cannot read file {image_path}, exception: {e}\")\n            return\n\n        if self.max_size is not None:\n            image = longest_max_size(image, self.max_size, self.interpolation)\n\n        target_path = self.out_dir / image_path.relative_to(self.in_dir)\n        target_path.parent.mkdir(parents=True, exist_ok=True)\n\n        image = image.clip(0, 255).round().astype(np.uint8)\n        imwrite(target_path, image)\n\n    def process_all(self, pool: Pool):\n        images = [*self.in_dir.glob(f\"**/*.{self.extension}\")]\n        tqdm_parallel_imap(self.preprocess, images, pool)\n\n\ndef main(args, _=None):\n    args = args.__dict__\n    args.pop(\"command\", None)\n    num_workers = args.pop(\"num_workers\")\n\n    with get_pool(num_workers) as p:\n        Preprocessor(**args).process_all(p)\n\n\nif __name__ == \"__main__\":\n    args = parse_args()\n    main(args)\n", "path": "catalyst/contrib/scripts/process_images.py"}], "after_files": [{"content": "#!/usr/bin/env python\n# usage:\n# catalyst-data process-images \\\n#   --in-dir ./data_in \\\n#   --out-dir ./data_out \\\n#   --num-workers 4 \\\n#   --max-size 224 \\\n#   --clear-exif \\\n#   --grayscale\n\nfrom typing import List  # isort:skip\nimport argparse\nfrom functools import wraps\nimport os\nfrom pathlib import Path\n\nimport cv2\nimport numpy as np\n\nfrom catalyst.utils import (\n    boolean_flag, get_pool, has_image_extension, imread, imwrite, Pool,\n    tqdm_parallel_imap\n)\n\n# Limit cv2's processor usage\n# cv2.setNumThreads() doesn't work\nos.environ[\"OMP_NUM_THREADS\"] = \"1\"\nos.environ[\"MKL_NUM_THREADS\"] = \"1\"\ncv2.ocl.setUseOpenCL(False)\n\n\ndef build_args(parser):\n    parser.add_argument(\n        \"--in-dir\",\n        required=True,\n        type=Path,\n        help=\"Raw data folder path\")\n\n    parser.add_argument(\n        \"--out-dir\",\n        required=True,\n        type=Path,\n        help=\"Processed images folder path\")\n\n    parser.add_argument(\n        \"--num-workers\", \"-j\",\n        default=1,\n        type=int,\n        help=\"Number of workers to parallel the processing\")\n\n    parser.add_argument(\n        \"--max-size\",\n        default=None,\n        required=False,\n        type=int,\n        help=\"Output images size. E.g. 224, 448\")\n\n    boolean_flag(\n        parser,\n        \"clear-exif\",\n        default=True,\n        help=\"Clear EXIF data\")\n\n    boolean_flag(\n        parser,\n        \"grayscale\",\n        default=False,\n        help=\"Read images in grayscale\")\n\n    boolean_flag(\n        parser,\n        \"expand-dims\",\n        default=True,\n        help=\"Expand array shape for grayscale images\")\n\n    return parser\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser()\n    build_args(parser)\n    args = parser.parse_args()\n    return args\n\n\n# <--- taken from albumentations - https://github.com/albu/albumentations --->\n\ndef py3round(number):\n    \"\"\"Unified rounding in all python versions.\"\"\"\n    if abs(round(number) - number) == 0.5:\n        return int(2.0 * round(number / 2.0))\n\n    return int(round(number))\n\n\ndef preserve_channel_dim(func):\n    \"\"\"Preserve dummy channel dim.\"\"\"\n    @wraps(func)\n    def wrapped_function(img, *args, **kwargs):\n        shape = img.shape\n        result = func(img, *args, **kwargs)\n        if len(shape) == 3 and shape[-1] == 1 and len(result.shape) == 2:\n            result = np.expand_dims(result, axis=-1)\n        return result\n\n    return wrapped_function\n\n\ndef _func_max_size(img, max_size, interpolation, func):\n    height, width = img.shape[:2]\n\n    scale = max_size / float(func(width, height))\n\n    if scale != 1.0:\n        out_size = tuple(py3round(dim * scale) for dim in (width, height))\n        img = cv2.resize(img, out_size, interpolation=interpolation)\n    return img\n\n\n@preserve_channel_dim\ndef longest_max_size(img, max_size, interpolation):\n    return _func_max_size(img, max_size, interpolation, max)\n\n# <--- taken from albumentations - https://github.com/albu/albumentations --->\n\n\nclass Preprocessor:\n    def __init__(\n        self,\n        in_dir: Path,\n        out_dir: Path,\n        max_size: int = None,\n        clear_exif: bool = True,\n        grayscale: bool = False,\n        expand_dims: bool = True,\n        interpolation=cv2.INTER_LANCZOS4,\n    ):\n        self.in_dir = in_dir\n        self.out_dir = out_dir\n        self.grayscale = grayscale\n        self.expand_dims = expand_dims\n        self.max_size = max_size\n        self.clear_exif = clear_exif\n        self.interpolation = interpolation\n\n    def preprocess(self, image_path: Path):\n        try:\n            _, extension = os.path.splitext(image_path)\n            kwargs = {\n                \"grayscale\": self.grayscale, \"expand_dims\": self.expand_dims\n            }\n            if extension.lower() in {\"jpg\", \"jpeg\"}:\n                # imread does not have exifrotate for non-jpeg type\n                kwargs[\"exifrotate\"] = not self.clear_exif\n\n            image = np.array(imread(uri=image_path, **kwargs))\n        except Exception as e:\n            print(f\"Cannot read file {image_path}, exception: {e}\")\n            return\n\n        if self.max_size is not None:\n            image = longest_max_size(image, self.max_size, self.interpolation)\n\n        target_path = self.out_dir / image_path.relative_to(self.in_dir)\n        target_path.parent.mkdir(parents=True, exist_ok=True)\n\n        image = image.clip(0, 255).round().astype(np.uint8)\n        imwrite(target_path, image)\n\n    def process_all(self, pool: Pool):\n        images: List[Path] = []\n        for root, dirs, files in os.walk(self.in_dir):\n            root = Path(root)\n            images.extend([\n                root / filename for filename in files\n                if has_image_extension(filename)\n            ])\n\n        tqdm_parallel_imap(self.preprocess, images, pool)\n\n\ndef main(args, _=None):\n    args = args.__dict__\n    args.pop(\"command\", None)\n    num_workers = args.pop(\"num_workers\")\n\n    with get_pool(num_workers) as p:\n        Preprocessor(**args).process_all(p)\n\n\nif __name__ == \"__main__\":\n    args = parse_args()\n    main(args)\n", "path": "catalyst/contrib/scripts/process_images.py"}]}