File size: 17,127 Bytes
b233cf7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
from __future__ import annotations

import logging
from pathlib import Path

import sys
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))

from pino.registry import AromaRegistry

logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
logger = logging.getLogger("build_registry")

# Curated list of ~150 common fragrance materials.  Approximate room-temperature
# vapor pressures (Pa), boiling points (K), and odor thresholds (ug/m3) are
# literature estimates.  Natural oils are included as multi-component entries;
# they may fail fragmentation, which is acceptable because the registry
# builder skips unresolvable entries.
AROMA_CHEMICALS = [
    # Solvents / carriers
    {"cas": "64-17-5", "vapor_pressure_pa": 7900.0, "boiling_point_k": 351.45, "odor_threshold_ug_m3": 250000.0},
    {"cas": "67-63-0", "vapor_pressure_pa": 5700.0, "boiling_point_k": 355.5, "odor_threshold_ug_m3": 400000.0},
    {"cas": "25265-71-8", "vapor_pressure_pa": 1.0, "boiling_point_k": 503.0, "odor_threshold_ug_m3": 5000.0},
    {"cas": "120-51-4", "vapor_pressure_pa": 0.02, "boiling_point_k": 597.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "84-66-2", "vapor_pressure_pa": 0.002, "boiling_point_k": 568.0, "odor_threshold_ug_m3": 100.0},
    # Citrus / terpenes
    {"cas": "5989-27-5", "vapor_pressure_pa": 195.0, "boiling_point_k": 449.0, "odor_threshold_ug_m3": 30.0},
    {"cas": "138-86-3", "vapor_pressure_pa": 195.0, "boiling_point_k": 449.0, "odor_threshold_ug_m3": 30.0},
    {"cas": "5392-40-5", "vapor_pressure_pa": 25.0, "boiling_point_k": 501.0, "odor_threshold_ug_m3": 5.0},
    {"cas": "106-24-1", "vapor_pressure_pa": 2.0, "boiling_point_k": 503.0, "odor_threshold_ug_m3": 10.0},
    {"cas": "106-25-2", "vapor_pressure_pa": 2.0, "boiling_point_k": 503.0, "odor_threshold_ug_m3": 10.0},
    {"cas": "106-22-9", "vapor_pressure_pa": 1.0, "boiling_point_k": 493.0, "odor_threshold_ug_m3": 5.0},
    {"cas": "624-15-7", "vapor_pressure_pa": 1.5, "boiling_point_k": 503.0, "odor_threshold_ug_m3": 10.0},
    {"cas": "111-71-7", "vapor_pressure_pa": 12.0, "boiling_point_k": 477.0, "odor_threshold_ug_m3": 10.0},
    {"cas": "99-85-4", "vapor_pressure_pa": 160.0, "boiling_point_k": 446.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "68647-72-3", "vapor_pressure_pa": 55.0, "boiling_point_k": 453.0, "odor_threshold_ug_m3": 30.0},
    {"cas": "93-58-3", "vapor_pressure_pa": 14.0, "boiling_point_k": 472.0, "odor_threshold_ug_m3": 10.0},
    {"cas": "115-95-7", "vapor_pressure_pa": 0.1, "boiling_point_k": 498.0, "odor_threshold_ug_m3": 1.0},
    {"cas": "105-87-3", "vapor_pressure_pa": 1.0, "boiling_point_k": 493.0, "odor_threshold_ug_m3": 5.0},
    {"cas": "150-84-5", "vapor_pressure_pa": 1.0, "boiling_point_k": 493.0, "odor_threshold_ug_m3": 5.0},
    {"cas": "140-11-4", "vapor_pressure_pa": 2.0, "boiling_point_k": 486.0, "odor_threshold_ug_m3": 10.0},
    {"cas": "103-45-7", "vapor_pressure_pa": 0.5, "boiling_point_k": 499.0, "odor_threshold_ug_m3": 5.0},
    # Floral alcohols / aldehydes
    {"cas": "78-70-6", "vapor_pressure_pa": 22.0, "boiling_point_k": 471.0, "odor_threshold_ug_m3": 6.0},
    {"cas": "60-12-8", "vapor_pressure_pa": 3.0, "boiling_point_k": 488.0, "odor_threshold_ug_m3": 10.0},
    {"cas": "100-51-6", "vapor_pressure_pa": 5.0, "boiling_point_k": 478.0, "odor_threshold_ug_m3": 20.0},
    {"cas": "104-54-1", "vapor_pressure_pa": 1.0, "boiling_point_k": 516.0, "odor_threshold_ug_m3": 10.0},
    {"cas": "104-55-2", "vapor_pressure_pa": 2.0, "boiling_point_k": 531.0, "odor_threshold_ug_m3": 5.0},
    {"cas": "124-13-0", "vapor_pressure_pa": 120.0, "boiling_point_k": 421.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "112-31-2", "vapor_pressure_pa": 18.0, "boiling_point_k": 480.0, "odor_threshold_ug_m3": 10.0},
    {"cas": "112-54-9", "vapor_pressure_pa": 1.5, "boiling_point_k": 520.0, "odor_threshold_ug_m3": 1.0},
    {"cas": "122-40-7", "vapor_pressure_pa": 0.8, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 1.0},
    {"cas": "101-86-0", "vapor_pressure_pa": 0.1, "boiling_point_k": 548.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "80-54-6", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 1.0},
    {"cas": "31906-04-4", "vapor_pressure_pa": 0.05, "boiling_point_k": 533.0, "odor_threshold_ug_m3": 0.5},
    # Jasmine / muguet / ionones
    {"cas": "24851-98-7", "vapor_pressure_pa": 1.2, "boiling_point_k": 548.0, "odor_threshold_ug_m3": 1.0},
    {"cas": "1211-29-0", "vapor_pressure_pa": 0.05, "boiling_point_k": 573.0, "odor_threshold_ug_m3": 0.2},
    {"cas": "18871-14-9", "vapor_pressure_pa": 0.3, "boiling_point_k": 573.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "127-41-3", "vapor_pressure_pa": 0.2, "boiling_point_k": 518.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "14901-07-6", "vapor_pressure_pa": 0.2, "boiling_point_k": 518.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "127-51-5", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 0.3},
    {"cas": "1335-46-2", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 0.3},
    {"cas": "23726-91-0", "vapor_pressure_pa": 0.05, "boiling_point_k": 533.0, "odor_threshold_ug_m3": 0.1},
    {"cas": "43052-87-5", "vapor_pressure_pa": 0.05, "boiling_point_k": 533.0, "odor_threshold_ug_m3": 0.1},
    {"cas": "706-14-9", "vapor_pressure_pa": 1.0, "boiling_point_k": 450.0, "odor_threshold_ug_m3": 5.0},
    {"cas": "713-95-1", "vapor_pressure_pa": 0.2, "boiling_point_k": 478.0, "odor_threshold_ug_m3": 1.0},
    # Musks
    {"cas": "1222-05-5", "vapor_pressure_pa": 0.05, "boiling_point_k": 623.0, "odor_threshold_ug_m3": 0.1},
    {"cas": "21145-77-7", "vapor_pressure_pa": 0.01, "boiling_point_k": 593.0, "odor_threshold_ug_m3": 0.05},
    {"cas": "6790-58-5", "vapor_pressure_pa": 0.01, "boiling_point_k": 573.0, "odor_threshold_ug_m3": 0.02},
    {"cas": "54464-57-2", "vapor_pressure_pa": 0.01, "boiling_point_k": 573.0, "odor_threshold_ug_m3": 0.05},
    {"cas": "81-14-1", "vapor_pressure_pa": 0.004, "boiling_point_k": 613.0, "odor_threshold_ug_m3": 0.02},
    {"cas": "81-15-2", "vapor_pressure_pa": 0.001, "boiling_point_k": 603.0, "odor_threshold_ug_m3": 0.05},
    {"cas": "105-95-3", "vapor_pressure_pa": 0.003, "boiling_point_k": 573.0, "odor_threshold_ug_m3": 0.02},
    {"cas": "541-91-3", "vapor_pressure_pa": 0.02, "boiling_point_k": 600.0, "odor_threshold_ug_m3": 0.05},
    {"cas": "83-66-9", "vapor_pressure_pa": 0.001, "boiling_point_k": 583.0, "odor_threshold_ug_m3": 0.05},
    # Woods / ambers
    {"cas": "77-53-2", "vapor_pressure_pa": 0.5, "boiling_point_k": 549.0, "odor_threshold_ug_m3": 1.0},
    {"cas": "77-42-9", "vapor_pressure_pa": 0.3, "boiling_point_k": 553.0, "odor_threshold_ug_m3": 1.0},
    {"cas": "19870-74-7", "vapor_pressure_pa": 0.05, "boiling_point_k": 563.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "32388-55-9", "vapor_pressure_pa": 0.05, "boiling_point_k": 563.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "33704-61-9", "vapor_pressure_pa": 0.01, "boiling_point_k": 573.0, "odor_threshold_ug_m3": 0.2},
    {"cas": "198404-98-7", "vapor_pressure_pa": 0.005, "boiling_point_k": 583.0, "odor_threshold_ug_m3": 0.1},
    {"cas": "115-71-9", "vapor_pressure_pa": 1.5, "boiling_point_k": 477.0, "odor_threshold_ug_m3": 5.0},
    {"cas": "87-44-5", "vapor_pressure_pa": 6.0, "boiling_point_k": 447.0, "odor_threshold_ug_m3": 10.0},
    # Spicy / gourmand
    {"cas": "97-53-0", "vapor_pressure_pa": 2.0, "boiling_point_k": 527.0, "odor_threshold_ug_m3": 5.0},
    {"cas": "97-54-1", "vapor_pressure_pa": 0.5, "boiling_point_k": 543.0, "odor_threshold_ug_m3": 1.0},
    {"cas": "121-33-5", "vapor_pressure_pa": 0.01, "boiling_point_k": 558.0, "odor_threshold_ug_m3": 0.2},
    {"cas": "91-64-5", "vapor_pressure_pa": 0.05, "boiling_point_k": 574.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "120-57-0", "vapor_pressure_pa": 0.1, "boiling_point_k": 531.0, "odor_threshold_ug_m3": 1.0},
    {"cas": "119-36-8", "vapor_pressure_pa": 8.0, "boiling_point_k": 449.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "118-58-1", "vapor_pressure_pa": 0.01, "boiling_point_k": 586.0, "odor_threshold_ug_m3": 5.0},
    {"cas": "90-05-1", "vapor_pressure_pa": 5.0, "boiling_point_k": 477.0, "odor_threshold_ug_m3": 10.0},
    {"cas": "120-72-9", "vapor_pressure_pa": 0.5, "boiling_point_k": 540.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "83-34-1", "vapor_pressure_pa": 0.5, "boiling_point_k": 540.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "134-20-3", "vapor_pressure_pa": 0.05, "boiling_point_k": 546.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "103-82-2", "vapor_pressure_pa": 0.05, "boiling_point_k": 553.0, "odor_threshold_ug_m3": 1.0},
    # Naturals (may fail fragmentation; registry builder will skip them)
    {"cas": "8000-27-9", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8006-90-4", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8008-57-9", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8008-56-8", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8007-75-8", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8000-28-0", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8014-09-3", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8016-96-4", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8006-87-9", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8002-73-1", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8022-96-6", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8006-81-3", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8000-46-2", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8014-17-3", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8016-38-4", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8007-01-0", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8000-48-4", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8000-25-7", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "68647-73-4", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8006-78-8", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8000-34-8", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8007-08-7", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8006-84-6", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8007-70-3", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8007-02-1", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8000-29-1", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8006-75-5", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8008-31-9", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8008-79-5", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8000-66-6", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8002-66-2", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8015-91-6", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8008-45-5", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8006-82-4", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8016-20-4", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8008-26-2", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "72968-86-0", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8015-73-4", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8022-56-8", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8007-46-3", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8007-11-2", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8014-71-9", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8024-12-2", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "68855-99-2", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "68606-83-1", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8023-91-4", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8023-89-9", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8016-36-2", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8016-37-3", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8046-42-0", "vapor_pressure_pa": 0.2, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "9000-05-9", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "9000-50-4", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "68606-12-6", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8024-08-6", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "9000-64-0", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8007-00-9", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "90045-23-1", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "89958-31-6", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8023-75-2", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8031-03-6", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "8024-05-3", "vapor_pressure_pa": 0.1, "boiling_point_k": 523.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "76-22-2", "vapor_pressure_pa": 10.0, "boiling_point_k": 481.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "2216-51-5", "vapor_pressure_pa": 5.0, "boiling_point_k": 489.0, "odor_threshold_ug_m3": 50.0},
    {"cas": "16409-43-1", "vapor_pressure_pa": 0.5, "boiling_point_k": 480.0, "odor_threshold_ug_m3": 5.0},
    {"cas": "6259-76-3", "vapor_pressure_pa": 0.05, "boiling_point_k": 533.0, "odor_threshold_ug_m3": 5.0},
    {"cas": "4602-84-0", "vapor_pressure_pa": 0.001, "boiling_point_k": 543.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "7212-44-4", "vapor_pressure_pa": 0.001, "boiling_point_k": 543.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "515-69-5", "vapor_pressure_pa": 0.001, "boiling_point_k": 543.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "5986-55-0", "vapor_pressure_pa": 0.001, "boiling_point_k": 543.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "515-03-7", "vapor_pressure_pa": 0.001, "boiling_point_k": 543.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "7779-50-2", "vapor_pressure_pa": 0.001, "boiling_point_k": 573.0, "odor_threshold_ug_m3": 0.5},
    {"cas": "104-67-6", "vapor_pressure_pa": 0.3, "boiling_point_k": 480.0, "odor_threshold_ug_m3": 1.0},
    {"cas": "104-61-0", "vapor_pressure_pa": 0.3, "boiling_point_k": 480.0, "odor_threshold_ug_m3": 1.0},
]

logger.info("Starting registry build with %d entries", len(AROMA_CHEMICALS))
with AromaRegistry() as registry:
    failed = registry.populate(AROMA_CHEMICALS, skip_failures=True)
    count = registry._conn.execute(
        "SELECT COUNT(*) FROM aroma_chemicals"
    ).fetchone()[0]
    logger.info("Registry built: %d entries, %d failures", count, len(failed))
    if failed:
        logger.warning("Failed entries: %s", [f["cas"] for f in failed])