alessandro trinca tornidor
commited on
Commit
Β·
00f8875
1
Parent(s):
66a0f19
feat: rename io package to 'io_package' to avoid errors on test execution. Add pytest dependency
Browse files- app.py +55 -37
- poetry.lock +202 -62
- pyproject.toml +8 -0
- samgis_lisa_on_zero/__init__.py +1 -1
- samgis_lisa_on_zero/{io β io_package}/__init__.py +0 -0
- samgis_lisa_on_zero/{io β io_package}/coordinates_pixel_conversion.py +0 -0
- samgis_lisa_on_zero/{io β io_package}/geo_helpers.py +0 -0
- samgis_lisa_on_zero/{io β io_package}/raster_helpers.py +0 -0
- samgis_lisa_on_zero/{io β io_package}/tms2geotiff.py +1 -1
- samgis_lisa_on_zero/{io β io_package}/wrappers_helpers.py +6 -2
- samgis_lisa_on_zero/prediction_api/lisa.py +4 -4
- samgis_lisa_on_zero/prediction_api/predictors.py +4 -4
- tests/{io β io_package}/__init__.py +0 -0
- tests/{io β io_package}/test_coordinates_pixel_conversion.py +1 -1
- tests/{io β io_package}/test_geo_helpers.py +3 -3
- tests/{io β io_package}/test_raster_helpers.py +2 -2
- tests/{io β io_package}/test_tms2geotiff.py +1 -1
- tests/{io β io_package}/test_wrappers_helpers.py +21 -4
- tests/test_fastapi_app.py +1 -1
- tests/test_lambda_app.py +1 -1
app.py
CHANGED
|
@@ -2,6 +2,7 @@ import json
|
|
| 2 |
import os
|
| 3 |
import pathlib
|
| 4 |
import uuid
|
|
|
|
| 5 |
|
| 6 |
import gradio as gr
|
| 7 |
import uvicorn
|
|
@@ -30,6 +31,37 @@ FASTAPI_TITLE = "samgis-lisa-on-zero"
|
|
| 30 |
app = FastAPI(title=FASTAPI_TITLE, version="1.0")
|
| 31 |
|
| 32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
@app.middleware("http")
|
| 34 |
async def request_middleware(request, call_next):
|
| 35 |
request_id = str(uuid.uuid4())
|
|
@@ -39,8 +71,8 @@ async def request_middleware(request, call_next):
|
|
| 39 |
try:
|
| 40 |
response = await call_next(request)
|
| 41 |
|
| 42 |
-
except Exception as
|
| 43 |
-
app_logger.error(f"Request failed: {
|
| 44 |
response = JSONResponse(content={"success": False}, status_code=500)
|
| 45 |
|
| 46 |
finally:
|
|
@@ -52,7 +84,7 @@ async def request_middleware(request, call_next):
|
|
| 52 |
|
| 53 |
@app.post("/post_test_dictlist")
|
| 54 |
def post_test_dictlist2(request_input: ApiRequestBody) -> JSONResponse:
|
| 55 |
-
from samgis_lisa_on_zero.
|
| 56 |
|
| 57 |
request_body = get_parsed_bbox_points_with_dictlist_prompt(request_input)
|
| 58 |
app_logger.info(f"request_body:{request_body}.")
|
|
@@ -86,7 +118,7 @@ async def health() -> JSONResponse:
|
|
| 86 |
@app.post("/post_test_string")
|
| 87 |
def post_test_string(request_input: StringPromptApiRequestBody) -> JSONResponse:
|
| 88 |
from lisa_on_cuda.utils import app_helpers
|
| 89 |
-
from samgis_lisa_on_zero.
|
| 90 |
|
| 91 |
request_body = get_parsed_bbox_points_with_string_prompt(request_input)
|
| 92 |
app_logger.info(f"request_body:{request_body}.")
|
|
@@ -98,9 +130,8 @@ def post_test_string(request_input: StringPromptApiRequestBody) -> JSONResponse:
|
|
| 98 |
)
|
| 99 |
|
| 100 |
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
from samgis_lisa_on_zero.io.wrappers_helpers import get_parsed_bbox_points_with_string_prompt, get_source_name
|
| 104 |
from samgis_lisa_on_zero.prediction_api import lisa
|
| 105 |
from samgis_lisa_on_zero.utilities.constants import LISA_INFERENCE_FN
|
| 106 |
|
|
@@ -126,29 +157,26 @@ def infer_lisa(request_input: StringPromptApiRequestBody) -> JSONResponse:
|
|
| 126 |
"duration_run": duration_run,
|
| 127 |
"output": output
|
| 128 |
}
|
| 129 |
-
|
|
|
|
|
|
|
| 130 |
except Exception as inference_exception:
|
| 131 |
-
|
| 132 |
-
project_root_folder_content = subprocess.run(
|
| 133 |
-
f"ls -l {PROJECT_ROOT_FOLDER}/", shell=True, universal_newlines=True, stdout=subprocess.PIPE
|
| 134 |
-
)
|
| 135 |
-
app_logger.error(f"project_root folder 'ls -l' command output: {project_root_folder_content.stdout}.")
|
| 136 |
-
workdir_folder_content = subprocess.run(
|
| 137 |
-
f"ls -l {WORKDIR}/", shell=True, universal_newlines=True, stdout=subprocess.PIPE
|
| 138 |
-
)
|
| 139 |
-
app_logger.error(f"workdir folder 'ls -l' command output: {workdir_folder_content.stdout}.")
|
| 140 |
-
app_logger.error(f"inference error:{inference_exception}.")
|
| 141 |
-
raise HTTPException(
|
| 142 |
-
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Internal server error on inference")
|
| 143 |
except ValidationError as va1:
|
| 144 |
app_logger.error(f"validation error: {str(va1)}.")
|
| 145 |
raise ValidationError("Unprocessable Entity")
|
| 146 |
|
| 147 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 148 |
@app.post("/infer_samgis")
|
| 149 |
def infer_samgis(request_input: ApiRequestBody) -> JSONResponse:
|
| 150 |
from samgis_lisa_on_zero.prediction_api import predictors
|
| 151 |
-
from samgis_lisa_on_zero.
|
| 152 |
|
| 153 |
app_logger.info("starting plain samgis inference request...")
|
| 154 |
|
|
@@ -173,18 +201,7 @@ def infer_samgis(request_input: ApiRequestBody) -> JSONResponse:
|
|
| 173 |
}
|
| 174 |
return JSONResponse(status_code=200, content={"body": json.dumps(body)})
|
| 175 |
except Exception as inference_exception:
|
| 176 |
-
|
| 177 |
-
project_root_folder_content = subprocess.run(
|
| 178 |
-
f"ls -l {PROJECT_ROOT_FOLDER}/", shell=True, universal_newlines=True, stdout=subprocess.PIPE
|
| 179 |
-
)
|
| 180 |
-
app_logger.error(f"project_root folder 'ls -l' command output: {project_root_folder_content.stdout}.")
|
| 181 |
-
workdir_folder_content = subprocess.run(
|
| 182 |
-
f"ls -l {WORKDIR}/", shell=True, universal_newlines=True, stdout=subprocess.PIPE
|
| 183 |
-
)
|
| 184 |
-
app_logger.error(f"workdir folder 'ls -l' command output: {workdir_folder_content.stdout}.")
|
| 185 |
-
app_logger.error(f"inference error:{inference_exception}.")
|
| 186 |
-
raise HTTPException(
|
| 187 |
-
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Internal server error on inference")
|
| 188 |
except ValidationError as va1:
|
| 189 |
app_logger.error(f"validation error: {str(va1)}.")
|
| 190 |
raise ValidationError("Unprocessable Entity")
|
|
@@ -231,9 +248,9 @@ if bool(write_tmp_on_disk):
|
|
| 231 |
app_logger.error(f"is folder?{path_write_tmp_on_disk.is_dir()}.")
|
| 232 |
os.makedirs(write_tmp_on_disk, exist_ok=True)
|
| 233 |
app.mount("/vis_output", StaticFiles(directory=write_tmp_on_disk), name="vis_output")
|
| 234 |
-
except RuntimeError as
|
| 235 |
-
app_logger.error(f"{
|
| 236 |
-
raise
|
| 237 |
templates = Jinja2Templates(directory=WORKDIR / "static")
|
| 238 |
|
| 239 |
|
|
@@ -293,7 +310,8 @@ app_helpers.app_logger.info(f"prepared default arguments:{args}.")
|
|
| 293 |
inference_fn = app_helpers.get_inference_model_by_args(args, inference_decorator=SPACES_GPU)
|
| 294 |
|
| 295 |
app_helpers.app_logger.info(f"prepared inference_fn function:{inference_fn.__name__}, creating gradio interface...")
|
| 296 |
-
|
|
|
|
| 297 |
app_helpers.app_logger.info(
|
| 298 |
f"created gradio interface, mounting gradio app on url {VITE_GRADIO_URL} within FastAPI...")
|
| 299 |
app = gr.mount_gradio_app(app, io, path=VITE_GRADIO_URL)
|
|
|
|
| 2 |
import os
|
| 3 |
import pathlib
|
| 4 |
import uuid
|
| 5 |
+
from typing import Callable, NoReturn
|
| 6 |
|
| 7 |
import gradio as gr
|
| 8 |
import uvicorn
|
|
|
|
| 31 |
app = FastAPI(title=FASTAPI_TITLE, version="1.0")
|
| 32 |
|
| 33 |
|
| 34 |
+
def get_gradio_interface_geojson(
|
| 35 |
+
fn_inference: Callable
|
| 36 |
+
):
|
| 37 |
+
return gr.Interface(
|
| 38 |
+
fn_inference,
|
| 39 |
+
inputs=[
|
| 40 |
+
gr.Textbox(lines=1, placeholder=None, label="Payload input"),
|
| 41 |
+
],
|
| 42 |
+
outputs=[
|
| 43 |
+
gr.Textbox(lines=1, placeholder=None, label="Geojson Output")
|
| 44 |
+
]
|
| 45 |
+
)
|
| 46 |
+
|
| 47 |
+
|
| 48 |
+
def handle_exception_response(exception: Exception) -> NoReturn:
|
| 49 |
+
import subprocess
|
| 50 |
+
project_root_folder_content = subprocess.run(
|
| 51 |
+
f"ls -l {PROJECT_ROOT_FOLDER}/", shell=True, universal_newlines=True, stdout=subprocess.PIPE
|
| 52 |
+
)
|
| 53 |
+
app_logger.error(f"project_root folder 'ls -l' command output: {project_root_folder_content.stdout}.")
|
| 54 |
+
workdir_folder_content = subprocess.run(
|
| 55 |
+
f"ls -l {WORKDIR}/", shell=True, universal_newlines=True, stdout=subprocess.PIPE
|
| 56 |
+
)
|
| 57 |
+
app_logger.error(f"workdir folder 'ls -l' command stdout: {workdir_folder_content.stdout}.")
|
| 58 |
+
app_logger.error(f"workdir folder 'ls -l' command stderr: {workdir_folder_content.stderr}.")
|
| 59 |
+
app_logger.error(f"inference error:{exception}.")
|
| 60 |
+
raise HTTPException(
|
| 61 |
+
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Internal server error on inference"
|
| 62 |
+
)
|
| 63 |
+
|
| 64 |
+
|
| 65 |
@app.middleware("http")
|
| 66 |
async def request_middleware(request, call_next):
|
| 67 |
request_id = str(uuid.uuid4())
|
|
|
|
| 71 |
try:
|
| 72 |
response = await call_next(request)
|
| 73 |
|
| 74 |
+
except Exception as ex_middleware_http:
|
| 75 |
+
app_logger.error(f"Request failed, ex_middleware_http: {ex_middleware_http}")
|
| 76 |
response = JSONResponse(content={"success": False}, status_code=500)
|
| 77 |
|
| 78 |
finally:
|
|
|
|
| 84 |
|
| 85 |
@app.post("/post_test_dictlist")
|
| 86 |
def post_test_dictlist2(request_input: ApiRequestBody) -> JSONResponse:
|
| 87 |
+
from samgis_lisa_on_zero.io_package.wrappers_helpers import get_parsed_bbox_points_with_dictlist_prompt
|
| 88 |
|
| 89 |
request_body = get_parsed_bbox_points_with_dictlist_prompt(request_input)
|
| 90 |
app_logger.info(f"request_body:{request_body}.")
|
|
|
|
| 118 |
@app.post("/post_test_string")
|
| 119 |
def post_test_string(request_input: StringPromptApiRequestBody) -> JSONResponse:
|
| 120 |
from lisa_on_cuda.utils import app_helpers
|
| 121 |
+
from samgis_lisa_on_zero.io_package.wrappers_helpers import get_parsed_bbox_points_with_string_prompt
|
| 122 |
|
| 123 |
request_body = get_parsed_bbox_points_with_string_prompt(request_input)
|
| 124 |
app_logger.info(f"request_body:{request_body}.")
|
|
|
|
| 130 |
)
|
| 131 |
|
| 132 |
|
| 133 |
+
def infer_lisa_gradio(request_input: StringPromptApiRequestBody) -> JSONResponse:
|
| 134 |
+
from samgis_lisa_on_zero.io_package.wrappers_helpers import get_parsed_bbox_points_with_string_prompt, get_source_name
|
|
|
|
| 135 |
from samgis_lisa_on_zero.prediction_api import lisa
|
| 136 |
from samgis_lisa_on_zero.utilities.constants import LISA_INFERENCE_FN
|
| 137 |
|
|
|
|
| 157 |
"duration_run": duration_run,
|
| 158 |
"output": output
|
| 159 |
}
|
| 160 |
+
app_logger.info(f"json.dumps(body):{json.dumps(body)}.")
|
| 161 |
+
# return JSONResponse(status_code=200, content={"body": json.dumps(body)})
|
| 162 |
+
return json.dumps(body)
|
| 163 |
except Exception as inference_exception:
|
| 164 |
+
handle_exception_response(inference_exception)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 165 |
except ValidationError as va1:
|
| 166 |
app_logger.error(f"validation error: {str(va1)}.")
|
| 167 |
raise ValidationError("Unprocessable Entity")
|
| 168 |
|
| 169 |
|
| 170 |
+
@app.post("/infer_lisa")
|
| 171 |
+
def infer_lisa(request_input: StringPromptApiRequestBody) -> JSONResponse:
|
| 172 |
+
body = infer_lisa_gradio(request_input=request_input)
|
| 173 |
+
return JSONResponse(status_code=200, content={"body": json.dumps(body)})
|
| 174 |
+
|
| 175 |
+
|
| 176 |
@app.post("/infer_samgis")
|
| 177 |
def infer_samgis(request_input: ApiRequestBody) -> JSONResponse:
|
| 178 |
from samgis_lisa_on_zero.prediction_api import predictors
|
| 179 |
+
from samgis_lisa_on_zero.io_package.wrappers_helpers import get_parsed_bbox_points_with_dictlist_prompt, get_source_name
|
| 180 |
|
| 181 |
app_logger.info("starting plain samgis inference request...")
|
| 182 |
|
|
|
|
| 201 |
}
|
| 202 |
return JSONResponse(status_code=200, content={"body": json.dumps(body)})
|
| 203 |
except Exception as inference_exception:
|
| 204 |
+
handle_exception_response(inference_exception)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 205 |
except ValidationError as va1:
|
| 206 |
app_logger.error(f"validation error: {str(va1)}.")
|
| 207 |
raise ValidationError("Unprocessable Entity")
|
|
|
|
| 248 |
app_logger.error(f"is folder?{path_write_tmp_on_disk.is_dir()}.")
|
| 249 |
os.makedirs(write_tmp_on_disk, exist_ok=True)
|
| 250 |
app.mount("/vis_output", StaticFiles(directory=write_tmp_on_disk), name="vis_output")
|
| 251 |
+
except RuntimeError as runtime_error:
|
| 252 |
+
app_logger.error(f"{runtime_error} while loading the folder write_tmp_on_disk:{write_tmp_on_disk}...")
|
| 253 |
+
raise runtime_error
|
| 254 |
templates = Jinja2Templates(directory=WORKDIR / "static")
|
| 255 |
|
| 256 |
|
|
|
|
| 310 |
inference_fn = app_helpers.get_inference_model_by_args(args, inference_decorator=SPACES_GPU)
|
| 311 |
|
| 312 |
app_helpers.app_logger.info(f"prepared inference_fn function:{inference_fn.__name__}, creating gradio interface...")
|
| 313 |
+
# io_package = app_helpers.get_gradio_interface(inference_fn)
|
| 314 |
+
io = get_gradio_interface_geojson(infer_lisa_gradio)
|
| 315 |
app_helpers.app_logger.info(
|
| 316 |
f"created gradio interface, mounting gradio app on url {VITE_GRADIO_URL} within FastAPI...")
|
| 317 |
app = gr.mount_gradio_app(app, io, path=VITE_GRADIO_URL)
|
poetry.lock
CHANGED
|
@@ -432,6 +432,73 @@ mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.8.0)", "types-Pill
|
|
| 432 |
test = ["Pillow", "contourpy[test-no-images]", "matplotlib"]
|
| 433 |
test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"]
|
| 434 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 435 |
[[package]]
|
| 436 |
name = "cycler"
|
| 437 |
version = "0.12.1"
|
|
@@ -506,13 +573,13 @@ idna = ">=2.0.0"
|
|
| 506 |
|
| 507 |
[[package]]
|
| 508 |
name = "exceptiongroup"
|
| 509 |
-
version = "1.2.
|
| 510 |
description = "Backport of PEP 654 (exception groups)"
|
| 511 |
optional = false
|
| 512 |
python-versions = ">=3.7"
|
| 513 |
files = [
|
| 514 |
-
{file = "exceptiongroup-1.2.
|
| 515 |
-
{file = "exceptiongroup-1.2.
|
| 516 |
]
|
| 517 |
|
| 518 |
[package.extras]
|
|
@@ -762,21 +829,21 @@ timezone = ["pytz"]
|
|
| 762 |
|
| 763 |
[[package]]
|
| 764 |
name = "gradio"
|
| 765 |
-
version = "4.
|
| 766 |
description = "Python library for easily interacting with trained machine learning models"
|
| 767 |
optional = false
|
| 768 |
python-versions = ">=3.8"
|
| 769 |
files = [
|
| 770 |
-
{file = "gradio-4.
|
| 771 |
-
{file = "gradio-4.
|
| 772 |
]
|
| 773 |
|
| 774 |
[package.dependencies]
|
| 775 |
aiofiles = ">=22.0,<24.0"
|
| 776 |
-
altair = ">=
|
| 777 |
fastapi = "*"
|
| 778 |
ffmpy = "*"
|
| 779 |
-
gradio-client = "1.0
|
| 780 |
httpx = ">=0.24.1"
|
| 781 |
huggingface-hub = ">=0.19.3"
|
| 782 |
importlib-resources = ">=1.3,<7.0"
|
|
@@ -805,13 +872,13 @@ oauth = ["authlib", "itsdangerous"]
|
|
| 805 |
|
| 806 |
[[package]]
|
| 807 |
name = "gradio-client"
|
| 808 |
-
version = "1.0
|
| 809 |
description = "Python library for easily interacting with trained machine learning models"
|
| 810 |
optional = false
|
| 811 |
python-versions = ">=3.8"
|
| 812 |
files = [
|
| 813 |
-
{file = "gradio_client-1.0
|
| 814 |
-
{file = "gradio_client-1.0.
|
| 815 |
]
|
| 816 |
|
| 817 |
[package.dependencies]
|
|
@@ -1000,6 +1067,17 @@ files = [
|
|
| 1000 |
docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"]
|
| 1001 |
testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"]
|
| 1002 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1003 |
[[package]]
|
| 1004 |
name = "jinja2"
|
| 1005 |
version = "3.1.4"
|
|
@@ -1255,18 +1333,19 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
|
|
| 1255 |
|
| 1256 |
[[package]]
|
| 1257 |
name = "markdown2"
|
| 1258 |
-
version = "2.
|
| 1259 |
description = "A fast and complete Python implementation of Markdown"
|
| 1260 |
optional = false
|
| 1261 |
-
python-versions = "
|
| 1262 |
files = [
|
| 1263 |
-
{file = "markdown2-2.
|
| 1264 |
-
{file = "markdown2-2.
|
| 1265 |
]
|
| 1266 |
|
| 1267 |
[package.extras]
|
| 1268 |
-
all = ["pygments (>=2.7.3)", "wavedrom"]
|
| 1269 |
code-syntax-highlighting = ["pygments (>=2.7.3)"]
|
|
|
|
| 1270 |
wavedrom = ["wavedrom"]
|
| 1271 |
|
| 1272 |
[[package]]
|
|
@@ -1698,13 +1777,13 @@ sympy = "*"
|
|
| 1698 |
|
| 1699 |
[[package]]
|
| 1700 |
name = "openai"
|
| 1701 |
-
version = "1.35.
|
| 1702 |
description = "The official Python library for the openai API"
|
| 1703 |
optional = false
|
| 1704 |
python-versions = ">=3.7.1"
|
| 1705 |
files = [
|
| 1706 |
-
{file = "openai-1.35.
|
| 1707 |
-
{file = "openai-1.35.
|
| 1708 |
]
|
| 1709 |
|
| 1710 |
[package.dependencies]
|
|
@@ -2007,6 +2086,21 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa
|
|
| 2007 |
typing = ["typing-extensions"]
|
| 2008 |
xmp = ["defusedxml"]
|
| 2009 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2010 |
[[package]]
|
| 2011 |
name = "protobuf"
|
| 2012 |
version = "5.27.2"
|
|
@@ -2352,6 +2446,46 @@ files = [
|
|
| 2352 |
{file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"},
|
| 2353 |
]
|
| 2354 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2355 |
[[package]]
|
| 2356 |
name = "python-dateutil"
|
| 2357 |
version = "2.9.0.post0"
|
|
@@ -3067,52 +3201,47 @@ test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata
|
|
| 3067 |
|
| 3068 |
[[package]]
|
| 3069 |
name = "shapely"
|
| 3070 |
-
version = "2.0.
|
| 3071 |
description = "Manipulation and analysis of geometric objects"
|
| 3072 |
optional = false
|
| 3073 |
python-versions = ">=3.7"
|
| 3074 |
files = [
|
| 3075 |
-
{file = "shapely-2.0.
|
| 3076 |
-
{file = "shapely-2.0.
|
| 3077 |
-
{file = "shapely-2.0.
|
| 3078 |
-
{file = "shapely-2.0.
|
| 3079 |
-
{file = "shapely-2.0.
|
| 3080 |
-
{file = "shapely-2.0.
|
| 3081 |
-
{file = "shapely-2.0.
|
| 3082 |
-
{file = "shapely-2.0.
|
| 3083 |
-
{file = "shapely-2.0.
|
| 3084 |
-
{file = "shapely-2.0.
|
| 3085 |
-
{file = "shapely-2.0.
|
| 3086 |
-
{file = "shapely-2.0.
|
| 3087 |
-
{file = "shapely-2.0.
|
| 3088 |
-
{file = "shapely-2.0.
|
| 3089 |
-
{file = "shapely-2.0.
|
| 3090 |
-
{file = "shapely-2.0.
|
| 3091 |
-
{file = "shapely-2.0.
|
| 3092 |
-
{file = "shapely-2.0.
|
| 3093 |
-
{file = "shapely-2.0.
|
| 3094 |
-
{file = "shapely-2.0.
|
| 3095 |
-
{file = "shapely-2.0.
|
| 3096 |
-
{file = "shapely-2.0.
|
| 3097 |
-
{file = "shapely-2.0.
|
| 3098 |
-
{file = "shapely-2.0.
|
| 3099 |
-
{file = "shapely-2.0.
|
| 3100 |
-
{file = "shapely-2.0.
|
| 3101 |
-
{file = "shapely-2.0.
|
| 3102 |
-
{file = "shapely-2.0.
|
| 3103 |
-
{file = "shapely-2.0.
|
| 3104 |
-
{file = "shapely-2.0.
|
| 3105 |
-
{file = "shapely-2.0.
|
| 3106 |
-
{file = "shapely-2.0.
|
| 3107 |
-
{file = "shapely-2.0.
|
| 3108 |
-
{file = "shapely-2.0.
|
| 3109 |
-
{file = "shapely-2.0.
|
| 3110 |
-
{file = "shapely-2.0.
|
| 3111 |
-
{file = "shapely-2.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:485246fcdb93336105c29a5cfbff8a226949db37b7473c89caa26c9bae52a242"},
|
| 3112 |
-
{file = "shapely-2.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8de4578e838a9409b5b134a18ee820730e507b2d21700c14b71a2b0757396acc"},
|
| 3113 |
-
{file = "shapely-2.0.4-cp39-cp39-win32.whl", hash = "sha256:9dab4c98acfb5fb85f5a20548b5c0abe9b163ad3525ee28822ffecb5c40e724c"},
|
| 3114 |
-
{file = "shapely-2.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:31c19a668b5a1eadab82ff070b5a260478ac6ddad3a5b62295095174a8d26398"},
|
| 3115 |
-
{file = "shapely-2.0.4.tar.gz", hash = "sha256:5dc736127fac70009b8d309a0eeb74f3e08979e530cf7017f2f507ef62e6cfb8"},
|
| 3116 |
]
|
| 3117 |
|
| 3118 |
[package.dependencies]
|
|
@@ -3292,6 +3421,17 @@ dev = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"]
|
|
| 3292 |
docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"]
|
| 3293 |
testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"]
|
| 3294 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3295 |
[[package]]
|
| 3296 |
name = "tomlkit"
|
| 3297 |
version = "0.12.0"
|
|
@@ -3934,4 +4074,4 @@ files = [
|
|
| 3934 |
[metadata]
|
| 3935 |
lock-version = "2.0"
|
| 3936 |
python-versions = "~3.10"
|
| 3937 |
-
content-hash = "
|
|
|
|
| 432 |
test = ["Pillow", "contourpy[test-no-images]", "matplotlib"]
|
| 433 |
test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"]
|
| 434 |
|
| 435 |
+
[[package]]
|
| 436 |
+
name = "coverage"
|
| 437 |
+
version = "7.6.0"
|
| 438 |
+
description = "Code coverage measurement for Python"
|
| 439 |
+
optional = false
|
| 440 |
+
python-versions = ">=3.8"
|
| 441 |
+
files = [
|
| 442 |
+
{file = "coverage-7.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dff044f661f59dace805eedb4a7404c573b6ff0cdba4a524141bc63d7be5c7fd"},
|
| 443 |
+
{file = "coverage-7.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8659fd33ee9e6ca03950cfdcdf271d645cf681609153f218826dd9805ab585c"},
|
| 444 |
+
{file = "coverage-7.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7792f0ab20df8071d669d929c75c97fecfa6bcab82c10ee4adb91c7a54055463"},
|
| 445 |
+
{file = "coverage-7.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4b3cd1ca7cd73d229487fa5caca9e4bc1f0bca96526b922d61053ea751fe791"},
|
| 446 |
+
{file = "coverage-7.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7e128f85c0b419907d1f38e616c4f1e9f1d1b37a7949f44df9a73d5da5cd53c"},
|
| 447 |
+
{file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a94925102c89247530ae1dab7dc02c690942566f22e189cbd53579b0693c0783"},
|
| 448 |
+
{file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dcd070b5b585b50e6617e8972f3fbbee786afca71b1936ac06257f7e178f00f6"},
|
| 449 |
+
{file = "coverage-7.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d50a252b23b9b4dfeefc1f663c568a221092cbaded20a05a11665d0dbec9b8fb"},
|
| 450 |
+
{file = "coverage-7.6.0-cp310-cp310-win32.whl", hash = "sha256:0e7b27d04131c46e6894f23a4ae186a6a2207209a05df5b6ad4caee6d54a222c"},
|
| 451 |
+
{file = "coverage-7.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dece71673b3187c86226c3ca793c5f891f9fc3d8aa183f2e3653da18566169"},
|
| 452 |
+
{file = "coverage-7.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7b525ab52ce18c57ae232ba6f7010297a87ced82a2383b1afd238849c1ff933"},
|
| 453 |
+
{file = "coverage-7.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bea27c4269234e06f621f3fac3925f56ff34bc14521484b8f66a580aacc2e7d"},
|
| 454 |
+
{file = "coverage-7.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed8d1d1821ba5fc88d4a4f45387b65de52382fa3ef1f0115a4f7a20cdfab0e94"},
|
| 455 |
+
{file = "coverage-7.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01c322ef2bbe15057bc4bf132b525b7e3f7206f071799eb8aa6ad1940bcf5fb1"},
|
| 456 |
+
{file = "coverage-7.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03cafe82c1b32b770a29fd6de923625ccac3185a54a5e66606da26d105f37dac"},
|
| 457 |
+
{file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0d1b923fc4a40c5832be4f35a5dab0e5ff89cddf83bb4174499e02ea089daf57"},
|
| 458 |
+
{file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4b03741e70fb811d1a9a1d75355cf391f274ed85847f4b78e35459899f57af4d"},
|
| 459 |
+
{file = "coverage-7.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a73d18625f6a8a1cbb11eadc1d03929f9510f4131879288e3f7922097a429f63"},
|
| 460 |
+
{file = "coverage-7.6.0-cp311-cp311-win32.whl", hash = "sha256:65fa405b837060db569a61ec368b74688f429b32fa47a8929a7a2f9b47183713"},
|
| 461 |
+
{file = "coverage-7.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:6379688fb4cfa921ae349c76eb1a9ab26b65f32b03d46bb0eed841fd4cb6afb1"},
|
| 462 |
+
{file = "coverage-7.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f7db0b6ae1f96ae41afe626095149ecd1b212b424626175a6633c2999eaad45b"},
|
| 463 |
+
{file = "coverage-7.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bbdf9a72403110a3bdae77948b8011f644571311c2fb35ee15f0f10a8fc082e8"},
|
| 464 |
+
{file = "coverage-7.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc44bf0315268e253bf563f3560e6c004efe38f76db03a1558274a6e04bf5d5"},
|
| 465 |
+
{file = "coverage-7.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da8549d17489cd52f85a9829d0e1d91059359b3c54a26f28bec2c5d369524807"},
|
| 466 |
+
{file = "coverage-7.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0086cd4fc71b7d485ac93ca4239c8f75732c2ae3ba83f6be1c9be59d9e2c6382"},
|
| 467 |
+
{file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1fad32ee9b27350687035cb5fdf9145bc9cf0a094a9577d43e909948ebcfa27b"},
|
| 468 |
+
{file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:044a0985a4f25b335882b0966625270a8d9db3d3409ddc49a4eb00b0ef5e8cee"},
|
| 469 |
+
{file = "coverage-7.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:76d5f82213aa78098b9b964ea89de4617e70e0d43e97900c2778a50856dac605"},
|
| 470 |
+
{file = "coverage-7.6.0-cp312-cp312-win32.whl", hash = "sha256:3c59105f8d58ce500f348c5b56163a4113a440dad6daa2294b5052a10db866da"},
|
| 471 |
+
{file = "coverage-7.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:ca5d79cfdae420a1d52bf177de4bc2289c321d6c961ae321503b2ca59c17ae67"},
|
| 472 |
+
{file = "coverage-7.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d39bd10f0ae453554798b125d2f39884290c480f56e8a02ba7a6ed552005243b"},
|
| 473 |
+
{file = "coverage-7.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:beb08e8508e53a568811016e59f3234d29c2583f6b6e28572f0954a6b4f7e03d"},
|
| 474 |
+
{file = "coverage-7.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2e16f4cd2bc4d88ba30ca2d3bbf2f21f00f382cf4e1ce3b1ddc96c634bc48ca"},
|
| 475 |
+
{file = "coverage-7.6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6616d1c9bf1e3faea78711ee42a8b972367d82ceae233ec0ac61cc7fec09fa6b"},
|
| 476 |
+
{file = "coverage-7.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad4567d6c334c46046d1c4c20024de2a1c3abc626817ae21ae3da600f5779b44"},
|
| 477 |
+
{file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d17c6a415d68cfe1091d3296ba5749d3d8696e42c37fca5d4860c5bf7b729f03"},
|
| 478 |
+
{file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9146579352d7b5f6412735d0f203bbd8d00113a680b66565e205bc605ef81bc6"},
|
| 479 |
+
{file = "coverage-7.6.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:cdab02a0a941af190df8782aafc591ef3ad08824f97850b015c8c6a8b3877b0b"},
|
| 480 |
+
{file = "coverage-7.6.0-cp38-cp38-win32.whl", hash = "sha256:df423f351b162a702c053d5dddc0fc0ef9a9e27ea3f449781ace5f906b664428"},
|
| 481 |
+
{file = "coverage-7.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:f2501d60d7497fd55e391f423f965bbe9e650e9ffc3c627d5f0ac516026000b8"},
|
| 482 |
+
{file = "coverage-7.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7221f9ac9dad9492cecab6f676b3eaf9185141539d5c9689d13fd6b0d7de840c"},
|
| 483 |
+
{file = "coverage-7.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ddaaa91bfc4477d2871442bbf30a125e8fe6b05da8a0015507bfbf4718228ab2"},
|
| 484 |
+
{file = "coverage-7.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4cbe651f3904e28f3a55d6f371203049034b4ddbce65a54527a3f189ca3b390"},
|
| 485 |
+
{file = "coverage-7.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:831b476d79408ab6ccfadaaf199906c833f02fdb32c9ab907b1d4aa0713cfa3b"},
|
| 486 |
+
{file = "coverage-7.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46c3d091059ad0b9c59d1034de74a7f36dcfa7f6d3bde782c49deb42438f2450"},
|
| 487 |
+
{file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4d5fae0a22dc86259dee66f2cc6c1d3e490c4a1214d7daa2a93d07491c5c04b6"},
|
| 488 |
+
{file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:07ed352205574aad067482e53dd606926afebcb5590653121063fbf4e2175166"},
|
| 489 |
+
{file = "coverage-7.6.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:49c76cdfa13015c4560702574bad67f0e15ca5a2872c6a125f6327ead2b731dd"},
|
| 490 |
+
{file = "coverage-7.6.0-cp39-cp39-win32.whl", hash = "sha256:482855914928c8175735a2a59c8dc5806cf7d8f032e4820d52e845d1f731dca2"},
|
| 491 |
+
{file = "coverage-7.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:543ef9179bc55edfd895154a51792b01c017c87af0ebaae092720152e19e42ca"},
|
| 492 |
+
{file = "coverage-7.6.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:6fe885135c8a479d3e37a7aae61cbd3a0fb2deccb4dda3c25f92a49189f766d6"},
|
| 493 |
+
{file = "coverage-7.6.0.tar.gz", hash = "sha256:289cc803fa1dc901f84701ac10c9ee873619320f2f9aff38794db4a4a0268d51"},
|
| 494 |
+
]
|
| 495 |
+
|
| 496 |
+
[package.dependencies]
|
| 497 |
+
tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""}
|
| 498 |
+
|
| 499 |
+
[package.extras]
|
| 500 |
+
toml = ["tomli"]
|
| 501 |
+
|
| 502 |
[[package]]
|
| 503 |
name = "cycler"
|
| 504 |
version = "0.12.1"
|
|
|
|
| 573 |
|
| 574 |
[[package]]
|
| 575 |
name = "exceptiongroup"
|
| 576 |
+
version = "1.2.2"
|
| 577 |
description = "Backport of PEP 654 (exception groups)"
|
| 578 |
optional = false
|
| 579 |
python-versions = ">=3.7"
|
| 580 |
files = [
|
| 581 |
+
{file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
|
| 582 |
+
{file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
|
| 583 |
]
|
| 584 |
|
| 585 |
[package.extras]
|
|
|
|
| 829 |
|
| 830 |
[[package]]
|
| 831 |
name = "gradio"
|
| 832 |
+
version = "4.38.1"
|
| 833 |
description = "Python library for easily interacting with trained machine learning models"
|
| 834 |
optional = false
|
| 835 |
python-versions = ">=3.8"
|
| 836 |
files = [
|
| 837 |
+
{file = "gradio-4.38.1-py3-none-any.whl", hash = "sha256:003c80fccb475869d76ddd9f8f1c7e85d14b0088a7eabc10558304930f33367b"},
|
| 838 |
+
{file = "gradio-4.38.1.tar.gz", hash = "sha256:8c24cb4e8e391b327e4c537e2ed3b57bcfb35d222bf786a657d27469bfc1667c"},
|
| 839 |
]
|
| 840 |
|
| 841 |
[package.dependencies]
|
| 842 |
aiofiles = ">=22.0,<24.0"
|
| 843 |
+
altair = ">=5.0,<6.0"
|
| 844 |
fastapi = "*"
|
| 845 |
ffmpy = "*"
|
| 846 |
+
gradio-client = "1.1.0"
|
| 847 |
httpx = ">=0.24.1"
|
| 848 |
huggingface-hub = ">=0.19.3"
|
| 849 |
importlib-resources = ">=1.3,<7.0"
|
|
|
|
| 872 |
|
| 873 |
[[package]]
|
| 874 |
name = "gradio-client"
|
| 875 |
+
version = "1.1.0"
|
| 876 |
description = "Python library for easily interacting with trained machine learning models"
|
| 877 |
optional = false
|
| 878 |
python-versions = ">=3.8"
|
| 879 |
files = [
|
| 880 |
+
{file = "gradio_client-1.1.0-py3-none-any.whl", hash = "sha256:5f117fa1163f5673f7f45a226919503a3c1747ee4bbfc6002c6a69386e6e5a57"},
|
| 881 |
+
{file = "gradio_client-1.1.0.tar.gz", hash = "sha256:823ef2b9ab9b869ffebc51c994efec1f58132795239fe1090ef7dd9cf474d1e4"},
|
| 882 |
]
|
| 883 |
|
| 884 |
[package.dependencies]
|
|
|
|
| 1067 |
docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"]
|
| 1068 |
testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"]
|
| 1069 |
|
| 1070 |
+
[[package]]
|
| 1071 |
+
name = "iniconfig"
|
| 1072 |
+
version = "2.0.0"
|
| 1073 |
+
description = "brain-dead simple config-ini parsing"
|
| 1074 |
+
optional = false
|
| 1075 |
+
python-versions = ">=3.7"
|
| 1076 |
+
files = [
|
| 1077 |
+
{file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
|
| 1078 |
+
{file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
|
| 1079 |
+
]
|
| 1080 |
+
|
| 1081 |
[[package]]
|
| 1082 |
name = "jinja2"
|
| 1083 |
version = "3.1.4"
|
|
|
|
| 1333 |
|
| 1334 |
[[package]]
|
| 1335 |
name = "markdown2"
|
| 1336 |
+
version = "2.5.0"
|
| 1337 |
description = "A fast and complete Python implementation of Markdown"
|
| 1338 |
optional = false
|
| 1339 |
+
python-versions = "<4,>=3.8"
|
| 1340 |
files = [
|
| 1341 |
+
{file = "markdown2-2.5.0-py2.py3-none-any.whl", hash = "sha256:300d4429b620ebc974ef512339a9e08bc080473f95135a91f33906e24e8280c1"},
|
| 1342 |
+
{file = "markdown2-2.5.0.tar.gz", hash = "sha256:9bff02911f8b617b61eb269c4c1a5f9b2087d7ff051604f66a61b63cab30adc2"},
|
| 1343 |
]
|
| 1344 |
|
| 1345 |
[package.extras]
|
| 1346 |
+
all = ["latex2mathml", "pygments (>=2.7.3)", "wavedrom"]
|
| 1347 |
code-syntax-highlighting = ["pygments (>=2.7.3)"]
|
| 1348 |
+
latex = ["latex2mathml"]
|
| 1349 |
wavedrom = ["wavedrom"]
|
| 1350 |
|
| 1351 |
[[package]]
|
|
|
|
| 1777 |
|
| 1778 |
[[package]]
|
| 1779 |
name = "openai"
|
| 1780 |
+
version = "1.35.13"
|
| 1781 |
description = "The official Python library for the openai API"
|
| 1782 |
optional = false
|
| 1783 |
python-versions = ">=3.7.1"
|
| 1784 |
files = [
|
| 1785 |
+
{file = "openai-1.35.13-py3-none-any.whl", hash = "sha256:36ec3e93e0d1f243f69be85c89b9221a471c3e450dfd9df16c9829e3cdf63e60"},
|
| 1786 |
+
{file = "openai-1.35.13.tar.gz", hash = "sha256:c684f3945608baf7d2dcc0ef3ee6f3e27e4c66f21076df0b47be45d57e6ae6e4"},
|
| 1787 |
]
|
| 1788 |
|
| 1789 |
[package.dependencies]
|
|
|
|
| 2086 |
typing = ["typing-extensions"]
|
| 2087 |
xmp = ["defusedxml"]
|
| 2088 |
|
| 2089 |
+
[[package]]
|
| 2090 |
+
name = "pluggy"
|
| 2091 |
+
version = "1.5.0"
|
| 2092 |
+
description = "plugin and hook calling mechanisms for python"
|
| 2093 |
+
optional = false
|
| 2094 |
+
python-versions = ">=3.8"
|
| 2095 |
+
files = [
|
| 2096 |
+
{file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
|
| 2097 |
+
{file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
|
| 2098 |
+
]
|
| 2099 |
+
|
| 2100 |
+
[package.extras]
|
| 2101 |
+
dev = ["pre-commit", "tox"]
|
| 2102 |
+
testing = ["pytest", "pytest-benchmark"]
|
| 2103 |
+
|
| 2104 |
[[package]]
|
| 2105 |
name = "protobuf"
|
| 2106 |
version = "5.27.2"
|
|
|
|
| 2446 |
{file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"},
|
| 2447 |
]
|
| 2448 |
|
| 2449 |
+
[[package]]
|
| 2450 |
+
name = "pytest"
|
| 2451 |
+
version = "8.2.2"
|
| 2452 |
+
description = "pytest: simple powerful testing with Python"
|
| 2453 |
+
optional = false
|
| 2454 |
+
python-versions = ">=3.8"
|
| 2455 |
+
files = [
|
| 2456 |
+
{file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"},
|
| 2457 |
+
{file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"},
|
| 2458 |
+
]
|
| 2459 |
+
|
| 2460 |
+
[package.dependencies]
|
| 2461 |
+
colorama = {version = "*", markers = "sys_platform == \"win32\""}
|
| 2462 |
+
exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
|
| 2463 |
+
iniconfig = "*"
|
| 2464 |
+
packaging = "*"
|
| 2465 |
+
pluggy = ">=1.5,<2.0"
|
| 2466 |
+
tomli = {version = ">=1", markers = "python_version < \"3.11\""}
|
| 2467 |
+
|
| 2468 |
+
[package.extras]
|
| 2469 |
+
dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
|
| 2470 |
+
|
| 2471 |
+
[[package]]
|
| 2472 |
+
name = "pytest-cov"
|
| 2473 |
+
version = "5.0.0"
|
| 2474 |
+
description = "Pytest plugin for measuring coverage."
|
| 2475 |
+
optional = false
|
| 2476 |
+
python-versions = ">=3.8"
|
| 2477 |
+
files = [
|
| 2478 |
+
{file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"},
|
| 2479 |
+
{file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"},
|
| 2480 |
+
]
|
| 2481 |
+
|
| 2482 |
+
[package.dependencies]
|
| 2483 |
+
coverage = {version = ">=5.2.1", extras = ["toml"]}
|
| 2484 |
+
pytest = ">=4.6"
|
| 2485 |
+
|
| 2486 |
+
[package.extras]
|
| 2487 |
+
testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"]
|
| 2488 |
+
|
| 2489 |
[[package]]
|
| 2490 |
name = "python-dateutil"
|
| 2491 |
version = "2.9.0.post0"
|
|
|
|
| 3201 |
|
| 3202 |
[[package]]
|
| 3203 |
name = "shapely"
|
| 3204 |
+
version = "2.0.5"
|
| 3205 |
description = "Manipulation and analysis of geometric objects"
|
| 3206 |
optional = false
|
| 3207 |
python-versions = ">=3.7"
|
| 3208 |
files = [
|
| 3209 |
+
{file = "shapely-2.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:89d34787c44f77a7d37d55ae821f3a784fa33592b9d217a45053a93ade899375"},
|
| 3210 |
+
{file = "shapely-2.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:798090b426142df2c5258779c1d8d5734ec6942f778dab6c6c30cfe7f3bf64ff"},
|
| 3211 |
+
{file = "shapely-2.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45211276900c4790d6bfc6105cbf1030742da67594ea4161a9ce6812a6721e68"},
|
| 3212 |
+
{file = "shapely-2.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e119444bc27ca33e786772b81760f2028d930ac55dafe9bc50ef538b794a8e1"},
|
| 3213 |
+
{file = "shapely-2.0.5-cp310-cp310-win32.whl", hash = "sha256:9a4492a2b2ccbeaebf181e7310d2dfff4fdd505aef59d6cb0f217607cb042fb3"},
|
| 3214 |
+
{file = "shapely-2.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:1e5cb5ee72f1bc7ace737c9ecd30dc174a5295fae412972d3879bac2e82c8fae"},
|
| 3215 |
+
{file = "shapely-2.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5bbfb048a74cf273db9091ff3155d373020852805a37dfc846ab71dde4be93ec"},
|
| 3216 |
+
{file = "shapely-2.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93be600cbe2fbaa86c8eb70656369f2f7104cd231f0d6585c7d0aa555d6878b8"},
|
| 3217 |
+
{file = "shapely-2.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f8e71bb9a46814019f6644c4e2560a09d44b80100e46e371578f35eaaa9da1c"},
|
| 3218 |
+
{file = "shapely-2.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5251c28a29012e92de01d2e84f11637eb1d48184ee8f22e2df6c8c578d26760"},
|
| 3219 |
+
{file = "shapely-2.0.5-cp311-cp311-win32.whl", hash = "sha256:35110e80070d664781ec7955c7de557456b25727a0257b354830abb759bf8311"},
|
| 3220 |
+
{file = "shapely-2.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c6b78c0007a34ce7144f98b7418800e0a6a5d9a762f2244b00ea560525290c9"},
|
| 3221 |
+
{file = "shapely-2.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:03bd7b5fa5deb44795cc0a503999d10ae9d8a22df54ae8d4a4cd2e8a93466195"},
|
| 3222 |
+
{file = "shapely-2.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ff9521991ed9e201c2e923da014e766c1aa04771bc93e6fe97c27dcf0d40ace"},
|
| 3223 |
+
{file = "shapely-2.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b65365cfbf657604e50d15161ffcc68de5cdb22a601bbf7823540ab4918a98d"},
|
| 3224 |
+
{file = "shapely-2.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21f64e647a025b61b19585d2247137b3a38a35314ea68c66aaf507a1c03ef6fe"},
|
| 3225 |
+
{file = "shapely-2.0.5-cp312-cp312-win32.whl", hash = "sha256:3ac7dc1350700c139c956b03d9c3df49a5b34aaf91d024d1510a09717ea39199"},
|
| 3226 |
+
{file = "shapely-2.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:30e8737983c9d954cd17feb49eb169f02f1da49e24e5171122cf2c2b62d65c95"},
|
| 3227 |
+
{file = "shapely-2.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ff7731fea5face9ec08a861ed351734a79475631b7540ceb0b66fb9732a5f529"},
|
| 3228 |
+
{file = "shapely-2.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff9e520af0c5a578e174bca3c18713cd47a6c6a15b6cf1f50ac17dc8bb8db6a2"},
|
| 3229 |
+
{file = "shapely-2.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49b299b91557b04acb75e9732645428470825061f871a2edc36b9417d66c1fc5"},
|
| 3230 |
+
{file = "shapely-2.0.5-cp37-cp37m-win32.whl", hash = "sha256:b5870633f8e684bf6d1ae4df527ddcb6f3895f7b12bced5c13266ac04f47d231"},
|
| 3231 |
+
{file = "shapely-2.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:401cb794c5067598f50518e5a997e270cd7642c4992645479b915c503866abed"},
|
| 3232 |
+
{file = "shapely-2.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e91ee179af539100eb520281ba5394919067c6b51824e6ab132ad4b3b3e76dd0"},
|
| 3233 |
+
{file = "shapely-2.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8af6f7260f809c0862741ad08b1b89cb60c130ae30efab62320bbf4ee9cc71fa"},
|
| 3234 |
+
{file = "shapely-2.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5456dd522800306ba3faef77c5ba847ec30a0bd73ab087a25e0acdd4db2514f"},
|
| 3235 |
+
{file = "shapely-2.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b714a840402cde66fd7b663bb08cacb7211fa4412ea2a209688f671e0d0631fd"},
|
| 3236 |
+
{file = "shapely-2.0.5-cp38-cp38-win32.whl", hash = "sha256:7e8cf5c252fac1ea51b3162be2ec3faddedc82c256a1160fc0e8ddbec81b06d2"},
|
| 3237 |
+
{file = "shapely-2.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:4461509afdb15051e73ab178fae79974387f39c47ab635a7330d7fee02c68a3f"},
|
| 3238 |
+
{file = "shapely-2.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7545a39c55cad1562be302d74c74586f79e07b592df8ada56b79a209731c0219"},
|
| 3239 |
+
{file = "shapely-2.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4c83a36f12ec8dee2066946d98d4d841ab6512a6ed7eb742e026a64854019b5f"},
|
| 3240 |
+
{file = "shapely-2.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89e640c2cd37378480caf2eeda9a51be64201f01f786d127e78eaeff091ec897"},
|
| 3241 |
+
{file = "shapely-2.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06efe39beafde3a18a21dde169d32f315c57da962826a6d7d22630025200c5e6"},
|
| 3242 |
+
{file = "shapely-2.0.5-cp39-cp39-win32.whl", hash = "sha256:8203a8b2d44dcb366becbc8c3d553670320e4acf0616c39e218c9561dd738d92"},
|
| 3243 |
+
{file = "shapely-2.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:7fed9dbfbcfec2682d9a047b9699db8dcc890dfca857ecba872c42185fc9e64e"},
|
| 3244 |
+
{file = "shapely-2.0.5.tar.gz", hash = "sha256:bff2366bc786bfa6cb353d6b47d0443c570c32776612e527ee47b6df63fcfe32"},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3245 |
]
|
| 3246 |
|
| 3247 |
[package.dependencies]
|
|
|
|
| 3421 |
docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"]
|
| 3422 |
testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"]
|
| 3423 |
|
| 3424 |
+
[[package]]
|
| 3425 |
+
name = "tomli"
|
| 3426 |
+
version = "2.0.1"
|
| 3427 |
+
description = "A lil' TOML parser"
|
| 3428 |
+
optional = false
|
| 3429 |
+
python-versions = ">=3.7"
|
| 3430 |
+
files = [
|
| 3431 |
+
{file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
|
| 3432 |
+
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
|
| 3433 |
+
]
|
| 3434 |
+
|
| 3435 |
[[package]]
|
| 3436 |
name = "tomlkit"
|
| 3437 |
version = "0.12.0"
|
|
|
|
| 4074 |
[metadata]
|
| 4075 |
lock-version = "2.0"
|
| 4076 |
python-versions = "~3.10"
|
| 4077 |
+
content-hash = "54a69094c5b62a8e766dbcba310e0d11aca34a546bfd2ef293441b31a3b781db"
|
pyproject.toml
CHANGED
|
@@ -35,6 +35,14 @@ loguru = "^0.7.2"
|
|
| 35 |
pydantic = "^2.8.2"
|
| 36 |
uvicorn = "^0.30.1"
|
| 37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
[build-system]
|
| 39 |
requires = ["poetry-core"]
|
| 40 |
build-backend = "poetry.core.masonry.api"
|
|
|
|
| 35 |
pydantic = "^2.8.2"
|
| 36 |
uvicorn = "^0.30.1"
|
| 37 |
|
| 38 |
+
[tool.poetry.group.test]
|
| 39 |
+
optional = true
|
| 40 |
+
|
| 41 |
+
[tool.poetry.group.test.dependencies]
|
| 42 |
+
pytest = "^8.2.2"
|
| 43 |
+
pytest-cov = "^5.0.0"
|
| 44 |
+
httpx = "^0.27.0"
|
| 45 |
+
|
| 46 |
[build-system]
|
| 47 |
requires = ["poetry-core"]
|
| 48 |
build-backend = "poetry.core.masonry.api"
|
samgis_lisa_on_zero/__init__.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
"""Get machine learning predictions from geodata raster images"""
|
| 2 |
import os
|
| 3 |
|
| 4 |
-
# not used here but contextily_tile is imported in samgis_lisa_on_zero.
|
| 5 |
from contextily import tile as contextily_tile
|
| 6 |
from pathlib import Path
|
| 7 |
from samgis_lisa_on_zero.utilities.constants import SERVICE_NAME
|
|
|
|
| 1 |
"""Get machine learning predictions from geodata raster images"""
|
| 2 |
import os
|
| 3 |
|
| 4 |
+
# not used here but contextily_tile is imported in samgis_lisa_on_zero.io_package.tms2geotiff
|
| 5 |
from contextily import tile as contextily_tile
|
| 6 |
from pathlib import Path
|
| 7 |
from samgis_lisa_on_zero.utilities.constants import SERVICE_NAME
|
samgis_lisa_on_zero/{io β io_package}/__init__.py
RENAMED
|
File without changes
|
samgis_lisa_on_zero/{io β io_package}/coordinates_pixel_conversion.py
RENAMED
|
File without changes
|
samgis_lisa_on_zero/{io β io_package}/geo_helpers.py
RENAMED
|
File without changes
|
samgis_lisa_on_zero/{io β io_package}/raster_helpers.py
RENAMED
|
File without changes
|
samgis_lisa_on_zero/{io β io_package}/tms2geotiff.py
RENAMED
|
@@ -52,7 +52,7 @@ def download_extent(w: float, s: float, e: float, n: float, zoom: int or str = z
|
|
| 52 |
"""
|
| 53 |
try:
|
| 54 |
from samgis_lisa_on_zero import contextily_tile
|
| 55 |
-
from samgis_lisa_on_zero.
|
| 56 |
|
| 57 |
app_logger.info(f"connection number:{n_connections}, type:{type(n_connections)}.")
|
| 58 |
app_logger.info(f"zoom:{zoom}, type:{type(zoom)}.")
|
|
|
|
| 52 |
"""
|
| 53 |
try:
|
| 54 |
from samgis_lisa_on_zero import contextily_tile
|
| 55 |
+
from samgis_lisa_on_zero.io_package.coordinates_pixel_conversion import _from4326_to3857
|
| 56 |
|
| 57 |
app_logger.info(f"connection number:{n_connections}, type:{type(n_connections)}.")
|
| 58 |
app_logger.info(f"zoom:{zoom}, type:{type(zoom)}.")
|
samgis_lisa_on_zero/{io β io_package}/wrappers_helpers.py
RENAMED
|
@@ -8,7 +8,7 @@ from xyzservices import providers, TileProvider
|
|
| 8 |
|
| 9 |
from lisa_on_cuda.utils.app_helpers import get_cleaned_input
|
| 10 |
from samgis_lisa_on_zero import app_logger
|
| 11 |
-
from samgis_lisa_on_zero.
|
| 12 |
from samgis_lisa_on_zero.utilities.constants import COMPLETE_URL_TILES_MAPBOX, COMPLETE_URL_TILES_NEXTZEN, CUSTOM_RESPONSE_MESSAGES
|
| 13 |
from samgis_lisa_on_zero.utilities.type_hints import ApiRequestBody, ContentTypes, XYZTerrainProvidersNames, \
|
| 14 |
XYZDefaultProvidersNames, StringPromptApiRequestBody
|
|
@@ -58,7 +58,11 @@ def get_parsed_bbox_points_with_string_prompt(request_input: StringPromptApiRequ
|
|
| 58 |
dict with bounding box, prompt string and zoom
|
| 59 |
"""
|
| 60 |
|
| 61 |
-
app_logger.info(f"try to parsing input request {request_input}...")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
|
| 63 |
bbox = request_input.bbox
|
| 64 |
app_logger.debug(f"request bbox: {type(bbox)}, value:{bbox}.")
|
|
|
|
| 8 |
|
| 9 |
from lisa_on_cuda.utils.app_helpers import get_cleaned_input
|
| 10 |
from samgis_lisa_on_zero import app_logger
|
| 11 |
+
from samgis_lisa_on_zero.io_package.coordinates_pixel_conversion import get_latlng_to_pixel_coordinates
|
| 12 |
from samgis_lisa_on_zero.utilities.constants import COMPLETE_URL_TILES_MAPBOX, COMPLETE_URL_TILES_NEXTZEN, CUSTOM_RESPONSE_MESSAGES
|
| 13 |
from samgis_lisa_on_zero.utilities.type_hints import ApiRequestBody, ContentTypes, XYZTerrainProvidersNames, \
|
| 14 |
XYZDefaultProvidersNames, StringPromptApiRequestBody
|
|
|
|
| 58 |
dict with bounding box, prompt string and zoom
|
| 59 |
"""
|
| 60 |
|
| 61 |
+
app_logger.info(f"try to parsing input request: {type(request_input)}, {request_input}...")
|
| 62 |
+
if isinstance(request_input, str):
|
| 63 |
+
app_logger.info(f"string/json input, parsing it to {type(StringPromptApiRequestBody)}...")
|
| 64 |
+
request_input = StringPromptApiRequestBody.model_validate_json(request_input)
|
| 65 |
+
app_logger.info(f"parsed input, now of type {type(request_input)}...")
|
| 66 |
|
| 67 |
bbox = request_input.bbox
|
| 68 |
app_logger.debug(f"request bbox: {type(bbox)}, value:{bbox}.")
|
samgis_lisa_on_zero/prediction_api/lisa.py
CHANGED
|
@@ -2,9 +2,9 @@ from datetime import datetime
|
|
| 2 |
from spaces import GPU as SPACES_GPU
|
| 3 |
|
| 4 |
from samgis_core.utilities.type_hints import LlistFloat, DictStrInt
|
| 5 |
-
from samgis_lisa_on_zero.
|
| 6 |
-
from samgis_lisa_on_zero.
|
| 7 |
-
from samgis_lisa_on_zero.
|
| 8 |
from samgis_lisa_on_zero.utilities.constants import DEFAULT_URL_TILES, LISA_INFERENCE_FN
|
| 9 |
|
| 10 |
msg_write_tmp_on_disk = "found option to write images and geojson output..."
|
|
@@ -16,7 +16,7 @@ def load_model_and_inference_fn(inference_function_name_key: str):
|
|
| 16 |
from samgis_lisa_on_zero.prediction_api.global_models import models_dict
|
| 17 |
|
| 18 |
if models_dict[inference_function_name_key]["inference"] is None:
|
| 19 |
-
app_logger.info(f"missing inference function {inference_function_name_key}, instantiating it now!")
|
| 20 |
parsed_args = app_helpers.parse_args([])
|
| 21 |
inference_fn = app_helpers.get_inference_model_by_args(
|
| 22 |
parsed_args,
|
|
|
|
| 2 |
from spaces import GPU as SPACES_GPU
|
| 3 |
|
| 4 |
from samgis_core.utilities.type_hints import LlistFloat, DictStrInt
|
| 5 |
+
from samgis_lisa_on_zero.io_package.geo_helpers import get_vectorized_raster_as_geojson
|
| 6 |
+
from samgis_lisa_on_zero.io_package.raster_helpers import write_raster_png, write_raster_tiff
|
| 7 |
+
from samgis_lisa_on_zero.io_package.tms2geotiff import download_extent
|
| 8 |
from samgis_lisa_on_zero.utilities.constants import DEFAULT_URL_TILES, LISA_INFERENCE_FN
|
| 9 |
|
| 10 |
msg_write_tmp_on_disk = "found option to write images and geojson output..."
|
|
|
|
| 16 |
from samgis_lisa_on_zero.prediction_api.global_models import models_dict
|
| 17 |
|
| 18 |
if models_dict[inference_function_name_key]["inference"] is None:
|
| 19 |
+
app_logger.info(f"missing inference function {inference_function_name_key}, instantiating it now using inference_decorator {SPACES_GPU}!")
|
| 20 |
parsed_args = app_helpers.parse_args([])
|
| 21 |
inference_fn = app_helpers.get_inference_model_by_args(
|
| 22 |
parsed_args,
|
samgis_lisa_on_zero/prediction_api/predictors.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
"""functions using machine learning instance model(s)"""
|
| 2 |
from samgis_lisa_on_zero import app_logger, MODEL_FOLDER
|
| 3 |
-
from samgis_lisa_on_zero.
|
| 4 |
-
from samgis_lisa_on_zero.
|
| 5 |
-
from samgis_lisa_on_zero.
|
| 6 |
-
from samgis_lisa_on_zero.
|
| 7 |
from samgis_lisa_on_zero.prediction_api.global_models import models_dict, embedding_dict
|
| 8 |
from samgis_lisa_on_zero.utilities.constants import DEFAULT_URL_TILES, SLOPE_CELLSIZE
|
| 9 |
from samgis_core.prediction_api import sam_onnx2, sam_onnx_inference
|
|
|
|
| 1 |
"""functions using machine learning instance model(s)"""
|
| 2 |
from samgis_lisa_on_zero import app_logger, MODEL_FOLDER
|
| 3 |
+
from samgis_lisa_on_zero.io_package.geo_helpers import get_vectorized_raster_as_geojson
|
| 4 |
+
from samgis_lisa_on_zero.io_package.raster_helpers import get_raster_terrain_rgb_like, get_rgb_prediction_image
|
| 5 |
+
from samgis_lisa_on_zero.io_package.tms2geotiff import download_extent
|
| 6 |
+
from samgis_lisa_on_zero.io_package.wrappers_helpers import check_source_type_is_terrain
|
| 7 |
from samgis_lisa_on_zero.prediction_api.global_models import models_dict, embedding_dict
|
| 8 |
from samgis_lisa_on_zero.utilities.constants import DEFAULT_URL_TILES, SLOPE_CELLSIZE
|
| 9 |
from samgis_core.prediction_api import sam_onnx2, sam_onnx_inference
|
tests/{io β io_package}/__init__.py
RENAMED
|
File without changes
|
tests/{io β io_package}/test_coordinates_pixel_conversion.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
import json
|
| 2 |
|
| 3 |
-
from samgis_lisa_on_zero.
|
| 4 |
from samgis_lisa_on_zero.utilities.type_hints import LatLngDict
|
| 5 |
from tests import TEST_EVENTS_FOLDER
|
| 6 |
|
|
|
|
| 1 |
import json
|
| 2 |
|
| 3 |
+
from samgis_lisa_on_zero.io_package.coordinates_pixel_conversion import get_latlng_to_pixel_coordinates
|
| 4 |
from samgis_lisa_on_zero.utilities.type_hints import LatLngDict
|
| 5 |
from tests import TEST_EVENTS_FOLDER
|
| 6 |
|
tests/{io β io_package}/test_geo_helpers.py
RENAMED
|
@@ -3,7 +3,7 @@ import unittest
|
|
| 3 |
import numpy as np
|
| 4 |
import shapely
|
| 5 |
|
| 6 |
-
from samgis_lisa_on_zero.
|
| 7 |
from tests import TEST_EVENTS_FOLDER
|
| 8 |
|
| 9 |
|
|
@@ -63,7 +63,7 @@ class TestGeoHelpers(unittest.TestCase):
|
|
| 63 |
|
| 64 |
def test_get_vectorized_raster_as_geojson_ok(self):
|
| 65 |
from rasterio.transform import Affine
|
| 66 |
-
from samgis_lisa_on_zero.
|
| 67 |
|
| 68 |
name_fn = "samexporter_predict"
|
| 69 |
|
|
@@ -81,7 +81,7 @@ class TestGeoHelpers(unittest.TestCase):
|
|
| 81 |
assert shapely.equals_exact(output_geojson, expected_output_geojson, tolerance=0.000006)
|
| 82 |
|
| 83 |
def test_get_vectorized_raster_as_geojson_fail(self):
|
| 84 |
-
from samgis_lisa_on_zero.
|
| 85 |
|
| 86 |
name_fn = "samexporter_predict"
|
| 87 |
|
|
|
|
| 3 |
import numpy as np
|
| 4 |
import shapely
|
| 5 |
|
| 6 |
+
from samgis_lisa_on_zero.io_package.geo_helpers import load_affine_transformation_from_matrix
|
| 7 |
from tests import TEST_EVENTS_FOLDER
|
| 8 |
|
| 9 |
|
|
|
|
| 63 |
|
| 64 |
def test_get_vectorized_raster_as_geojson_ok(self):
|
| 65 |
from rasterio.transform import Affine
|
| 66 |
+
from samgis_lisa_on_zero.io_package.geo_helpers import get_vectorized_raster_as_geojson
|
| 67 |
|
| 68 |
name_fn = "samexporter_predict"
|
| 69 |
|
|
|
|
| 81 |
assert shapely.equals_exact(output_geojson, expected_output_geojson, tolerance=0.000006)
|
| 82 |
|
| 83 |
def test_get_vectorized_raster_as_geojson_fail(self):
|
| 84 |
+
from samgis_lisa_on_zero.io_package.geo_helpers import get_vectorized_raster_as_geojson
|
| 85 |
|
| 86 |
name_fn = "samexporter_predict"
|
| 87 |
|
tests/{io β io_package}/test_raster_helpers.py
RENAMED
|
@@ -3,7 +3,7 @@ from unittest.mock import patch
|
|
| 3 |
import numpy as np
|
| 4 |
|
| 5 |
from samgis_core.utilities.utilities import hash_calculate
|
| 6 |
-
from samgis_lisa_on_zero.
|
| 7 |
|
| 8 |
|
| 9 |
def get_three_channels(size=5, param1=1000, param2=3, param3=-88):
|
|
@@ -101,7 +101,7 @@ class Test(unittest.TestCase):
|
|
| 101 |
assert hash_slope == b'IYf6x4G0lmR47j6HRS5kUYWdtmimhLz2nak8py75nwc='
|
| 102 |
|
| 103 |
def test_get_slope_curvature_value_error(self):
|
| 104 |
-
from samgis_lisa_on_zero.
|
| 105 |
|
| 106 |
with self.assertRaises(ValueError):
|
| 107 |
try:
|
|
|
|
| 3 |
import numpy as np
|
| 4 |
|
| 5 |
from samgis_core.utilities.utilities import hash_calculate
|
| 6 |
+
from samgis_lisa_on_zero.io_package import raster_helpers
|
| 7 |
|
| 8 |
|
| 9 |
def get_three_channels(size=5, param1=1000, param2=3, param3=-88):
|
|
|
|
| 101 |
assert hash_slope == b'IYf6x4G0lmR47j6HRS5kUYWdtmimhLz2nak8py75nwc='
|
| 102 |
|
| 103 |
def test_get_slope_curvature_value_error(self):
|
| 104 |
+
from samgis_lisa_on_zero.io_package import raster_helpers
|
| 105 |
|
| 106 |
with self.assertRaises(ValueError):
|
| 107 |
try:
|
tests/{io β io_package}/test_tms2geotiff.py
RENAMED
|
@@ -4,7 +4,7 @@ import numpy as np
|
|
| 4 |
from samgis_core.utilities.utilities import hash_calculate
|
| 5 |
|
| 6 |
from samgis_lisa_on_zero import app_logger
|
| 7 |
-
from samgis_lisa_on_zero.
|
| 8 |
from tests import LOCAL_URL_TILE, TEST_EVENTS_FOLDER
|
| 9 |
|
| 10 |
|
|
|
|
| 4 |
from samgis_core.utilities.utilities import hash_calculate
|
| 5 |
|
| 6 |
from samgis_lisa_on_zero import app_logger
|
| 7 |
+
from samgis_lisa_on_zero.io_package.tms2geotiff import download_extent
|
| 8 |
from tests import LOCAL_URL_TILE, TEST_EVENTS_FOLDER
|
| 9 |
|
| 10 |
|
tests/{io β io_package}/test_wrappers_helpers.py
RENAMED
|
@@ -5,8 +5,8 @@ import unittest
|
|
| 5 |
from http import HTTPStatus
|
| 6 |
from unittest.mock import patch
|
| 7 |
|
| 8 |
-
from samgis_lisa_on_zero.
|
| 9 |
-
from samgis_lisa_on_zero.
|
| 10 |
from samgis_lisa_on_zero.utilities.type_hints import ApiRequestBody
|
| 11 |
from tests import TEST_EVENTS_FOLDER
|
| 12 |
|
|
@@ -92,10 +92,27 @@ class WrappersHelpersTest(unittest.TestCase):
|
|
| 92 |
output = get_parsed_request_body(event)
|
| 93 |
assert output == ApiRequestBody.model_validate(expected_output_dict)
|
| 94 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 95 |
@patch.object(wrappers_helpers, "providers")
|
| 96 |
def test_get_url_tile(self, providers_mocked):
|
| 97 |
import xyzservices
|
| 98 |
-
from samgis_lisa_on_zero.
|
| 99 |
|
| 100 |
from tests import LOCAL_URL_TILE
|
| 101 |
|
|
@@ -115,7 +132,7 @@ class WrappersHelpersTest(unittest.TestCase):
|
|
| 115 |
|
| 116 |
@staticmethod
|
| 117 |
def test_get_url_tile_real():
|
| 118 |
-
from samgis_lisa_on_zero.
|
| 119 |
|
| 120 |
assert get_url_tile("OpenStreetMap") == {
|
| 121 |
'url': 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', 'max_zoom': 19,
|
|
|
|
| 5 |
from http import HTTPStatus
|
| 6 |
from unittest.mock import patch
|
| 7 |
|
| 8 |
+
from samgis_lisa_on_zero.io_package import wrappers_helpers
|
| 9 |
+
from samgis_lisa_on_zero.io_package.wrappers_helpers import get_parsed_bbox_points_with_dictlist_prompt, get_parsed_request_body, get_response
|
| 10 |
from samgis_lisa_on_zero.utilities.type_hints import ApiRequestBody
|
| 11 |
from tests import TEST_EVENTS_FOLDER
|
| 12 |
|
|
|
|
| 92 |
output = get_parsed_request_body(event)
|
| 93 |
assert output == ApiRequestBody.model_validate(expected_output_dict)
|
| 94 |
|
| 95 |
+
def test_get_parsed_bbox_points_with_string_prompt(self):
|
| 96 |
+
from samgis_lisa_on_zero.io_package.wrappers_helpers import get_parsed_bbox_points_with_string_prompt
|
| 97 |
+
req = {
|
| 98 |
+
"bbox":{
|
| 99 |
+
"ne":{"lat":46.17271333276639,"lng":10.079505443573},"sw":{"lat":46.1677724417049,"lng":10.068830251693727}
|
| 100 |
+
},
|
| 101 |
+
"string_prompt":"You are a ...",
|
| 102 |
+
"zoom":17,
|
| 103 |
+
"source_type":"Esri.WorldImagery"
|
| 104 |
+
}
|
| 105 |
+
print(req)
|
| 106 |
+
out = get_parsed_bbox_points_with_string_prompt(json.dumps(req))
|
| 107 |
+
assert isinstance(out, dict)
|
| 108 |
+
for out_k, req_k in zip(out.keys(), req.keys()):
|
| 109 |
+
assert isinstance(out_k, str)
|
| 110 |
+
assert isinstance(req_k, str)
|
| 111 |
+
|
| 112 |
@patch.object(wrappers_helpers, "providers")
|
| 113 |
def test_get_url_tile(self, providers_mocked):
|
| 114 |
import xyzservices
|
| 115 |
+
from samgis_lisa_on_zero.io_package.wrappers_helpers import get_url_tile
|
| 116 |
|
| 117 |
from tests import LOCAL_URL_TILE
|
| 118 |
|
|
|
|
| 132 |
|
| 133 |
@staticmethod
|
| 134 |
def test_get_url_tile_real():
|
| 135 |
+
from samgis_lisa_on_zero.io_package.wrappers_helpers import get_url_tile
|
| 136 |
|
| 137 |
assert get_url_tile("OpenStreetMap") == {
|
| 138 |
'url': 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', 'max_zoom': 19,
|
tests/test_fastapi_app.py
CHANGED
|
@@ -6,7 +6,7 @@ from unittest.mock import patch
|
|
| 6 |
from fastapi.testclient import TestClient
|
| 7 |
|
| 8 |
from samgis_lisa_on_zero import PROJECT_ROOT_FOLDER
|
| 9 |
-
from samgis_lisa_on_zero.
|
| 10 |
from tests import TEST_EVENTS_FOLDER
|
| 11 |
from tests.local_tiles_http_server import LocalTilesHttpServer
|
| 12 |
import app
|
|
|
|
| 6 |
from fastapi.testclient import TestClient
|
| 7 |
|
| 8 |
from samgis_lisa_on_zero import PROJECT_ROOT_FOLDER
|
| 9 |
+
from samgis_lisa_on_zero.io_package import wrappers_helpers
|
| 10 |
from tests import TEST_EVENTS_FOLDER
|
| 11 |
from tests.local_tiles_http_server import LocalTilesHttpServer
|
| 12 |
import app
|
tests/test_lambda_app.py
CHANGED
|
@@ -9,7 +9,7 @@ if IS_AWS_LAMBDA:
|
|
| 9 |
try:
|
| 10 |
from awslambdaric.lambda_context import LambdaContext
|
| 11 |
|
| 12 |
-
from samgis_lisa_on_zero.
|
| 13 |
from wrappers import lambda_wrapper
|
| 14 |
from tests.local_tiles_http_server import LocalTilesHttpServer
|
| 15 |
|
|
|
|
| 9 |
try:
|
| 10 |
from awslambdaric.lambda_context import LambdaContext
|
| 11 |
|
| 12 |
+
from samgis_lisa_on_zero.io_package import wrappers_helpers
|
| 13 |
from wrappers import lambda_wrapper
|
| 14 |
from tests.local_tiles_http_server import LocalTilesHttpServer
|
| 15 |
|