From 27b709346d2dd86d1752d92aa8de993eae2f83d8 Mon Sep 17 00:00:00 2001 From: Prithvi Kannan Date: Wed, 16 Oct 2024 23:31:15 -0700 Subject: [PATCH 1/4] Setup pyproject and CI Signed-off-by: Prithvi Kannan --- .github/workflows/main.yml | 57 ++++++++++++++++++++++++++ CONTRIBUTING.md | 10 +++++ pyproject.toml | 83 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 150 insertions(+) create mode 100644 .github/workflows/main.yml create mode 100644 CONTRIBUTING.md create mode 100644 pyproject.toml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..dc361fa --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,57 @@ +name: tests + +on: + push: + branches: + - master + pull_request: + types: + - opened + - synchronize + - reopened + - ready_for_review + +jobs: + lint: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.9' + - name: Install dependencies + run: | + pip install -r requirements/lint-requirements.txt + - name: Lint Python code with ruff + run: | + ruff check . + ruff format --check . + - name: Lint YAML files with yamllint + run: yamllint . + + core_test: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.9', '3.10'] + timeout-minutes: 20 + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + pip install .[dev] + - name: Run tests with pydantic v1 + run: | + pip install 'pydantic<2' + pytest tests/ + - name: Run tests with pydantic v2 + run: | + pip install 'pydantic>=2' + pytest tests/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..7d00e19 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,10 @@ +Setting up dev environment + +Create a conda environement and install dev requirements + +``` +conda create --name databricks-ai-dev-env python=3.10 +conda activate databricks-ai-dev-env +pip install -e ".[databricks-dev]" +pip install -r requirements/lint-requirements.txt +``` diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..6e76c92 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,83 @@ +[project] +name = "databricks-ai-bridge" +version = "0.0.1" +description = "Official Python library for Databricks AI support" +authors = [ + { name="Prithvi Kannan", email="prithvi.kannan@databricks.com" }, +] +readme = "README.md" +requires-python = ">=3.9" +dependencies = [ + "typing_extensions", + "pydantic" +] + +[project.license] +file = "LICENSE.txt" + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.build] +include = [ + "src/*" +] + +[tool.hatch.build.targets.wheel] +packages = ["src/databricks_ai_bridge"] + +[project.optional-dependencies] +databricks = [ + "databricks-sdk>=0.34.0", + "pandas", +] +databricks-dev = [ + "hatch", + "pytest", + "databricks-sdk>=0.34.0", + "pandas", + "ruff==0.6.4", +] +dev = [ + "hatch", + "pytest", + "databricks-sdk>=0.34.0", + "pandas", + "ruff==0.6.4", +] + +[tool.ruff] +line-length = 100 +target-version = "py39" + +[tool.ruff.lint] +select = [ + # isort + "I", + # bugbear rules + "B", + # remove unused imports + "F401", + # bare except statements + "E722", + # print statements + "T201", + "T203", + # misuse of typing.TYPE_CHECKING + "TCH004", + # import rules + "TID251", + # undefined-local-with-import-star + "F403", +] + +[tool.ruff.format] +docstring-code-format = true +docstring-code-line-length = 88 + +[tool.ruff.lint.pydocstyle] +convention = "google" + +[tool.pytest.ini_options] +pythonpath = ["src"] From a5d8710df7068bc7c3cec093022f197e17206296 Mon Sep 17 00:00:00 2001 From: Prithvi Kannan Date: Wed, 16 Oct 2024 23:31:57 -0700 Subject: [PATCH 2/4] simplify Signed-off-by: Prithvi Kannan --- .github/workflows/main.yml | 7 +------ .vscode/settings.json | 7 +++++++ .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 165 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 163 bytes .../__pycache__/genie.cpython-310.pyc | Bin 0 -> 4012 bytes tests/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 146 bytes tests/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 144 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 167 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 165 bytes .../test_genie.cpython-310-pytest-8.3.3.pyc | Bin 0 -> 5738 bytes .../test_genie.cpython-38-pytest-8.3.3.pyc | Bin 0 -> 5824 bytes 11 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 src/databricks_ai_bridge/__pycache__/__init__.cpython-310.pyc create mode 100644 src/databricks_ai_bridge/__pycache__/__init__.cpython-38.pyc create mode 100644 src/databricks_ai_bridge/__pycache__/genie.cpython-310.pyc create mode 100644 tests/__pycache__/__init__.cpython-310.pyc create mode 100644 tests/__pycache__/__init__.cpython-38.pyc create mode 100644 tests/databricks_ai_bridge/__pycache__/__init__.cpython-310.pyc create mode 100644 tests/databricks_ai_bridge/__pycache__/__init__.cpython-38.pyc create mode 100644 tests/databricks_ai_bridge/__pycache__/test_genie.cpython-310-pytest-8.3.3.pyc create mode 100644 tests/databricks_ai_bridge/__pycache__/test_genie.cpython-38-pytest-8.3.3.pyc diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index dc361fa..a5afbb9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -47,11 +47,6 @@ jobs: - name: Install dependencies run: | pip install .[dev] - - name: Run tests with pydantic v1 + - name: Run tests run: | - pip install 'pydantic<2' - pytest tests/ - - name: Run tests with pydantic v2 - run: | - pip install 'pydantic>=2' pytest tests/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9b38853 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "python.testing.pytestArgs": [ + "tests" + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true +} \ No newline at end of file diff --git a/src/databricks_ai_bridge/__pycache__/__init__.cpython-310.pyc b/src/databricks_ai_bridge/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef71531cf9dcda74e974e4db9c2da14e04c49884 GIT binary patch literal 165 zcmd1j<>g`kf)9%Y(n0iN5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HAerR!OQL%nO zQD#X-S*BigVqRWio_aZxgoNPJ>uJWwtrJykzGJ~J<~BtBlR Ypz;=nO>TZlX-=vg$cADjAi=@_0K!-(iU0rr literal 0 HcmV?d00001 diff --git a/src/databricks_ai_bridge/__pycache__/__init__.cpython-38.pyc b/src/databricks_ai_bridge/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ba614e5c2677537aaa151d4d41700a5c8f156f7 GIT binary patch literal 163 zcmWIL<>g`kf)9%Y(n0iN5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HAerR!OQL%nO zQD#X-S*BigVqRWio_aZxgoNPJ>uJWwtrJykzGJ~J<~BtBlR Wpz;=nO>TZlX-=vg$cE2A%m4smE-2~% literal 0 HcmV?d00001 diff --git a/src/databricks_ai_bridge/__pycache__/genie.cpython-310.pyc b/src/databricks_ai_bridge/__pycache__/genie.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fd84e79939297ad2d83790c47a04823bf33e7a6c GIT binary patch literal 4012 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 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/__init__.cpython-310.pyc b/tests/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7f8a67ff57ed8b999e38e30a30dcbdb51848bb7 GIT binary patch literal 146 zcmd1j<>g`k0=}gJ=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vMKeRZts93+C zD6=G^EK@H#F)uGMPd_EGBr&NdGda6hH!)McB(=DtSU)~KGcU6wK3=b&@)n0pZhlH> PPO2TqxMC(C!NLFlJqI90 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/__init__.cpython-38.pyc b/tests/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3827101f69737e466a6c052f4601ef9483d6b97d GIT binary patch literal 144 zcmWIL<>g`k0=}gJ=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vMKeRZts93+C zD6=G^EK@H#F)uGMPd_EGBr&NdGda6hH!)McB(=DtSU)~KGcU6wK3=b&@)n0pZhlH> NPO2TqxX(b$008hrAf^BS literal 0 HcmV?d00001 diff --git a/tests/databricks_ai_bridge/__pycache__/__init__.cpython-310.pyc b/tests/databricks_ai_bridge/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9906ab405311be4a05b86cc766f93b1b1575680c GIT binary patch literal 167 zcmd1j<>g`k0>dQ&=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vDKeRZts93+C zD6=G^EK@H#F)uGMPd_EGBr&NdGda6hH!)McB(=Dt7)dNXF*6=0o06WYA0MBYmst`Y auUAlci^C>2KczG$)edAwF%ytrVE_QG`zW~p literal 0 HcmV?d00001 diff --git a/tests/databricks_ai_bridge/__pycache__/__init__.cpython-38.pyc b/tests/databricks_ai_bridge/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..895888de81b72b369879fa2f7cb16d3ec1966fcf GIT binary patch literal 165 zcmWIL<>g`k0>dQ&=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vDKeRZts93+C zD6=G^EK@H#F)uGMPd_EGBr&NdGda6hH!)McB(=Dt7)dNXF*6=0o06WYA0MBYmst`Y YuUAlci^C>2KczG$)edCGXCP((08c+D82|tP literal 0 HcmV?d00001 diff --git a/tests/databricks_ai_bridge/__pycache__/test_genie.cpython-310-pytest-8.3.3.pyc b/tests/databricks_ai_bridge/__pycache__/test_genie.cpython-310-pytest-8.3.3.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8b3b2c200cce6d93c83a54e1f0f8b13a048f8c31 GIT binary patch literal 5738 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 literal 0 HcmV?d00001 diff --git a/tests/databricks_ai_bridge/__pycache__/test_genie.cpython-38-pytest-8.3.3.pyc b/tests/databricks_ai_bridge/__pycache__/test_genie.cpython-38-pytest-8.3.3.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d835c1cb72aa155a2ae2b690b7cd3a270bc59dce GIT binary patch literal 5824 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 Date: Wed, 16 Oct 2024 23:32:54 -0700 Subject: [PATCH 3/4] simplify Signed-off-by: Prithvi Kannan --- .github/workflows/main.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index dc361fa..a5afbb9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -47,11 +47,6 @@ jobs: - name: Install dependencies run: | pip install .[dev] - - name: Run tests with pydantic v1 + - name: Run tests run: | - pip install 'pydantic<2' - pytest tests/ - - name: Run tests with pydantic v2 - run: | - pip install 'pydantic>=2' pytest tests/ From ba4b94abc31d27f327229ab1216fa867a55bd240 Mon Sep 17 00:00:00 2001 From: Prithvi Kannan Date: Wed, 16 Oct 2024 23:36:05 -0700 Subject: [PATCH 4/4] remove Signed-off-by: Prithvi Kannan --- .vscode/settings.json | 7 ------- .../__pycache__/__init__.cpython-310.pyc | Bin 165 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 163 -> 0 bytes .../__pycache__/genie.cpython-310.pyc | Bin 4012 -> 0 bytes tests/__pycache__/__init__.cpython-310.pyc | Bin 146 -> 0 bytes tests/__pycache__/__init__.cpython-38.pyc | Bin 144 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 167 -> 0 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 165 -> 0 bytes .../test_genie.cpython-310-pytest-8.3.3.pyc | Bin 5738 -> 0 bytes .../test_genie.cpython-38-pytest-8.3.3.pyc | Bin 5824 -> 0 bytes 10 files changed, 7 deletions(-) delete mode 100644 .vscode/settings.json delete mode 100644 src/databricks_ai_bridge/__pycache__/__init__.cpython-310.pyc delete mode 100644 src/databricks_ai_bridge/__pycache__/__init__.cpython-38.pyc delete mode 100644 src/databricks_ai_bridge/__pycache__/genie.cpython-310.pyc delete mode 100644 tests/__pycache__/__init__.cpython-310.pyc delete mode 100644 tests/__pycache__/__init__.cpython-38.pyc delete mode 100644 tests/databricks_ai_bridge/__pycache__/__init__.cpython-310.pyc delete mode 100644 tests/databricks_ai_bridge/__pycache__/__init__.cpython-38.pyc delete mode 100644 tests/databricks_ai_bridge/__pycache__/test_genie.cpython-310-pytest-8.3.3.pyc delete mode 100644 tests/databricks_ai_bridge/__pycache__/test_genie.cpython-38-pytest-8.3.3.pyc diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 9b38853..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "python.testing.pytestArgs": [ - "tests" - ], - "python.testing.unittestEnabled": false, - "python.testing.pytestEnabled": true -} \ No newline at end of file diff --git a/src/databricks_ai_bridge/__pycache__/__init__.cpython-310.pyc b/src/databricks_ai_bridge/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index ef71531cf9dcda74e974e4db9c2da14e04c49884..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmd1j<>g`kf)9%Y(n0iN5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HAerR!OQL%nO zQD#X-S*BigVqRWio_aZxgoNPJ>uJWwtrJykzGJ~J<~BtBlR Ypz;=nO>TZlX-=vg$cADjAi=@_0K!-(iU0rr diff --git a/src/databricks_ai_bridge/__pycache__/__init__.cpython-38.pyc b/src/databricks_ai_bridge/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 5ba614e5c2677537aaa151d4d41700a5c8f156f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmWIL<>g`kf)9%Y(n0iN5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HAerR!OQL%nO zQD#X-S*BigVqRWio_aZxgoNPJ>uJWwtrJykzGJ~J<~BtBlR Wpz;=nO>TZlX-=vg$cE2A%m4smE-2~% diff --git a/src/databricks_ai_bridge/__pycache__/genie.cpython-310.pyc b/src/databricks_ai_bridge/__pycache__/genie.cpython-310.pyc deleted file mode 100644 index fd84e79939297ad2d83790c47a04823bf33e7a6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4012 zcma)9&2JmW72lct;F6*~EPq5wgMJ$c-AZ)arcGPNwJb4;P?=IJs)-hL7i-Q+rbI5O z*`*V)OQ3~Z*f|(Qdu)9hM+*j?U;Jre>yhK&zhEJ zqt9wOt(=!bpB8p0L%`-aHxb8kejHKSB`f<26Ci78hE zNtiTRA$WT|YP2IT;~%u;PTUFV;e4|ZMu~D{m~>@SXEbf_6!FfZ&7;MC#Yl=XPvg93 z=Csjg!V>mqi;gO!HAVw@wCXT(F}YGciLDmZvVM&L&ixkBeg|-+Supl zJ^UH(=lX7%69vr7r|tn0Bf>c3{X$w0M%R!xQs;o92Nv4Bl;$nNGDLBQ%cbZHxKVJ` zs0eNh+**_aHxBN@h%+N9FoPL1KQYt7KFik7D@;IUThBWKuC3=yf=f=!vxeu1vyk{r zwqja1un!G!ZigSQD$Zl{kAwZ3gB+b-T=+HF>y<-(;2sWizzL@y`IrAMDW)O!H+}v* zR(o}SuvcE|lokdyF%Nj^X#OinVS6MsQ!c*rh#wRWjs8eF0zAA{Rc=kT_Twnko`0@;EWZ@Ya)eiH_~#(v9pIo4##iUN%*GfrfQD?WQ! znOO74kfWIRv{GJ=Lm8JlvXR`q*O=W2q9};U0Az4SHtIX^OwcIDvOd(~2Mr%%Vk<0f zg;67%?d++-)n+43>g`tN+6WzrPB>-sUiUkJj6;978_GRjhHp?TV2IhDU zVVlO3UAehh+fWm41z1)qJmF3D@RauGbhMu)BSF1dsm3r>Q zjhTzBnTx{9*OqQp)@pM%S3T#(Qg!auM$hghn=@~hm~%awg+FM%GsBUF9?TD~ix3)E`+5Nt$SrJ}N6 zjE>$(Id{WAgwnHQ`=eMn?QYWPCdz6gVN03lQ%;5tWo!G$bJ)_$V!34i=c&0Fgg*PIWaPYQ8PPlkGA}ZL(dQ}O=J=v*u+blgHwEra$*lG!;Js#}9wdml{f3Z~C6ukfuX34(;*zPXIBagp84P+89~}p8zpkVA zN!z==--sHC?~`~;VccO3%*#1U`0w7B)^YY&=#;V!CTL|Zfk};RW1DSjJAyZVkJ$eh zwoF+AX4r;3A6aAusO$jvt1D}@rx(gWr%}E#dpWzqWvyFW?wu{iNg$J%dONy@xS$O~ zK}cKTh%4((TkOd)c0ID?EMCg;v6AAVtu@y}B~xC;kR&Hda>q&SC-o-&@Fw4bSWK{l z4FDkr5OO}XoZeJsiPID6U<_O-tV>w{Pkmb2GbH?k7Ao_X+rRwGQ!T58Wh+ zYiH5o-+|ZjIc+|Wr;=bE@?)pu$00v44ao%QS)9=+la(f`HDxYVYT7^YM>you!ZV+g zkC?_CvStz_-B^uRKCH~I*Osb_{`>2dTN|gcr?wdu`PXY8zrvwz=TR#mY}_*>PuWjV zk?i6=!B$+^I)+v?hL5>ap zeIHQ&dqjRhgkbxGYKxMqueW@gdVfHKB2{K)3yLBO>8xhQ%`ohgxW4C}8SgfaEO`~8 zsxUw}ZiAZCY7Qr(I13R}gh-u@Musf0gx>h;Ae=%Xau0&RXGMDoy!9W)Dzc0#*!&;8 zOJCf;r%+GXPNTj92B_ylsOKk9FPz6YNLV8G$fR;vV;?25E{YinuMuGS^~6qrd*B?% z-{El?Z^HUp8qH&b<_LxInz74D*!MyF_H8E142-z z9ieKQqXAnFsQlXc{CuUdP+3s9TkF*-ps#YPmFfZ*xeUSo;ZL2aWfeklg(Ndy%5~yR z?Mq3RKH)HV3w`uADgH7@=BOz+%KD63)~7|=h3h6*ky|GJXYb7~;-nYhLC6?H*P$~| z$(zA=l{k%@@e`Me&>T~SoMaQ{oin}jFWvl9P9@aS#nJkt#sOS-i2qFB7;1I=s{+OU zghR@sX7%}*V6Puyn%n>xWIoS@E-@7qFHL{NAl{*xSWE2EmJ}{fOYz=hcGh8mYROe7 z7pUg-eO2)NR$FwN#20<65;U_B`6eAgpX43l=s40NqVL#qLN=4%2BD@)4;M+-&C{<~ z(j%o}1_#Ov%0bDE!c+%`%`t#iPq{z0JvQ{1=*Uta|_e diff --git a/tests/__pycache__/__init__.cpython-310.pyc b/tests/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index d7f8a67ff57ed8b999e38e30a30dcbdb51848bb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmd1j<>g`k0=}gJ=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vMKeRZts93+C zD6=G^EK@H#F)uGMPd_EGBr&NdGda6hH!)McB(=DtSU)~KGcU6wK3=b&@)n0pZhlH> PPO2TqxMC(C!NLFlJqI90 diff --git a/tests/__pycache__/__init__.cpython-38.pyc b/tests/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 3827101f69737e466a6c052f4601ef9483d6b97d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmWIL<>g`k0=}gJ=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vMKeRZts93+C zD6=G^EK@H#F)uGMPd_EGBr&NdGda6hH!)McB(=DtSU)~KGcU6wK3=b&@)n0pZhlH> NPO2TqxX(b$008hrAf^BS diff --git a/tests/databricks_ai_bridge/__pycache__/__init__.cpython-310.pyc b/tests/databricks_ai_bridge/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 9906ab405311be4a05b86cc766f93b1b1575680c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmd1j<>g`k0>dQ&=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vDKeRZts93+C zD6=G^EK@H#F)uGMPd_EGBr&NdGda6hH!)McB(=Dt7)dNXF*6=0o06WYA0MBYmst`Y auUAlci^C>2KczG$)edAwF%ytrVE_QG`zW~p diff --git a/tests/databricks_ai_bridge/__pycache__/__init__.cpython-38.pyc b/tests/databricks_ai_bridge/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 895888de81b72b369879fa2f7cb16d3ec1966fcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmWIL<>g`k0>dQ&=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vDKeRZts93+C zD6=G^EK@H#F)uGMPd_EGBr&NdGda6hH!)McB(=Dt7)dNXF*6=0o06WYA0MBYmst`Y YuUAlci^C>2KczG$)edCGXCP((08c+D82|tP diff --git a/tests/databricks_ai_bridge/__pycache__/test_genie.cpython-310-pytest-8.3.3.pyc b/tests/databricks_ai_bridge/__pycache__/test_genie.cpython-310-pytest-8.3.3.pyc deleted file mode 100644 index 8b3b2c200cce6d93c83a54e1f0f8b13a048f8c31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5738 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 diff --git a/tests/databricks_ai_bridge/__pycache__/test_genie.cpython-38-pytest-8.3.3.pyc b/tests/databricks_ai_bridge/__pycache__/test_genie.cpython-38-pytest-8.3.3.pyc deleted file mode 100644 index d835c1cb72aa155a2ae2b690b7cd3a270bc59dce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5824 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