Coverage for models/rgb/transfer_functions/tests/test_rimm_romm_rgb.py: 100%

185 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-11-16 22:49 +1300

1""" 

2Define the unit tests for the 

3:mod:`colour.models.rgb.transfer_functions.rimm_romm_rgb` module. 

4""" 

5 

6import numpy as np 

7 

8from colour.constants import TOLERANCE_ABSOLUTE_TESTS 

9from colour.models.rgb.transfer_functions import ( 

10 cctf_decoding_RIMMRGB, 

11 cctf_decoding_ROMMRGB, 

12 cctf_encoding_RIMMRGB, 

13 cctf_encoding_ROMMRGB, 

14 log_decoding_ERIMMRGB, 

15 log_encoding_ERIMMRGB, 

16) 

17from colour.utilities import domain_range_scale, ignore_numpy_errors 

18 

19__author__ = "Colour Developers" 

20__copyright__ = "Copyright 2013 Colour Developers" 

21__license__ = "BSD-3-Clause - https://opensource.org/licenses/BSD-3-Clause" 

22__maintainer__ = "Colour Developers" 

23__email__ = "colour-developers@colour-science.org" 

24__status__ = "Production" 

25 

26__all__ = [ 

27 "TestCctfEncoding_ROMMRGB", 

28 "TestCctfDecoding_ROMMRGB", 

29 "TestCctfEncoding_RIMMRGB", 

30 "TestCctfDecoding_RIMMRGB", 

31 "TestLog_encoding_ERIMMRGB", 

32 "TestLog_decoding_ERIMMRGB", 

33] 

34 

35 

36class TestCctfEncoding_ROMMRGB: 

37 """ 

38 Define :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

39cctf_encoding_ROMMRGB` definition unit tests methods. 

40 """ 

41 

42 def test_cctf_encoding_ROMMRGB(self) -> None: 

43 """ 

44 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

45cctf_encoding_ROMMRGB` definition. 

46 """ 

47 

48 np.testing.assert_allclose( 

49 cctf_encoding_ROMMRGB(0.0), 0.0, atol=TOLERANCE_ABSOLUTE_TESTS 

50 ) 

51 

52 np.testing.assert_allclose( 

53 cctf_encoding_ROMMRGB(0.18), 

54 0.385711424751138, 

55 atol=TOLERANCE_ABSOLUTE_TESTS, 

56 ) 

57 

58 np.testing.assert_allclose( 

59 cctf_encoding_ROMMRGB(1.0), 1.0, atol=TOLERANCE_ABSOLUTE_TESTS 

60 ) 

61 

62 assert cctf_encoding_ROMMRGB(0.18, out_int=True) == 98 

63 

64 assert cctf_encoding_ROMMRGB(0.18, bit_depth=12, out_int=True) == 1579 

65 

66 def test_n_dimensional_cctf_encoding_ROMMRGB(self) -> None: 

67 """ 

68 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

69cctf_encoding_ROMMRGB` definition n-dimensional arrays support. 

70 """ 

71 

72 X = 0.18 

73 X_ROMM = cctf_encoding_ROMMRGB(X) 

74 

75 X = np.tile(X, 6) 

76 X_ROMM = np.tile(X_ROMM, 6) 

77 np.testing.assert_allclose( 

78 cctf_encoding_ROMMRGB(X), X_ROMM, atol=TOLERANCE_ABSOLUTE_TESTS 

79 ) 

80 

81 X = np.reshape(X, (2, 3)) 

82 X_ROMM = np.reshape(X_ROMM, (2, 3)) 

83 np.testing.assert_allclose( 

84 cctf_encoding_ROMMRGB(X), X_ROMM, atol=TOLERANCE_ABSOLUTE_TESTS 

85 ) 

86 

87 X = np.reshape(X, (2, 3, 1)) 

88 X_ROMM = np.reshape(X_ROMM, (2, 3, 1)) 

89 np.testing.assert_allclose( 

90 cctf_encoding_ROMMRGB(X), X_ROMM, atol=TOLERANCE_ABSOLUTE_TESTS 

91 ) 

92 

93 def test_domain_range_scale_cctf_encoding_ROMMRGB(self) -> None: 

94 """ 

95 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

96cctf_encoding_ROMMRGB` definition domain and range scale support. 

97 """ 

98 

99 X = 0.18 

100 X_p = cctf_encoding_ROMMRGB(X) 

101 

102 d_r = (("reference", 1), ("1", 1), ("100", 100)) 

103 for scale, factor in d_r: 

104 with domain_range_scale(scale): 

105 np.testing.assert_allclose( 

106 cctf_encoding_ROMMRGB(X * factor), 

107 X_p * factor, 

108 atol=TOLERANCE_ABSOLUTE_TESTS, 

109 ) 

110 

111 @ignore_numpy_errors 

112 def test_nan_cctf_encoding_ROMMRGB(self) -> None: 

113 """ 

114 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

115cctf_encoding_ROMMRGB` definition nan support. 

116 """ 

117 

118 cctf_encoding_ROMMRGB(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan])) 

119 

120 

121class TestCctfDecoding_ROMMRGB: 

122 """ 

123 Define :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb. 

124 cctf_decoding_ROMMRGB` definition unit tests methods. 

125 """ 

126 

127 def test_cctf_decoding_ROMMRGB(self) -> None: 

128 """ 

129 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

130cctf_decoding_ROMMRGB` definition. 

131 """ 

132 

133 np.testing.assert_allclose( 

134 cctf_decoding_ROMMRGB(0.0), 0.0, atol=TOLERANCE_ABSOLUTE_TESTS 

135 ) 

136 

137 np.testing.assert_allclose( 

138 cctf_decoding_ROMMRGB(0.385711424751138), 

139 0.18, 

140 atol=TOLERANCE_ABSOLUTE_TESTS, 

141 ) 

142 

143 np.testing.assert_allclose( 

144 cctf_decoding_ROMMRGB(1.0), 1.0, atol=TOLERANCE_ABSOLUTE_TESTS 

145 ) 

146 

147 np.testing.assert_allclose( 

148 cctf_decoding_ROMMRGB(98, in_int=True), 

149 0.18, 

150 atol=0.01, 

151 ) 

152 

153 np.testing.assert_allclose( 

154 cctf_decoding_ROMMRGB(1579, bit_depth=12, in_int=True), 

155 0.18, 

156 atol=0.001, 

157 ) 

158 

159 def test_n_dimensional_cctf_decoding_ROMMRGB(self) -> None: 

160 """ 

161 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

162cctf_decoding_ROMMRGB` definition n-dimensional arrays support. 

163 """ 

164 

165 X_p = 0.385711424751138 

166 X = cctf_decoding_ROMMRGB(X_p) 

167 

168 X_p = np.tile(X_p, 6) 

169 X = np.tile(X, 6) 

170 np.testing.assert_allclose( 

171 cctf_decoding_ROMMRGB(X_p), X, atol=TOLERANCE_ABSOLUTE_TESTS 

172 ) 

173 

174 X_p = np.reshape(X_p, (2, 3)) 

175 X = np.reshape(X, (2, 3)) 

176 np.testing.assert_allclose( 

177 cctf_decoding_ROMMRGB(X_p), X, atol=TOLERANCE_ABSOLUTE_TESTS 

178 ) 

179 

180 X_p = np.reshape(X_p, (2, 3, 1)) 

181 X = np.reshape(X, (2, 3, 1)) 

182 np.testing.assert_allclose( 

183 cctf_decoding_ROMMRGB(X_p), X, atol=TOLERANCE_ABSOLUTE_TESTS 

184 ) 

185 

186 def test_domain_range_scale_cctf_decoding_ROMMRGB(self) -> None: 

187 """ 

188 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

189cctf_decoding_ROMMRGB` definition domain and range scale support. 

190 """ 

191 

192 X_p = 0.385711424751138 

193 X = cctf_decoding_ROMMRGB(X_p) 

194 

195 d_r = (("reference", 1), ("1", 1), ("100", 100)) 

196 for scale, factor in d_r: 

197 with domain_range_scale(scale): 

198 np.testing.assert_allclose( 

199 cctf_decoding_ROMMRGB(X_p * factor), 

200 X * factor, 

201 atol=TOLERANCE_ABSOLUTE_TESTS, 

202 ) 

203 

204 @ignore_numpy_errors 

205 def test_nan_cctf_decoding_ROMMRGB(self) -> None: 

206 """ 

207 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

208cctf_decoding_ROMMRGB` definition nan support. 

209 """ 

210 

211 cctf_decoding_ROMMRGB(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan])) 

212 

213 

214class TestCctfEncoding_RIMMRGB: 

215 """ 

216 Define :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

217cctf_encoding_RIMMRGB` definition unit tests methods. 

218 """ 

219 

220 def test_cctf_encoding_RIMMRGB(self) -> None: 

221 """ 

222 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

223cctf_encoding_RIMMRGB` definition. 

224 """ 

225 

226 np.testing.assert_allclose( 

227 cctf_encoding_RIMMRGB(0.0), 0.0, atol=TOLERANCE_ABSOLUTE_TESTS 

228 ) 

229 

230 np.testing.assert_allclose( 

231 cctf_encoding_RIMMRGB(0.18), 

232 0.291673732475746, 

233 atol=TOLERANCE_ABSOLUTE_TESTS, 

234 ) 

235 

236 np.testing.assert_allclose( 

237 cctf_encoding_RIMMRGB(1.0), 

238 0.713125234297525, 

239 atol=TOLERANCE_ABSOLUTE_TESTS, 

240 ) 

241 

242 assert cctf_encoding_RIMMRGB(0.18, out_int=True) == 74 

243 

244 assert cctf_encoding_RIMMRGB(0.18, bit_depth=12, out_int=True) == 1194 

245 

246 def test_n_dimensional_cctf_encoding_RIMMRGB(self) -> None: 

247 """ 

248 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

249cctf_encoding_RIMMRGB` definition n-dimensional arrays support. 

250 """ 

251 

252 X = 0.18 

253 X_p = cctf_encoding_RIMMRGB(X) 

254 

255 X = np.tile(X, 6) 

256 X_p = np.tile(X_p, 6) 

257 np.testing.assert_allclose( 

258 cctf_encoding_RIMMRGB(X), X_p, atol=TOLERANCE_ABSOLUTE_TESTS 

259 ) 

260 

261 X = np.reshape(X, (2, 3)) 

262 X_p = np.reshape(X_p, (2, 3)) 

263 np.testing.assert_allclose( 

264 cctf_encoding_RIMMRGB(X), X_p, atol=TOLERANCE_ABSOLUTE_TESTS 

265 ) 

266 

267 X = np.reshape(X, (2, 3, 1)) 

268 X_p = np.reshape(X_p, (2, 3, 1)) 

269 np.testing.assert_allclose( 

270 cctf_encoding_RIMMRGB(X), X_p, atol=TOLERANCE_ABSOLUTE_TESTS 

271 ) 

272 

273 def test_domain_range_scale_cctf_encoding_RIMMRGB(self) -> None: 

274 """ 

275 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

276cctf_encoding_RIMMRGB` definition domain and range scale support. 

277 """ 

278 

279 X = 0.18 

280 X_p = cctf_encoding_RIMMRGB(X) 

281 

282 d_r = (("reference", 1), ("1", 1), ("100", 100)) 

283 for scale, factor in d_r: 

284 with domain_range_scale(scale): 

285 np.testing.assert_allclose( 

286 cctf_encoding_RIMMRGB(X * factor), 

287 X_p * factor, 

288 atol=TOLERANCE_ABSOLUTE_TESTS, 

289 ) 

290 

291 @ignore_numpy_errors 

292 def test_nan_cctf_encoding_RIMMRGB(self) -> None: 

293 """ 

294 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

295cctf_encoding_RIMMRGB` definition nan support. 

296 """ 

297 

298 cctf_encoding_RIMMRGB(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan])) 

299 

300 

301class TestCctfDecoding_RIMMRGB: 

302 """ 

303 Define :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb. 

304 cctf_decoding_RIMMRGB` definition unit tests methods. 

305 """ 

306 

307 def test_cctf_decoding_RIMMRGB(self) -> None: 

308 """ 

309 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

310cctf_decoding_RIMMRGB` definition. 

311 """ 

312 

313 np.testing.assert_allclose( 

314 cctf_decoding_RIMMRGB(0.0), 0.0, atol=TOLERANCE_ABSOLUTE_TESTS 

315 ) 

316 

317 np.testing.assert_allclose( 

318 cctf_decoding_RIMMRGB(0.291673732475746), 

319 0.18, 

320 atol=TOLERANCE_ABSOLUTE_TESTS, 

321 ) 

322 

323 np.testing.assert_allclose( 

324 cctf_decoding_RIMMRGB(0.713125234297525), 

325 1.0, 

326 atol=TOLERANCE_ABSOLUTE_TESTS, 

327 ) 

328 

329 np.testing.assert_allclose( 

330 cctf_decoding_RIMMRGB(74, in_int=True), 

331 0.18, 

332 atol=0.005, 

333 ) 

334 

335 np.testing.assert_allclose( 

336 cctf_decoding_RIMMRGB(1194, bit_depth=12, in_int=True), 

337 0.18, 

338 atol=0.005, 

339 ) 

340 

341 def test_n_dimensional_cctf_decoding_RIMMRGB(self) -> None: 

342 """ 

343 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

344cctf_decoding_RIMMRGB` definition n-dimensional arrays support. 

345 """ 

346 

347 X_p = 0.291673732475746 

348 X = cctf_decoding_RIMMRGB(X_p) 

349 

350 X_p = np.tile(X_p, 6) 

351 X = np.tile(X, 6) 

352 np.testing.assert_allclose( 

353 cctf_decoding_RIMMRGB(X_p), X, atol=TOLERANCE_ABSOLUTE_TESTS 

354 ) 

355 

356 X_p = np.reshape(X_p, (2, 3)) 

357 X = np.reshape(X, (2, 3)) 

358 np.testing.assert_allclose( 

359 cctf_decoding_RIMMRGB(X_p), X, atol=TOLERANCE_ABSOLUTE_TESTS 

360 ) 

361 

362 X_p = np.reshape(X_p, (2, 3, 1)) 

363 X = np.reshape(X, (2, 3, 1)) 

364 np.testing.assert_allclose( 

365 cctf_decoding_RIMMRGB(X_p), X, atol=TOLERANCE_ABSOLUTE_TESTS 

366 ) 

367 

368 def test_domain_range_scale_cctf_decoding_RIMMRGB(self) -> None: 

369 """ 

370 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

371cctf_decoding_RIMMRGB` definition domain and range scale support. 

372 """ 

373 

374 X_p = 0.291673732475746 

375 X = cctf_decoding_RIMMRGB(X_p) 

376 

377 d_r = (("reference", 1), ("1", 1), ("100", 100)) 

378 for scale, factor in d_r: 

379 with domain_range_scale(scale): 

380 np.testing.assert_allclose( 

381 cctf_decoding_RIMMRGB(X_p * factor), 

382 X * factor, 

383 atol=TOLERANCE_ABSOLUTE_TESTS, 

384 ) 

385 

386 @ignore_numpy_errors 

387 def test_nan_cctf_decoding_RIMMRGB(self) -> None: 

388 """ 

389 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

390cctf_decoding_RIMMRGB` definition nan support. 

391 """ 

392 

393 cctf_decoding_RIMMRGB(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan])) 

394 

395 

396class TestLog_encoding_ERIMMRGB: 

397 """ 

398 Define :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

399log_encoding_ERIMMRGB` definition unit tests methods. 

400 """ 

401 

402 def test_log_encoding_ERIMMRGB(self) -> None: 

403 """ 

404 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

405log_encoding_ERIMMRGB` definition. 

406 """ 

407 

408 np.testing.assert_allclose( 

409 log_encoding_ERIMMRGB(0.0), 0.0, atol=TOLERANCE_ABSOLUTE_TESTS 

410 ) 

411 

412 np.testing.assert_allclose( 

413 log_encoding_ERIMMRGB(0.18), 

414 0.410052389492129, 

415 atol=TOLERANCE_ABSOLUTE_TESTS, 

416 ) 

417 

418 np.testing.assert_allclose( 

419 log_encoding_ERIMMRGB(1.0), 

420 0.545458327405113, 

421 atol=TOLERANCE_ABSOLUTE_TESTS, 

422 ) 

423 

424 assert log_encoding_ERIMMRGB(0.18, out_int=True) == 105 

425 

426 assert log_encoding_ERIMMRGB(0.18, bit_depth=12, out_int=True) == 1679 

427 

428 def test_n_dimensional_log_encoding_ERIMMRGB(self) -> None: 

429 """ 

430 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

431log_encoding_ERIMMRGB` definition n-dimensional arrays support. 

432 """ 

433 

434 X = 0.18 

435 X_p = log_encoding_ERIMMRGB(X) 

436 

437 X = np.tile(X, 6) 

438 X_p = np.tile(X_p, 6) 

439 np.testing.assert_allclose( 

440 log_encoding_ERIMMRGB(X), X_p, atol=TOLERANCE_ABSOLUTE_TESTS 

441 ) 

442 

443 X = np.reshape(X, (2, 3)) 

444 X_p = np.reshape(X_p, (2, 3)) 

445 np.testing.assert_allclose( 

446 log_encoding_ERIMMRGB(X), X_p, atol=TOLERANCE_ABSOLUTE_TESTS 

447 ) 

448 

449 X = np.reshape(X, (2, 3, 1)) 

450 X_p = np.reshape(X_p, (2, 3, 1)) 

451 np.testing.assert_allclose( 

452 log_encoding_ERIMMRGB(X), X_p, atol=TOLERANCE_ABSOLUTE_TESTS 

453 ) 

454 

455 def test_domain_range_scale_log_encoding_ERIMMRGB(self) -> None: 

456 """ 

457 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

458log_encoding_ERIMMRGB` definition domain and range scale support. 

459 """ 

460 

461 X = 0.18 

462 X_p = log_encoding_ERIMMRGB(X) 

463 

464 d_r = (("reference", 1), ("1", 1), ("100", 100)) 

465 for scale, factor in d_r: 

466 with domain_range_scale(scale): 

467 np.testing.assert_allclose( 

468 log_encoding_ERIMMRGB(X * factor), 

469 X_p * factor, 

470 atol=TOLERANCE_ABSOLUTE_TESTS, 

471 ) 

472 

473 @ignore_numpy_errors 

474 def test_nan_log_encoding_ERIMMRGB(self) -> None: 

475 """ 

476 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

477log_encoding_ERIMMRGB` definition nan support. 

478 """ 

479 

480 log_encoding_ERIMMRGB(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan])) 

481 

482 

483class TestLog_decoding_ERIMMRGB: 

484 """ 

485 Define :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb. 

486 log_decoding_ERIMMRGB` definition unit tests methods. 

487 """ 

488 

489 def test_log_decoding_ERIMMRGB(self) -> None: 

490 """ 

491 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

492log_decoding_ERIMMRGB` definition. 

493 """ 

494 

495 np.testing.assert_allclose( 

496 log_decoding_ERIMMRGB(0.0), 0.0, atol=TOLERANCE_ABSOLUTE_TESTS 

497 ) 

498 

499 np.testing.assert_allclose( 

500 log_decoding_ERIMMRGB(0.410052389492129), 

501 0.18, 

502 atol=TOLERANCE_ABSOLUTE_TESTS, 

503 ) 

504 

505 np.testing.assert_allclose( 

506 log_decoding_ERIMMRGB(0.545458327405113), 

507 1.0, 

508 atol=TOLERANCE_ABSOLUTE_TESTS, 

509 ) 

510 

511 np.testing.assert_allclose( 

512 log_decoding_ERIMMRGB(105, in_int=True), 

513 0.18, 

514 atol=0.005, 

515 ) 

516 

517 np.testing.assert_allclose( 

518 log_decoding_ERIMMRGB(1679, bit_depth=12, in_int=True), 

519 0.18, 

520 atol=0.005, 

521 ) 

522 

523 def test_n_dimensional_log_decoding_ERIMMRGB(self) -> None: 

524 """ 

525 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

526log_decoding_ERIMMRGB` definition n-dimensional arrays support. 

527 """ 

528 

529 X_p = 0.410052389492129 

530 X = log_decoding_ERIMMRGB(X_p) 

531 

532 X_p = np.tile(X_p, 6) 

533 X = np.tile(X, 6) 

534 np.testing.assert_allclose( 

535 log_decoding_ERIMMRGB(X_p), X, atol=TOLERANCE_ABSOLUTE_TESTS 

536 ) 

537 

538 X_p = np.reshape(X_p, (2, 3)) 

539 X = np.reshape(X, (2, 3)) 

540 np.testing.assert_allclose( 

541 log_decoding_ERIMMRGB(X_p), X, atol=TOLERANCE_ABSOLUTE_TESTS 

542 ) 

543 

544 X_p = np.reshape(X_p, (2, 3, 1)) 

545 X = np.reshape(X, (2, 3, 1)) 

546 np.testing.assert_allclose( 

547 log_decoding_ERIMMRGB(X_p), X, atol=TOLERANCE_ABSOLUTE_TESTS 

548 ) 

549 

550 def test_domain_range_scale_log_decoding_ERIMMRGB(self) -> None: 

551 """ 

552 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

553log_decoding_ERIMMRGB` definition domain and range scale support. 

554 """ 

555 

556 X_p = 0.410052389492129 

557 X = log_decoding_ERIMMRGB(X_p) 

558 

559 d_r = (("reference", 1), ("1", 1), ("100", 100)) 

560 for scale, factor in d_r: 

561 with domain_range_scale(scale): 

562 np.testing.assert_allclose( 

563 log_decoding_ERIMMRGB(X_p * factor), 

564 X * factor, 

565 atol=TOLERANCE_ABSOLUTE_TESTS, 

566 ) 

567 

568 @ignore_numpy_errors 

569 def test_nan_log_decoding_ERIMMRGB(self) -> None: 

570 """ 

571 Test :func:`colour.models.rgb.transfer_functions.rimm_romm_rgb.\ 

572log_decoding_ERIMMRGB` definition nan support. 

573 """ 

574 

575 log_decoding_ERIMMRGB(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]))