internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: ivy-llc/ivy

Issue:
concat



Discussion:

Resolving patch:
diff --git a/ivy/__init__.py b/ivy/__init__.py
--- a/ivy/__init__.py
+++ b/ivy/__init__.py
@@ -361,6 +361,17 @@ def __sizeof__(self):
     def __dir__(self):
         return self._shape.__dir__()
 
+    def __getnewargs__(self):
+        if self._shape is None:
+            raise ivy.utils.exceptions.IvyException(
+                "Cannot calculate the number of elements in a partially known Shape"
+            )
+        return (
+            builtins.tuple(
+                self._shape,
+            ),
+        )
+
     @property
     def shape(self):
         return self._shape
@@ -477,6 +488,19 @@ def as_list(self):
             )
         return list(self._shape)
 
+    def numel(self):
+        if self._shape is None:
+            raise ivy.utils.exceptions.IvyException(
+                "Cannot calculate the number of elements in a partially known Shape"
+            )
+        res = 1
+        for dim in self._shape:
+            res *= dim
+        return res
+
+    def __concat__(self, other):
+        return self.concatenate(other)
+
 
 class IntDtype(Dtype):
     def __new__(cls, dtype_str):


Test patch:
diff --git a/ivy_tests/test_ivy/test_misc/test_shape.py b/ivy_tests/test_ivy/test_misc/test_shape.py
--- a/ivy_tests/test_ivy/test_misc/test_shape.py
+++ b/ivy_tests/test_ivy/test_misc/test_shape.py
@@ -182,6 +182,36 @@ def test_shape__getitem__(
     )
 
 
+@handle_method(
+    init_tree=CLASS_TREE,
+    method_tree="Shape.__getnewargs__",
+    shape=helpers.get_shape(),
+)
+def test_shape__getnewargs__(
+    shape,
+    method_name,
+    class_name,
+    ground_truth_backend,
+    backend_fw,
+    init_flags,
+    method_flags,
+    on_device,
+):
+    helpers.test_method(
+        on_device=on_device,
+        ground_truth_backend=ground_truth_backend,
+        backend_to_test=backend_fw,
+        init_flags=init_flags,
+        method_flags=method_flags,
+        init_all_as_kwargs_np={"shape_tup": shape},
+        init_input_dtypes=DUMMY_DTYPE,
+        method_input_dtypes=[],
+        method_all_as_kwargs_np={},
+        class_name=class_name,
+        method_name=method_name,
+    )
+
+
 @handle_method(
     init_tree=CLASS_TREE,
     method_tree="Shape.__gt__",
@@ -442,3 +472,33 @@ def test_shape_in_conditions():
     shape = ivy.Shape(())
     condition_is_true = True if shape else False
     assert not condition_is_true
+
+
+@handle_method(
+    init_tree=CLASS_TREE,
+    method_tree="Shape.numel",
+    shape=helpers.get_shape(),
+)
+def test_shape_numel(
+    shape,
+    method_name,
+    class_name,
+    ground_truth_backend,
+    backend_fw,
+    init_flags,
+    method_flags,
+    on_device,
+):
+    helpers.test_method(
+        on_device=on_device,
+        ground_truth_backend=ground_truth_backend,
+        backend_to_test=backend_fw,
+        init_flags=init_flags,
+        method_flags=method_flags,
+        init_all_as_kwargs_np={"shape_tup": shape},
+        init_input_dtypes=DUMMY_DTYPE,
+        method_input_dtypes=[],
+        method_all_as_kwargs_np={},
+        class_name=class_name,
+        method_name=method_name,
+    )
Repository: ivy-llc/ivy

Issue:
Fix Frontend Failing Test: paddle - search.paddle.index_sample
To-do List: https://github.com/unifyai/ivy/issues/27500


Discussion:

Resolving patch:
diff --git a/ivy/functional/frontends/paddle/search.py b/ivy/functional/frontends/paddle/search.py
--- a/ivy/functional/frontends/paddle/search.py
+++ b/ivy/functional/frontends/paddle/search.py
@@ -39,7 +39,9 @@ def argsort(x, /, *, axis=-1, descending=False, name=None):
 )
 @to_ivy_arrays_and_back
 def index_sample(x, index):
-    return x[ivy.arange(x.shape[0])[:, None], index]
+    index_dtype = index.dtype
+    arange_tensor = ivy.arange(x.shape[0], dtype=index_dtype)[:, None]
+    return x[arange_tensor, index]
 
 
 # kthvalue


Test patch:
Repository: ivy-llc/ivy

Issue:
Fix Frontend Failing Test: paddle - tensor.torch.Tensor.__getitem__



Discussion:

Resolving patch:
diff --git a/ivy/functional/backends/paddle/data_type.py b/ivy/functional/backends/paddle/data_type.py
--- a/ivy/functional/backends/paddle/data_type.py
+++ b/ivy/functional/backends/paddle/data_type.py
@@ -118,6 +118,10 @@ def astype(
     out: Optional[paddle.Tensor] = None,
 ) -> paddle.Tensor:
     dtype = ivy.as_native_dtype(dtype)
+
+    if copy and 0 in x.shape:
+        return paddle.empty(x.shape, dtype=dtype)
+
     if x.dtype == dtype:
         return x.clone() if copy else x
     return x.clone().cast(dtype) if copy else x.cast(dtype)
diff --git a/ivy/functional/backends/paddle/general.py b/ivy/functional/backends/paddle/general.py
--- a/ivy/functional/backends/paddle/general.py
+++ b/ivy/functional/backends/paddle/general.py
@@ -87,6 +87,58 @@ def _squeeze_helper(query, x_ndim):
     return squeeze_indices
 
 
+def _make_non_negative(query, x):
+    """Converts negative values inside the tensors in the query to their
+    positive form.
+
+    Returns ``query`` unmodified if it is not a ``list``, ``tuple``
+    or ``paddle.Tensor``.
+
+    This function leaves non-tensor values in ``query`` as is.
+    """
+    if isinstance(query, paddle.Tensor):
+        query[query < 0] = x.shape[0] + query[query < 0]
+        return query
+
+    if not isinstance(query, (list, tuple)):
+        return query
+
+    found_ellipsis = False
+    shape_i = 0
+    for q in query:
+        if q is None:
+            continue
+
+        if not isinstance(q, paddle.Tensor):
+            shape_i += 1
+            continue
+
+        if q is Ellipsis:
+            found_ellipsis = True
+            break
+
+        q[q < 0] = x.shape[shape_i] + q[q < 0]
+        shape_i += 1
+
+    if not found_ellipsis:
+        return query
+
+    shape_i = x.ndim - 1
+    for q in reversed(query):
+        if q is None:
+            continue
+
+        if not isinstance(q, paddle.Tensor):
+            shape_i -= 1
+            continue
+
+        if q is Ellipsis:
+            return query
+
+        q[q < 0] = x.shape[shape_i] + q[q < 0]
+        shape_i -= 1
+
+
 @with_unsupported_device_and_dtypes(
     {
         "2.6.0 and below": {
@@ -104,14 +156,16 @@ def get_item(
 ) -> paddle.Tensor:
     if copy:
         x = paddle.clone(x)
-
     if (
         isinstance(query, paddle.Tensor)
         and query.dtype == paddle.bool
         and query.ndim == 0
     ) or isinstance(query, bool):
         # special case to handle scalar boolean indices
-        if query is True:
+        if isinstance(query, paddle.Tensor):
+            query = query.item()
+
+        if query:
             return x[None]
         else:
             return paddle.zeros(shape=[0] + x.shape, dtype=x.dtype)
@@ -125,6 +179,7 @@ def get_item(
     squeeze_indices = _squeeze_helper(query, x.ndim)
     # regular queries x[idx_1,idx_2,...,idx_i]
     # array queries idx = Tensor(idx_1,idx_2,...,idx_i), x[idx]
+    query = _make_non_negative(query, x)
     ret = x.__getitem__(query)
     return ret.squeeze(squeeze_indices) if squeeze_indices else ret
 


Test patch:
Repository: ivy-llc/ivy

Issue:
Fix Frontend Failing Test: paddle - order_statistics.numpy.ptp



Discussion:

Resolving patch:
diff --git a/ivy/functional/frontends/numpy/statistics/order_statistics.py b/ivy/functional/frontends/numpy/statistics/order_statistics.py
--- a/ivy/functional/frontends/numpy/statistics/order_statistics.py
+++ b/ivy/functional/frontends/numpy/statistics/order_statistics.py
@@ -1,5 +1,6 @@
 # global
 import ivy
+from ivy.func_wrapper import with_unsupported_dtypes
 from ivy.functional.frontends.numpy.func_wrapper import (
     to_ivy_arrays_and_back,
     handle_numpy_out,
@@ -119,6 +120,7 @@ def nanpercentile(
 
 @to_ivy_arrays_and_back
 @handle_numpy_out
+@with_unsupported_dtypes({"1.26.4 and below": ("bool",)}, "numpy")
 def ptp(a, axis=None, out=None, keepdims=False):
     x = ivy.max(a, axis=axis, keepdims=keepdims)
     y = ivy.min(a, axis=axis, keepdims=keepdims)


Test patch:
diff --git a/ivy_tests/test_ivy/test_frontends/test_numpy/test_statistics/test_order_statistics.py b/ivy_tests/test_ivy/test_frontends/test_numpy/test_statistics/test_order_statistics.py
--- a/ivy_tests/test_ivy/test_frontends/test_numpy/test_statistics/test_order_statistics.py
+++ b/ivy_tests/test_ivy/test_frontends/test_numpy/test_statistics/test_order_statistics.py
@@ -70,7 +70,7 @@ def test_numpy_ptp(
     fn_tree,
     keep_dims,
 ):
-    input_dtypes, values, axis = dtype_values_axis
+    input_dtypes, values, axis, _, _ = dtype_values_axis
     if isinstance(axis, tuple):
         axis = axis[0]
Repository: ivy-llc/ivy

Issue:
flatten



Discussion:

Resolving patch:
diff --git a/ivy/__init__.py b/ivy/__init__.py
--- a/ivy/__init__.py
+++ b/ivy/__init__.py
@@ -501,6 +501,15 @@ def numel(self):
     def __concat__(self, other):
         return self.concatenate(other)
 
+    def flatten(self):
+        # check https://github.com/tensorflow/tensorflow/blob/0d2d8a66fca1cbcdd6dd4e0cd6971792782e6844/tensorflow/python/framework/tensor_shape.py#L1299 # noqa: E501
+        return []
+
+    def to_tensors(self, value):
+        # check https://github.com/tensorflow/tensorflow/blob/0d2d8a66fca1cbcdd6dd4e0cd6971792782e6844/tensorflow/python/framework/tensor_shape.py#L1294 # noqa: E501
+        del value
+        return []
+
 
 class IntDtype(Dtype):
     def __new__(cls, dtype_str):


Test patch:
Repository: ivy-llc/ivy

Issue:
 ifftshift



Discussion:

Resolving patch:
diff --git a/ivy/functional/frontends/jax/numpy/fft.py b/ivy/functional/frontends/jax/numpy/fft.py
--- a/ivy/functional/frontends/jax/numpy/fft.py
+++ b/ivy/functional/frontends/jax/numpy/fft.py
@@ -78,6 +78,30 @@ def ifftn(a, s=None, axes=None, norm=None):
     return a
 
 
+@to_ivy_arrays_and_back
+def ifftshift(x, axes=None):
+    if not ivy.is_array(x):
+        raise ValueError("Input 'x' must be an array")
+
+    # Get the shape of x
+    shape = ivy.shape(x)
+
+    # If axes is None, shift all axes
+    if axes is None:
+        axes = tuple(range(x.ndim))
+
+    # Convert axes to a list if it's not already
+    axes = [axes] if isinstance(axes, int) else list(axes)
+
+    # Perform the shift for each axis
+    for axis in axes:
+        axis_size = shape[axis]
+        shift = -ivy.floor(axis_size / 2).astype(ivy.int32)
+        result = ivy.roll(x, shift, axis=axis)
+
+    return result
+
+
 @to_ivy_arrays_and_back
 @with_unsupported_dtypes({"1.25.2 and below": ("float16", "bfloat16")}, "numpy")
 def rfft(a, n=None, axis=-1, norm=None):


Test patch:
diff --git a/ivy_tests/test_ivy/test_frontends/test_jax/test_numpy/test_fft.py b/ivy_tests/test_ivy/test_frontends/test_jax/test_numpy/test_fft.py
--- a/ivy_tests/test_ivy/test_frontends/test_jax/test_numpy/test_fft.py
+++ b/ivy_tests/test_ivy/test_frontends/test_jax/test_numpy/test_fft.py
@@ -271,6 +271,43 @@ def test_jax_numpy_ifftn(
     )
 
 
+# ifftshift
+@handle_frontend_test(
+    fn_tree="jax.numpy.fft.ifftshift",
+    dtype_values_axis=helpers.dtype_values_axis(
+        available_dtypes=helpers.get_dtypes("valid"),
+        num_arrays=1,
+        min_value=-1e5,
+        max_value=1e5,
+        min_num_dims=1,
+        max_num_dims=5,
+        min_dim_size=1,
+        max_dim_size=5,
+        allow_inf=False,
+        large_abs_safety_factor=2.5,
+        small_abs_safety_factor=2.5,
+        safety_factor_scale="log",
+        valid_axis=True,
+        force_int_axis=True,
+    ),
+)
+def test_jax_numpy_ifftshift(
+    dtype_values_axis, backend_fw, frontend, test_flags, fn_tree, on_device
+):
+    dtype, values, axis = dtype_values_axis
+    helpers.test_frontend_function(
+        input_dtypes=dtype,
+        frontend=frontend,
+        backend_to_test=backend_fw,
+        test_flags=test_flags,
+        fn_tree=fn_tree,
+        on_device=on_device,
+        test_values=True,
+        x=values[0],
+        axes=axis,
+    )
+
+
 # rfft
 @handle_frontend_test(
     fn_tree="jax.numpy.fft.rfft",
Repository: ivy-llc/ivy

Issue:
Fix Frontend Failing Test: paddle - tensor.torch.Tensor.masked_fill
To-do list: https://github.com/unifyai/ivy/issues/27500


Discussion:

Resolving patch:
diff --git a/ivy/functional/frontends/torch/tensor.py b/ivy/functional/frontends/torch/tensor.py
--- a/ivy/functional/frontends/torch/tensor.py
+++ b/ivy/functional/frontends/torch/tensor.py
@@ -1062,8 +1062,9 @@ def acosh(self):
         return torch_frontend.acosh(self)
 
     def masked_fill(self, mask, value):
+        dtype = ivy.as_native_dtype(self.dtype)
         return torch_frontend.tensor(
-            torch_frontend.where(mask, value, self), dtype=self.dtype
+            ivy.astype(torch_frontend.where(mask, value, self), dtype)
         )
 
     def masked_fill_(self, mask, value):


Test patch:
Repository: ivy-llc/ivy

Issue:
Fix Frontend Failing Test: torch - linalg.cholesky_ex



Discussion:
The current frontend does not return a named tuple as required, and the test itself fails when running:
```
ivy_tests/test_ivy/test_frontends/test_torch/test_linalg.py:353: in test_torch_cholesky_ex
    x = np.matmul(x.T, x) + np.identity(x.shape[0])  # make symmetric positive-definite
E   AttributeError: 'list' object has no attribute 'T'
```

Resolving patch:
diff --git a/ivy/functional/frontends/torch/linalg.py b/ivy/functional/frontends/torch/linalg.py
--- a/ivy/functional/frontends/torch/linalg.py
+++ b/ivy/functional/frontends/torch/linalg.py
@@ -16,18 +16,23 @@ def cholesky(input, *, upper=False, out=None):
 
 
 @to_ivy_arrays_and_back
+@with_supported_dtypes(
+    {"2.2 and below": ("float32", "float64", "complex32", "complex64")}, "torch"
+)
 def cholesky_ex(input, *, upper=False, check_errors=False, out=None):
     try:
+        results = namedtuple("cholesky_ex", ['L', 'info'])
         matrix = ivy.cholesky(input, upper=upper, out=out)
         info = ivy.zeros(input.shape[:-2], dtype=ivy.int32)
-        return matrix, info
+        return results(matrix, info)
     except RuntimeError as e:
         if check_errors:
             raise RuntimeError(e) from e
         else:
+            results = namedtuple("cholesky_ex", ['L', 'info'])
             matrix = input * math.nan
             info = ivy.ones(input.shape[:-2], dtype=ivy.int32)
-            return matrix, info
+            return results(matrix, info)
 
 
 @to_ivy_arrays_and_back


Test patch:
diff --git a/ivy_tests/test_ivy/test_frontends/test_torch/test_linalg.py b/ivy_tests/test_ivy/test_frontends/test_torch/test_linalg.py
--- a/ivy_tests/test_ivy/test_frontends/test_torch/test_linalg.py
+++ b/ivy_tests/test_ivy/test_frontends/test_torch/test_linalg.py
@@ -336,7 +336,7 @@ def test_torch_cholesky(
 
 @handle_frontend_test(
     fn_tree="torch.linalg.cholesky_ex",
-    dtype_and_x=_get_dtype_and_matrix(square=True, batch=True),
+    dtype_and_x=_get_dtype_and_matrix(square=True),
     upper=st.booleans(),
 )
 def test_torch_cholesky_ex(
@@ -350,8 +350,9 @@ def test_torch_cholesky_ex(
     backend_fw,
 ):
     dtype, x = dtype_and_x
-    x = np.matmul(x.T, x) + np.identity(x.shape[0])  # make symmetric positive-definite
-
+    x = np.asarray(x[0], dtype=dtype[0])
+    x = np.matmul(np.conjugate(x.T), x) + np.identity(x.shape[0], dtype=dtype[0])
+    # make symmetric positive-definite
     helpers.test_frontend_function(
         input_dtypes=dtype,
         backend_to_test=backend_fw,
Repository: microsoft/playwright-python

Issue:
[BUG]: page.getAttribute returns None
Actual:

```py
import asyncio
from playwright_web import chromium


async def run():
    browser = await chromium.launch(headless=False)
    context = await browser.newContext(viewport=0)  # 0 stands for no viewport
    page = await context.newPage()

    await page.setContent(""""
    <input id="kekstar"/>
    """)

    await page.fill("#kekstar", "Foobar")

    print(await page.getAttribute("#kekstar", 'value'))

    await browser.close()


asyncio.get_event_loop().run_until_complete(run())

```

Expected: Returns Foobar

On Try Playwright, it works: https://try.playwright.tech/?s=dzmwi


Discussion:

Resolving patch:
diff --git a/playwright_web/frame.py b/playwright_web/frame.py
--- a/playwright_web/frame.py
+++ b/playwright_web/frame.py
@@ -181,7 +181,7 @@ async def getAttribute(self,
       selector: str,
       name: str,
       timeout: int = None) -> str:
-    await self._channel.send('getAttribute', locals_to_params(locals()))
+    return await self._channel.send('getAttribute', locals_to_params(locals()))
 
   async def hover(self,
       selector: str,


Test patch:
Repository: microsoft/playwright-python

Issue:
Auto release on PyPi on tags
General interest in that? Should be pretty easy with GitHub Actions, only have to set the a Pypi API key on your end.

Example: https://github.com/microsoft/playwright-python/new/master?filename=.github%2Fworkflows%2Fpython-publish.yml&workflow_template=python-publish


Discussion:
Yes, we should do this

Resolving patch:
diff --git a/playwright/__init__.py b/playwright/__init__.py
--- a/playwright/__init__.py
+++ b/playwright/__init__.py
@@ -12,6 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+from playwright._repo_version import version as __version__  # noqa:F401
 from playwright.main import playwright_object
 import playwright.helper as helper
 
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -19,16 +19,15 @@
 
 setuptools.setup(
     name="playwright",
-    version="0.0.3",
     author="Microsoft Corporation",
     author_email="",
     description="A high-level API to automate web browsers",
     long_description=long_description,
     long_description_content_type="text/markdown",
     url="https://github.com/Microsoft/playwright-python",
-    packages=setuptools.find_packages(),
+    packages=["playwright"],
     include_package_data=True,
-    install_requires=["pyee", "typing-extensions",],
+    install_requires=["pyee", "typing-extensions"],
     classifiers=[
         "Topic :: Software Development :: Testing",
         "Topic :: Internet :: WWW/HTTP :: Browsers",
@@ -40,4 +39,10 @@
         "Operating System :: OS Independent",
     ],
     python_requires=">=3.7",
+    use_scm_version={
+        "version_scheme": "post-release",
+        "write_to": "playwright/_repo_version.py",
+        "write_to_template": 'version = "{version}"\n',
+    },
+    setup_requires=["setuptools_scm"],
 )
diff --git a/upload_package.py b/upload_package.py
deleted file mode 100644
--- a/upload_package.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) Microsoft Corporation.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import subprocess
-
-subprocess.run("python -m twine upload dist/*", shell=True)


Test patch:
Repository: microsoft/playwright-python

Issue:
Update versions in README.md on Playwright roll



Discussion:

Resolving patch:
diff --git a/build_driver.py b/build_driver.py
--- a/build_driver.py
+++ b/build_driver.py
@@ -14,33 +14,52 @@
 
 import gzip
 import os
+import re
 import shutil
 import subprocess
+from pathlib import Path
 
-driver_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "driver")
-package_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "playwright")
-drivers_path = os.path.join(package_path, "drivers")
+_dirname = Path(os.path.dirname(os.path.abspath(__file__)))
 
-if os.path.exists(os.path.join(driver_path, "package-lock.json")):
-    os.remove(os.path.join(driver_path, "package-lock.json"))
-if os.path.exists(os.path.join(driver_path, "node_modules")):
-    shutil.rmtree(os.path.join(driver_path, "node_modules"))
-if os.path.exists(os.path.join(driver_path, "out")):
-    shutil.rmtree(os.path.join(driver_path, "out"))
+driver_path = _dirname / "driver"
+package_path = _dirname / "playwright"
+drivers_path = package_path / "drivers"
+
+if (driver_path / "package-lock.json").exists():
+    os.remove(driver_path / "package-lock.json")
+if (driver_path / "node_modules").exists():
+    shutil.rmtree(driver_path / "node_modules")
+if (driver_path / "out").exists():
+    shutil.rmtree(driver_path / "out")
 
 subprocess.run("npm i", cwd=driver_path, shell=True)
 subprocess.run("npm run bake", cwd=driver_path, shell=True)
 
 for driver in ["driver-linux", "driver-macos", "driver-win.exe"]:
-    if os.path.exists(os.path.join(package_path, driver)):
-        os.remove(os.path.join(package_path, driver))
+    if (package_path / driver).exists():
+        os.remove((package_path / driver))
 
-    in_path = os.path.join(driver_path, "out", driver)
-    out_path = os.path.join(drivers_path, driver + ".gz")
+    in_path = driver_path / "out" / driver
+    out_path = drivers_path / (driver + ".gz")
     with open(in_path, "rb") as f_in, gzip.open(out_path, "wb") as f_out:
         shutil.copyfileobj(f_in, f_out)
 
+node_modules_playwright = driver_path / "node_modules" / "playwright"
+
 shutil.copyfile(
-    os.path.join(driver_path, "node_modules", "playwright", "browsers.json"),
-    os.path.join(drivers_path, "browsers.json"),
+    node_modules_playwright / "browsers.json", drivers_path / "browsers.json",
 )
+
+upstream_readme = (node_modules_playwright / "README.md").read_text()
+pw_python_readme = (_dirname / "README.md").read_text()
+
+matches = re.findall(r"<!-- GEN:(.*?) -->(.*?)<!-- GEN:stop -->", upstream_readme)
+
+for key, value in matches:
+    pw_python_readme = re.sub(
+        rf"(<!-- GEN:{key} -->).*?(<!-- GEN:stop -->)",
+        f"<!-- GEN:{key} -->{value}<!-- GEN:stop -->",
+        pw_python_readme,
+    )
+
+(_dirname / "README.md").write_text(pw_python_readme)


Test patch:
Repository: microsoft/playwright-python

Issue:
DEBUG outputs won't get forwarded



Discussion:

Resolving patch:
diff --git a/playwright/main.py b/playwright/main.py
--- a/playwright/main.py
+++ b/playwright/main.py
@@ -49,7 +49,7 @@ async def run_driver_async() -> Connection:
         str(driver_executable),
         stdin=asyncio.subprocess.PIPE,
         stdout=asyncio.subprocess.PIPE,
-        stderr=asyncio.subprocess.PIPE,
+        stderr=sys.stderr,
         limit=32768,
     )
     assert proc.stdout


Test patch: