deeporigin-data-sdk 0.1.0a39__py3-none-any.whl → 0.1.0a40__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -964,6 +964,7 @@ class DeeporiginData(SyncAPIClient):
964
964
  self,
965
965
  *,
966
966
  database_id: str,
967
+ filter: client_describe_database_stats_params.Filter | NotGiven = NOT_GIVEN,
967
968
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
968
969
  # The extra values given here take precedence over values defined on the client or passed to this method.
969
970
  extra_headers: Headers | None = None,
@@ -986,7 +987,11 @@ class DeeporiginData(SyncAPIClient):
986
987
  return self.post(
987
988
  "/DescribeDatabaseStats",
988
989
  body=maybe_transform(
989
- {"database_id": database_id}, client_describe_database_stats_params.ClientDescribeDatabaseStatsParams
990
+ {
991
+ "database_id": database_id,
992
+ "filter": filter,
993
+ },
994
+ client_describe_database_stats_params.ClientDescribeDatabaseStatsParams,
990
995
  ),
991
996
  options=make_request_options(
992
997
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
@@ -2781,6 +2786,7 @@ class AsyncDeeporiginData(AsyncAPIClient):
2781
2786
  self,
2782
2787
  *,
2783
2788
  database_id: str,
2789
+ filter: client_describe_database_stats_params.Filter | NotGiven = NOT_GIVEN,
2784
2790
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
2785
2791
  # The extra values given here take precedence over values defined on the client or passed to this method.
2786
2792
  extra_headers: Headers | None = None,
@@ -2803,7 +2809,11 @@ class AsyncDeeporiginData(AsyncAPIClient):
2803
2809
  return await self.post(
2804
2810
  "/DescribeDatabaseStats",
2805
2811
  body=await async_maybe_transform(
2806
- {"database_id": database_id}, client_describe_database_stats_params.ClientDescribeDatabaseStatsParams
2812
+ {
2813
+ "database_id": database_id,
2814
+ "filter": filter,
2815
+ },
2816
+ client_describe_database_stats_params.ClientDescribeDatabaseStatsParams,
2807
2817
  ),
2808
2818
  options=make_request_options(
2809
2819
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "deeporigin_data"
4
- __version__ = "0.1.0-alpha.39" # x-release-please-version
4
+ __version__ = "0.1.0-alpha.40" # x-release-please-version
@@ -2,12 +2,95 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing_extensions import Required, Annotated, TypedDict
5
+ from typing import Union, Iterable
6
+ from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict
6
7
 
7
8
  from .._utils import PropertyInfo
9
+ from .shared_params.row_filter_join import RowFilterJoin
8
10
 
9
- __all__ = ["ClientDescribeDatabaseStatsParams"]
11
+ __all__ = [
12
+ "ClientDescribeDatabaseStatsParams",
13
+ "Filter",
14
+ "FilterRowFilterText",
15
+ "FilterRowFilterNumber",
16
+ "FilterRowFilterBoolean",
17
+ "FilterRowFilterNullity",
18
+ "FilterRowFilterSet",
19
+ "FilterRowFilterSubstructure",
20
+ ]
10
21
 
11
22
 
12
23
  class ClientDescribeDatabaseStatsParams(TypedDict, total=False):
13
24
  database_id: Required[Annotated[str, PropertyInfo(alias="databaseId")]]
25
+
26
+ filter: Filter
27
+
28
+
29
+ class FilterRowFilterText(TypedDict, total=False):
30
+ column_id: Required[Annotated[str, PropertyInfo(alias="columnId")]]
31
+
32
+ filter_type: Required[Annotated[Literal["text"], PropertyInfo(alias="filterType")]]
33
+
34
+ filter_value: Required[Annotated[str, PropertyInfo(alias="filterValue")]]
35
+
36
+ operator: Required[Literal["equals", "notEqual", "contains", "notContains", "startsWith", "endsWith"]]
37
+
38
+
39
+ class FilterRowFilterNumber(TypedDict, total=False):
40
+ column_id: Required[Annotated[str, PropertyInfo(alias="columnId")]]
41
+
42
+ filter_type: Required[Annotated[Literal["number"], PropertyInfo(alias="filterType")]]
43
+
44
+ filter_value: Required[Annotated[float, PropertyInfo(alias="filterValue")]]
45
+
46
+ operator: Required[
47
+ Literal["equals", "notEqual", "lessThan", "lessThanOrEqual", "greaterThan", "greaterThanOrEqual"]
48
+ ]
49
+
50
+
51
+ class FilterRowFilterBoolean(TypedDict, total=False):
52
+ column_id: Required[Annotated[str, PropertyInfo(alias="columnId")]]
53
+
54
+ filter_type: Required[Annotated[Literal["boolean"], PropertyInfo(alias="filterType")]]
55
+
56
+ filter_value: Required[Annotated[bool, PropertyInfo(alias="filterValue")]]
57
+
58
+ operator: Required[Literal["equals", "notEqual"]]
59
+
60
+
61
+ class FilterRowFilterNullity(TypedDict, total=False):
62
+ column_id: Required[Annotated[str, PropertyInfo(alias="columnId")]]
63
+
64
+ filter_type: Required[Annotated[Literal["nullity"], PropertyInfo(alias="filterType")]]
65
+
66
+ operator: Required[Literal["isNull", "isNotNull"]]
67
+
68
+
69
+ class FilterRowFilterSet(TypedDict, total=False):
70
+ column_id: Required[Annotated[str, PropertyInfo(alias="columnId")]]
71
+
72
+ filter_type: Required[Annotated[Literal["set"], PropertyInfo(alias="filterType")]]
73
+
74
+ operator: Required[Literal["in", "notIn"]]
75
+
76
+ values: Required[Iterable[None]]
77
+
78
+
79
+ class FilterRowFilterSubstructure(TypedDict, total=False):
80
+ column_id: Required[Annotated[str, PropertyInfo(alias="columnId")]]
81
+
82
+ filter_type: Required[Annotated[Literal["substructure"], PropertyInfo(alias="filterType")]]
83
+
84
+ substructure: Required[str]
85
+ """A SMARTS or SMILES string to match against."""
86
+
87
+
88
+ Filter: TypeAlias = Union[
89
+ FilterRowFilterText,
90
+ FilterRowFilterNumber,
91
+ FilterRowFilterBoolean,
92
+ FilterRowFilterNullity,
93
+ FilterRowFilterSet,
94
+ FilterRowFilterSubstructure,
95
+ RowFilterJoin,
96
+ ]
@@ -6,6 +6,7 @@ from typing import List, Union, Iterable
6
6
  from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict
7
7
 
8
8
  from .._utils import PropertyInfo
9
+ from .shared_params.row_filter_join import RowFilterJoin
9
10
 
10
11
  __all__ = [
11
12
  "ClientExportDatabaseParams",
@@ -107,7 +108,7 @@ Filter: TypeAlias = Union[
107
108
  FilterRowFilterNullity,
108
109
  FilterRowFilterSet,
109
110
  FilterRowFilterSubstructure,
110
- "RowFilterJoin",
111
+ RowFilterJoin,
111
112
  ]
112
113
 
113
114
 
@@ -115,6 +116,3 @@ class RowSort(TypedDict, total=False):
115
116
  column_id: Required[Annotated[str, PropertyInfo(alias="columnId")]]
116
117
 
117
118
  sort: Required[Literal["asc", "desc"]]
118
-
119
-
120
- from .shared_params.row_filter_join import RowFilterJoin
@@ -6,6 +6,7 @@ from typing import List, Union, Iterable
6
6
  from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict
7
7
 
8
8
  from .._utils import PropertyInfo
9
+ from .shared_params.row_filter_join import RowFilterJoin
9
10
 
10
11
  __all__ = [
11
12
  "ClientListDatabaseRowsParams",
@@ -109,7 +110,7 @@ Filter: TypeAlias = Union[
109
110
  FilterRowFilterNullity,
110
111
  FilterRowFilterSet,
111
112
  FilterRowFilterSubstructure,
112
- "RowFilterJoin",
113
+ RowFilterJoin,
113
114
  ]
114
115
 
115
116
 
@@ -117,6 +118,3 @@ class RowSort(TypedDict, total=False):
117
118
  column_id: Required[Annotated[str, PropertyInfo(alias="columnId")]]
118
119
 
119
120
  sort: Required[Literal["asc", "desc"]]
120
-
121
-
122
- from .shared_params.row_filter_join import RowFilterJoin
@@ -9,6 +9,7 @@ from pydantic import Field as FieldInfo
9
9
 
10
10
  from ..._compat import PYDANTIC_V2
11
11
  from ..._models import BaseModel
12
+ from .row_filter_join import RowFilterJoin
12
13
 
13
14
  __all__ = [
14
15
  "Condition",
@@ -85,11 +86,9 @@ Condition: TypeAlias = Union[
85
86
  RowFilterNullity,
86
87
  RowFilterSet,
87
88
  RowFilterSubstructure,
88
- "RowFilterJoin",
89
+ RowFilterJoin,
89
90
  ]
90
91
 
91
- from .row_filter_join import RowFilterJoin
92
-
93
92
  if PYDANTIC_V2:
94
93
  RowFilterText.model_rebuild()
95
94
  RowFilterNumber.model_rebuild()
@@ -9,20 +9,19 @@ from pydantic import Field as FieldInfo
9
9
 
10
10
  from ..._compat import PYDANTIC_V2
11
11
  from ..._models import BaseModel
12
+ from .condition import Condition
12
13
 
13
14
  __all__ = ["RowFilterJoin"]
14
15
 
15
16
 
16
17
  class RowFilterJoin(BaseModel):
17
- conditions: List["Condition"]
18
+ conditions: List[Condition]
18
19
 
19
20
  filter_type: Literal["join"] = FieldInfo(alias="filterType")
20
21
 
21
22
  join_type: Literal["and", "or"] = FieldInfo(alias="joinType")
22
23
 
23
24
 
24
- from .condition import Condition
25
-
26
25
  if PYDANTIC_V2:
27
26
  RowFilterJoin.model_rebuild()
28
27
  else:
@@ -6,6 +6,7 @@ from typing import Union, Iterable
6
6
  from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict
7
7
 
8
8
  from ..._utils import PropertyInfo
9
+ from .row_filter_join import RowFilterJoin
9
10
 
10
11
  __all__ = [
11
12
  "Condition",
@@ -84,7 +85,5 @@ Condition: TypeAlias = Union[
84
85
  RowFilterNullity,
85
86
  RowFilterSet,
86
87
  RowFilterSubstructure,
87
- "RowFilterJoin",
88
+ RowFilterJoin,
88
89
  ]
89
-
90
- from .row_filter_join import RowFilterJoin
@@ -6,16 +6,14 @@ from typing import Iterable
6
6
  from typing_extensions import Literal, Required, Annotated, TypedDict
7
7
 
8
8
  from ..._utils import PropertyInfo
9
+ from .condition import Condition
9
10
 
10
11
  __all__ = ["RowFilterJoin"]
11
12
 
12
13
 
13
14
  class RowFilterJoin(TypedDict, total=False):
14
- conditions: Required[Iterable["Condition"]]
15
+ conditions: Required[Iterable[Condition]]
15
16
 
16
17
  filter_type: Required[Annotated[Literal["join"], PropertyInfo(alias="filterType")]]
17
18
 
18
19
  join_type: Required[Annotated[Literal["and", "or"], PropertyInfo(alias="joinType")]]
19
-
20
-
21
- from .condition import Condition
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deeporigin_data_sdk
3
- Version: 0.1.0a39
3
+ Version: 0.1.0a40
4
4
  Summary: The official Python library for the deeporigin_data API
5
5
  Project-URL: Homepage, https://github.com/deeporiginbio/deeporigin-data-sdk
6
6
  Project-URL: Repository, https://github.com/deeporiginbio/deeporigin-data-sdk
@@ -1,6 +1,6 @@
1
1
  deeporigin_data/__init__.py,sha256=g5vq9kCCiWBl8XgJzXdUB9AIdRypOEj9pQH8WJJEVxo,2533
2
2
  deeporigin_data/_base_client.py,sha256=S5oZPMoWvnH4vdTsMwR8KYI6qg4OF6lydyeTmXwndwA,68045
3
- deeporigin_data/_client.py,sha256=gw3btWS4DUDmZOwnokS6nasXMnd-WYzIK4dLfhwaA0Q,170013
3
+ deeporigin_data/_client.py,sha256=Rj8hzXiR3gORbhNwq4QFUnJy5sCXQtlx7bWm-ro8_1E,170371
4
4
  deeporigin_data/_compat.py,sha256=VWemUKbj6DDkQ-O4baSpHVLJafotzeXmCQGJugfVTIw,6580
5
5
  deeporigin_data/_constants.py,sha256=JE8kyZa2Q4NK_i4fO--8siEYTzeHnT0fYbOFDgDP4uk,464
6
6
  deeporigin_data/_exceptions.py,sha256=_25MmrwuBf1sxAJESpY5sPn1o5E-aUymr6wDuRSWIng,3236
@@ -11,7 +11,7 @@ deeporigin_data/_resource.py,sha256=tkm4gF9YRotE93j48jTDBSGs8wyVa0E5NS9fj19e38c,
11
11
  deeporigin_data/_response.py,sha256=Kj-Zi9_3rAr8jDDHy2yTG8SCMF2a7dilTyE-yQO7pag,28747
12
12
  deeporigin_data/_streaming.py,sha256=yG857cOSJD3gbc7mEc2wqfvcPVLMGmYX4hBOqqIT5RE,10132
13
13
  deeporigin_data/_types.py,sha256=HI5vtFJGLEsyOrrWJRSRtUeOSrd8EdoM020wC51GvcI,6152
14
- deeporigin_data/_version.py,sha256=UvPWm9_bvmvi-QjwTzOT8dp64L2N0Z1ARHYwxG1WmkE,176
14
+ deeporigin_data/_version.py,sha256=nvCF1BfJ8wzwFqnuMlrTxYExAY5GvNo1cj0ZIDaX3uc,176
15
15
  deeporigin_data/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  deeporigin_data/_utils/__init__.py,sha256=PNZ_QJuzZEgyYXqkO1HVhGkj5IU9bglVUcw7H-Knjzw,2062
17
17
  deeporigin_data/_utils/_logs.py,sha256=R7dnUaDs2cdYbq1Ee16dHy863wdcTZRRzubw9KE0qNc,801
@@ -46,7 +46,7 @@ deeporigin_data/types/client_delete_workspace_params.py,sha256=r_815ExueeGMNkGU5
46
46
  deeporigin_data/types/client_describe_code_execution_params.py,sha256=-_QjRCsuGjdEmHYwJwTsdWCQmwaJo5_efy4iCkzqfSc,311
47
47
  deeporigin_data/types/client_describe_database_params.py,sha256=NNgvwMf-0HFsrTzrfnHG6SDy2PjONAgadNjT5sg9qKQ,401
48
48
  deeporigin_data/types/client_describe_database_row_params.py,sha256=WFa1M40OGmXUAHaxAPOX76Qzkhwz0D6XKdXemG8Ktu8,742
49
- deeporigin_data/types/client_describe_database_stats_params.py,sha256=sopt7IcmentMVrTGEsVFF9f8lsWGcQsnoBEXFoZuqQQ,411
49
+ deeporigin_data/types/client_describe_database_stats_params.py,sha256=NunuD2Q1sAR140PGGfmYLR686W6RCJeOg5_SE0qFflM,3039
50
50
  deeporigin_data/types/client_describe_file_params.py,sha256=u9Kzs4L8gXNf4aeQKt_yOcjGWccCa1WcM8J9Mi6m--8,418
51
51
  deeporigin_data/types/client_describe_hierarchy_params.py,sha256=nzjNkFlVGizVjUiTHoADy2hVzA7KkETlNtlmouYKYv4,486
52
52
  deeporigin_data/types/client_describe_row_params.py,sha256=ykhjrmfIeawbYQJcr6-pbkMVAfh3tev7ikzZsOMTh0k,677
@@ -55,11 +55,11 @@ deeporigin_data/types/client_download_file_params.py,sha256=6B-OV4kISwB3oG-UdZPv
55
55
  deeporigin_data/types/client_ensure_rows_params.py,sha256=rS2b2isZ9Kzp_U_z7jECc2Z2mh6HsFyIvsx4rCrvm3M,1407
56
56
  deeporigin_data/types/client_execute_code_async_params.py,sha256=Ohe8X-MGsuf_JzFiyd7_-UdbJn81CKW9UujKKEcOYJw,453
57
57
  deeporigin_data/types/client_execute_code_sync_params.py,sha256=4OUGuc1P5ATJz6ocQuL14te1pU9EZD5ocY9yHY4jUcE,451
58
- deeporigin_data/types/client_export_database_params.py,sha256=KW29eTgxBu6mFTprhr5VDuVWQmdJWyLcU1iKjYGzI-4,3609
58
+ deeporigin_data/types/client_export_database_params.py,sha256=gEE-jytkhDozcN1sj9UF_JEP7aW35jRaDay1nu-F3cs,3605
59
59
  deeporigin_data/types/client_get_code_execution_result_params.py,sha256=rtctDcOx0jKB2BiHbrxJZk1KkB9LhlgbGDoO_J3aHhI,346
60
60
  deeporigin_data/types/client_import_rows_params.py,sha256=G7QmOXZRH42cfd_XSHakk2uEcQ1iJlpDV9GlIFb1FfY,12868
61
61
  deeporigin_data/types/client_list_database_column_unique_values_v2_params.py,sha256=_ENSP8YCgkdEYy4UjN_g230CuqXmYN7o1b7v3o0FEOY,506
62
- deeporigin_data/types/client_list_database_rows_params.py,sha256=aVDUuF1Ny-ZeAR_EF91d_l4vMTHEALXoNfEPO77zRCQ,3615
62
+ deeporigin_data/types/client_list_database_rows_params.py,sha256=BJJsIuTBBDTiTuxaqF5HSigv4AQ4DH8r-fi_yhVKqmU,3611
63
63
  deeporigin_data/types/client_list_files_params.py,sha256=DTtBgRGrbTLs7Ekp3sk2sDxpercjKG7lGcUytKYC14Q,692
64
64
  deeporigin_data/types/client_list_mentions_params.py,sha256=vEu9hsEjtkp8045IVl5mKcXM6rjj21PV879i8F4MZMQ,296
65
65
  deeporigin_data/types/client_list_row_back_references_params.py,sha256=JlflftXfNbOT5oGTEznVBGlCteOSUmSXGf5NfvcSzQc,478
@@ -108,19 +108,19 @@ deeporigin_data/types/update_workspace_response.py,sha256=jikZhBFlm8ycxP0z4op-yg
108
108
  deeporigin_data/types/shared/__init__.py,sha256=pYKaryHlFLkuhKqOrqy-7tuC-5jYgPHZ3McDCyPfFFc,567
109
109
  deeporigin_data/types/shared/add_column_base.py,sha256=U8cpfpPt0zbNbkVEwzU2ckw_XhXdNjQ3fcM12df621c,1184
110
110
  deeporigin_data/types/shared/add_column_union.py,sha256=gVn9S3jFu670Cnr1TTpY_jedCmy3VZGfpNa1JTLTxHU,1031
111
- deeporigin_data/types/shared/condition.py,sha256=VnR-uM4UnpU_KiVyWfMW09HXg8C0SozqwzDQvMqPUIM,2843
111
+ deeporigin_data/types/shared/condition.py,sha256=EB1OG5Ttx1ZynHMG_3jAeYXzVrT1K5PHuMs5ElDFDQs,2840
112
112
  deeporigin_data/types/shared/database.py,sha256=uKiuaRKoa9a1L036pKLW0PPXltw1yLEVjXVEmvM_G58,1475
113
113
  deeporigin_data/types/shared/database_row.py,sha256=kcvB3dqJDIKKc5dPGZ0txF2yqo6QXAziJRRhoYHhdkM,20981
114
114
  deeporigin_data/types/shared/describe_row_response.py,sha256=y41eJRkkLSQrm9A_lvwisBWVHH9_m2qUU6g9Sgp0nbA,538
115
115
  deeporigin_data/types/shared/file.py,sha256=ypKveZM0ya4jWyQUz83J8tpxaSWi2Aq6I_lN2ib8oUs,759
116
- deeporigin_data/types/shared/row_filter_join.py,sha256=iGMX6qxnWnR3vmvGxCoACnbKWZSiQlgjTy3V1mvfg6A,673
116
+ deeporigin_data/types/shared/row_filter_join.py,sha256=mbWT8wbspTGKLzwSi5N4Qidh8AJgJu-iJhn5gSvnRp4,670
117
117
  deeporigin_data/types/shared/workspace.py,sha256=hrViPgKOrIn5hs9D5vf_Pyl6wcIuhqW1iEzt_fKYqy8,1098
118
118
  deeporigin_data/types/shared_params/__init__.py,sha256=ng9sb1I2DfZ6VrWaVU0sUyR-GhVy1M33I_vWR-VUZkk,316
119
119
  deeporigin_data/types/shared_params/add_column_base.py,sha256=s8cbOjluJmf4Pzmg_v_FzhON6Cgc6T82ZjLHmeEdJhY,1235
120
120
  deeporigin_data/types/shared_params/add_column_union.py,sha256=uEJwB-xtbKY19Hq7a2vIrGdDfPcHIBwp9_R63Qf9KO0,1036
121
- deeporigin_data/types/shared_params/condition.py,sha256=ftu-hdGv05aTv4GL9bRyf4kQXl27kaPpt3P4KKdwmNM,2723
122
- deeporigin_data/types/shared_params/row_filter_join.py,sha256=QIo2yhjJJZLcGF-hBF7YcLcYHLhf5uq5EkQG-0WJjtU,595
123
- deeporigin_data_sdk-0.1.0a39.dist-info/METADATA,sha256=yufdDrcjtW7ekLAScfWB2TP_njw38s4csQZTNAew4cc,13421
124
- deeporigin_data_sdk-0.1.0a39.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
125
- deeporigin_data_sdk-0.1.0a39.dist-info/licenses/LICENSE,sha256=qQA5hv0RJh5jpG5jw4cmr1gPxsNivnMjHFpEOTGWZyI,11345
126
- deeporigin_data_sdk-0.1.0a39.dist-info/RECORD,,
121
+ deeporigin_data/types/shared_params/condition.py,sha256=5hbTmfZ-94Hk7Pugl_SirBtuexQNVS2moyvh1jqeptw,2720
122
+ deeporigin_data/types/shared_params/row_filter_join.py,sha256=IU9uWStuIBpzkAaMR19CVAYfnmaDY-Xj3v3k_RPElq8,591
123
+ deeporigin_data_sdk-0.1.0a40.dist-info/METADATA,sha256=HvN_1jr98EOi2Bnt77tmsowVCajmigXQ7WBx009UjMk,13421
124
+ deeporigin_data_sdk-0.1.0a40.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
125
+ deeporigin_data_sdk-0.1.0a40.dist-info/licenses/LICENSE,sha256=jT1To9IZ3XdRqtpv8wDrIwpatTUvf5yP0sFYhEtJVZY,11345
126
+ deeporigin_data_sdk-0.1.0a40.dist-info/RECORD,,
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright 2024 Deeporigin Data
189
+ Copyright 2025 Deeporigin Data
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.