59 DETRAY_HOST_DEVICE
constexpr matrix_t
operator()(
const matrix_t &m)
const {
63 elem(ret, 0, 0) = elem(m, 1, 2) * elem(m, 2, 3) * elem(m, 3, 1) -
64 elem(m, 1, 3) * elem(m, 2, 2) * elem(m, 3, 1) +
65 elem(m, 1, 3) * elem(m, 2, 1) * elem(m, 3, 2) -
66 elem(m, 1, 1) * elem(m, 2, 3) * elem(m, 3, 2) -
67 elem(m, 1, 2) * elem(m, 2, 1) * elem(m, 3, 3) +
68 elem(m, 1, 1) * elem(m, 2, 2) * elem(m, 3, 3);
69 elem(ret, 0, 1) = elem(m, 0, 3) * elem(m, 2, 2) * elem(m, 3, 1) -
70 elem(m, 0, 2) * elem(m, 2, 3) * elem(m, 3, 1) -
71 elem(m, 0, 3) * elem(m, 2, 1) * elem(m, 3, 2) +
72 elem(m, 0, 1) * elem(m, 2, 3) * elem(m, 3, 2) +
73 elem(m, 0, 2) * elem(m, 2, 1) * elem(m, 3, 3) -
74 elem(m, 0, 1) * elem(m, 2, 2) * elem(m, 3, 3);
75 elem(ret, 0, 2) = elem(m, 0, 2) * elem(m, 1, 3) * elem(m, 3, 1) -
76 elem(m, 0, 3) * elem(m, 1, 2) * elem(m, 3, 1) +
77 elem(m, 0, 3) * elem(m, 1, 1) * elem(m, 3, 2) -
78 elem(m, 0, 1) * elem(m, 1, 3) * elem(m, 3, 2) -
79 elem(m, 0, 2) * elem(m, 1, 1) * elem(m, 3, 3) +
80 elem(m, 0, 1) * elem(m, 1, 2) * elem(m, 3, 3);
81 elem(ret, 0, 3) = elem(m, 0, 3) * elem(m, 1, 2) * elem(m, 2, 1) -
82 elem(m, 0, 2) * elem(m, 1, 3) * elem(m, 2, 1) -
83 elem(m, 0, 3) * elem(m, 1, 1) * elem(m, 2, 2) +
84 elem(m, 0, 1) * elem(m, 1, 3) * elem(m, 2, 2) +
85 elem(m, 0, 2) * elem(m, 1, 1) * elem(m, 2, 3) -
86 elem(m, 0, 1) * elem(m, 1, 2) * elem(m, 2, 3);
87 elem(ret, 1, 0) = elem(m, 1, 3) * elem(m, 2, 2) * elem(m, 3, 0) -
88 elem(m, 1, 2) * elem(m, 2, 3) * elem(m, 3, 0) -
89 elem(m, 1, 3) * elem(m, 2, 0) * elem(m, 3, 2) +
90 elem(m, 1, 0) * elem(m, 2, 3) * elem(m, 3, 2) +
91 elem(m, 1, 2) * elem(m, 2, 0) * elem(m, 3, 3) -
92 elem(m, 1, 0) * elem(m, 2, 2) * elem(m, 3, 3);
93 elem(ret, 1, 1) = elem(m, 0, 2) * elem(m, 2, 3) * elem(m, 3, 0) -
94 elem(m, 0, 3) * elem(m, 2, 2) * elem(m, 3, 0) +
95 elem(m, 0, 3) * elem(m, 2, 0) * elem(m, 3, 2) -
96 elem(m, 0, 0) * elem(m, 2, 3) * elem(m, 3, 2) -
97 elem(m, 0, 2) * elem(m, 2, 0) * elem(m, 3, 3) +
98 elem(m, 0, 0) * elem(m, 2, 2) * elem(m, 3, 3);
99 elem(ret, 1, 2) = elem(m, 0, 3) * elem(m, 1, 2) * elem(m, 3, 0) -
100 elem(m, 0, 2) * elem(m, 1, 3) * elem(m, 3, 0) -
101 elem(m, 0, 3) * elem(m, 1, 0) * elem(m, 3, 2) +
102 elem(m, 0, 0) * elem(m, 1, 3) * elem(m, 3, 2) +
103 elem(m, 0, 2) * elem(m, 1, 0) * elem(m, 3, 3) -
104 elem(m, 0, 0) * elem(m, 1, 2) * elem(m, 3, 3);
105 elem(ret, 1, 3) = elem(m, 0, 2) * elem(m, 1, 3) * elem(m, 2, 0) -
106 elem(m, 0, 3) * elem(m, 1, 2) * elem(m, 2, 0) +
107 elem(m, 0, 3) * elem(m, 1, 0) * elem(m, 2, 2) -
108 elem(m, 0, 0) * elem(m, 1, 3) * elem(m, 2, 2) -
109 elem(m, 0, 2) * elem(m, 1, 0) * elem(m, 2, 3) +
110 elem(m, 0, 0) * elem(m, 1, 2) * elem(m, 2, 3);
111 elem(ret, 2, 0) = elem(m, 1, 1) * elem(m, 2, 3) * elem(m, 3, 0) -
112 elem(m, 1, 3) * elem(m, 2, 1) * elem(m, 3, 0) +
113 elem(m, 1, 3) * elem(m, 2, 0) * elem(m, 3, 1) -
114 elem(m, 1, 0) * elem(m, 2, 3) * elem(m, 3, 1) -
115 elem(m, 1, 1) * elem(m, 2, 0) * elem(m, 3, 3) +
116 elem(m, 1, 0) * elem(m, 2, 1) * elem(m, 3, 3);
117 elem(ret, 2, 1) = elem(m, 0, 3) * elem(m, 2, 1) * elem(m, 3, 0) -
118 elem(m, 0, 1) * elem(m, 2, 3) * elem(m, 3, 0) -
119 elem(m, 0, 3) * elem(m, 2, 0) * elem(m, 3, 1) +
120 elem(m, 0, 0) * elem(m, 2, 3) * elem(m, 3, 1) +
121 elem(m, 0, 1) * elem(m, 2, 0) * elem(m, 3, 3) -
122 elem(m, 0, 0) * elem(m, 2, 1) * elem(m, 3, 3);
123 elem(ret, 2, 2) = elem(m, 0, 1) * elem(m, 1, 3) * elem(m, 3, 0) -
124 elem(m, 0, 3) * elem(m, 1, 1) * elem(m, 3, 0) +
125 elem(m, 0, 3) * elem(m, 1, 0) * elem(m, 3, 1) -
126 elem(m, 0, 0) * elem(m, 1, 3) * elem(m, 3, 1) -
127 elem(m, 0, 1) * elem(m, 1, 0) * elem(m, 3, 3) +
128 elem(m, 0, 0) * elem(m, 1, 1) * elem(m, 3, 3);
129 elem(ret, 2, 3) = elem(m, 0, 3) * elem(m, 1, 1) * elem(m, 2, 0) -
130 elem(m, 0, 1) * elem(m, 1, 3) * elem(m, 2, 0) -
131 elem(m, 0, 3) * elem(m, 1, 0) * elem(m, 2, 1) +
132 elem(m, 0, 0) * elem(m, 1, 3) * elem(m, 2, 1) +
133 elem(m, 0, 1) * elem(m, 1, 0) * elem(m, 2, 3) -
134 elem(m, 0, 0) * elem(m, 1, 1) * elem(m, 2, 3);
135 elem(ret, 3, 0) = elem(m, 1, 2) * elem(m, 2, 1) * elem(m, 3, 0) -
136 elem(m, 1, 1) * elem(m, 2, 2) * elem(m, 3, 0) -
137 elem(m, 1, 2) * elem(m, 2, 0) * elem(m, 3, 1) +
138 elem(m, 1, 0) * elem(m, 2, 2) * elem(m, 3, 1) +
139 elem(m, 1, 1) * elem(m, 2, 0) * elem(m, 3, 2) -
140 elem(m, 1, 0) * elem(m, 2, 1) * elem(m, 3, 2);
141 elem(ret, 3, 1) = elem(m, 0, 1) * elem(m, 2, 2) * elem(m, 3, 0) -
142 elem(m, 0, 2) * elem(m, 2, 1) * elem(m, 3, 0) +
143 elem(m, 0, 2) * elem(m, 2, 0) * elem(m, 3, 1) -
144 elem(m, 0, 0) * elem(m, 2, 2) * elem(m, 3, 1) -
145 elem(m, 0, 1) * elem(m, 2, 0) * elem(m, 3, 2) +
146 elem(m, 0, 0) * elem(m, 2, 1) * elem(m, 3, 2);
147 elem(ret, 3, 2) = elem(m, 0, 2) * elem(m, 1, 1) * elem(m, 3, 0) -
148 elem(m, 0, 1) * elem(m, 1, 2) * elem(m, 3, 0) -
149 elem(m, 0, 2) * elem(m, 1, 0) * elem(m, 3, 1) +
150 elem(m, 0, 0) * elem(m, 1, 2) * elem(m, 3, 1) +
151 elem(m, 0, 1) * elem(m, 1, 0) * elem(m, 3, 2) -
152 elem(m, 0, 0) * elem(m, 1, 1) * elem(m, 3, 2);
153 elem(ret, 3, 3) = elem(m, 0, 1) * elem(m, 1, 2) * elem(m, 2, 0) -
154 elem(m, 0, 2) * elem(m, 1, 1) * elem(m, 2, 0) +
155 elem(m, 0, 2) * elem(m, 1, 0) * elem(m, 2, 1) -
156 elem(m, 0, 0) * elem(m, 1, 2) * elem(m, 2, 1) -
157 elem(m, 0, 1) * elem(m, 1, 0) * elem(m, 2, 2) +
158 elem(m, 0, 0) * elem(m, 1, 1) * elem(m, 2, 2);
161 for (
unsigned int c = 0; c < 4; ++c) {
162 for (
unsigned int r = 0; r < 4; ++r) {
163 elem(ret, c, r) *= idet;