(dtype)
| 445 | |
| 446 | |
| 447 | def test_replace_compiled_regex(dtype) -> None: |
| 448 | values = xr.DataArray(["fooBAD__barBAD"], dims=["x"]).astype(dtype) |
| 449 | |
| 450 | # test with compiled regex |
| 451 | pat = re.compile(dtype("BAD[_]*")) |
| 452 | result = values.str.replace(pat, "") |
| 453 | expected = xr.DataArray(["foobar"], dims=["x"]).astype(dtype) |
| 454 | assert result.dtype == expected.dtype |
| 455 | assert_equal(result, expected) |
| 456 | |
| 457 | result = values.str.replace(pat, "", n=1) |
| 458 | expected = xr.DataArray(["foobarBAD"], dims=["x"]).astype(dtype) |
| 459 | assert result.dtype == expected.dtype |
| 460 | assert_equal(result, expected) |
| 461 | |
| 462 | # broadcast |
| 463 | pat2 = xr.DataArray( |
| 464 | [re.compile(dtype("BAD[_]*")), re.compile(dtype("AD[_]*"))], dims=["y"] |
| 465 | ) |
| 466 | result = values.str.replace(pat2, "") |
| 467 | expected = xr.DataArray([["foobar", "fooBbarB"]], dims=["x", "y"]).astype(dtype) |
| 468 | assert result.dtype == expected.dtype |
| 469 | assert_equal(result, expected) |
| 470 | |
| 471 | repl = xr.DataArray(["", "spam"], dims=["y"]).astype(dtype) |
| 472 | result = values.str.replace(pat2, repl, n=1) |
| 473 | expected = xr.DataArray([["foobarBAD", "fooBspambarBAD"]], dims=["x", "y"]).astype( |
| 474 | dtype |
| 475 | ) |
| 476 | assert result.dtype == expected.dtype |
| 477 | assert_equal(result, expected) |
| 478 | |
| 479 | # case and flags provided to str.replace will have no effect |
| 480 | # and will produce warnings |
| 481 | values = xr.DataArray(["fooBAD__barBAD__bad"]).astype(dtype) |
| 482 | pat3 = re.compile(dtype("BAD[_]*")) |
| 483 | |
| 484 | with pytest.raises( |
| 485 | ValueError, match=r"Flags cannot be set when pat is a compiled regex." |
| 486 | ): |
| 487 | result = values.str.replace(pat3, "", flags=re.IGNORECASE) |
| 488 | |
| 489 | with pytest.raises( |
| 490 | ValueError, match=r"Case cannot be set when pat is a compiled regex." |
| 491 | ): |
| 492 | result = values.str.replace(pat3, "", case=False) |
| 493 | |
| 494 | with pytest.raises( |
| 495 | ValueError, match=r"Case cannot be set when pat is a compiled regex." |
| 496 | ): |
| 497 | result = values.str.replace(pat3, "", case=True) |
| 498 | |
| 499 | # test with callable |
| 500 | values = xr.DataArray(["fooBAD__barBAD"]).astype(dtype) |
| 501 | repl2 = lambda m: m.group(0).swapcase() |
| 502 | pat4 = re.compile(dtype("[a-z][A-Z]{2}")) |
| 503 | result = values.str.replace(pat4, repl2, n=2) |
| 504 | expected = xr.DataArray(["foObaD__baRbaD"]).astype(dtype) |
nothing calls this directly
no test coverage detected
searching dependent graphs…