Coverage for colour/phenomena/tests/test_rayleigh.py: 100%
333 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-15 19:01 +1300
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-15 19:01 +1300
1"""Define the unit tests for the :mod:`colour.phenomena.rayleigh` module."""
3from __future__ import annotations
5import numpy as np
7from colour.constants import TOLERANCE_ABSOLUTE_TESTS
8from colour.phenomena import (
9 rayleigh_optical_depth,
10 scattering_cross_section,
11 sd_rayleigh_scattering,
12)
13from colour.phenomena.rayleigh import (
14 F_air_Bates1984,
15 F_air_Bodhaine1999,
16 F_air_Penndorf1957,
17 F_air_Young1981,
18 N2_depolarisation,
19 O2_depolarisation,
20 air_refraction_index_Bodhaine1999,
21 air_refraction_index_Edlen1966,
22 air_refraction_index_Peck1972,
23 air_refraction_index_Penndorf1957,
24 gravity_List1968,
25 mean_molecular_weights,
26 molecular_density,
27)
28from colour.utilities import ignore_numpy_errors
30__author__ = "Colour Developers"
31__copyright__ = "Copyright 2013 Colour Developers"
32__license__ = "BSD-3-Clause - https://opensource.org/licenses/BSD-3-Clause"
33__maintainer__ = "Colour Developers"
34__email__ = "colour-developers@colour-science.org"
35__status__ = "Production"
37__all__ = [
38 "DATA_SD_RAYLEIGH_SCATTERING",
39 "TestAirRefractionIndexPenndorf1957",
40 "TestAirRefractionIndexEdlen1966",
41 "TestAirRefractionIndexPeck1972",
42 "TestAirRefractionIndexBodhaine1999",
43 "TestN2Depolarisation",
44 "TestO2Depolarisation",
45 "TestF_airPenndorf1957",
46 "TestF_airYoung1981",
47 "TestF_airBates1984",
48 "TestF_airBodhaine1999",
49 "TestMolecularDensity",
50 "TestMeanMolecularWeights",
51 "TestGravityList1968",
52 "TestScatteringCrossSection",
53 "TestRayleighOpticalDepth",
54 "TestSdRayleighScattering",
55]
57DATA_SD_RAYLEIGH_SCATTERING: tuple = (
58 0.56024658,
59 0.55374814,
60 0.54734469,
61 0.54103456,
62 0.53481611,
63 0.52868771,
64 0.52264779,
65 0.51669481,
66 0.51082726,
67 0.50504364,
68 0.49934250,
69 0.49372243,
70 0.48818203,
71 0.48271993,
72 0.47733480,
73 0.47202532,
74 0.46679021,
75 0.46162820,
76 0.45653807,
77 0.45151861,
78 0.44656862,
79 0.44168694,
80 0.43687245,
81 0.43212401,
82 0.42744053,
83 0.42282094,
84 0.41826419,
85 0.41376924,
86 0.40933507,
87 0.40496071,
88 0.40064516,
89 0.39638749,
90 0.39218673,
91 0.38804199,
92 0.38395236,
93 0.37991695,
94 0.37593489,
95 0.37200533,
96 0.36812743,
97 0.36430038,
98 0.36052337,
99 0.35679561,
100 0.35311633,
101 0.34948475,
102 0.34590015,
103 0.34236177,
104 0.33886891,
105 0.33542085,
106 0.33201690,
107 0.32865638,
108 0.32533863,
109 0.32206298,
110 0.31882879,
111 0.31563542,
112 0.31248226,
113 0.30936870,
114 0.30629412,
115 0.30325795,
116 0.30025961,
117 0.29729852,
118 0.29437413,
119 0.29148588,
120 0.28863325,
121 0.28581570,
122 0.28303270,
123 0.28028376,
124 0.27756836,
125 0.27488601,
126 0.27223623,
127 0.26961854,
128 0.26703247,
129 0.26447756,
130 0.26195335,
131 0.25945941,
132 0.25699529,
133 0.25456057,
134 0.25215482,
135 0.24977762,
136 0.24742857,
137 0.24510727,
138 0.24281331,
139 0.24054632,
140 0.23830590,
141 0.23609169,
142 0.23390332,
143 0.23174041,
144 0.22960262,
145 0.22748959,
146 0.22540097,
147 0.22333643,
148 0.22129563,
149 0.21927825,
150 0.21728395,
151 0.21531242,
152 0.21336335,
153 0.21143642,
154 0.20953135,
155 0.20764781,
156 0.20578553,
157 0.20394422,
158 0.20212358,
159 0.20032334,
160 0.19854323,
161 0.19678297,
162 0.19504230,
163 0.19332095,
164 0.19161866,
165 0.18993519,
166 0.18827027,
167 0.18662367,
168 0.18499514,
169 0.18338444,
170 0.18179134,
171 0.18021561,
172 0.17865701,
173 0.17711532,
174 0.17559033,
175 0.17408181,
176 0.17258954,
177 0.17111333,
178 0.16965296,
179 0.16820822,
180 0.16677892,
181 0.16536485,
182 0.16396583,
183 0.16258165,
184 0.16121212,
185 0.15985707,
186 0.15851631,
187 0.15718965,
188 0.15587691,
189 0.15457793,
190 0.15329252,
191 0.15202052,
192 0.15076176,
193 0.14951607,
194 0.14828329,
195 0.14706325,
196 0.14585580,
197 0.14466079,
198 0.14347805,
199 0.14230744,
200 0.14114881,
201 0.14000200,
202 0.13886688,
203 0.13774330,
204 0.13663112,
205 0.13553019,
206 0.13444039,
207 0.13336158,
208 0.13229362,
209 0.13123639,
210 0.13018974,
211 0.12915357,
212 0.12812773,
213 0.12711210,
214 0.12610657,
215 0.12511101,
216 0.12412531,
217 0.12314934,
218 0.12218298,
219 0.12122614,
220 0.12027869,
221 0.11934052,
222 0.11841152,
223 0.11749159,
224 0.11658061,
225 0.11567849,
226 0.11478512,
227 0.11390040,
228 0.11302422,
229 0.11215649,
230 0.11129711,
231 0.11044599,
232 0.10960302,
233 0.10876811,
234 0.10794118,
235 0.10712212,
236 0.10631086,
237 0.10550729,
238 0.10471133,
239 0.10392290,
240 0.10314191,
241 0.10236828,
242 0.10160191,
243 0.10084274,
244 0.10009067,
245 0.09934563,
246 0.09860754,
247 0.09787633,
248 0.09715190,
249 0.09643420,
250 0.09572314,
251 0.09501864,
252 0.09432065,
253 0.09362907,
254 0.09294386,
255 0.09226492,
256 0.09159220,
257 0.09092562,
258 0.09026512,
259 0.08961063,
260 0.08896209,
261 0.08831943,
262 0.08768258,
263 0.08705149,
264 0.08642609,
265 0.08580631,
266 0.08519210,
267 0.08458341,
268 0.08398016,
269 0.08338229,
270 0.08278976,
271 0.08220251,
272 0.08162047,
273 0.08104360,
274 0.08047183,
275 0.07990512,
276 0.07934340,
277 0.07878663,
278 0.07823475,
279 0.07768772,
280 0.07714548,
281 0.07660798,
282 0.07607516,
283 0.07554699,
284 0.07502342,
285 0.07450438,
286 0.07398985,
287 0.07347976,
288 0.07297408,
289 0.07247276,
290 0.07197575,
291 0.07148301,
292 0.07099449,
293 0.07051016,
294 0.07002996,
295 0.06955386,
296 0.06908181,
297 0.06861378,
298 0.06814971,
299 0.06768958,
300 0.06723333,
301 0.06678094,
302 0.06633236,
303 0.06588755,
304 0.06544648,
305 0.06500910,
306 0.06457539,
307 0.06414530,
308 0.06371879,
309 0.06329584,
310 0.06287640,
311 0.06246044,
312 0.06204793,
313 0.06163883,
314 0.06123310,
315 0.06083072,
316 0.06043165,
317 0.06003586,
318 0.05964332,
319 0.05925399,
320 0.05886783,
321 0.05848484,
322 0.05810496,
323 0.05772817,
324 0.05735443,
325 0.05698373,
326 0.05661603,
327 0.05625130,
328 0.05588951,
329 0.05553063,
330 0.05517464,
331 0.05482150,
332 0.05447120,
333 0.05412370,
334 0.05377897,
335 0.05343699,
336 0.05309773,
337 0.05276117,
338 0.05242728,
339 0.05209604,
340 0.05176742,
341 0.05144139,
342 0.05111793,
343 0.05079701,
344 0.05047862,
345 0.05016273,
346 0.04984931,
347 0.04953835,
348 0.04922981,
349 0.04892367,
350 0.04861992,
351 0.04831853,
352 0.04801948,
353 0.04772275,
354 0.04742831,
355 0.04713614,
356 0.04684623,
357 0.04655855,
358 0.04627308,
359 0.04598980,
360 0.04570870,
361 0.04542974,
362 0.04515291,
363 0.04487820,
364 0.04460557,
365 0.04433502,
366 0.04406653,
367 0.04380007,
368 0.04353562,
369 0.04327318,
370 0.04301271,
371 0.04275421,
372 0.04249765,
373 0.04224301,
374 0.04199029,
375 0.04173946,
376 0.04149050,
377 0.04124341,
378 0.04099815,
379 0.04075472,
380 0.04051310,
381 0.04027327,
382 0.04003522,
383 0.03979893,
384 0.03956438,
385 0.03933157,
386 0.03910047,
387 0.03887106,
388 0.03864335,
389 0.03841730,
390 0.03819290,
391 0.03797015,
392 0.03774902,
393 0.03752951,
394 0.03731159,
395 0.03709525,
396 0.03688049,
397 0.03666728,
398 0.03645561,
399 0.03624547,
400 0.03603685,
401 0.03582973,
402 0.03562410,
403 0.03541995,
404 0.03521726,
405 0.03501602,
406 0.03481622,
407 0.03461785,
408 0.03442089,
409 0.03422534,
410 0.03403117,
411 0.03383838,
412 0.03364696,
413 0.03345690,
414 0.03326817,
415 0.03308078,
416 0.03289471,
417 0.03270995,
418 0.03252649,
419 0.03234432,
420 0.03216342,
421 0.03198379,
422 0.03180541,
423 0.03162828,
424 0.03145238,
425 0.03127771,
426 0.03110425,
427 0.03093199,
428 0.03076093,
429 0.03059105,
430 0.03042234,
431 0.03025480,
432 0.03008842,
433 0.02992318,
434 0.02975907,
435 0.02959609,
436 0.02943422,
437 0.02927347,
438 0.02911381,
439 0.02895524,
440 0.02879776,
441 0.02864134,
442 0.02848599,
443 0.02833169,
444 0.02817843,
445 0.02802622,
446 0.02787503,
447 0.02772486,
448 0.02757571,
449 0.02742756,
450 0.02728040,
451 0.02713423,
452 0.02698905,
453 0.02684483,
454 0.02670158,
455 0.02655928,
456 0.02641794,
457 0.02627753,
458 0.02613806,
459 0.02599951,
460 0.02586188,
461 0.02572517,
462 0.02558936,
463 0.02545444,
464 0.02532041,
465 0.02518727,
466 0.02505501,
467 0.02492361,
468 0.02479307,
469 0.02466339,
470 0.02453456,
471 0.02440657,
472 0.02427941,
473 0.02415309,
474 0.02402758,
475 0.02390290,
476 0.02377902,
477 0.02365594,
478 0.02353366,
479)
482class TestAirRefractionIndexPenndorf1957:
483 """
484 Define :func:`colour.phenomena.rayleigh.\
485air_refraction_index_Penndorf1957` definition unit tests methods.
486 """
488 def test_air_refraction_index_Penndorf1957(self) -> None:
489 """
490 Test :func:`colour.phenomena.rayleigh.\
491air_refraction_index_Penndorf1957` definition.
492 """
494 np.testing.assert_allclose(
495 air_refraction_index_Penndorf1957(0.360),
496 1.000285316795146,
497 atol=TOLERANCE_ABSOLUTE_TESTS,
498 )
500 np.testing.assert_allclose(
501 air_refraction_index_Penndorf1957(0.555),
502 1.000277729533864,
503 atol=TOLERANCE_ABSOLUTE_TESTS,
504 )
506 np.testing.assert_allclose(
507 air_refraction_index_Penndorf1957(0.830),
508 1.000274856640486,
509 atol=TOLERANCE_ABSOLUTE_TESTS,
510 )
512 def test_n_dimensional_air_refraction_index_Penndorf1957(self) -> None:
513 """
514 Test :func:`colour.phenomena.rayleigh.\
515air_refraction_index_Penndorf1957` definition n-dimensional arrays support.
516 """
518 wl = 0.360
519 n = air_refraction_index_Penndorf1957(wl)
521 wl = np.tile(wl, 6)
522 n = np.tile(n, 6)
523 np.testing.assert_allclose(
524 air_refraction_index_Penndorf1957(wl),
525 n,
526 atol=TOLERANCE_ABSOLUTE_TESTS,
527 )
529 wl = np.reshape(wl, (2, 3))
530 n = np.reshape(n, (2, 3))
531 np.testing.assert_allclose(
532 air_refraction_index_Penndorf1957(wl),
533 n,
534 atol=TOLERANCE_ABSOLUTE_TESTS,
535 )
537 wl = np.reshape(wl, (2, 3, 1))
538 n = np.reshape(n, (2, 3, 1))
539 np.testing.assert_allclose(
540 air_refraction_index_Penndorf1957(wl),
541 n,
542 atol=TOLERANCE_ABSOLUTE_TESTS,
543 )
545 @ignore_numpy_errors
546 def test_nan_air_refraction_index_Penndorf1957(self) -> None:
547 """
548 Test :func:`colour.phenomena.rayleigh.\
549air_refraction_index_Penndorf1957` definition nan support.
550 """
552 air_refraction_index_Penndorf1957(
553 np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan])
554 )
557class TestAirRefractionIndexEdlen1966:
558 """
559 Define :func:`colour.phenomena.rayleigh.air_refraction_index_Edlen1966`
560 definition unit tests methods.
561 """
563 def test_air_refraction_index_Edlen1966(self) -> None:
564 """
565 Test :func:`colour.phenomena.\
566rayleigh.air_refraction_index_Edlen1966` definition.
567 """
569 np.testing.assert_allclose(
570 air_refraction_index_Edlen1966(0.360),
571 1.000285308809879,
572 atol=TOLERANCE_ABSOLUTE_TESTS,
573 )
575 np.testing.assert_allclose(
576 air_refraction_index_Edlen1966(0.555),
577 1.000277727690364,
578 atol=TOLERANCE_ABSOLUTE_TESTS,
579 )
581 np.testing.assert_allclose(
582 air_refraction_index_Edlen1966(0.830),
583 1.000274862218835,
584 atol=TOLERANCE_ABSOLUTE_TESTS,
585 )
587 def test_n_dimensional_air_refraction_index_Edlen1966(self) -> None:
588 """
589 Test :func:`colour.phenomena.rayleigh.\
590air_refraction_index_Edlen1966` definition n-dimensional arrays support.
591 """
593 wl = 0.360
594 n = air_refraction_index_Edlen1966(wl)
596 wl = np.tile(wl, 6)
597 n = np.tile(n, 6)
598 np.testing.assert_allclose(
599 air_refraction_index_Edlen1966(wl),
600 n,
601 atol=TOLERANCE_ABSOLUTE_TESTS,
602 )
604 wl = np.reshape(wl, (2, 3))
605 n = np.reshape(n, (2, 3))
606 np.testing.assert_allclose(
607 air_refraction_index_Edlen1966(wl),
608 n,
609 atol=TOLERANCE_ABSOLUTE_TESTS,
610 )
612 wl = np.reshape(wl, (2, 3, 1))
613 n = np.reshape(n, (2, 3, 1))
614 np.testing.assert_allclose(
615 air_refraction_index_Edlen1966(wl),
616 n,
617 atol=TOLERANCE_ABSOLUTE_TESTS,
618 )
620 @ignore_numpy_errors
621 def test_nan_air_refraction_index_Edlen1966(self) -> None:
622 """
623 Test :func:`colour.phenomena.rayleigh.\
624air_refraction_index_Edlen1966` definition nan support.
625 """
627 air_refraction_index_Edlen1966(
628 np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan])
629 )
632class TestAirRefractionIndexPeck1972:
633 """
634 Define :func:`colour.phenomena.rayleigh.air_refraction_index_Peck1972`
635 definition unit tests methods.
636 """
638 def test_air_refraction_index_Peck1972(self) -> None:
639 """
640 Test :func:`colour.phenomena.rayleigh.air_refraction_index_Peck1972`
641 definition.
642 """
644 np.testing.assert_allclose(
645 air_refraction_index_Peck1972(0.360),
646 1.000285310285056,
647 atol=TOLERANCE_ABSOLUTE_TESTS,
648 )
650 np.testing.assert_allclose(
651 air_refraction_index_Peck1972(0.555),
652 1.000277726541484,
653 atol=TOLERANCE_ABSOLUTE_TESTS,
654 )
656 np.testing.assert_allclose(
657 air_refraction_index_Peck1972(0.830),
658 1.000274859144804,
659 atol=TOLERANCE_ABSOLUTE_TESTS,
660 )
662 def test_n_dimensional_air_refraction_index_Peck1972(self) -> None:
663 """
664 Test :func:`colour.phenomena.rayleigh.air_refraction_index_Peck1972`
665 definition n-dimensional arrays support.
666 """
668 wl = 0.360
669 n = air_refraction_index_Peck1972(wl)
671 wl = np.tile(wl, 6)
672 n = np.tile(n, 6)
673 np.testing.assert_allclose(
674 air_refraction_index_Peck1972(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
675 )
677 wl = np.reshape(wl, (2, 3))
678 n = np.reshape(n, (2, 3))
679 np.testing.assert_allclose(
680 air_refraction_index_Peck1972(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
681 )
683 wl = np.reshape(wl, (2, 3, 1))
684 n = np.reshape(n, (2, 3, 1))
685 np.testing.assert_allclose(
686 air_refraction_index_Peck1972(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
687 )
689 @ignore_numpy_errors
690 def test_nan_air_refraction_index_Peck1972(self) -> None:
691 """
692 Test :func:`colour.phenomena.rayleigh.air_refraction_index_Peck1972`
693 definition nan support.
694 """
696 air_refraction_index_Peck1972(
697 np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan])
698 )
701class TestAirRefractionIndexBodhaine1999:
702 """
703 Define :func:`colour.phenomena.rayleigh.\
704air_refraction_index_Bodhaine1999` definition unit tests methods.
705 """
707 def test_air_refraction_index_Bodhaine1999(self) -> None:
708 """
709 Test :func:`colour.phenomena.rayleigh.\
710air_refraction_index_Bodhaine1999` definition.
711 """
713 np.testing.assert_allclose(
714 air_refraction_index_Bodhaine1999(0.360),
715 1.000285310285056,
716 atol=TOLERANCE_ABSOLUTE_TESTS,
717 )
719 np.testing.assert_allclose(
720 air_refraction_index_Bodhaine1999(0.555),
721 1.000277726541484,
722 atol=TOLERANCE_ABSOLUTE_TESTS,
723 )
725 np.testing.assert_allclose(
726 air_refraction_index_Bodhaine1999(0.830),
727 1.000274859144804,
728 atol=TOLERANCE_ABSOLUTE_TESTS,
729 )
731 np.testing.assert_allclose(
732 air_refraction_index_Bodhaine1999(0.360, 0),
733 1.000285264064789,
734 atol=TOLERANCE_ABSOLUTE_TESTS,
735 )
737 np.testing.assert_allclose(
738 air_refraction_index_Bodhaine1999(0.555, 360),
739 1.000277735539824,
740 atol=TOLERANCE_ABSOLUTE_TESTS,
741 )
743 np.testing.assert_allclose(
744 air_refraction_index_Bodhaine1999(0.830, 620),
745 1.000274906640464,
746 atol=TOLERANCE_ABSOLUTE_TESTS,
747 )
749 def test_n_dimensional_air_refraction_index_Bodhaine1999(self) -> None:
750 """
751 Test :func:`colour.phenomena.rayleigh.\
752air_refraction_index_Bodhaine1999` definition n-dimensional arrays support.
753 """
755 wl = 0.360
756 n = air_refraction_index_Bodhaine1999(wl)
758 wl = np.tile(wl, 6)
759 n = np.tile(n, 6)
760 np.testing.assert_allclose(
761 air_refraction_index_Bodhaine1999(wl),
762 n,
763 atol=TOLERANCE_ABSOLUTE_TESTS,
764 )
766 wl = np.reshape(wl, (2, 3))
767 n = np.reshape(n, (2, 3))
768 np.testing.assert_allclose(
769 air_refraction_index_Bodhaine1999(wl),
770 n,
771 atol=TOLERANCE_ABSOLUTE_TESTS,
772 )
774 wl = np.reshape(wl, (2, 3, 1))
775 n = np.reshape(n, (2, 3, 1))
776 np.testing.assert_allclose(
777 air_refraction_index_Bodhaine1999(wl),
778 n,
779 atol=TOLERANCE_ABSOLUTE_TESTS,
780 )
782 @ignore_numpy_errors
783 def test_nan_air_refraction_index_Bodhaine1999(self) -> None:
784 """
785 Test :func:`colour.phenomena.rayleigh.\
786air_refraction_index_Bodhaine1999` definition nan support.
787 """
789 cases = [-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]
790 air_refraction_index_Bodhaine1999(cases, cases)
793class TestN2Depolarisation:
794 """
795 Define :func:`colour.phenomena.rayleigh.N2_depolarisation` definition
796 unit tests methods.
797 """
799 def test_N2_depolarisation(self) -> None:
800 """Test :func:`colour.phenomena.rayleigh.N2_depolarisation` definition."""
802 np.testing.assert_allclose(
803 N2_depolarisation(0.360),
804 1.036445987654321,
805 atol=TOLERANCE_ABSOLUTE_TESTS,
806 )
808 np.testing.assert_allclose(
809 N2_depolarisation(0.555),
810 1.035029137245354,
811 atol=TOLERANCE_ABSOLUTE_TESTS,
812 )
814 np.testing.assert_allclose(
815 N2_depolarisation(0.830),
816 1.034460153868486,
817 atol=TOLERANCE_ABSOLUTE_TESTS,
818 )
820 def test_n_dimensional_N2_depolarisation(self) -> None:
821 """
822 Test :func:`colour.phenomena.rayleigh.N2_depolarisation`
823 definition n-dimensional arrays support.
824 """
826 wl = 0.360
827 n = N2_depolarisation(wl)
829 wl = np.tile(wl, 6)
830 n = np.tile(n, 6)
831 np.testing.assert_allclose(
832 N2_depolarisation(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
833 )
835 wl = np.reshape(wl, (2, 3))
836 n = np.reshape(n, (2, 3))
837 np.testing.assert_allclose(
838 N2_depolarisation(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
839 )
841 wl = np.reshape(wl, (2, 3, 1))
842 n = np.reshape(n, (2, 3, 1))
843 np.testing.assert_allclose(
844 N2_depolarisation(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
845 )
847 @ignore_numpy_errors
848 def test_nan_N2_depolarisation(self) -> None:
849 """
850 Test :func:`colour.phenomena.rayleigh.N2_depolarisation` definition
851 nan support.
852 """
854 N2_depolarisation(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]))
857class TestO2Depolarisation:
858 """
859 Define :func:`colour.phenomena.rayleigh.O2_depolarisation` definition
860 unit tests methods.
861 """
863 def test_O2_depolarisation(self) -> None:
864 """Test :func:`colour.phenomena.rayleigh.O2_depolarisation` definition."""
866 np.testing.assert_allclose(
867 O2_depolarisation(0.360),
868 1.115307746532541,
869 atol=TOLERANCE_ABSOLUTE_TESTS,
870 )
872 np.testing.assert_allclose(
873 O2_depolarisation(0.555),
874 1.102022536201071,
875 atol=TOLERANCE_ABSOLUTE_TESTS,
876 )
878 np.testing.assert_allclose(
879 O2_depolarisation(0.830),
880 1.098315561269013,
881 atol=TOLERANCE_ABSOLUTE_TESTS,
882 )
884 def test_n_dimensional_O2_depolarisation(self) -> None:
885 """
886 Test :func:`colour.phenomena.rayleigh.O2_depolarisation` definition
887 n-dimensional arrays support.
888 """
890 wl = 0.360
891 n = O2_depolarisation(wl)
893 wl = np.tile(wl, 6)
894 n = np.tile(n, 6)
895 np.testing.assert_allclose(
896 O2_depolarisation(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
897 )
899 wl = np.reshape(wl, (2, 3))
900 n = np.reshape(n, (2, 3))
901 np.testing.assert_allclose(
902 O2_depolarisation(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
903 )
905 wl = np.reshape(wl, (2, 3, 1))
906 n = np.reshape(n, (2, 3, 1))
907 np.testing.assert_allclose(
908 O2_depolarisation(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
909 )
911 @ignore_numpy_errors
912 def test_nan_O2_depolarisation(self) -> None:
913 """
914 Test :func:`colour.phenomena.rayleigh.O2_depolarisation` definition
915 nan support.
916 """
918 O2_depolarisation(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]))
921class TestF_airPenndorf1957:
922 """
923 Define :func:`colour.phenomena.rayleigh.F_air_Penndorf1957` definition
924 unit tests methods.
925 """
927 def test_F_air_Penndorf1957(self) -> None:
928 """
929 Test :func:`colour.phenomena.rayleigh.F_air_Penndorf1957`
930 definition.
931 """
933 assert F_air_Penndorf1957(0.360) == 1.0608
935 def test_n_dimensional_F_air_Penndorf1957(self) -> None:
936 """
937 Test :func:`colour.phenomena.rayleigh.F_air_Penndorf1957` definition
938 n-dimensional arrays support.
939 """
941 wl = 0.360
942 n = F_air_Penndorf1957(wl)
944 wl = np.tile(wl, 6)
945 n = np.tile(n, 6)
946 np.testing.assert_allclose(
947 F_air_Penndorf1957(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
948 )
950 wl = np.reshape(wl, (2, 3))
951 n = np.reshape(n, (2, 3))
952 np.testing.assert_allclose(
953 F_air_Penndorf1957(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
954 )
956 wl = np.reshape(wl, (2, 3, 1))
957 n = np.reshape(n, (2, 3, 1))
958 np.testing.assert_allclose(
959 F_air_Penndorf1957(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
960 )
962 @ignore_numpy_errors
963 def test_nan_F_air_Penndorf1957(self) -> None:
964 """
965 Test :func:`colour.phenomena.rayleigh.F_air_Penndorf1957` definition
966 nan support.
967 """
969 F_air_Penndorf1957(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]))
972class TestF_airYoung1981:
973 """
974 Define :func:`colour.phenomena.rayleigh.F_air_Young1981` definition
975 unit tests methods.
976 """
978 def test_F_air_Young1981(self) -> None:
979 """Test :func:`colour.phenomena.rayleigh.F_air_Young1981` definition."""
981 assert F_air_Young1981(0.360) == 1.0480
983 def test_n_dimensional_F_air_Young1981(self) -> None:
984 """
985 Test :func:`colour.phenomena.rayleigh.F_air_Young1981` definition
986 n-dimensional arrays support.
987 """
989 wl = 0.360
990 n = F_air_Young1981(wl)
992 wl = np.tile(wl, 6)
993 n = np.tile(n, 6)
994 np.testing.assert_allclose(
995 F_air_Young1981(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
996 )
998 wl = np.reshape(wl, (2, 3))
999 n = np.reshape(n, (2, 3))
1000 np.testing.assert_allclose(
1001 F_air_Young1981(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
1002 )
1004 wl = np.reshape(wl, (2, 3, 1))
1005 n = np.reshape(n, (2, 3, 1))
1006 np.testing.assert_allclose(
1007 F_air_Young1981(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
1008 )
1010 @ignore_numpy_errors
1011 def test_nan_F_air_Young1981(self) -> None:
1012 """
1013 Test :func:`colour.phenomena.rayleigh.F_air_Young1981` definition
1014 nan support.
1015 """
1017 F_air_Young1981(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]))
1020class TestF_airBates1984:
1021 """
1022 Define :func:`colour.phenomena.rayleigh.F_air_Bates1984` definition unit
1023 tests methods.
1024 """
1026 def test_F_air_Bates1984(self) -> None:
1027 """Test :func:`colour.phenomena.rayleigh.F_air_Bates1984` definition."""
1029 np.testing.assert_allclose(
1030 F_air_Bates1984(0.360),
1031 1.051997277711708,
1032 atol=TOLERANCE_ABSOLUTE_TESTS,
1033 )
1035 np.testing.assert_allclose(
1036 F_air_Bates1984(0.555),
1037 1.048153579718658,
1038 atol=TOLERANCE_ABSOLUTE_TESTS,
1039 )
1041 np.testing.assert_allclose(
1042 F_air_Bates1984(0.830),
1043 1.046947068600589,
1044 atol=TOLERANCE_ABSOLUTE_TESTS,
1045 )
1047 def test_n_dimensional_F_air_Bates1984(self) -> None:
1048 """
1049 Test :func:`colour.phenomena.rayleigh.F_air_Bates1984` definition
1050 n-dimensional arrays support.
1051 """
1053 wl = 0.360
1054 n = F_air_Bates1984(wl)
1056 wl = np.tile(wl, 6)
1057 n = np.tile(n, 6)
1058 np.testing.assert_allclose(
1059 F_air_Bates1984(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
1060 )
1062 wl = np.reshape(wl, (2, 3))
1063 n = np.reshape(n, (2, 3))
1064 np.testing.assert_allclose(
1065 F_air_Bates1984(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
1066 )
1068 wl = np.reshape(wl, (2, 3, 1))
1069 n = np.reshape(n, (2, 3, 1))
1070 np.testing.assert_allclose(
1071 F_air_Bates1984(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
1072 )
1074 @ignore_numpy_errors
1075 def test_nan_F_air_Bates1984(self) -> None:
1076 """
1077 Test :func:`colour.phenomena.rayleigh.F_air_Bates1984` definition
1078 nan support.
1079 """
1081 F_air_Bates1984(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]))
1084class TestF_airBodhaine1999:
1085 """
1086 Define :func:`colour.phenomena.rayleigh.F_air_Bodhaine1999` definition
1087 unit tests methods.
1088 """
1090 def test_F_air_Bodhaine1999(self) -> None:
1091 """
1092 Test :func:`colour.phenomena.rayleigh.F_air_Bodhaine1999`
1093 definition.
1094 """
1096 np.testing.assert_allclose(
1097 F_air_Bodhaine1999(0.360),
1098 1.052659005129014,
1099 atol=TOLERANCE_ABSOLUTE_TESTS,
1100 )
1102 np.testing.assert_allclose(
1103 F_air_Bodhaine1999(0.555),
1104 1.048769718142427,
1105 atol=TOLERANCE_ABSOLUTE_TESTS,
1106 )
1108 np.testing.assert_allclose(
1109 F_air_Bodhaine1999(0.830),
1110 1.047548896943893,
1111 atol=TOLERANCE_ABSOLUTE_TESTS,
1112 )
1114 np.testing.assert_allclose(
1115 F_air_Bodhaine1999(0.360, 0),
1116 1.052629792313939,
1117 atol=TOLERANCE_ABSOLUTE_TESTS,
1118 )
1120 np.testing.assert_allclose(
1121 F_air_Bodhaine1999(0.555, 360),
1122 1.048775791959338,
1123 atol=TOLERANCE_ABSOLUTE_TESTS,
1124 )
1126 np.testing.assert_allclose(
1127 F_air_Bodhaine1999(0.830, 620),
1128 1.047581672775155,
1129 atol=TOLERANCE_ABSOLUTE_TESTS,
1130 )
1132 def test_n_dimensional_F_air_Bodhaine1999(self) -> None:
1133 """
1134 Test :func:`colour.phenomena.rayleigh.F_air_Bodhaine1999` definition
1135 n-dimensional arrays support.
1136 """
1138 wl = 0.360
1139 n = F_air_Bodhaine1999(wl)
1141 wl = np.tile(wl, 6)
1142 n = np.tile(n, 6)
1143 np.testing.assert_allclose(
1144 F_air_Bodhaine1999(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
1145 )
1147 wl = np.reshape(wl, (2, 3))
1148 n = np.reshape(n, (2, 3))
1149 np.testing.assert_allclose(
1150 F_air_Bodhaine1999(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
1151 )
1153 wl = np.reshape(wl, (2, 3, 1))
1154 n = np.reshape(n, (2, 3, 1))
1155 np.testing.assert_allclose(
1156 F_air_Bodhaine1999(wl), n, atol=TOLERANCE_ABSOLUTE_TESTS
1157 )
1159 @ignore_numpy_errors
1160 def test_nan_F_air_Bodhaine1999(self) -> None:
1161 """
1162 Test :func:`colour.phenomena.rayleigh.F_air_Bodhaine1999` definition
1163 nan support.
1164 """
1166 cases = [-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]
1167 F_air_Bodhaine1999(cases, cases)
1170class TestMolecularDensity:
1171 """
1172 Define :func:`colour.phenomena.rayleigh.molecular_density` definition
1173 unit tests methods.
1174 """
1176 def test_molecular_density(self) -> None:
1177 """Test :func:`colour.phenomena.rayleigh.molecular_density` definition."""
1179 np.testing.assert_allclose(
1180 molecular_density(200), 3.669449208173649e19, atol=10000
1181 )
1183 np.testing.assert_allclose(
1184 molecular_density(300), 2.4462994721157665e19, atol=10000
1185 )
1187 np.testing.assert_allclose(
1188 molecular_density(400), 1.834724604086825e19, atol=10000
1189 )
1191 def test_n_dimensional_molecular_density(self) -> None:
1192 """
1193 Test :func:`colour.phenomena.rayleigh.molecular_density` definition
1194 n-dimensional arrays support.
1195 """
1197 temperature = 200
1198 N_s = molecular_density(temperature)
1200 temperature = np.tile(temperature, 6)
1201 N_s = np.tile(N_s, 6)
1202 np.testing.assert_allclose(
1203 molecular_density(temperature), N_s, atol=TOLERANCE_ABSOLUTE_TESTS
1204 )
1206 temperature = np.reshape(temperature, (2, 3))
1207 N_s = np.reshape(N_s, (2, 3))
1208 np.testing.assert_allclose(
1209 molecular_density(temperature), N_s, atol=TOLERANCE_ABSOLUTE_TESTS
1210 )
1212 temperature = np.reshape(temperature, (2, 3, 1))
1213 N_s = np.reshape(N_s, (2, 3, 1))
1214 np.testing.assert_allclose(
1215 molecular_density(temperature), N_s, atol=TOLERANCE_ABSOLUTE_TESTS
1216 )
1218 @ignore_numpy_errors
1219 def test_nan_molecular_density(self) -> None:
1220 """
1221 Test :func:`colour.phenomena.rayleigh.molecular_density` definition
1222 nan support.
1223 """
1225 molecular_density(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]))
1228class TestMeanMolecularWeights:
1229 """
1230 Define :func:`colour.phenomena.rayleigh.mean_molecular_weights`
1231 definition unit tests methods.
1232 """
1234 def test_mean_molecular_weights(self) -> None:
1235 """
1236 Test :func:`colour.phenomena.rayleigh.mean_molecular_weights`
1237 definition.
1238 """
1240 np.testing.assert_allclose(
1241 mean_molecular_weights(0), 28.9595, atol=TOLERANCE_ABSOLUTE_TESTS
1242 )
1244 np.testing.assert_allclose(
1245 mean_molecular_weights(360),
1246 28.964920015999997,
1247 atol=TOLERANCE_ABSOLUTE_TESTS,
1248 )
1250 np.testing.assert_allclose(
1251 mean_molecular_weights(620),
1252 28.968834471999998,
1253 atol=TOLERANCE_ABSOLUTE_TESTS,
1254 )
1256 def test_n_dimensional_mean_molecular_weights(self) -> None:
1257 """
1258 Test :func:`colour.phenomena.rayleigh.mean_molecular_weights`
1259 definition n-dimensional arrays support.
1260 """
1262 CO2_c = 300
1263 m_a = mean_molecular_weights(CO2_c)
1265 CO2_c = np.tile(CO2_c, 6)
1266 m_a = np.tile(m_a, 6)
1267 np.testing.assert_allclose(
1268 mean_molecular_weights(CO2_c), m_a, atol=TOLERANCE_ABSOLUTE_TESTS
1269 )
1271 CO2_c = np.reshape(CO2_c, (2, 3))
1272 m_a = np.reshape(m_a, (2, 3))
1273 np.testing.assert_allclose(
1274 mean_molecular_weights(CO2_c), m_a, atol=TOLERANCE_ABSOLUTE_TESTS
1275 )
1277 CO2_c = np.reshape(CO2_c, (2, 3, 1))
1278 m_a = np.reshape(m_a, (2, 3, 1))
1279 np.testing.assert_allclose(
1280 mean_molecular_weights(CO2_c), m_a, atol=TOLERANCE_ABSOLUTE_TESTS
1281 )
1283 @ignore_numpy_errors
1284 def test_nan_mean_molecular_weights(self) -> None:
1285 """
1286 Test :func:`colour.phenomena.rayleigh.mean_molecular_weights`
1287 definition nan support.
1288 """
1290 mean_molecular_weights(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]))
1293class TestGravityList1968:
1294 """
1295 Define :func:`colour.phenomena.rayleigh.gravity_List1968` definition
1296 unit tests methods.
1297 """
1299 def test_gravity_List1968(self) -> None:
1300 """Test :func:`colour.phenomena.rayleigh.gravity_List1968` definition."""
1302 np.testing.assert_allclose(
1303 gravity_List1968(0.0, 0.0),
1304 978.03560706,
1305 atol=TOLERANCE_ABSOLUTE_TESTS,
1306 )
1308 np.testing.assert_allclose(
1309 gravity_List1968(45.0, 1500.0),
1310 980.15334386,
1311 atol=TOLERANCE_ABSOLUTE_TESTS,
1312 )
1314 np.testing.assert_allclose(
1315 gravity_List1968(48.8567, 35.0),
1316 980.95241784,
1317 atol=TOLERANCE_ABSOLUTE_TESTS,
1318 )
1320 def test_n_dimensional_gravity_List1968(self) -> None:
1321 """
1322 Test :func:`colour.phenomena.rayleigh.gravity_List1968`
1323 definition n-dimensional arrays support.
1324 """
1326 g = 978.03560706
1327 np.testing.assert_allclose(gravity_List1968(), g, atol=TOLERANCE_ABSOLUTE_TESTS)
1329 g = np.tile(g, 6)
1330 np.testing.assert_allclose(gravity_List1968(), g, atol=TOLERANCE_ABSOLUTE_TESTS)
1332 g = np.reshape(g, (2, 3))
1333 np.testing.assert_allclose(gravity_List1968(), g, atol=TOLERANCE_ABSOLUTE_TESTS)
1335 g = np.reshape(g, (2, 3, 1))
1336 np.testing.assert_allclose(gravity_List1968(), g, atol=TOLERANCE_ABSOLUTE_TESTS)
1338 @ignore_numpy_errors
1339 def test_nan_gravity_List1968(self) -> None:
1340 """
1341 Test :func:`colour.phenomena.rayleigh.gravity_List1968` definition
1342 nan support.
1343 """
1345 cases = [-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]
1346 gravity_List1968(cases, cases)
1349class TestScatteringCrossSection:
1350 """
1351 Define :func:`colour.phenomena.rayleigh.scattering_cross_section`
1352 definition unit tests methods.
1353 """
1355 def test_scattering_cross_section(self) -> None:
1356 """
1357 Test :func:`colour.phenomena.rayleigh.scattering_cross_section`
1358 definition.
1359 """
1361 np.testing.assert_allclose(
1362 scattering_cross_section(360 * 10e-8),
1363 2.600908533851937e-26,
1364 atol=1e-30,
1365 )
1367 np.testing.assert_allclose(
1368 scattering_cross_section(555 * 10e-8),
1369 4.346669248087624e-27,
1370 atol=1e-30,
1371 )
1373 np.testing.assert_allclose(
1374 scattering_cross_section(830 * 10e-8),
1375 8.501515434751428e-28,
1376 atol=1e-30,
1377 )
1379 np.testing.assert_allclose(
1380 scattering_cross_section(555 * 10e-8, 0),
1381 4.346543336839102e-27,
1382 atol=1e-30,
1383 )
1385 np.testing.assert_allclose(
1386 scattering_cross_section(555 * 10e-8, 360),
1387 4.346694421271718e-27,
1388 atol=1e-30,
1389 )
1391 np.testing.assert_allclose(
1392 scattering_cross_section(555 * 10e-8, 620),
1393 4.346803470171720e-27,
1394 atol=1e-30,
1395 )
1397 np.testing.assert_allclose(
1398 scattering_cross_section(555 * 10e-8, temperature=200),
1399 2.094012829135068e-27,
1400 atol=1e-30,
1401 )
1403 np.testing.assert_allclose(
1404 scattering_cross_section(555 * 10e-8, temperature=300),
1405 4.711528865553901e-27,
1406 atol=1e-30,
1407 )
1409 np.testing.assert_allclose(
1410 scattering_cross_section(555 * 10e-8, temperature=400),
1411 8.376051316540270e-27,
1412 atol=1e-30,
1413 )
1415 def test_n_dimensional_scattering_cross_section(self) -> None:
1416 """
1417 Test :func:`colour.phenomena.rayleigh.scattering_cross_section`
1418 definition n-dimensional arrays support.
1419 """
1421 wl = 360 * 10e-8
1422 sigma = scattering_cross_section(wl)
1424 sigma = np.tile(sigma, 6)
1425 np.testing.assert_allclose(
1426 scattering_cross_section(wl), sigma, atol=TOLERANCE_ABSOLUTE_TESTS
1427 )
1429 sigma = np.reshape(sigma, (2, 3))
1430 np.testing.assert_allclose(
1431 scattering_cross_section(wl), sigma, atol=TOLERANCE_ABSOLUTE_TESTS
1432 )
1434 sigma = np.reshape(sigma, (2, 3, 1))
1435 np.testing.assert_allclose(
1436 scattering_cross_section(wl), sigma, atol=TOLERANCE_ABSOLUTE_TESTS
1437 )
1439 @ignore_numpy_errors
1440 def test_nan_scattering_cross_section(self) -> None:
1441 """
1442 Test :func:`colour.phenomena.rayleigh.scattering_cross_section`
1443 definition nan support.
1444 """
1446 cases = [-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]
1447 scattering_cross_section(cases, cases, cases)
1450class TestRayleighOpticalDepth:
1451 """
1452 Define :func:`colour.phenomena.rayleigh.rayleigh_optical_depth`
1453 definition unit tests methods.
1454 """
1456 def test_rayleigh_optical_depth(self) -> None:
1457 """
1458 Test :func:`colour.phenomena.rayleigh.rayleigh_optical_depth`
1459 definition.
1460 """
1462 np.testing.assert_allclose(
1463 rayleigh_optical_depth(360 * 10e-8),
1464 0.560246579231107,
1465 atol=TOLERANCE_ABSOLUTE_TESTS,
1466 )
1468 np.testing.assert_allclose(
1469 rayleigh_optical_depth(555 * 10e-8),
1470 0.093629074056042,
1471 atol=TOLERANCE_ABSOLUTE_TESTS,
1472 )
1474 np.testing.assert_allclose(
1475 rayleigh_optical_depth(830 * 10e-8),
1476 0.018312619911882,
1477 atol=TOLERANCE_ABSOLUTE_TESTS,
1478 )
1480 np.testing.assert_allclose(
1481 rayleigh_optical_depth(555 * 10e-8, 0),
1482 0.093640964348049,
1483 atol=TOLERANCE_ABSOLUTE_TESTS,
1484 )
1486 np.testing.assert_allclose(
1487 rayleigh_optical_depth(555 * 10e-8, 360),
1488 0.093626696247360,
1489 atol=TOLERANCE_ABSOLUTE_TESTS,
1490 )
1492 np.testing.assert_allclose(
1493 rayleigh_optical_depth(555 * 10e-8, 620),
1494 0.093616393371777,
1495 atol=TOLERANCE_ABSOLUTE_TESTS,
1496 )
1498 np.testing.assert_allclose(
1499 rayleigh_optical_depth(555 * 10e-8, temperature=200),
1500 0.045105912380991,
1501 atol=TOLERANCE_ABSOLUTE_TESTS,
1502 )
1504 np.testing.assert_allclose(
1505 rayleigh_optical_depth(555 * 10e-8, temperature=300),
1506 0.101488302857230,
1507 atol=TOLERANCE_ABSOLUTE_TESTS,
1508 )
1510 np.testing.assert_allclose(
1511 rayleigh_optical_depth(555 * 10e-8, temperature=400),
1512 0.180423649523964,
1513 atol=TOLERANCE_ABSOLUTE_TESTS,
1514 )
1516 np.testing.assert_allclose(
1517 rayleigh_optical_depth(555 * 10e-8, pressure=101325),
1518 0.093629074056042,
1519 atol=TOLERANCE_ABSOLUTE_TESTS,
1520 )
1522 np.testing.assert_allclose(
1523 rayleigh_optical_depth(555 * 10e-8, pressure=100325),
1524 0.092705026939772,
1525 atol=TOLERANCE_ABSOLUTE_TESTS,
1526 )
1528 np.testing.assert_allclose(
1529 rayleigh_optical_depth(555 * 10e-8, pressure=99325),
1530 0.091780979823502,
1531 atol=TOLERANCE_ABSOLUTE_TESTS,
1532 )
1534 np.testing.assert_allclose(
1535 rayleigh_optical_depth(555 * 10e-8, latitude=0, altitude=0),
1536 0.093629074056041,
1537 atol=TOLERANCE_ABSOLUTE_TESTS,
1538 )
1540 np.testing.assert_allclose(
1541 rayleigh_optical_depth(555 * 10e-8, latitude=45, altitude=1500),
1542 0.093426777407767,
1543 atol=TOLERANCE_ABSOLUTE_TESTS,
1544 )
1546 np.testing.assert_allclose(
1547 rayleigh_optical_depth(555 * 10e-8, latitude=48.8567, altitude=35),
1548 0.093350672894038,
1549 atol=TOLERANCE_ABSOLUTE_TESTS,
1550 )
1552 def test_n_dimensional_rayleigh_optical_depth(self) -> None:
1553 """
1554 Test :func:`colour.phenomena.rayleigh.rayleigh_optical_depth`
1555 definition n-dimensional arrays support.
1556 """
1558 wl = 360 * 10e-8
1559 T_R = rayleigh_optical_depth(wl)
1561 T_R = np.tile(T_R, 6)
1562 np.testing.assert_allclose(
1563 rayleigh_optical_depth(wl), T_R, atol=TOLERANCE_ABSOLUTE_TESTS
1564 )
1566 T_R = np.reshape(T_R, (2, 3))
1567 np.testing.assert_allclose(
1568 rayleigh_optical_depth(wl), T_R, atol=TOLERANCE_ABSOLUTE_TESTS
1569 )
1571 T_R = np.reshape(T_R, (2, 3, 1))
1572 np.testing.assert_allclose(
1573 rayleigh_optical_depth(wl), T_R, atol=TOLERANCE_ABSOLUTE_TESTS
1574 )
1576 @ignore_numpy_errors
1577 def test_nan_rayleigh_optical_depth(self) -> None:
1578 """
1579 Test :func:`colour.phenomena.rayleigh.rayleigh_optical_depth`
1580 definition nan support.
1581 """
1583 cases = [-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]
1584 rayleigh_optical_depth(cases, cases, cases, cases, cases)
1587class TestSdRayleighScattering:
1588 """
1589 Define :func:`colour.phenomena.rayleigh.sd_rayleigh_scattering`
1590 definition unit tests methods.
1591 """
1593 def test_sd_rayleigh_scattering(self) -> None:
1594 """
1595 Test :func:`colour.phenomena.rayleigh.sd_rayleigh_scattering`
1596 definition.
1597 """
1599 np.testing.assert_allclose(
1600 sd_rayleigh_scattering().values,
1601 DATA_SD_RAYLEIGH_SCATTERING,
1602 atol=TOLERANCE_ABSOLUTE_TESTS,
1603 )