cuequivariance-ops-cu12 0.4.0__py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.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.
Potentially problematic release.
This version of cuequivariance-ops-cu12 might be problematic. Click here for more details.
- cuequivariance_ops/VERSION +1 -0
- cuequivariance_ops/__init__.py +41 -0
- cuequivariance_ops/_version.py +20 -0
- cuequivariance_ops/common/common.hpp +98 -0
- cuequivariance_ops/common/nvtx.hpp +29 -0
- cuequivariance_ops/equivariance/fused_tensor_product.cuh +297 -0
- cuequivariance_ops/equivariance/segmented_transpose.cuh +40 -0
- cuequivariance_ops/equivariance/tensor_product_uniform_1d_jit.hh +56 -0
- cuequivariance_ops/lib/libcue_ops.so +0 -0
- cuequivariance_ops_cu12-0.4.0.dist-info/METADATA +203 -0
- cuequivariance_ops_cu12-0.4.0.dist-info/RECORD +13 -0
- cuequivariance_ops_cu12-0.4.0.dist-info/WHEEL +6 -0
- cuequivariance_ops_cu12-0.4.0.dist-info/licenses/LICENSE +168 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.4.0
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: LicenseRef-NvidiaProprietary
|
|
3
|
+
#
|
|
4
|
+
# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
|
|
5
|
+
# property and proprietary rights in and to this material, related
|
|
6
|
+
# documentation and any modifications thereto. Any use, reproduction,
|
|
7
|
+
# disclosure or distribution of this material and related documentation
|
|
8
|
+
# without an express license agreement from NVIDIA CORPORATION or
|
|
9
|
+
# its affiliates is strictly prohibited.
|
|
10
|
+
|
|
11
|
+
from ._version import __version__, __git_commit__
|
|
12
|
+
import os
|
|
13
|
+
import ctypes
|
|
14
|
+
|
|
15
|
+
PREFERRED_LOAD_FLAG = ctypes.RTLD_LOCAL
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def root_dir():
|
|
19
|
+
try:
|
|
20
|
+
import importlib.metadata
|
|
21
|
+
|
|
22
|
+
dist = importlib.metadata.distribution("cuequivariance_ops")
|
|
23
|
+
root = dist.locate_file("cuequivariance_ops")
|
|
24
|
+
except Exception:
|
|
25
|
+
# last resort, will fail with writeable install
|
|
26
|
+
root = os.path.dirname(__file__)
|
|
27
|
+
return root
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def load_library():
|
|
31
|
+
try:
|
|
32
|
+
ctypes.CDLL(
|
|
33
|
+
os.path.join(root_dir(), "lib/libcue_ops.so"), mode=PREFERRED_LOAD_FLAG
|
|
34
|
+
)
|
|
35
|
+
except Exception:
|
|
36
|
+
pass
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
load_library()
|
|
40
|
+
|
|
41
|
+
__all__ = ["__version__", "__git_commit__", "root_dir", "load_library"]
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: LicenseRef-NvidiaProprietary
|
|
3
|
+
#
|
|
4
|
+
# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
|
|
5
|
+
# property and proprietary rights in and to this material, related
|
|
6
|
+
# documentation and any modifications thereto. Any use, reproduction,
|
|
7
|
+
# disclosure or distribution of this material and related documentation
|
|
8
|
+
# without an express license agreement from NVIDIA CORPORATION or
|
|
9
|
+
# its affiliates is strictly prohibited.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
import importlib.resources
|
|
13
|
+
|
|
14
|
+
__version__ = (
|
|
15
|
+
importlib.resources.files("cuequivariance_ops")
|
|
16
|
+
.joinpath("VERSION")
|
|
17
|
+
.read_text()
|
|
18
|
+
.strip()
|
|
19
|
+
)
|
|
20
|
+
__git_commit__ = "release"
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This source code and/or documentation ("Licensed Deliverables") are
|
|
5
|
+
* subject to NVIDIA intellectual property rights under U.S. and
|
|
6
|
+
* international Copyright laws.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include <cstdint>
|
|
12
|
+
#include <cuda_bf16.h>
|
|
13
|
+
#include <cuda_fp16.h>
|
|
14
|
+
#include <vector>
|
|
15
|
+
|
|
16
|
+
namespace kernelcatcher {
|
|
17
|
+
|
|
18
|
+
namespace tensor_product {
|
|
19
|
+
/**
|
|
20
|
+
* @brief a wrapper struct containing informations
|
|
21
|
+
* about tensor-product paths
|
|
22
|
+
*/
|
|
23
|
+
template <typename MathT>
|
|
24
|
+
struct __attribute__((aligned(16))) tp_info {
|
|
25
|
+
/** offsets into `path_offsets_and_dims` for each "target" */
|
|
26
|
+
const int32_t* __restrict__ path_csr_offsets{nullptr};
|
|
27
|
+
/** "sources" of all paths and their offsets and dimensions */
|
|
28
|
+
const int32_t* __restrict__ path_offsets_and_dims{nullptr};
|
|
29
|
+
/** clebsch-gordan values for each path */
|
|
30
|
+
const MathT* __restrict__ path_cg_values{nullptr};
|
|
31
|
+
/** number of "target" segments */
|
|
32
|
+
int32_t num_target_segments{0};
|
|
33
|
+
/** number of path (i.e. all paths between segments) */
|
|
34
|
+
int32_t num_paths{0};
|
|
35
|
+
}; // struct tp_info
|
|
36
|
+
|
|
37
|
+
enum class ConnectionModeT : uint8_t {
|
|
38
|
+
kUVW = 0,
|
|
39
|
+
// UVW with U spherical harmonic
|
|
40
|
+
k1VW, // NOLINT
|
|
41
|
+
// UVW with V spherical harmonic
|
|
42
|
+
kU1W, // NOLINT
|
|
43
|
+
kUVU,
|
|
44
|
+
kUVV,
|
|
45
|
+
kUUW,
|
|
46
|
+
kUUU,
|
|
47
|
+
// FullTP, no weight
|
|
48
|
+
kUVUV,
|
|
49
|
+
// FullTP, U spherical harmonic
|
|
50
|
+
k1V1V,
|
|
51
|
+
// FullTP, V spherical harmonic
|
|
52
|
+
kU1U1,
|
|
53
|
+
// Linear
|
|
54
|
+
kUUVV,
|
|
55
|
+
};
|
|
56
|
+
} // namespace tensor_product
|
|
57
|
+
|
|
58
|
+
namespace symmetric_tensor_contraction {
|
|
59
|
+
/**
|
|
60
|
+
* @brief a wrapper struct containing informations
|
|
61
|
+
* about tensor-product paths
|
|
62
|
+
*/
|
|
63
|
+
template <typename DataT>
|
|
64
|
+
struct __attribute__((aligned(16))) clebsch_gordan_tensor {
|
|
65
|
+
const DataT* __restrict__ cg_values{nullptr};
|
|
66
|
+
const int16_t* __restrict__ cg_indices{nullptr};
|
|
67
|
+
const int32_t* __restrict__ cg_offsets{nullptr};
|
|
68
|
+
int32_t total_output_irreps{0};
|
|
69
|
+
}; // struct clebsch_gordan_tensor
|
|
70
|
+
} // namespace symmetric_tensor_contraction
|
|
71
|
+
|
|
72
|
+
namespace batch_linear {
|
|
73
|
+
struct __attribute__((aligned(8))) MatrixLayout {
|
|
74
|
+
int32_t size_row; // uncontracted mode
|
|
75
|
+
int32_t size_col; // contracted mode
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
struct __attribute__((aligned(8))) IndexOffset {
|
|
79
|
+
int32_t start;
|
|
80
|
+
int32_t end;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
enum class GemvModeT : std::uint8_t { kUVV = 0, kUUV = 1 };
|
|
84
|
+
enum class WeightSharedModeT : std::int32_t { kShared = 0, kIndexed = 1, kBatched = 2 };
|
|
85
|
+
/**
|
|
86
|
+
* @brief a wrapper struct containing informations
|
|
87
|
+
* about tensor-product paths
|
|
88
|
+
*/
|
|
89
|
+
template <typename DataT>
|
|
90
|
+
struct __attribute__((aligned(16))) batch_linear_info {
|
|
91
|
+
const MatrixLayout* __restrict__ layouts{nullptr};
|
|
92
|
+
const IndexOffset* __restrict__ index_offsets{nullptr};
|
|
93
|
+
const int32_t* __restrict__ indices{nullptr};
|
|
94
|
+
const DataT* __restrict__ alpha{nullptr};
|
|
95
|
+
}; // struct batch_linear_info
|
|
96
|
+
|
|
97
|
+
} // namespace batch_linear
|
|
98
|
+
} // namespace kernelcatcher
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2019-2023, NVIDIA CORPORATION. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This source code and/or documentation ("Licensed Deliverables") are
|
|
5
|
+
* subject to NVIDIA intellectual property rights under U.S. and
|
|
6
|
+
* international Copyright laws.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
namespace kernelcatcher::utils {
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @brief Push a named nvtx range
|
|
15
|
+
* @param name range name
|
|
16
|
+
*/
|
|
17
|
+
void push_range(const char* name);
|
|
18
|
+
|
|
19
|
+
/** Pop the latest range */
|
|
20
|
+
void pop_range();
|
|
21
|
+
|
|
22
|
+
struct range_guard {
|
|
23
|
+
range_guard(const char* name) { push_range(name); }
|
|
24
|
+
~range_guard() { pop_range(); }
|
|
25
|
+
range_guard(range_guard const&) = delete;
|
|
26
|
+
range_guard& operator=(range_guard const&) = delete;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
} // namespace kernelcatcher::utils
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021-2024, NVIDIA CORPORATION. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This source code and/or documentation ("Licensed Deliverables") are
|
|
5
|
+
* subject to NVIDIA intellectual property rights under U.S. and
|
|
6
|
+
* international Copyright laws.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "../common/common.hpp"
|
|
12
|
+
|
|
13
|
+
#include <algorithm>
|
|
14
|
+
#include <limits>
|
|
15
|
+
|
|
16
|
+
namespace kernelcatcher::tensor_product {
|
|
17
|
+
|
|
18
|
+
struct __attribute__((aligned(16))) tp_data_sizes {
|
|
19
|
+
int64_t batch_size;
|
|
20
|
+
bool shared_a;
|
|
21
|
+
bool shared_b;
|
|
22
|
+
bool shared_w;
|
|
23
|
+
int32_t stride_a;
|
|
24
|
+
int32_t stride_b;
|
|
25
|
+
int32_t stride_w;
|
|
26
|
+
int32_t stride_o;
|
|
27
|
+
}; // struct tp_data_sizes
|
|
28
|
+
|
|
29
|
+
template <typename DataAT, typename DataBT, typename DataWeightT, typename DataOutT, typename MathT>
|
|
30
|
+
void fused_tensor_product_fwd(DataOutT* out,
|
|
31
|
+
const DataAT* in_a,
|
|
32
|
+
const DataBT* in_b,
|
|
33
|
+
const DataWeightT* weight,
|
|
34
|
+
ConnectionModeT mode,
|
|
35
|
+
const tp_info<MathT>& info,
|
|
36
|
+
const tp_data_sizes& sizes,
|
|
37
|
+
cudaStream_t stream);
|
|
38
|
+
|
|
39
|
+
template <typename DataAT, typename DataBT, typename DataWeightT, typename DataOutT, typename MathT>
|
|
40
|
+
void fused_tensor_product_bwd(DataAT* grad_in_a,
|
|
41
|
+
DataBT* grad_in_b,
|
|
42
|
+
DataWeightT* grad_weight,
|
|
43
|
+
const DataOutT* grad_out,
|
|
44
|
+
const DataAT* in_a,
|
|
45
|
+
const DataBT* in_b,
|
|
46
|
+
const DataWeightT* weight,
|
|
47
|
+
ConnectionModeT mode,
|
|
48
|
+
const tp_info<MathT>& info_bwd_dgrad_a,
|
|
49
|
+
const tp_info<MathT>& info_bwd_dgrad_b,
|
|
50
|
+
const tp_info<MathT>& info_bwd_dgrad_w,
|
|
51
|
+
const tp_data_sizes& sizes,
|
|
52
|
+
cudaStream_t stream);
|
|
53
|
+
|
|
54
|
+
template <typename DataAT, typename DataBT, typename DataWeightT, typename DataOutT, typename MathT>
|
|
55
|
+
void fused_tensor_product_bwd_bwd(DataAT* grad_in_a,
|
|
56
|
+
DataBT* grad_in_b,
|
|
57
|
+
DataWeightT* grad_weight,
|
|
58
|
+
DataOutT* grad_grad_out,
|
|
59
|
+
const DataAT* grad_grad_in_a,
|
|
60
|
+
const DataBT* grad_grad_in_b,
|
|
61
|
+
const DataWeightT* grad_grad_weight,
|
|
62
|
+
const DataOutT* grad_out,
|
|
63
|
+
const DataAT* in_a,
|
|
64
|
+
const DataBT* in_b,
|
|
65
|
+
const DataWeightT* weight,
|
|
66
|
+
ConnectionModeT mode,
|
|
67
|
+
const tp_info<MathT>& info_fwd,
|
|
68
|
+
const tp_info<MathT>& info_bwd_dgrad_a,
|
|
69
|
+
const tp_info<MathT>& info_bwd_dgrad_b,
|
|
70
|
+
const tp_info<MathT>& info_bwd_dgrad_w,
|
|
71
|
+
const tp_data_sizes& sizes,
|
|
72
|
+
cudaStream_t stream);
|
|
73
|
+
|
|
74
|
+
extern template void fused_tensor_product_bwd_bwd<float, float, float, float, float>(
|
|
75
|
+
float*,
|
|
76
|
+
float*,
|
|
77
|
+
float*,
|
|
78
|
+
float*,
|
|
79
|
+
const float*,
|
|
80
|
+
const float*,
|
|
81
|
+
const float*,
|
|
82
|
+
const float*,
|
|
83
|
+
const float*,
|
|
84
|
+
const float*,
|
|
85
|
+
const float*,
|
|
86
|
+
ConnectionModeT,
|
|
87
|
+
const tp_info<float>&,
|
|
88
|
+
const tp_info<float>&,
|
|
89
|
+
const tp_info<float>&,
|
|
90
|
+
const tp_info<float>&,
|
|
91
|
+
const tp_data_sizes&,
|
|
92
|
+
cudaStream_t);
|
|
93
|
+
|
|
94
|
+
extern template void fused_tensor_product_bwd_bwd<float, float, float, float, double>(
|
|
95
|
+
float*,
|
|
96
|
+
float*,
|
|
97
|
+
float*,
|
|
98
|
+
float*,
|
|
99
|
+
const float*,
|
|
100
|
+
const float*,
|
|
101
|
+
const float*,
|
|
102
|
+
const float*,
|
|
103
|
+
const float*,
|
|
104
|
+
const float*,
|
|
105
|
+
const float*,
|
|
106
|
+
ConnectionModeT,
|
|
107
|
+
const tp_info<double>&,
|
|
108
|
+
const tp_info<double>&,
|
|
109
|
+
const tp_info<double>&,
|
|
110
|
+
const tp_info<double>&,
|
|
111
|
+
const tp_data_sizes&,
|
|
112
|
+
cudaStream_t);
|
|
113
|
+
|
|
114
|
+
extern template void fused_tensor_product_bwd_bwd<double, double, double, double, double>(
|
|
115
|
+
double*,
|
|
116
|
+
double*,
|
|
117
|
+
double*,
|
|
118
|
+
double*,
|
|
119
|
+
const double*,
|
|
120
|
+
const double*,
|
|
121
|
+
const double*,
|
|
122
|
+
const double*,
|
|
123
|
+
const double*,
|
|
124
|
+
const double*,
|
|
125
|
+
const double*,
|
|
126
|
+
ConnectionModeT,
|
|
127
|
+
const tp_info<double>&,
|
|
128
|
+
const tp_info<double>&,
|
|
129
|
+
const tp_info<double>&,
|
|
130
|
+
const tp_info<double>&,
|
|
131
|
+
const tp_data_sizes&,
|
|
132
|
+
cudaStream_t);
|
|
133
|
+
|
|
134
|
+
extern template void fused_tensor_product_bwd_bwd<__half, __half, __half, __half, float>(
|
|
135
|
+
__half*,
|
|
136
|
+
__half*,
|
|
137
|
+
__half*,
|
|
138
|
+
__half*,
|
|
139
|
+
const __half*,
|
|
140
|
+
const __half*,
|
|
141
|
+
const __half*,
|
|
142
|
+
const __half*,
|
|
143
|
+
const __half*,
|
|
144
|
+
const __half*,
|
|
145
|
+
const __half*,
|
|
146
|
+
ConnectionModeT,
|
|
147
|
+
const tp_info<float>&,
|
|
148
|
+
const tp_info<float>&,
|
|
149
|
+
const tp_info<float>&,
|
|
150
|
+
const tp_info<float>&,
|
|
151
|
+
const tp_data_sizes&,
|
|
152
|
+
cudaStream_t);
|
|
153
|
+
extern template void
|
|
154
|
+
fused_tensor_product_bwd_bwd<__nv_bfloat16, __nv_bfloat16, __nv_bfloat16, __nv_bfloat16, float>(
|
|
155
|
+
__nv_bfloat16*,
|
|
156
|
+
__nv_bfloat16*,
|
|
157
|
+
__nv_bfloat16*,
|
|
158
|
+
__nv_bfloat16*,
|
|
159
|
+
const __nv_bfloat16*,
|
|
160
|
+
const __nv_bfloat16*,
|
|
161
|
+
const __nv_bfloat16*,
|
|
162
|
+
const __nv_bfloat16*,
|
|
163
|
+
const __nv_bfloat16*,
|
|
164
|
+
const __nv_bfloat16*,
|
|
165
|
+
const __nv_bfloat16*,
|
|
166
|
+
ConnectionModeT,
|
|
167
|
+
const tp_info<float>&,
|
|
168
|
+
const tp_info<float>&,
|
|
169
|
+
const tp_info<float>&,
|
|
170
|
+
const tp_info<float>&,
|
|
171
|
+
const tp_data_sizes&,
|
|
172
|
+
cudaStream_t);
|
|
173
|
+
|
|
174
|
+
extern template void fused_tensor_product_bwd<float, float, float, float, float>(
|
|
175
|
+
float*,
|
|
176
|
+
float*,
|
|
177
|
+
float*,
|
|
178
|
+
const float*,
|
|
179
|
+
const float*,
|
|
180
|
+
const float*,
|
|
181
|
+
const float*,
|
|
182
|
+
ConnectionModeT,
|
|
183
|
+
const tp_info<float>&,
|
|
184
|
+
const tp_info<float>&,
|
|
185
|
+
const tp_info<float>&,
|
|
186
|
+
const tp_data_sizes&,
|
|
187
|
+
cudaStream_t);
|
|
188
|
+
|
|
189
|
+
extern template void fused_tensor_product_bwd<float, float, float, float, double>(
|
|
190
|
+
float*,
|
|
191
|
+
float*,
|
|
192
|
+
float*,
|
|
193
|
+
const float*,
|
|
194
|
+
const float*,
|
|
195
|
+
const float*,
|
|
196
|
+
const float*,
|
|
197
|
+
ConnectionModeT,
|
|
198
|
+
const tp_info<double>&,
|
|
199
|
+
const tp_info<double>&,
|
|
200
|
+
const tp_info<double>&,
|
|
201
|
+
const tp_data_sizes&,
|
|
202
|
+
cudaStream_t);
|
|
203
|
+
|
|
204
|
+
extern template void fused_tensor_product_bwd<double, double, double, double, double>(
|
|
205
|
+
double*,
|
|
206
|
+
double*,
|
|
207
|
+
double*,
|
|
208
|
+
const double*,
|
|
209
|
+
const double*,
|
|
210
|
+
const double*,
|
|
211
|
+
const double*,
|
|
212
|
+
ConnectionModeT,
|
|
213
|
+
const tp_info<double>&,
|
|
214
|
+
const tp_info<double>&,
|
|
215
|
+
const tp_info<double>&,
|
|
216
|
+
const tp_data_sizes&,
|
|
217
|
+
cudaStream_t);
|
|
218
|
+
|
|
219
|
+
extern template void fused_tensor_product_bwd<__half, __half, __half, __half, float>(
|
|
220
|
+
__half*,
|
|
221
|
+
__half*,
|
|
222
|
+
__half*,
|
|
223
|
+
const __half*,
|
|
224
|
+
const __half*,
|
|
225
|
+
const __half*,
|
|
226
|
+
const __half*,
|
|
227
|
+
ConnectionModeT,
|
|
228
|
+
const tp_info<float>&,
|
|
229
|
+
const tp_info<float>&,
|
|
230
|
+
const tp_info<float>&,
|
|
231
|
+
const tp_data_sizes&,
|
|
232
|
+
cudaStream_t);
|
|
233
|
+
extern template void
|
|
234
|
+
fused_tensor_product_bwd<__nv_bfloat16, __nv_bfloat16, __nv_bfloat16, __nv_bfloat16, float>(
|
|
235
|
+
__nv_bfloat16*,
|
|
236
|
+
__nv_bfloat16*,
|
|
237
|
+
__nv_bfloat16*,
|
|
238
|
+
const __nv_bfloat16*,
|
|
239
|
+
const __nv_bfloat16*,
|
|
240
|
+
const __nv_bfloat16*,
|
|
241
|
+
const __nv_bfloat16*,
|
|
242
|
+
ConnectionModeT,
|
|
243
|
+
const tp_info<float>&,
|
|
244
|
+
const tp_info<float>&,
|
|
245
|
+
const tp_info<float>&,
|
|
246
|
+
const tp_data_sizes&,
|
|
247
|
+
cudaStream_t);
|
|
248
|
+
|
|
249
|
+
extern template void fused_tensor_product_fwd<float, float, float, float, float>(
|
|
250
|
+
float*,
|
|
251
|
+
const float*,
|
|
252
|
+
const float*,
|
|
253
|
+
const float*,
|
|
254
|
+
ConnectionModeT,
|
|
255
|
+
const tp_info<float>&,
|
|
256
|
+
const tp_data_sizes&,
|
|
257
|
+
cudaStream_t);
|
|
258
|
+
extern template void fused_tensor_product_fwd<float, float, float, float, double>(
|
|
259
|
+
float*,
|
|
260
|
+
const float*,
|
|
261
|
+
const float*,
|
|
262
|
+
const float*,
|
|
263
|
+
ConnectionModeT,
|
|
264
|
+
const tp_info<double>&,
|
|
265
|
+
const tp_data_sizes&,
|
|
266
|
+
cudaStream_t);
|
|
267
|
+
extern template void fused_tensor_product_fwd<double, double, double, double, double>(
|
|
268
|
+
double*,
|
|
269
|
+
const double*,
|
|
270
|
+
const double*,
|
|
271
|
+
const double*,
|
|
272
|
+
ConnectionModeT,
|
|
273
|
+
const tp_info<double>&,
|
|
274
|
+
const tp_data_sizes&,
|
|
275
|
+
cudaStream_t);
|
|
276
|
+
|
|
277
|
+
extern template void fused_tensor_product_fwd<__half, __half, __half, __half, float>(
|
|
278
|
+
__half*,
|
|
279
|
+
const __half*,
|
|
280
|
+
const __half*,
|
|
281
|
+
const __half*,
|
|
282
|
+
ConnectionModeT,
|
|
283
|
+
const tp_info<float>&,
|
|
284
|
+
const tp_data_sizes&,
|
|
285
|
+
cudaStream_t);
|
|
286
|
+
extern template void
|
|
287
|
+
fused_tensor_product_fwd<__nv_bfloat16, __nv_bfloat16, __nv_bfloat16, __nv_bfloat16, float>(
|
|
288
|
+
__nv_bfloat16*,
|
|
289
|
+
const __nv_bfloat16*,
|
|
290
|
+
const __nv_bfloat16*,
|
|
291
|
+
const __nv_bfloat16*,
|
|
292
|
+
ConnectionModeT,
|
|
293
|
+
const tp_info<float>&,
|
|
294
|
+
const tp_data_sizes&,
|
|
295
|
+
cudaStream_t);
|
|
296
|
+
|
|
297
|
+
} // namespace kernelcatcher::tensor_product
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021-2024, NVIDIA CORPORATION. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This source code and/or documentation ("Licensed Deliverables") are
|
|
5
|
+
* subject to NVIDIA intellectual property rights under U.S. and
|
|
6
|
+
* international Copyright laws.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "../common/common.hpp"
|
|
12
|
+
|
|
13
|
+
namespace kernelcatcher::tensor_product {
|
|
14
|
+
|
|
15
|
+
template <typename DataT>
|
|
16
|
+
void segmented_transpose(DataT* tensor_transpose,
|
|
17
|
+
const DataT* tensor,
|
|
18
|
+
const int32_t* segment_info,
|
|
19
|
+
int32_t num_segments,
|
|
20
|
+
int64_t batch_size,
|
|
21
|
+
int64_t stride,
|
|
22
|
+
bool input_contiguous_as_info,
|
|
23
|
+
cudaStream_t stream);
|
|
24
|
+
|
|
25
|
+
extern template void segmented_transpose<float>(
|
|
26
|
+
float*, const float*, const int32_t*, int32_t, int64_t, int64_t, bool, cudaStream_t);
|
|
27
|
+
extern template void segmented_transpose<double>(
|
|
28
|
+
double*, const double*, const int32_t*, int32_t, int64_t, int64_t, bool, cudaStream_t);
|
|
29
|
+
extern template void segmented_transpose<__nv_bfloat16>(__nv_bfloat16*,
|
|
30
|
+
const __nv_bfloat16*,
|
|
31
|
+
const int32_t*,
|
|
32
|
+
int32_t,
|
|
33
|
+
int64_t,
|
|
34
|
+
int64_t,
|
|
35
|
+
bool,
|
|
36
|
+
cudaStream_t);
|
|
37
|
+
extern template void segmented_transpose<__half>(
|
|
38
|
+
__half*, const __half*, const int32_t*, int32_t, int64_t, int64_t, bool, cudaStream_t);
|
|
39
|
+
|
|
40
|
+
} // namespace kernelcatcher::tensor_product
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This source code and/or documentation ("Licensed Deliverables") are
|
|
5
|
+
* subject to NVIDIA intellectual property rights under U.S. and
|
|
6
|
+
* international Copyright laws.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include <cstdint>
|
|
12
|
+
#include <string>
|
|
13
|
+
#include <vector>
|
|
14
|
+
|
|
15
|
+
namespace kernelcatcher::equivariance::tensor_product_uniform_1d_jit {
|
|
16
|
+
|
|
17
|
+
enum class Datatype : int {
|
|
18
|
+
kFloat32 = 0,
|
|
19
|
+
kFloat64 = 1,
|
|
20
|
+
kFloat16 = 2,
|
|
21
|
+
kBFloat16 = 3,
|
|
22
|
+
kInt32 = 4,
|
|
23
|
+
kInt64 = 5
|
|
24
|
+
};
|
|
25
|
+
enum class Dimension : int { kScalar = 0, kOneDimensional = 1 };
|
|
26
|
+
enum class BatchDimension : int { kBatched = 0, kShared = 1, kIndexed = 2 };
|
|
27
|
+
|
|
28
|
+
extern int run_tensor_product_uniform_1d_jit(
|
|
29
|
+
std::string const& name,
|
|
30
|
+
Datatype math_dtype,
|
|
31
|
+
int operand_extent,
|
|
32
|
+
int num_inputs,
|
|
33
|
+
int num_outputs,
|
|
34
|
+
int num_index,
|
|
35
|
+
std::vector<Dimension> const& buffer_dim, // num_inputs + num_outputs
|
|
36
|
+
std::vector<int> const& buffer_num_segments, // num_inputs + num_outputs
|
|
37
|
+
std::vector<std::vector<BatchDimension>> const&
|
|
38
|
+
batch_dim, // (num_inputs + num_outputs + num_index) x num_batch_axes
|
|
39
|
+
std::vector<std::vector<int>> const&
|
|
40
|
+
index_buffer, // (num_inputs + num_outputs + num_index) x num_batch_axes
|
|
41
|
+
// ^^^^^ ignored unless batch_dim[i][j] is indexed
|
|
42
|
+
std::vector<int> const& index_extent, // num_index
|
|
43
|
+
std::vector<Datatype> const& dtypes, // num_inputs + num_outputs + num_index
|
|
44
|
+
std::vector<std::vector<int>> const& operations,
|
|
45
|
+
std::vector<int> num_paths, // num_operations
|
|
46
|
+
std::vector<int> path_indices_start, // num_operations
|
|
47
|
+
std::vector<int> path_coefficients_start, // num_operations
|
|
48
|
+
std::vector<int> const& path_indices,
|
|
49
|
+
std::vector<double> const& path_coefficients,
|
|
50
|
+
std::vector<int> const& batch_sizes, // num_batch_axes
|
|
51
|
+
std::vector<void*> const& buffers,
|
|
52
|
+
std::vector<size_t> const& buffer_bytes,
|
|
53
|
+
bool zero_output_buffers,
|
|
54
|
+
void* stream);
|
|
55
|
+
|
|
56
|
+
} // namespace kernelcatcher::equivariance::tensor_product_uniform_1d_jit
|
|
Binary file
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: cuequivariance-ops-cu12
|
|
3
|
+
Version: 0.4.0
|
|
4
|
+
Summary: cuequivariance-ops - GPU Accelerated Extensions for Equivariant Primitives
|
|
5
|
+
Author: NVIDIA Corporation
|
|
6
|
+
License: # Software License Agreement
|
|
7
|
+
|
|
8
|
+
LICENSE AGREEMENT FOR NVIDIA MATH LIBRARIES SOFTWARE DEVELOPMENT KITS
|
|
9
|
+
|
|
10
|
+
This license agreement(“Agreement”) is a legal agreement between you and NVIDIA Corporation (“NVIDIA”) and governs your use of the NVIDIA math libraries software development kit as available at NVIDIA’s discretion (each, a “SDK”).
|
|
11
|
+
|
|
12
|
+
Each SDK has its own set of software and materials, but here is a description of the types of items that may be included in a SDK: source code, header files, APIs, data sets and assets (examples include images, textures, models, scenes, videos, native API input/output files), binary software, sample code, libraries, utility programs, programming code and documentation.
|
|
13
|
+
|
|
14
|
+
This Agreement can be accepted only by an adult of legal age of majority in the country in which the SDK is used.
|
|
15
|
+
|
|
16
|
+
If you are entering into this Agreement on behalf of a company or other legal entity, you represent that you have the legal authority to bind the entity to this Agreement, in which case “you” will mean the entity you represent.
|
|
17
|
+
|
|
18
|
+
If you don’t have the required age or authority to accept this Agreement, or if you don’t accept all the terms and conditions of this Agreement, do not download, install or use the SDK.
|
|
19
|
+
|
|
20
|
+
You agree to use the SDK only for purposes that are permitted by (a) this Agreement, and (b) any applicable law, regulation or generally accepted practices or guidelines in the relevant jurisdictions.
|
|
21
|
+
|
|
22
|
+
License.
|
|
23
|
+
|
|
24
|
+
1.1 Grant
|
|
25
|
+
|
|
26
|
+
Subject to the terms of this Agreement, NVIDIA hereby grants you a non-exclusive, non-transferable license, without the right to sublicense (except as expressly provided in this Agreement) to:
|
|
27
|
+
|
|
28
|
+
Install and use the SDK, and
|
|
29
|
+
|
|
30
|
+
Distribute the binary files, files identified as samples, and headers as incorporated into a software application that meets the distribution requirements indicated in this Agreement.
|
|
31
|
+
|
|
32
|
+
1.2 Distribution Requirements
|
|
33
|
+
|
|
34
|
+
These are the distribution requirements for you to exercise the distribution grant:
|
|
35
|
+
|
|
36
|
+
Your application must have material additional functionality, beyond the included portions of the SDK.
|
|
37
|
+
|
|
38
|
+
The distributable portions of the SDK shall only be accessed by your application.
|
|
39
|
+
|
|
40
|
+
The following notice shall be included in modifications and derivative works of sample source code distributed: “This software contains source code provided by NVIDIA Corporation.”
|
|
41
|
+
|
|
42
|
+
Unless a developer tool is identified in this Agreement as distributable, it is delivered for your internal use only.
|
|
43
|
+
|
|
44
|
+
The terms under which you distribute your application must be consistent with the terms of this Agreement, including (without limitation) terms relating to the license grant and license restrictions and protection of NVIDIA’s intellectual property rights. Additionally, you agree that you will protect the privacy, security and legal rights of your application users.
|
|
45
|
+
|
|
46
|
+
You agree to notify NVIDIA in writing of any known or suspected distribution or use of the SDK not in compliance with the requirements of this Agreement, and to enforce the terms of your agreements with respect to distributed SDK.
|
|
47
|
+
|
|
48
|
+
1.3 Authorized Users
|
|
49
|
+
|
|
50
|
+
You may allow employees and contractors of your entity or of your subsidiary(ies) to access and use the SDK from your secure network to perform work on your behalf.
|
|
51
|
+
|
|
52
|
+
If you are an academic institution you may allow users enrolled or employed by the academic institution to access and use the SDK from your secure network.
|
|
53
|
+
|
|
54
|
+
You are responsible for the compliance with the terms of this Agreement by your authorized users. If you become aware that your authorized users didn’t follow the terms of this Agreement, you agree to take reasonable steps to resolve the non-compliance and prevent new occurrences.
|
|
55
|
+
|
|
56
|
+
1.4 Pre-Release SDK
|
|
57
|
+
|
|
58
|
+
The SDK versions identified as alpha, beta, preview or otherwise as pre-release, may not be fully functional, may contain errors or design flaws, and may have reduced or different security, privacy, accessibility, availability, and reliability standards relative to commercial versions of NVIDIA software and materials. Use of a pre-release SDK may result in unexpected results, loss of data, project delays or other unpredictable damage or loss. You may use a pre-release SDK at your own risk, understanding that pre-release SDKs are not intended for use in production or business-critical systems. NVIDIA may choose not to make available a commercial version of any pre-release SDK. NVIDIA may also choose to abandon development and terminate the availability of a pre-release SDK at any time without liability. 1.5 Updates
|
|
59
|
+
|
|
60
|
+
NVIDIA may, at its option, make available patches, workarounds or other updates to this SDK. Unless the updates are provided with their separate governing terms, they are deemed part of the SDK licensed to you as provided in this Agreement.
|
|
61
|
+
|
|
62
|
+
You agree that the form and content of the SDK that NVIDIA provides may change without prior notice to you. While NVIDIA generally maintains compatibility between versions, NVIDIA may in some cases make changes that introduce incompatibilities in future versions of the SDK.
|
|
63
|
+
|
|
64
|
+
1.6 Components Under Other Licenses.
|
|
65
|
+
|
|
66
|
+
The SDK may include NVIDIA or third-party components with separate legal notices or terms as may be described in proprietary notices accompanying the SDK, such as components governed by open source software licenses. If and to the extent there is a conflict between the terms in this license and the license terms associated with a component, the license terms associated with the components control only to the extent necessary to resolve the conflict.
|
|
67
|
+
|
|
68
|
+
1.7 Reservation of Rights
|
|
69
|
+
|
|
70
|
+
NVIDIA reserves all rights, title and interest in and to the SDK not expressly granted to you under this Agreement.
|
|
71
|
+
|
|
72
|
+
Limitations.
|
|
73
|
+
|
|
74
|
+
The following license limitations apply to your use of the SDK:
|
|
75
|
+
|
|
76
|
+
2.1 The SDK is licensed for you to develop applications only for use in systems with NVIDIA GPUs.
|
|
77
|
+
|
|
78
|
+
2.2 You may not reverse engineer, decompile or disassemble, or remove copyright or other proprietary notices from any portion of the SDK or copies of the SDK.
|
|
79
|
+
|
|
80
|
+
2.3 Except as expressly provided in this Agreement, you may not copy, sell, rent, sublicense, transfer, distribute, modify, or create derivative works of any portion of the SDK.
|
|
81
|
+
|
|
82
|
+
2.4 Unless you have an agreement with NVIDIA for this purpose, you may not indicate that an application created with the SDK is sponsored or endorsed by NVIDIA.
|
|
83
|
+
|
|
84
|
+
2.5 You may not bypass, disable, or circumvent any encryption, security, digital rights management or authentication mechanism in the SDK.
|
|
85
|
+
|
|
86
|
+
2.6 You may not use the SDK in any manner that would cause it to become subject to an open source software license. As examples, licenses that require as a condition of use, modification, and/or distribution that the SDK be (i) disclosed or distributed in source code form; (ii) licensed for the purpose of making derivative works; or (iii) redistributable at no charge.
|
|
87
|
+
|
|
88
|
+
2.7 You acknowledge that the SDK as delivered is not tested or certified by NVIDIA for use in connection with the design, construction, maintenance, and/or operation of any system where the use or failure of such system could result in a situation that threatens the safety of human life or results in catastrophic damages (each, a “Critical Application”). Examples of Critical Applications include use in avionics, navigation, autonomous vehicle applications, ai solutions for automotive products, military, medical, life support or other life critical applications. NVIDIA shall not be liable to you or any third party, in whole or in part, for any claims or damages arising from such uses. You are solely responsible for ensuring that any product or service developed with the SDK as a whole includes sufficient features to comply with all applicable legal and regulatory standards and requirements.
|
|
89
|
+
|
|
90
|
+
2.8 You agree to defend, indemnify and hold harmless NVIDIA and its affiliates, and their respective employees, contractors, agents, officers and directors, from and against any and all claims, damages, obligations, losses, liabilities, costs or debt, fines, restitutions and expenses (including but not limited to attorney’s fees and costs incident to establishing the right of indemnification) arising out of or related to products or services that use the SDK in or for Critical Applications, and for use of the SDK outside of the scope of this Agreement, or not in compliance with its terms.
|
|
91
|
+
|
|
92
|
+
Ownership.
|
|
93
|
+
|
|
94
|
+
3.1 NVIDIA or its licensors hold all rights, title and interest in and to the SDK and its modifications, including their respective intellectual property rights. This SDK may include software and materials from NVIDIA’s licensors, and these licensors are intended third party beneficiaries that may enforce this Agreement with respect to their intellectual property rights.
|
|
95
|
+
|
|
96
|
+
3.2 You may, but don’t have to, provide to NVIDIA suggestions, feature requests or other feedback regarding the SDK, including possible enhancements or modifications to the SDK. For any feedback that you voluntarily provide, you hereby grant NVIDIA and its affiliates a perpetual, non-exclusive, worldwide, irrevocable license to use, reproduce, modify, license, sublicense (through multiple tiers of sublicensees), and distribute (through multiple tiers of distributors) it without the payment of any royalties or fees to you. NVIDIA will use feedback at its choice.
|
|
97
|
+
|
|
98
|
+
No Warranties.
|
|
99
|
+
|
|
100
|
+
THE SDK IS PROVIDED BY NVIDIA “AS IS” AND “WITH ALL FAULTS.” TO THE MAXIMUM EXTENT PERMITTED BY LAW, NVIDIA AND ITS AFFILIATES EXPRESSLY DISCLAIM ALL WARRANTIES OF ANY KIND OR NATURE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, OR THE ABSENCE OF ANY DEFECTS THEREIN, WHETHER LATENT OR PATENT. NO WARRANTY IS MADE ON THE BASIS OF TRADE USAGE, COURSE OF DEALING OR COURSE OF TRADE.
|
|
101
|
+
|
|
102
|
+
Limitations of Liability.
|
|
103
|
+
|
|
104
|
+
TO THE MAXIMUM EXTENT PERMITTED BY LAW, NVIDIA AND ITS AFFILIATES SHALL NOT BE LIABLE FOR ANY SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, OR ANY LOST PROFITS, LOSS OF USE, LOSS OF DATA OR LOSS OF GOODWILL, OR THE COSTS OF PROCURING SUBSTITUTE PRODUCTS, ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT OR THE USE OR PERFORMANCE OF THE SDK, WHETHER SUCH LIABILITY ARISES FROM ANY CLAIM BASED UPON BREACH OF CONTRACT, BREACH OF WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCT LIABILITY OR ANY OTHER CAUSE OF ACTION OR THEORY OF LIABILITY. IN NO EVENT WILL NVIDIA’S AND ITS AFFILIATES TOTAL CUMULATIVE LIABILITY UNDER OR ARISING OUT OF THIS AGREEMENT EXCEED US$10.00. THE NATURE OF THE LIABILITY OR THE NUMBER OF CLAIMS OR SUITS SHALL NOT ENLARGE OR EXTEND THIS LIMIT.
|
|
105
|
+
|
|
106
|
+
These exclusions and limitations of liability shall apply regardless if NVIDIA or its affiliates have been advised of the possibility of such damages, and regardless of whether a remedy fails its essential purpose. These exclusions and limitations of liability form an essential basis of the bargain between the parties, and, absent any of these exclusions or limitations of liability, the provisions of this Agreement, including, without limitation, the economic terms, would be substantially different.
|
|
107
|
+
|
|
108
|
+
Termination.
|
|
109
|
+
|
|
110
|
+
6.1 This Agreement will continue to apply until terminated by either you or NVIDIA as described below.
|
|
111
|
+
|
|
112
|
+
6.2 If you want to terminate this Agreement, you may do so by stopping to use the SDK.
|
|
113
|
+
|
|
114
|
+
6.3 NVIDIA may, at any time, terminate this Agreement if: (i) you fail to comply with any term of this Agreement and the non-compliance is not fixed within thirty (30) days following notice from NVIDIA (or immediately if you violate NVIDIA’s intellectual property rights); (ii) you commence or participate in any legal proceeding against NVIDIA with respect to the SDK; or (iii) NVIDIA decides to no longer provide the SDK in a country or, in NVIDIA’s sole discretion, the continued use of it is no longer commercially viable.
|
|
115
|
+
|
|
116
|
+
6.4 Upon any termination of this Agreement, you agree to promptly discontinue use of the SDK and destroy all copies in your possession or control. Your prior distributions in accordance with this Agreement are not affected by the termination of this Agreement. Upon written request, you will certify in writing that you have complied with your commitments under this section. Upon any termination of this Agreement all provisions survive except for the licenses granted to you.
|
|
117
|
+
|
|
118
|
+
General.
|
|
119
|
+
|
|
120
|
+
If you wish to assign this Agreement or your rights and obligations, including by merger, consolidation, dissolution or operation of law, contact NVIDIA to ask for permission. Any attempted assignment not approved by NVIDIA in writing shall be void and of no effect. NVIDIA may assign, delegate or transfer this Agreement and its rights and obligations, and if to a non-affiliate you will be notified.
|
|
121
|
+
|
|
122
|
+
You agree to cooperate with NVIDIA and provide reasonably requested information to verify your compliance with this Agreement.
|
|
123
|
+
|
|
124
|
+
This Agreement will be governed in all respects by the laws of the United States and of the State of Delaware as those laws are applied to contracts entered into and performed entirely within Delaware by Delaware residents, without regard to the conflicts of laws principles. The United Nations Convention on Contracts for the International Sale of Goods is specifically disclaimed. You agree to all terms of this Agreement in the English language.
|
|
125
|
+
|
|
126
|
+
The state or federal courts residing in Santa Clara County, California shall have exclusive jurisdiction over any dispute or claim arising out of this Agreement. Notwithstanding this, you agree that NVIDIA shall still be allowed to apply for injunctive remedies or an equivalent type of urgent legal relief in any jurisdiction.
|
|
127
|
+
|
|
128
|
+
If any court of competent jurisdiction determines that any provision of this Agreement is illegal, invalid or unenforceable, such provision will be construed as limited to the extent necessary to be consistent with and fully enforceable under the law and the remaining provisions will remain in full force and effect. Unless otherwise specified, remedies are cumulative.
|
|
129
|
+
|
|
130
|
+
Each party acknowledges and agrees that the other is an independent contractor in the performance of this Agreement.
|
|
131
|
+
|
|
132
|
+
The SDK has been developed entirely at private expense and is “commercial items” consisting of “commercial computer software” and “commercial computer software documentation” provided with RESTRICTED RIGHTS. Use, duplication or disclosure by the U.S. Government or a U.S. Government subcontractor is subject to the restrictions in this Agreement pursuant to DFARS 227.7202-3(a) or as set forth in subparagraphs (b)(1) and (2) of the Commercial Computer Software - Restricted Rights clause at FAR 52.227-19, as applicable. Contractor/manufacturer is NVIDIA, 2788 San Tomas Expressway, Santa Clara, CA 95051.
|
|
133
|
+
|
|
134
|
+
The SDK is subject to United States export laws and regulations. You agree that you will not ship, transfer or export the SDK into any country, or use the SDK in any manner, prohibited by the United States Bureau of Industry and Security or economic sanctions regulations administered by the U.S. Department of Treasury’s Office of Foreign Assets Control (OFAC), or any applicable export laws, restrictions or regulations. These laws include restrictions on destinations, end users and end use. By accepting this Agreement, you confirm that you are not a resident or citizen of any country currently embargoed by the U.S. and that you are not otherwise prohibited from receiving the SDK.
|
|
135
|
+
|
|
136
|
+
Any notice delivered by NVIDIA to you under this Agreement will be delivered via mail, email or fax. You agree that any notices that NVIDIA sends you electronically will satisfy any legal communication requirements. Please direct your legal notices or other correspondence to NVIDIA Corporation, 2788 San Tomas Expressway, Santa Clara, California 95051, United States of America, Attention: Legal Department.
|
|
137
|
+
|
|
138
|
+
This Agreement constitutes the entire agreement of the parties with respect to the subject matter of this Agreement and supersedes all prior negotiations or documentation exchanged between the parties relating to this subject matter. Any additional and/or conflicting terms on documents issued by you are null, void, and invalid. Any amendment or waiver under this Agreement shall be in writing and signed by representatives of both parties.
|
|
139
|
+
|
|
140
|
+
If the distribution terms in this Agreement are not suitable for your organization, or for any questions regarding this Agreement, please contact NVIDIA at nvidia-compute-license-questions@nvidia.com.
|
|
141
|
+
|
|
142
|
+
(v. February 10, 2022)
|
|
143
|
+
|
|
144
|
+
# Third Party License Agreements
|
|
145
|
+
|
|
146
|
+
## Nanobind
|
|
147
|
+
|
|
148
|
+
Copyright (c) 2022 Wenzel Jakob <wenzel.jakob@epfl.ch>, All rights reserved.
|
|
149
|
+
|
|
150
|
+
Redistribution and use in source and binary forms, with or without
|
|
151
|
+
modification, are permitted provided that the following conditions are met:
|
|
152
|
+
|
|
153
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
154
|
+
list of conditions and the following disclaimer.
|
|
155
|
+
|
|
156
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
157
|
+
this list of conditions and the following disclaimer in the documentation
|
|
158
|
+
and/or other materials provided with the distribution.
|
|
159
|
+
|
|
160
|
+
3. Neither the name of the copyright holder nor the names of its contributors
|
|
161
|
+
may be used to endorse or promote products derived from this software
|
|
162
|
+
without specific prior written permission.
|
|
163
|
+
|
|
164
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
165
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
166
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
167
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
168
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
169
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
170
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
171
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
172
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
173
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
174
|
+
Classifier: Intended Audience :: Developers
|
|
175
|
+
Classifier: Programming Language :: Python
|
|
176
|
+
Project-URL: Homepage, https://github.com/nvidia/cuEquivariance
|
|
177
|
+
Project-URL: Documentation, https://github.com/nvidia/cuEquivariance
|
|
178
|
+
Requires-Python: >=3.10
|
|
179
|
+
Provides-Extra: test
|
|
180
|
+
Requires-Dist: numpy; extra == "test"
|
|
181
|
+
Requires-Dist: pytest; extra == "test"
|
|
182
|
+
Description-Content-Type: text/markdown
|
|
183
|
+
|
|
184
|
+
# cuequivariance-ops
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
## Introduction
|
|
188
|
+
|
|
189
|
+
`cuequivariance_ops` provides CUDA kernels for the
|
|
190
|
+
[cuEquivariance](https://github.com/nvidia/cuEquivariance).
|
|
191
|
+
This python module does not contain any python bindings.
|
|
192
|
+
When imported, it loads the shared library that contains the CUDA kernels.
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
## Documentation
|
|
196
|
+
|
|
197
|
+
Refer to
|
|
198
|
+
[cuEquivariance](https://github.com/nvidia/cuEquivariance).
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
## Support and Feedback
|
|
202
|
+
|
|
203
|
+
Please contact the cuEquivariance developers for any issues you might encounter.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
cuequivariance_ops_cu12-0.4.0.dist-info/RECORD,,
|
|
2
|
+
cuequivariance_ops_cu12-0.4.0.dist-info/WHEEL,sha256=irdNKpSXnQRqSJjb2WbcCyjS-JSpVoNucdwzaZi1ofk,151
|
|
3
|
+
cuequivariance_ops_cu12-0.4.0.dist-info/METADATA,sha256=qKROsUuxgmCYP0N6r9qb0RtpKKXS9MAKvEqzvmmnDXE,20665
|
|
4
|
+
cuequivariance_ops_cu12-0.4.0.dist-info/licenses/LICENSE,sha256=rvp0QV9FuOdxz_CGWTd9DgId4xh2BByyXfBBnb0ejZM,18279
|
|
5
|
+
cuequivariance_ops/__init__.py,sha256=ba7jv_WICRROtLbDU2O1u0MHxp6VkVu0-UGKuQxf9iw,1255
|
|
6
|
+
cuequivariance_ops/VERSION,sha256=QLjrQACpE6d5EJBTXykdPTaYdBYqie88nj1OiHobnnk,6
|
|
7
|
+
cuequivariance_ops/_version.py,sha256=o9Flao_mTq2Y7TrrjnSCqEAgebmA0sGozsl15qVI13Y,730
|
|
8
|
+
cuequivariance_ops/common/nvtx.hpp,sha256=Wi6z9b-yFUNq6ShJjjcsdxQRqCygd4xGegGJrqUI9Wk,708
|
|
9
|
+
cuequivariance_ops/common/common.hpp,sha256=2zDyE5lGugQL43vmM4_ylmp-Tz8OBFnPRsdFra_1BdM,2787
|
|
10
|
+
cuequivariance_ops/lib/libcue_ops.so,sha256=TqrkFt7uGcnZj2ddnqXDgvOuwPlbJ_3ju5IJKbHyDOY,84613176
|
|
11
|
+
cuequivariance_ops/equivariance/tensor_product_uniform_1d_jit.hh,sha256=oWhSS0ZmMHlye8eTucweoGBtzN1H0nN1GX_Rz-MsPqI,2002
|
|
12
|
+
cuequivariance_ops/equivariance/fused_tensor_product.cuh,sha256=bOXR5UWU9gNYRfdh6k28NEkV3CUU2ijmh6y7c0ND0J4,8283
|
|
13
|
+
cuequivariance_ops/equivariance/segmented_transpose.cuh,sha256=gfSZhRBwSqwVAgFCCiGtI-NJ8yDy9tV_iCg1G2KpctY,1766
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Software License Agreement
|
|
2
|
+
|
|
3
|
+
LICENSE AGREEMENT FOR NVIDIA MATH LIBRARIES SOFTWARE DEVELOPMENT KITS
|
|
4
|
+
|
|
5
|
+
This license agreement(“Agreement”) is a legal agreement between you and NVIDIA Corporation (“NVIDIA”) and governs your use of the NVIDIA math libraries software development kit as available at NVIDIA’s discretion (each, a “SDK”).
|
|
6
|
+
|
|
7
|
+
Each SDK has its own set of software and materials, but here is a description of the types of items that may be included in a SDK: source code, header files, APIs, data sets and assets (examples include images, textures, models, scenes, videos, native API input/output files), binary software, sample code, libraries, utility programs, programming code and documentation.
|
|
8
|
+
|
|
9
|
+
This Agreement can be accepted only by an adult of legal age of majority in the country in which the SDK is used.
|
|
10
|
+
|
|
11
|
+
If you are entering into this Agreement on behalf of a company or other legal entity, you represent that you have the legal authority to bind the entity to this Agreement, in which case “you” will mean the entity you represent.
|
|
12
|
+
|
|
13
|
+
If you don’t have the required age or authority to accept this Agreement, or if you don’t accept all the terms and conditions of this Agreement, do not download, install or use the SDK.
|
|
14
|
+
|
|
15
|
+
You agree to use the SDK only for purposes that are permitted by (a) this Agreement, and (b) any applicable law, regulation or generally accepted practices or guidelines in the relevant jurisdictions.
|
|
16
|
+
|
|
17
|
+
License.
|
|
18
|
+
|
|
19
|
+
1.1 Grant
|
|
20
|
+
|
|
21
|
+
Subject to the terms of this Agreement, NVIDIA hereby grants you a non-exclusive, non-transferable license, without the right to sublicense (except as expressly provided in this Agreement) to:
|
|
22
|
+
|
|
23
|
+
Install and use the SDK, and
|
|
24
|
+
|
|
25
|
+
Distribute the binary files, files identified as samples, and headers as incorporated into a software application that meets the distribution requirements indicated in this Agreement.
|
|
26
|
+
|
|
27
|
+
1.2 Distribution Requirements
|
|
28
|
+
|
|
29
|
+
These are the distribution requirements for you to exercise the distribution grant:
|
|
30
|
+
|
|
31
|
+
Your application must have material additional functionality, beyond the included portions of the SDK.
|
|
32
|
+
|
|
33
|
+
The distributable portions of the SDK shall only be accessed by your application.
|
|
34
|
+
|
|
35
|
+
The following notice shall be included in modifications and derivative works of sample source code distributed: “This software contains source code provided by NVIDIA Corporation.”
|
|
36
|
+
|
|
37
|
+
Unless a developer tool is identified in this Agreement as distributable, it is delivered for your internal use only.
|
|
38
|
+
|
|
39
|
+
The terms under which you distribute your application must be consistent with the terms of this Agreement, including (without limitation) terms relating to the license grant and license restrictions and protection of NVIDIA’s intellectual property rights. Additionally, you agree that you will protect the privacy, security and legal rights of your application users.
|
|
40
|
+
|
|
41
|
+
You agree to notify NVIDIA in writing of any known or suspected distribution or use of the SDK not in compliance with the requirements of this Agreement, and to enforce the terms of your agreements with respect to distributed SDK.
|
|
42
|
+
|
|
43
|
+
1.3 Authorized Users
|
|
44
|
+
|
|
45
|
+
You may allow employees and contractors of your entity or of your subsidiary(ies) to access and use the SDK from your secure network to perform work on your behalf.
|
|
46
|
+
|
|
47
|
+
If you are an academic institution you may allow users enrolled or employed by the academic institution to access and use the SDK from your secure network.
|
|
48
|
+
|
|
49
|
+
You are responsible for the compliance with the terms of this Agreement by your authorized users. If you become aware that your authorized users didn’t follow the terms of this Agreement, you agree to take reasonable steps to resolve the non-compliance and prevent new occurrences.
|
|
50
|
+
|
|
51
|
+
1.4 Pre-Release SDK
|
|
52
|
+
|
|
53
|
+
The SDK versions identified as alpha, beta, preview or otherwise as pre-release, may not be fully functional, may contain errors or design flaws, and may have reduced or different security, privacy, accessibility, availability, and reliability standards relative to commercial versions of NVIDIA software and materials. Use of a pre-release SDK may result in unexpected results, loss of data, project delays or other unpredictable damage or loss. You may use a pre-release SDK at your own risk, understanding that pre-release SDKs are not intended for use in production or business-critical systems. NVIDIA may choose not to make available a commercial version of any pre-release SDK. NVIDIA may also choose to abandon development and terminate the availability of a pre-release SDK at any time without liability. 1.5 Updates
|
|
54
|
+
|
|
55
|
+
NVIDIA may, at its option, make available patches, workarounds or other updates to this SDK. Unless the updates are provided with their separate governing terms, they are deemed part of the SDK licensed to you as provided in this Agreement.
|
|
56
|
+
|
|
57
|
+
You agree that the form and content of the SDK that NVIDIA provides may change without prior notice to you. While NVIDIA generally maintains compatibility between versions, NVIDIA may in some cases make changes that introduce incompatibilities in future versions of the SDK.
|
|
58
|
+
|
|
59
|
+
1.6 Components Under Other Licenses.
|
|
60
|
+
|
|
61
|
+
The SDK may include NVIDIA or third-party components with separate legal notices or terms as may be described in proprietary notices accompanying the SDK, such as components governed by open source software licenses. If and to the extent there is a conflict between the terms in this license and the license terms associated with a component, the license terms associated with the components control only to the extent necessary to resolve the conflict.
|
|
62
|
+
|
|
63
|
+
1.7 Reservation of Rights
|
|
64
|
+
|
|
65
|
+
NVIDIA reserves all rights, title and interest in and to the SDK not expressly granted to you under this Agreement.
|
|
66
|
+
|
|
67
|
+
Limitations.
|
|
68
|
+
|
|
69
|
+
The following license limitations apply to your use of the SDK:
|
|
70
|
+
|
|
71
|
+
2.1 The SDK is licensed for you to develop applications only for use in systems with NVIDIA GPUs.
|
|
72
|
+
|
|
73
|
+
2.2 You may not reverse engineer, decompile or disassemble, or remove copyright or other proprietary notices from any portion of the SDK or copies of the SDK.
|
|
74
|
+
|
|
75
|
+
2.3 Except as expressly provided in this Agreement, you may not copy, sell, rent, sublicense, transfer, distribute, modify, or create derivative works of any portion of the SDK.
|
|
76
|
+
|
|
77
|
+
2.4 Unless you have an agreement with NVIDIA for this purpose, you may not indicate that an application created with the SDK is sponsored or endorsed by NVIDIA.
|
|
78
|
+
|
|
79
|
+
2.5 You may not bypass, disable, or circumvent any encryption, security, digital rights management or authentication mechanism in the SDK.
|
|
80
|
+
|
|
81
|
+
2.6 You may not use the SDK in any manner that would cause it to become subject to an open source software license. As examples, licenses that require as a condition of use, modification, and/or distribution that the SDK be (i) disclosed or distributed in source code form; (ii) licensed for the purpose of making derivative works; or (iii) redistributable at no charge.
|
|
82
|
+
|
|
83
|
+
2.7 You acknowledge that the SDK as delivered is not tested or certified by NVIDIA for use in connection with the design, construction, maintenance, and/or operation of any system where the use or failure of such system could result in a situation that threatens the safety of human life or results in catastrophic damages (each, a “Critical Application”). Examples of Critical Applications include use in avionics, navigation, autonomous vehicle applications, ai solutions for automotive products, military, medical, life support or other life critical applications. NVIDIA shall not be liable to you or any third party, in whole or in part, for any claims or damages arising from such uses. You are solely responsible for ensuring that any product or service developed with the SDK as a whole includes sufficient features to comply with all applicable legal and regulatory standards and requirements.
|
|
84
|
+
|
|
85
|
+
2.8 You agree to defend, indemnify and hold harmless NVIDIA and its affiliates, and their respective employees, contractors, agents, officers and directors, from and against any and all claims, damages, obligations, losses, liabilities, costs or debt, fines, restitutions and expenses (including but not limited to attorney’s fees and costs incident to establishing the right of indemnification) arising out of or related to products or services that use the SDK in or for Critical Applications, and for use of the SDK outside of the scope of this Agreement, or not in compliance with its terms.
|
|
86
|
+
|
|
87
|
+
Ownership.
|
|
88
|
+
|
|
89
|
+
3.1 NVIDIA or its licensors hold all rights, title and interest in and to the SDK and its modifications, including their respective intellectual property rights. This SDK may include software and materials from NVIDIA’s licensors, and these licensors are intended third party beneficiaries that may enforce this Agreement with respect to their intellectual property rights.
|
|
90
|
+
|
|
91
|
+
3.2 You may, but don’t have to, provide to NVIDIA suggestions, feature requests or other feedback regarding the SDK, including possible enhancements or modifications to the SDK. For any feedback that you voluntarily provide, you hereby grant NVIDIA and its affiliates a perpetual, non-exclusive, worldwide, irrevocable license to use, reproduce, modify, license, sublicense (through multiple tiers of sublicensees), and distribute (through multiple tiers of distributors) it without the payment of any royalties or fees to you. NVIDIA will use feedback at its choice.
|
|
92
|
+
|
|
93
|
+
No Warranties.
|
|
94
|
+
|
|
95
|
+
THE SDK IS PROVIDED BY NVIDIA “AS IS” AND “WITH ALL FAULTS.” TO THE MAXIMUM EXTENT PERMITTED BY LAW, NVIDIA AND ITS AFFILIATES EXPRESSLY DISCLAIM ALL WARRANTIES OF ANY KIND OR NATURE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, OR THE ABSENCE OF ANY DEFECTS THEREIN, WHETHER LATENT OR PATENT. NO WARRANTY IS MADE ON THE BASIS OF TRADE USAGE, COURSE OF DEALING OR COURSE OF TRADE.
|
|
96
|
+
|
|
97
|
+
Limitations of Liability.
|
|
98
|
+
|
|
99
|
+
TO THE MAXIMUM EXTENT PERMITTED BY LAW, NVIDIA AND ITS AFFILIATES SHALL NOT BE LIABLE FOR ANY SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, OR ANY LOST PROFITS, LOSS OF USE, LOSS OF DATA OR LOSS OF GOODWILL, OR THE COSTS OF PROCURING SUBSTITUTE PRODUCTS, ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT OR THE USE OR PERFORMANCE OF THE SDK, WHETHER SUCH LIABILITY ARISES FROM ANY CLAIM BASED UPON BREACH OF CONTRACT, BREACH OF WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCT LIABILITY OR ANY OTHER CAUSE OF ACTION OR THEORY OF LIABILITY. IN NO EVENT WILL NVIDIA’S AND ITS AFFILIATES TOTAL CUMULATIVE LIABILITY UNDER OR ARISING OUT OF THIS AGREEMENT EXCEED US$10.00. THE NATURE OF THE LIABILITY OR THE NUMBER OF CLAIMS OR SUITS SHALL NOT ENLARGE OR EXTEND THIS LIMIT.
|
|
100
|
+
|
|
101
|
+
These exclusions and limitations of liability shall apply regardless if NVIDIA or its affiliates have been advised of the possibility of such damages, and regardless of whether a remedy fails its essential purpose. These exclusions and limitations of liability form an essential basis of the bargain between the parties, and, absent any of these exclusions or limitations of liability, the provisions of this Agreement, including, without limitation, the economic terms, would be substantially different.
|
|
102
|
+
|
|
103
|
+
Termination.
|
|
104
|
+
|
|
105
|
+
6.1 This Agreement will continue to apply until terminated by either you or NVIDIA as described below.
|
|
106
|
+
|
|
107
|
+
6.2 If you want to terminate this Agreement, you may do so by stopping to use the SDK.
|
|
108
|
+
|
|
109
|
+
6.3 NVIDIA may, at any time, terminate this Agreement if: (i) you fail to comply with any term of this Agreement and the non-compliance is not fixed within thirty (30) days following notice from NVIDIA (or immediately if you violate NVIDIA’s intellectual property rights); (ii) you commence or participate in any legal proceeding against NVIDIA with respect to the SDK; or (iii) NVIDIA decides to no longer provide the SDK in a country or, in NVIDIA’s sole discretion, the continued use of it is no longer commercially viable.
|
|
110
|
+
|
|
111
|
+
6.4 Upon any termination of this Agreement, you agree to promptly discontinue use of the SDK and destroy all copies in your possession or control. Your prior distributions in accordance with this Agreement are not affected by the termination of this Agreement. Upon written request, you will certify in writing that you have complied with your commitments under this section. Upon any termination of this Agreement all provisions survive except for the licenses granted to you.
|
|
112
|
+
|
|
113
|
+
General.
|
|
114
|
+
|
|
115
|
+
If you wish to assign this Agreement or your rights and obligations, including by merger, consolidation, dissolution or operation of law, contact NVIDIA to ask for permission. Any attempted assignment not approved by NVIDIA in writing shall be void and of no effect. NVIDIA may assign, delegate or transfer this Agreement and its rights and obligations, and if to a non-affiliate you will be notified.
|
|
116
|
+
|
|
117
|
+
You agree to cooperate with NVIDIA and provide reasonably requested information to verify your compliance with this Agreement.
|
|
118
|
+
|
|
119
|
+
This Agreement will be governed in all respects by the laws of the United States and of the State of Delaware as those laws are applied to contracts entered into and performed entirely within Delaware by Delaware residents, without regard to the conflicts of laws principles. The United Nations Convention on Contracts for the International Sale of Goods is specifically disclaimed. You agree to all terms of this Agreement in the English language.
|
|
120
|
+
|
|
121
|
+
The state or federal courts residing in Santa Clara County, California shall have exclusive jurisdiction over any dispute or claim arising out of this Agreement. Notwithstanding this, you agree that NVIDIA shall still be allowed to apply for injunctive remedies or an equivalent type of urgent legal relief in any jurisdiction.
|
|
122
|
+
|
|
123
|
+
If any court of competent jurisdiction determines that any provision of this Agreement is illegal, invalid or unenforceable, such provision will be construed as limited to the extent necessary to be consistent with and fully enforceable under the law and the remaining provisions will remain in full force and effect. Unless otherwise specified, remedies are cumulative.
|
|
124
|
+
|
|
125
|
+
Each party acknowledges and agrees that the other is an independent contractor in the performance of this Agreement.
|
|
126
|
+
|
|
127
|
+
The SDK has been developed entirely at private expense and is “commercial items” consisting of “commercial computer software” and “commercial computer software documentation” provided with RESTRICTED RIGHTS. Use, duplication or disclosure by the U.S. Government or a U.S. Government subcontractor is subject to the restrictions in this Agreement pursuant to DFARS 227.7202-3(a) or as set forth in subparagraphs (b)(1) and (2) of the Commercial Computer Software - Restricted Rights clause at FAR 52.227-19, as applicable. Contractor/manufacturer is NVIDIA, 2788 San Tomas Expressway, Santa Clara, CA 95051.
|
|
128
|
+
|
|
129
|
+
The SDK is subject to United States export laws and regulations. You agree that you will not ship, transfer or export the SDK into any country, or use the SDK in any manner, prohibited by the United States Bureau of Industry and Security or economic sanctions regulations administered by the U.S. Department of Treasury’s Office of Foreign Assets Control (OFAC), or any applicable export laws, restrictions or regulations. These laws include restrictions on destinations, end users and end use. By accepting this Agreement, you confirm that you are not a resident or citizen of any country currently embargoed by the U.S. and that you are not otherwise prohibited from receiving the SDK.
|
|
130
|
+
|
|
131
|
+
Any notice delivered by NVIDIA to you under this Agreement will be delivered via mail, email or fax. You agree that any notices that NVIDIA sends you electronically will satisfy any legal communication requirements. Please direct your legal notices or other correspondence to NVIDIA Corporation, 2788 San Tomas Expressway, Santa Clara, California 95051, United States of America, Attention: Legal Department.
|
|
132
|
+
|
|
133
|
+
This Agreement constitutes the entire agreement of the parties with respect to the subject matter of this Agreement and supersedes all prior negotiations or documentation exchanged between the parties relating to this subject matter. Any additional and/or conflicting terms on documents issued by you are null, void, and invalid. Any amendment or waiver under this Agreement shall be in writing and signed by representatives of both parties.
|
|
134
|
+
|
|
135
|
+
If the distribution terms in this Agreement are not suitable for your organization, or for any questions regarding this Agreement, please contact NVIDIA at nvidia-compute-license-questions@nvidia.com.
|
|
136
|
+
|
|
137
|
+
(v. February 10, 2022)
|
|
138
|
+
|
|
139
|
+
# Third Party License Agreements
|
|
140
|
+
|
|
141
|
+
## Nanobind
|
|
142
|
+
|
|
143
|
+
Copyright (c) 2022 Wenzel Jakob <wenzel.jakob@epfl.ch>, All rights reserved.
|
|
144
|
+
|
|
145
|
+
Redistribution and use in source and binary forms, with or without
|
|
146
|
+
modification, are permitted provided that the following conditions are met:
|
|
147
|
+
|
|
148
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
149
|
+
list of conditions and the following disclaimer.
|
|
150
|
+
|
|
151
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
152
|
+
this list of conditions and the following disclaimer in the documentation
|
|
153
|
+
and/or other materials provided with the distribution.
|
|
154
|
+
|
|
155
|
+
3. Neither the name of the copyright holder nor the names of its contributors
|
|
156
|
+
may be used to endorse or promote products derived from this software
|
|
157
|
+
without specific prior written permission.
|
|
158
|
+
|
|
159
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
160
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
161
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
162
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
163
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
164
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
165
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
166
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
167
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
168
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|