xbarray 0.0.1a13__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.
- array_api_typing/__init__.py +9 -0
- array_api_typing/typing_2024_12/__init__.py +12 -0
- array_api_typing/typing_2024_12/_api_constant.py +32 -0
- array_api_typing/typing_2024_12/_api_fft_typing.py +717 -0
- array_api_typing/typing_2024_12/_api_linalg_typing.py +897 -0
- array_api_typing/typing_2024_12/_api_return_typing.py +103 -0
- array_api_typing/typing_2024_12/_api_typing.py +5855 -0
- array_api_typing/typing_2024_12/_array_typing.py +1265 -0
- array_api_typing/typing_compat/__init__.py +12 -0
- array_api_typing/typing_compat/_api_typing.py +27 -0
- array_api_typing/typing_compat/_array_typing.py +36 -0
- array_api_typing/typing_extra/__init__.py +12 -0
- array_api_typing/typing_extra/_api_typing.py +651 -0
- array_api_typing/typing_extra/_at.py +87 -0
- xbarray/__init__.py +1 -0
- xbarray/backends/_cls_base.py +9 -0
- xbarray/backends/_implementations/_common/implementations.py +87 -0
- xbarray/backends/_implementations/jax/__init__.py +33 -0
- xbarray/backends/_implementations/jax/_extra.py +127 -0
- xbarray/backends/_implementations/jax/_typing.py +15 -0
- xbarray/backends/_implementations/jax/random.py +115 -0
- xbarray/backends/_implementations/numpy/__init__.py +25 -0
- xbarray/backends/_implementations/numpy/_extra.py +98 -0
- xbarray/backends/_implementations/numpy/_typing.py +14 -0
- xbarray/backends/_implementations/numpy/random.py +105 -0
- xbarray/backends/_implementations/pytorch/__init__.py +26 -0
- xbarray/backends/_implementations/pytorch/_extra.py +135 -0
- xbarray/backends/_implementations/pytorch/_typing.py +13 -0
- xbarray/backends/_implementations/pytorch/random.py +101 -0
- xbarray/backends/base.py +218 -0
- xbarray/backends/jax.py +19 -0
- xbarray/backends/numpy.py +19 -0
- xbarray/backends/pytorch.py +22 -0
- xbarray/jax.py +4 -0
- xbarray/numpy.py +4 -0
- xbarray/pytorch.py +4 -0
- xbarray/transformations/pointcloud/__init__.py +1 -0
- xbarray/transformations/pointcloud/base.py +449 -0
- xbarray/transformations/pointcloud/jax.py +24 -0
- xbarray/transformations/pointcloud/numpy.py +23 -0
- xbarray/transformations/pointcloud/pytorch.py +23 -0
- xbarray/transformations/rotation_conversions/__init__.py +1 -0
- xbarray/transformations/rotation_conversions/base.py +713 -0
- xbarray/transformations/rotation_conversions/jax.py +41 -0
- xbarray/transformations/rotation_conversions/numpy.py +41 -0
- xbarray/transformations/rotation_conversions/pytorch.py +41 -0
- xbarray-0.0.1a13.dist-info/METADATA +20 -0
- xbarray-0.0.1a13.dist-info/RECORD +51 -0
- xbarray-0.0.1a13.dist-info/WHEEL +5 -0
- xbarray-0.0.1a13.dist-info/licenses/LICENSE +21 -0
- xbarray-0.0.1a13.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from . import base as base_impl
|
|
2
|
+
from functools import partial
|
|
3
|
+
from xbarray.backends.jax import JaxComputeBackend as BindingBackend
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"quaternion_to_matrix",
|
|
7
|
+
"matrix_to_quaternion",
|
|
8
|
+
"euler_angles_to_matrix",
|
|
9
|
+
"matrix_to_euler_angles",
|
|
10
|
+
"random_quaternions",
|
|
11
|
+
"random_rotations",
|
|
12
|
+
"random_rotation",
|
|
13
|
+
"standardize_quaternion",
|
|
14
|
+
"quaternion_multiply",
|
|
15
|
+
"quaternion_invert",
|
|
16
|
+
"quaternion_apply",
|
|
17
|
+
"axis_angle_to_matrix",
|
|
18
|
+
"matrix_to_axis_angle",
|
|
19
|
+
"axis_angle_to_quaternion",
|
|
20
|
+
"quaternion_to_axis_angle",
|
|
21
|
+
"rotation_6d_to_matrix",
|
|
22
|
+
"matrix_to_rotation_6d",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
quaternion_to_matrix = partial(base_impl.quaternion_to_matrix, BindingBackend)
|
|
26
|
+
matrix_to_quaternion = partial(base_impl.matrix_to_quaternion, BindingBackend)
|
|
27
|
+
euler_angles_to_matrix = partial(base_impl.euler_angles_to_matrix, BindingBackend)
|
|
28
|
+
matrix_to_euler_angles = partial(base_impl.matrix_to_euler_angles, BindingBackend)
|
|
29
|
+
random_quaternions = partial(base_impl.random_quaternions, BindingBackend)
|
|
30
|
+
random_rotations = partial(base_impl.random_rotations, BindingBackend)
|
|
31
|
+
random_rotation = partial(base_impl.random_rotation, BindingBackend)
|
|
32
|
+
standardize_quaternion = partial(base_impl.standardize_quaternion, BindingBackend)
|
|
33
|
+
quaternion_multiply = partial(base_impl.quaternion_multiply, BindingBackend)
|
|
34
|
+
quaternion_invert = partial(base_impl.quaternion_invert, BindingBackend)
|
|
35
|
+
quaternion_apply = partial(base_impl.quaternion_apply, BindingBackend)
|
|
36
|
+
axis_angle_to_matrix = partial(base_impl.axis_angle_to_matrix, BindingBackend)
|
|
37
|
+
matrix_to_axis_angle = partial(base_impl.matrix_to_axis_angle, BindingBackend)
|
|
38
|
+
axis_angle_to_quaternion = partial(base_impl.axis_angle_to_quaternion, BindingBackend)
|
|
39
|
+
quaternion_to_axis_angle = partial(base_impl.quaternion_to_axis_angle, BindingBackend)
|
|
40
|
+
rotation_6d_to_matrix = partial(base_impl.rotation_6d_to_matrix, BindingBackend)
|
|
41
|
+
matrix_to_rotation_6d = partial(base_impl.matrix_to_rotation_6d, BindingBackend)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from . import base as base_impl
|
|
2
|
+
from functools import partial
|
|
3
|
+
from xbarray.backends.numpy import NumpyComputeBackend as BindingBackend
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"quaternion_to_matrix",
|
|
7
|
+
"matrix_to_quaternion",
|
|
8
|
+
"euler_angles_to_matrix",
|
|
9
|
+
"matrix_to_euler_angles",
|
|
10
|
+
"random_quaternions",
|
|
11
|
+
"random_rotations",
|
|
12
|
+
"random_rotation",
|
|
13
|
+
"standardize_quaternion",
|
|
14
|
+
"quaternion_multiply",
|
|
15
|
+
"quaternion_invert",
|
|
16
|
+
"quaternion_apply",
|
|
17
|
+
"axis_angle_to_matrix",
|
|
18
|
+
"matrix_to_axis_angle",
|
|
19
|
+
"axis_angle_to_quaternion",
|
|
20
|
+
"quaternion_to_axis_angle",
|
|
21
|
+
"rotation_6d_to_matrix",
|
|
22
|
+
"matrix_to_rotation_6d",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
quaternion_to_matrix = partial(base_impl.quaternion_to_matrix, BindingBackend)
|
|
26
|
+
matrix_to_quaternion = partial(base_impl.matrix_to_quaternion, BindingBackend)
|
|
27
|
+
euler_angles_to_matrix = partial(base_impl.euler_angles_to_matrix, BindingBackend)
|
|
28
|
+
matrix_to_euler_angles = partial(base_impl.matrix_to_euler_angles, BindingBackend)
|
|
29
|
+
random_quaternions = partial(base_impl.random_quaternions, BindingBackend)
|
|
30
|
+
random_rotations = partial(base_impl.random_rotations, BindingBackend)
|
|
31
|
+
random_rotation = partial(base_impl.random_rotation, BindingBackend)
|
|
32
|
+
standardize_quaternion = partial(base_impl.standardize_quaternion, BindingBackend)
|
|
33
|
+
quaternion_multiply = partial(base_impl.quaternion_multiply, BindingBackend)
|
|
34
|
+
quaternion_invert = partial(base_impl.quaternion_invert, BindingBackend)
|
|
35
|
+
quaternion_apply = partial(base_impl.quaternion_apply, BindingBackend)
|
|
36
|
+
axis_angle_to_matrix = partial(base_impl.axis_angle_to_matrix, BindingBackend)
|
|
37
|
+
matrix_to_axis_angle = partial(base_impl.matrix_to_axis_angle, BindingBackend)
|
|
38
|
+
axis_angle_to_quaternion = partial(base_impl.axis_angle_to_quaternion, BindingBackend)
|
|
39
|
+
quaternion_to_axis_angle = partial(base_impl.quaternion_to_axis_angle, BindingBackend)
|
|
40
|
+
rotation_6d_to_matrix = partial(base_impl.rotation_6d_to_matrix, BindingBackend)
|
|
41
|
+
matrix_to_rotation_6d = partial(base_impl.matrix_to_rotation_6d, BindingBackend)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from . import base as base_impl
|
|
2
|
+
from functools import partial
|
|
3
|
+
from xbarray.backends.pytorch import PytorchComputeBackend as BindingBackend
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"quaternion_to_matrix",
|
|
7
|
+
"matrix_to_quaternion",
|
|
8
|
+
"euler_angles_to_matrix",
|
|
9
|
+
"matrix_to_euler_angles",
|
|
10
|
+
"random_quaternions",
|
|
11
|
+
"random_rotations",
|
|
12
|
+
"random_rotation",
|
|
13
|
+
"standardize_quaternion",
|
|
14
|
+
"quaternion_multiply",
|
|
15
|
+
"quaternion_invert",
|
|
16
|
+
"quaternion_apply",
|
|
17
|
+
"axis_angle_to_matrix",
|
|
18
|
+
"matrix_to_axis_angle",
|
|
19
|
+
"axis_angle_to_quaternion",
|
|
20
|
+
"quaternion_to_axis_angle",
|
|
21
|
+
"rotation_6d_to_matrix",
|
|
22
|
+
"matrix_to_rotation_6d",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
quaternion_to_matrix = partial(base_impl.quaternion_to_matrix, BindingBackend)
|
|
26
|
+
matrix_to_quaternion = partial(base_impl.matrix_to_quaternion, BindingBackend)
|
|
27
|
+
euler_angles_to_matrix = partial(base_impl.euler_angles_to_matrix, BindingBackend)
|
|
28
|
+
matrix_to_euler_angles = partial(base_impl.matrix_to_euler_angles, BindingBackend)
|
|
29
|
+
random_quaternions = partial(base_impl.random_quaternions, BindingBackend)
|
|
30
|
+
random_rotations = partial(base_impl.random_rotations, BindingBackend)
|
|
31
|
+
random_rotation = partial(base_impl.random_rotation, BindingBackend)
|
|
32
|
+
standardize_quaternion = partial(base_impl.standardize_quaternion, BindingBackend)
|
|
33
|
+
quaternion_multiply = partial(base_impl.quaternion_multiply, BindingBackend)
|
|
34
|
+
quaternion_invert = partial(base_impl.quaternion_invert, BindingBackend)
|
|
35
|
+
quaternion_apply = partial(base_impl.quaternion_apply, BindingBackend)
|
|
36
|
+
axis_angle_to_matrix = partial(base_impl.axis_angle_to_matrix, BindingBackend)
|
|
37
|
+
matrix_to_axis_angle = partial(base_impl.matrix_to_axis_angle, BindingBackend)
|
|
38
|
+
axis_angle_to_quaternion = partial(base_impl.axis_angle_to_quaternion, BindingBackend)
|
|
39
|
+
quaternion_to_axis_angle = partial(base_impl.quaternion_to_axis_angle, BindingBackend)
|
|
40
|
+
rotation_6d_to_matrix = partial(base_impl.rotation_6d_to_matrix, BindingBackend)
|
|
41
|
+
matrix_to_rotation_6d = partial(base_impl.matrix_to_rotation_6d, BindingBackend)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: xbarray
|
|
3
|
+
Version: 0.0.1a13
|
|
4
|
+
Summary: Cross-backend Python array library based on the Array API Standard.
|
|
5
|
+
Project-URL: Homepage, https://github.com/UniEnvOrg/XBArray
|
|
6
|
+
Project-URL: Documentation, https://github.com/UniEnvOrg/XBArray
|
|
7
|
+
Project-URL: Repository, https://github.com/UniEnvOrg/XBArray
|
|
8
|
+
Project-URL: Issues, https://github.com/UniEnvOrg/XBArray/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/UniEnvOrg/XBArray/blob/main/CHANGELOG.md
|
|
10
|
+
Requires-Python: >=3.10
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Requires-Dist: typing_extensions>=4.5
|
|
13
|
+
Requires-Dist: array_api_compat
|
|
14
|
+
Requires-Dist: array_api_extra
|
|
15
|
+
Requires-Dist: numpy
|
|
16
|
+
Provides-Extra: torch
|
|
17
|
+
Requires-Dist: torch; extra == "torch"
|
|
18
|
+
Provides-Extra: jax
|
|
19
|
+
Requires-Dist: jax; extra == "jax"
|
|
20
|
+
Dynamic: license-file
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
array_api_typing/__init__.py,sha256=5vcE63PsZ_utc7j2VmLK5evUhar-942p95HyjTiLOc0,179
|
|
2
|
+
array_api_typing/typing_2024_12/__init__.py,sha256=JuD2yojHl3eQI74U75tFhSX5rSy32TR5nKyi714ZfX4,347
|
|
3
|
+
array_api_typing/typing_2024_12/_api_constant.py,sha256=tahdzdi7vAZ3UnM8oDcUqvx2FFsMTAyUbuwgarU6K9U,676
|
|
4
|
+
array_api_typing/typing_2024_12/_api_fft_typing.py,sha256=i48S-9trw3s72xiCJmeCNGlJLwwOVq0kJC4lD9se_co,38641
|
|
5
|
+
array_api_typing/typing_2024_12/_api_linalg_typing.py,sha256=Dt5fDTwYb-GAmP7duajwPqH3zaJmwvxDEOOzdl5X0LE,48950
|
|
6
|
+
array_api_typing/typing_2024_12/_api_return_typing.py,sha256=rIygF4PAr7G1PK3cVOwQNrev_kGCuMcfIJ9i8L0u1tI,2462
|
|
7
|
+
array_api_typing/typing_2024_12/_api_typing.py,sha256=rFuF7E6b2RrijzQBrZx6_dYEn9Yslq8FqI31L1Ccrf4,294255
|
|
8
|
+
array_api_typing/typing_2024_12/_array_typing.py,sha256=GMqs5LgshujRIh7i0mGtZy4Vt56FSXqBmNlBGidFRnc,57403
|
|
9
|
+
array_api_typing/typing_compat/__init__.py,sha256=JuD2yojHl3eQI74U75tFhSX5rSy32TR5nKyi714ZfX4,347
|
|
10
|
+
array_api_typing/typing_compat/_api_typing.py,sha256=RnGZFD8AEIqOCurcI68xyw7y9W9hm4yWUGf7NlJkNk0,930
|
|
11
|
+
array_api_typing/typing_compat/_array_typing.py,sha256=CVv91wDjjG-8kSofkqgA85qpM-3x34Zh_SNuBFegW9o,1182
|
|
12
|
+
array_api_typing/typing_extra/__init__.py,sha256=YfdhD-Sfk3SCfI9lHmA-PbVLzms1OFF5x0ekzI3aafk,323
|
|
13
|
+
array_api_typing/typing_extra/_api_typing.py,sha256=Jj_E61r35EgecWmBvAzpASV4qub5aQI_O4aL-ngEvQ8,23028
|
|
14
|
+
array_api_typing/typing_extra/_at.py,sha256=S7_YjOwR3a8olZWgwpLDFEfnekRufRqrtfiMLwrWjgo,2202
|
|
15
|
+
xbarray/__init__.py,sha256=KgXKAKk4obhlDaydQmjePwYqAAj_4Ag4JBJbfcc303M,54
|
|
16
|
+
xbarray/jax.py,sha256=IeMSMi0TQ4A1kho1cyNOXtB0XeaxTKaO_2ymwhW_h3U,174
|
|
17
|
+
xbarray/numpy.py,sha256=5EcCJ8q8AU9r58eZSAJPgA63-RCqjxaWwaHrQp7XN9I,178
|
|
18
|
+
xbarray/pytorch.py,sha256=L_ZLPKKqg8KrqgFILmzkGLtjafec0aza52R3TW4wniw,182
|
|
19
|
+
xbarray/backends/_cls_base.py,sha256=O-99tV_9DxfqFfMNC7ZslPS4tGeIilpN6JGtxqbFCPY,312
|
|
20
|
+
xbarray/backends/base.py,sha256=zoABR4WXHFGyqhiUW8Tnv1PnScwEFxz-G2J86-WBshQ,6768
|
|
21
|
+
xbarray/backends/jax.py,sha256=68Tda5mWVucoviZUzYEqS9V4BELKA1hapKaFuWKr_ZE,633
|
|
22
|
+
xbarray/backends/numpy.py,sha256=Dfdu3fHt8YhU1tdOwd3xmtzdZXOXs0fzxnd2LjaqJXU,663
|
|
23
|
+
xbarray/backends/pytorch.py,sha256=1Dfy5XLxagK3sjRgt57Q8ppE1-dOhF0T2HipLHRoCVg,758
|
|
24
|
+
xbarray/backends/_implementations/_common/implementations.py,sha256=Ra1-wGN_ZBxIFe4tuR-vCHYLgwkeeFoQtKwVEUwn_To,3834
|
|
25
|
+
xbarray/backends/_implementations/jax/__init__.py,sha256=vOtCkwe98vNI1qQOu0Xv9OIaVucaJp6bEI9_mzicBH0,1014
|
|
26
|
+
xbarray/backends/_implementations/jax/_extra.py,sha256=_E1vXolN86-zOdbN60S_YnQ8lePqPwB7l-EKB_T4KNE,3515
|
|
27
|
+
xbarray/backends/_implementations/jax/_typing.py,sha256=U9BUxHNEjFB0LHF1KMrFLbh6E5kVvpAF8bZUbLNf25E,278
|
|
28
|
+
xbarray/backends/_implementations/jax/random.py,sha256=bIyGV0Nc1PF4PaU0F-paOG4bAENm8ngJFr20voMaYsg,3316
|
|
29
|
+
xbarray/backends/_implementations/numpy/__init__.py,sha256=hJEcFR86pb1G72MFS1X15qwI_-BuPxy5SS5PXB0alQI,792
|
|
30
|
+
xbarray/backends/_implementations/numpy/_extra.py,sha256=DEDWkoK-rTKemMa7Lh3b-FSGPsdnfBA6i-6CWiIlV-M,2379
|
|
31
|
+
xbarray/backends/_implementations/numpy/_typing.py,sha256=pgjLLAipwFsIk0QdgrAA4PEvjF_ugHbzfSTbLpA__6o,241
|
|
32
|
+
xbarray/backends/_implementations/numpy/random.py,sha256=C1z2-pMcDMRa7nKhKNTuY5LtTlu9nXvDpH1wY8mdIug,2630
|
|
33
|
+
xbarray/backends/_implementations/pytorch/__init__.py,sha256=s2mF3jWI356oedPZevKYARCFhlXH0hqS9OgBzxMSgHQ,795
|
|
34
|
+
xbarray/backends/_implementations/pytorch/_extra.py,sha256=mVRnxYQg-1pNtUTsb-4YV25Wvhh908awsKKT1B7P_2Y,3638
|
|
35
|
+
xbarray/backends/_implementations/pytorch/_typing.py,sha256=qSnNZD3IpgSoOTl3TBRBv2ifSAHOw0aR9uyzfV5KYVw,204
|
|
36
|
+
xbarray/backends/_implementations/pytorch/random.py,sha256=p4ZDsTc--z5XslVzel-iEVDtoKizrv39_1tfR4-469o,2657
|
|
37
|
+
xbarray/transformations/pointcloud/__init__.py,sha256=GLdMGsm5_CnATyh19At20Hmb1MsXZvPxNvg70bHYChk,19
|
|
38
|
+
xbarray/transformations/pointcloud/base.py,sha256=g63dLmkhzEWOEpKjK3yZe7KW09yQ5YNSA_whDyH6L1A,20413
|
|
39
|
+
xbarray/transformations/pointcloud/jax.py,sha256=GUq6pHt0pn6r8PpY6mpMjGSa7zyT13sePEDup7yo6dI,1081
|
|
40
|
+
xbarray/transformations/pointcloud/numpy.py,sha256=ZwWb0LTmz7jfMmWQqFq--S0jyRyK2f3sySnQCA8EZPw,1084
|
|
41
|
+
xbarray/transformations/pointcloud/pytorch.py,sha256=PVCkB-ZpLu1rieD0Xpt_9jAG6qDtJjN6IviXcMbxnIg,1088
|
|
42
|
+
xbarray/transformations/rotation_conversions/__init__.py,sha256=GLdMGsm5_CnATyh19At20Hmb1MsXZvPxNvg70bHYChk,19
|
|
43
|
+
xbarray/transformations/rotation_conversions/base.py,sha256=L578W9mLgAdGnsnOOU-RYUxSqZLk0VTJdHANNepDAcU,26909
|
|
44
|
+
xbarray/transformations/rotation_conversions/jax.py,sha256=0BmQ_B_eqedqXntWjgNcioNfFuecy4LZNRf347kltsU,1956
|
|
45
|
+
xbarray/transformations/rotation_conversions/numpy.py,sha256=j-44lmMydo8lMhvGLMWMEmUFZlDtEa3VrgxAPLIIbDg,1960
|
|
46
|
+
xbarray/transformations/rotation_conversions/pytorch.py,sha256=Eu2kOolvQqm56NPiVYpuBzQ3MUc1ANREw3J4AftXoxM,1964
|
|
47
|
+
xbarray-0.0.1a13.dist-info/licenses/LICENSE,sha256=6P0HCOancSfch0dNycuDIe8_qwS0Id97Ih_8hjJ2PFI,1067
|
|
48
|
+
xbarray-0.0.1a13.dist-info/METADATA,sha256=1y3gwpjzZ4sFKMDFJnhXyH08ryF5xUWLSMQA1whXC-0,773
|
|
49
|
+
xbarray-0.0.1a13.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
|
|
50
|
+
xbarray-0.0.1a13.dist-info/top_level.txt,sha256=VriXuFyU48Du4HQMzROSArhwqB6EZYY0n0mipgUqB9A,25
|
|
51
|
+
xbarray-0.0.1a13.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Yunhao Cao
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|