/
test_light_source.py
126 lines (84 loc) · 3.93 KB
/
test_light_source.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
from pytest import approx
def test_register_conversion_function():
from solcore.light_source.light_source import (
REGISTERED_CONVERTERS,
power_density_per_nm,
)
name = power_density_per_nm.__name__
assert name in REGISTERED_CONVERTERS
assert REGISTERED_CONVERTERS[name] == power_density_per_nm
def test_power_density_per_nm(wavelength, gauss_spectrum):
from solcore.light_source.light_source import power_density_per_nm
expected, sp_fun = gauss_spectrum
actual = power_density_per_nm(sp_fun, wavelength)
assert actual == approx(expected)
def test_photon_flux_per_nm(wavelength, gauss_spectrum):
from solcore.light_source.light_source import photon_flux_per_nm
from solcore.constants import c, h
sp, sp_fun = gauss_spectrum
expected = sp / (c * h * 1e9 / wavelength)
actual = photon_flux_per_nm(sp_fun, wavelength)
assert actual == approx(expected)
def test_power_density_per_m(wavelength, gauss_spectrum):
from solcore.light_source.light_source import power_density_per_m
import numpy as np
sp, sp_fun = gauss_spectrum
expected = np.trapz(sp, wavelength)
wl_m = wavelength * 1.0e-9
actual = power_density_per_m(sp_fun, wl_m)
actual = np.trapz(actual, wl_m)
assert actual == approx(expected)
def test_photon_flux_per_m(wavelength, gauss_spectrum):
from solcore.light_source.light_source import photon_flux_per_m
from solcore.constants import c, h
sp, sp_fun = gauss_spectrum
wl_m = wavelength * 1e-9
expected = sp / (c * h / wavelength)
actual = photon_flux_per_m(sp_fun, wl_m)
assert actual == approx(expected)
def test_power_density_per_ev(wavelength, gauss_spectrum):
from solcore.light_source.light_source import power_density_per_ev
from solcore import spectral_conversion_nm_ev
sp, sp_fun = gauss_spectrum
ev, expected = spectral_conversion_nm_ev(wavelength, sp)
actual = power_density_per_ev(sp_fun, ev)
assert actual == approx(expected)
def test_photon_flux_per_ev(wavelength, gauss_spectrum):
from solcore.light_source.light_source import photon_flux_per_ev
from solcore import spectral_conversion_nm_ev
from solcore.constants import q
sp, sp_fun = gauss_spectrum
ev, expected = spectral_conversion_nm_ev(wavelength, sp)
actual = photon_flux_per_ev(sp_fun, ev)
assert actual * q * ev == approx(expected)
def test_power_density_per_joule(wavelength, gauss_spectrum):
from solcore.light_source.light_source import power_density_per_joule
from solcore import spectral_conversion_nm_ev
from solcore.constants import q
sp, sp_fun = gauss_spectrum
ev, expected = spectral_conversion_nm_ev(wavelength, sp)
actual = power_density_per_joule(sp_fun, ev * q)
assert actual * q == approx(expected)
def test_photon_flux_per_joule(wavelength, gauss_spectrum):
from solcore.light_source.light_source import photon_flux_per_joule
from solcore import spectral_conversion_nm_ev
from solcore.constants import q
sp, sp_fun = gauss_spectrum
ev, expected = spectral_conversion_nm_ev(wavelength, sp)
actual = photon_flux_per_joule(sp_fun, ev * q)
assert actual * q ** 2 * ev == approx(expected)
def test_power_density_per_hz(wavelength, gauss_spectrum):
from solcore.light_source.light_source import power_density_per_hz
from solcore import spectral_conversion_nm_hz
sp, sp_fun = gauss_spectrum
hz, expected = spectral_conversion_nm_hz(wavelength, sp)
actual = power_density_per_hz(sp_fun, hz)
assert actual == approx(expected)
def test_photon_flux_per_hz(wavelength, gauss_spectrum):
from solcore.light_source.light_source import photon_flux_per_hz
from solcore import spectral_conversion_nm_hz
from solcore.constants import h
sp, sp_fun = gauss_spectrum
hz, expected = spectral_conversion_nm_hz(wavelength, sp)
actual = photon_flux_per_hz(sp_fun, hz)
assert actual * h * hz == approx(expected)