nx_perceptual_profile.nx source
↩ module page · 349 lines · 18966 B
1// nx_perceptual_profile.nx -- sealed multi-species perceptual taxonomy.
2//
3// module: nishi-core.perception.profile
4// depends: nishi-core.io.syscalls
5// disk_kb: 6
6// capability: PERCEPTION
7// wired_status: FULLY_WIRED
8//
9// license_tier: PUBLIC_NISHI_SUBSTRATE
10// genealogy_id: feedback-multi-species-perceptual-substrate-not-anthropocentric_2026 +
11// heffner_heffner_1985_hearing_ranges_mammals +
12// jacobs_1993_color_vision_mammals +
13// nagel_1974_what_is_it_like_to_be_a_bat +
14// macaulay_library_cornell_lab +
15// xeno_canto_community
16//
17// Per cardinal [[feedback-multi-species-perceptual-substrate-not-anthropocentric]]:
18// THIS IS A TYPE-LEVEL PRIMITIVE. Implementation IS the sealed
19// enum + parameter accessors. Marked FULLY_WIRED honestly because
20// no further execution path exists for the primitive itself -- its
21// job is to provide the substrate's per-species perceptual taxonomy
22// for downstream composition into nx_voice_codec / nx_video_codec_pmesh
23// / nx_synthesis_engine / nx_perceptual_judge / nx_perceptual_dataset.
24//
25// Every audio + video + sensor primitive in Nishi treats the perceptual
26// target as a PARAMETER referencing one of these profiles. Default is
27// permissive (preserve all bits above noise floor); filtering occurs
28// ONLY at the final render stage based on the explicitly-declared
29// nx_perceptual_profile in the pathway manifest.
30
31import "nx_syscalls.nx"
32
33// ===== PerceptualProfile sealed enum ==============================
34//
35// Ordered roughly by phylogenetic family + commercial relevance.
36// Reserved gaps allow additive insertion of new profiles without
37// renumbering existing identifiers.
38
39const NX_PERCEPT_NONE: i64 = 0 // no perceptual target declared
40const NX_PERCEPT_HUMAN_NORMAL: i64 = 1 // baseline trichromat, 20Hz-20kHz
41const NX_PERCEPT_HUMAN_PRESBYCUSIS: i64 = 2 // age-related HF loss profile
42
43// Canine -- breed-group granularity matters because selective breeding
44// has shaped both prey-focus and visual/auditory emphasis.
45const NX_PERCEPT_DOG_VIZSLA: i64 = 10 // upland bird specialist
46const NX_PERCEPT_DOG_GSP: i64 = 11 // upland bird specialist
47const NX_PERCEPT_DOG_WEIMARANER: i64 = 12 // upland bird specialist
48const NX_PERCEPT_DOG_POINTER: i64 = 13 // upland bird specialist
49const NX_PERCEPT_DOG_SETTER: i64 = 14 // upland bird specialist
50const NX_PERCEPT_DOG_RETRIEVER: i64 = 15 // waterfowl specialist
51const NX_PERCEPT_DOG_TERRIER: i64 = 16 // vermin specialist, ultrasonic emphasis
52const NX_PERCEPT_DOG_SIGHTHOUND: i64 = 17 // motion-emphasis visual
53const NX_PERCEPT_DOG_SCENTHOUND: i64 = 18 // beagle/basset/foxhound, scent-dominant
54const NX_PERCEPT_DOG_HERDING: i64 = 19 // border collie, livestock-attuned
55const NX_PERCEPT_DOG_GENERIC: i64 = 20 // fallback canine profile
56
57// Feline
58const NX_PERCEPT_CAT_DOMESTIC: i64 = 30
59const NX_PERCEPT_CAT_FERAL: i64 = 31
60
61// Livestock -- acoustic welfare monitoring market
62const NX_PERCEPT_CATTLE: i64 = 40
63const NX_PERCEPT_SHEEP: i64 = 41
64const NX_PERCEPT_GOAT: i64 = 42
65const NX_PERCEPT_PIG: i64 = 43
66const NX_PERCEPT_HORSE: i64 = 44
67
68// Avian -- 4-color UV-capable vision changes the visual envelope
69const NX_PERCEPT_CHICKEN: i64 = 50 // poultry welfare
70const NX_PERCEPT_SONGBIRD_PASSERINE: i64 = 51 // generic perching bird
71const NX_PERCEPT_RAPTOR: i64 = 52
72const NX_PERCEPT_WATERFOWL_DUCK: i64 = 53
73const NX_PERCEPT_WATERFOWL_GOOSE: i64 = 54
74const NX_PERCEPT_GAMEBIRD_PHEASANT: i64 = 55 // prey for upland-bird dogs
75const NX_PERCEPT_GAMEBIRD_QUAIL: i64 = 56
76
77// Insecta + arthropoda -- vibration-dominant, UV-shifted vision
78const NX_PERCEPT_HONEYBEE: i64 = 70 // colony health acoustics
79const NX_PERCEPT_BUMBLEBEE: i64 = 71
80const NX_PERCEPT_MANTIS_SHRIMP: i64 = 72 // research curiosity, 16 photoreceptors
81
82// Small mammals -- pet rodents + lab rodents + pest control
83const NX_PERCEPT_MOUSE_LAB: i64 = 80 // 1kHz-110kHz, USV research relevant
84const NX_PERCEPT_RAT_LAB: i64 = 81
85const NX_PERCEPT_HAMSTER: i64 = 82
86const NX_PERCEPT_RABBIT_DOMESTIC: i64 = 83
87const NX_PERCEPT_SQUIRREL: i64 = 84 // prey for upland-bird dogs
88
89// Echolocating + bioacoustic specialists
90const NX_PERCEPT_BAT_GENERIC: i64 = 90
91const NX_PERCEPT_DOLPHIN_BOTTLENOSE: i64 = 91
92const NX_PERCEPT_PORPOISE: i64 = 92
93
94// Aquaculture / fish welfare
95const NX_PERCEPT_FISH_SALMONID: i64 = 100
96const NX_PERCEPT_FISH_TILAPIA: i64 = 101
97
98// Special sentinel for "preserve everything; render-time target unspecified"
99const NX_PERCEPT_PRESERVE_ALL: i64 = 9999
100
101// ===== Profile name accessor ======================================
102
103func nx_perceptual_profile_name(p: i64) -> *u8 {
104 if p == NX_PERCEPT_NONE { return "NONE" }
105 if p == NX_PERCEPT_HUMAN_NORMAL { return "HUMAN_NORMAL" }
106 if p == NX_PERCEPT_HUMAN_PRESBYCUSIS { return "HUMAN_PRESBYCUSIS" }
107 if p == NX_PERCEPT_DOG_VIZSLA { return "DOG_VIZSLA" }
108 if p == NX_PERCEPT_DOG_GSP { return "DOG_GSP" }
109 if p == NX_PERCEPT_DOG_WEIMARANER { return "DOG_WEIMARANER" }
110 if p == NX_PERCEPT_DOG_POINTER { return "DOG_POINTER" }
111 if p == NX_PERCEPT_DOG_SETTER { return "DOG_SETTER" }
112 if p == NX_PERCEPT_DOG_RETRIEVER { return "DOG_RETRIEVER" }
113 if p == NX_PERCEPT_DOG_TERRIER { return "DOG_TERRIER" }
114 if p == NX_PERCEPT_DOG_SIGHTHOUND { return "DOG_SIGHTHOUND" }
115 if p == NX_PERCEPT_DOG_SCENTHOUND { return "DOG_SCENTHOUND" }
116 if p == NX_PERCEPT_DOG_HERDING { return "DOG_HERDING" }
117 if p == NX_PERCEPT_DOG_GENERIC { return "DOG_GENERIC" }
118 if p == NX_PERCEPT_CAT_DOMESTIC { return "CAT_DOMESTIC" }
119 if p == NX_PERCEPT_CAT_FERAL { return "CAT_FERAL" }
120 if p == NX_PERCEPT_CATTLE { return "CATTLE" }
121 if p == NX_PERCEPT_SHEEP { return "SHEEP" }
122 if p == NX_PERCEPT_GOAT { return "GOAT" }
123 if p == NX_PERCEPT_PIG { return "PIG" }
124 if p == NX_PERCEPT_HORSE { return "HORSE" }
125 if p == NX_PERCEPT_CHICKEN { return "CHICKEN" }
126 if p == NX_PERCEPT_SONGBIRD_PASSERINE { return "SONGBIRD_PASSERINE" }
127 if p == NX_PERCEPT_RAPTOR { return "RAPTOR" }
128 if p == NX_PERCEPT_WATERFOWL_DUCK { return "WATERFOWL_DUCK" }
129 if p == NX_PERCEPT_WATERFOWL_GOOSE { return "WATERFOWL_GOOSE" }
130 if p == NX_PERCEPT_GAMEBIRD_PHEASANT { return "GAMEBIRD_PHEASANT" }
131 if p == NX_PERCEPT_GAMEBIRD_QUAIL { return "GAMEBIRD_QUAIL" }
132 if p == NX_PERCEPT_HONEYBEE { return "HONEYBEE" }
133 if p == NX_PERCEPT_BUMBLEBEE { return "BUMBLEBEE" }
134 if p == NX_PERCEPT_MANTIS_SHRIMP { return "MANTIS_SHRIMP" }
135 if p == NX_PERCEPT_MOUSE_LAB { return "MOUSE_LAB" }
136 if p == NX_PERCEPT_RAT_LAB { return "RAT_LAB" }
137 if p == NX_PERCEPT_HAMSTER { return "HAMSTER" }
138 if p == NX_PERCEPT_RABBIT_DOMESTIC { return "RABBIT_DOMESTIC" }
139 if p == NX_PERCEPT_SQUIRREL { return "SQUIRREL" }
140 if p == NX_PERCEPT_BAT_GENERIC { return "BAT_GENERIC" }
141 if p == NX_PERCEPT_DOLPHIN_BOTTLENOSE { return "DOLPHIN_BOTTLENOSE" }
142 if p == NX_PERCEPT_PORPOISE { return "PORPOISE" }
143 if p == NX_PERCEPT_FISH_SALMONID { return "FISH_SALMONID" }
144 if p == NX_PERCEPT_FISH_TILAPIA { return "FISH_TILAPIA" }
145 if p == NX_PERCEPT_PRESERVE_ALL { return "PRESERVE_ALL" }
146 return "UNKNOWN"
147}
148
149// ===== Hearing range accessors (Hz) ===============================
150//
151// Sources cited in genealogy_id header. Values are 60-dB SPL
152// audibility threshold ranges from comparative-mammalian-hearing
153// literature (Heffner & Heffner 1985 et seq.) where available; bird
154// ranges from Dooling et al; insect from Schul / Hennig / Robert.
155//
156// Numbers are SUBSTRATE-LEVEL defaults. Per-individual variation is
157// large; production use should override per-recording when available.
158
159func nx_perceptual_profile_hearing_hz_min(p: i64) -> i64 {
160 if p == NX_PERCEPT_HUMAN_NORMAL { return 20 }
161 if p == NX_PERCEPT_HUMAN_PRESBYCUSIS { return 30 }
162 if p == NX_PERCEPT_DOG_VIZSLA { return 40 }
163 if p == NX_PERCEPT_DOG_GSP { return 40 }
164 if p == NX_PERCEPT_DOG_WEIMARANER { return 40 }
165 if p == NX_PERCEPT_DOG_POINTER { return 40 }
166 if p == NX_PERCEPT_DOG_SETTER { return 40 }
167 if p == NX_PERCEPT_DOG_RETRIEVER { return 40 }
168 if p == NX_PERCEPT_DOG_TERRIER { return 40 }
169 if p == NX_PERCEPT_DOG_SIGHTHOUND { return 40 }
170 if p == NX_PERCEPT_DOG_SCENTHOUND { return 40 }
171 if p == NX_PERCEPT_DOG_HERDING { return 40 }
172 if p == NX_PERCEPT_DOG_GENERIC { return 40 }
173 if p == NX_PERCEPT_CAT_DOMESTIC { return 48 }
174 if p == NX_PERCEPT_CAT_FERAL { return 48 }
175 if p == NX_PERCEPT_CATTLE { return 23 }
176 if p == NX_PERCEPT_SHEEP { return 100 }
177 if p == NX_PERCEPT_GOAT { return 78 }
178 if p == NX_PERCEPT_PIG { return 42 }
179 if p == NX_PERCEPT_HORSE { return 55 }
180 if p == NX_PERCEPT_CHICKEN { return 60 }
181 if p == NX_PERCEPT_SONGBIRD_PASSERINE { return 250 }
182 if p == NX_PERCEPT_RAPTOR { return 100 }
183 if p == NX_PERCEPT_WATERFOWL_DUCK { return 200 }
184 if p == NX_PERCEPT_WATERFOWL_GOOSE { return 150 }
185 if p == NX_PERCEPT_GAMEBIRD_PHEASANT { return 250 }
186 if p == NX_PERCEPT_GAMEBIRD_QUAIL { return 250 }
187 if p == NX_PERCEPT_HONEYBEE { return 10 }
188 if p == NX_PERCEPT_BUMBLEBEE { return 10 }
189 if p == NX_PERCEPT_MOUSE_LAB { return 1000 }
190 if p == NX_PERCEPT_RAT_LAB { return 250 }
191 if p == NX_PERCEPT_HAMSTER { return 100 }
192 if p == NX_PERCEPT_RABBIT_DOMESTIC { return 96 }
193 if p == NX_PERCEPT_SQUIRREL { return 113 }
194 if p == NX_PERCEPT_BAT_GENERIC { return 1000 }
195 if p == NX_PERCEPT_DOLPHIN_BOTTLENOSE { return 75 }
196 if p == NX_PERCEPT_PORPOISE { return 75 }
197 if p == NX_PERCEPT_FISH_SALMONID { return 50 }
198 if p == NX_PERCEPT_FISH_TILAPIA { return 100 }
199 if p == NX_PERCEPT_PRESERVE_ALL { return 0 }
200 return 20
201}
202
203func nx_perceptual_profile_hearing_hz_max(p: i64) -> i64 {
204 if p == NX_PERCEPT_HUMAN_NORMAL { return 20000 }
205 if p == NX_PERCEPT_HUMAN_PRESBYCUSIS { return 8000 }
206 if p == NX_PERCEPT_DOG_VIZSLA { return 60000 }
207 if p == NX_PERCEPT_DOG_GSP { return 60000 }
208 if p == NX_PERCEPT_DOG_WEIMARANER { return 60000 }
209 if p == NX_PERCEPT_DOG_POINTER { return 60000 }
210 if p == NX_PERCEPT_DOG_SETTER { return 60000 }
211 if p == NX_PERCEPT_DOG_RETRIEVER { return 60000 }
212 if p == NX_PERCEPT_DOG_TERRIER { return 65000 }
213 if p == NX_PERCEPT_DOG_SIGHTHOUND { return 60000 }
214 if p == NX_PERCEPT_DOG_SCENTHOUND { return 60000 }
215 if p == NX_PERCEPT_DOG_HERDING { return 60000 }
216 if p == NX_PERCEPT_DOG_GENERIC { return 60000 }
217 if p == NX_PERCEPT_CAT_DOMESTIC { return 85000 }
218 if p == NX_PERCEPT_CAT_FERAL { return 85000 }
219 if p == NX_PERCEPT_CATTLE { return 35000 }
220 if p == NX_PERCEPT_SHEEP { return 30000 }
221 if p == NX_PERCEPT_GOAT { return 37000 }
222 if p == NX_PERCEPT_PIG { return 40500 }
223 if p == NX_PERCEPT_HORSE { return 33500 }
224 if p == NX_PERCEPT_CHICKEN { return 12000 }
225 if p == NX_PERCEPT_SONGBIRD_PASSERINE { return 12000 }
226 if p == NX_PERCEPT_RAPTOR { return 12000 }
227 if p == NX_PERCEPT_WATERFOWL_DUCK { return 10000 }
228 if p == NX_PERCEPT_WATERFOWL_GOOSE { return 8000 }
229 if p == NX_PERCEPT_GAMEBIRD_PHEASANT { return 11000 }
230 if p == NX_PERCEPT_GAMEBIRD_QUAIL { return 11000 }
231 if p == NX_PERCEPT_HONEYBEE { return 500 }
232 if p == NX_PERCEPT_BUMBLEBEE { return 500 }
233 if p == NX_PERCEPT_MOUSE_LAB { return 110000 }
234 if p == NX_PERCEPT_RAT_LAB { return 76000 }
235 if p == NX_PERCEPT_HAMSTER { return 96500 }
236 if p == NX_PERCEPT_RABBIT_DOMESTIC { return 49000 }
237 if p == NX_PERCEPT_SQUIRREL { return 49000 }
238 if p == NX_PERCEPT_BAT_GENERIC { return 200000 }
239 if p == NX_PERCEPT_DOLPHIN_BOTTLENOSE { return 150000 }
240 if p == NX_PERCEPT_PORPOISE { return 160000 }
241 if p == NX_PERCEPT_FISH_SALMONID { return 600 }
242 if p == NX_PERCEPT_FISH_TILAPIA { return 800 }
243 if p == NX_PERCEPT_PRESERVE_ALL { return 1000000 }
244 return 20000
245}
246
247// ===== Color receptor count accessor ==============================
248//
249// 1 = monochromat, 2 = dichromat, 3 = trichromat, 4 = tetrachromat
250// (UV-capable), >4 = exotic (mantis shrimp).
251// Substrate uses this to decide gamut + channel-count when rendering
252// visual output per declared profile.
253
254func nx_perceptual_profile_color_receptor_count(p: i64) -> i64 {
255 if p == NX_PERCEPT_HUMAN_NORMAL { return 3 }
256 if p == NX_PERCEPT_HUMAN_PRESBYCUSIS { return 3 }
257 if p == NX_PERCEPT_DOG_VIZSLA { return 2 }
258 if p == NX_PERCEPT_DOG_GSP { return 2 }
259 if p == NX_PERCEPT_DOG_WEIMARANER { return 2 }
260 if p == NX_PERCEPT_DOG_POINTER { return 2 }
261 if p == NX_PERCEPT_DOG_SETTER { return 2 }
262 if p == NX_PERCEPT_DOG_RETRIEVER { return 2 }
263 if p == NX_PERCEPT_DOG_TERRIER { return 2 }
264 if p == NX_PERCEPT_DOG_SIGHTHOUND { return 2 }
265 if p == NX_PERCEPT_DOG_SCENTHOUND { return 2 }
266 if p == NX_PERCEPT_DOG_HERDING { return 2 }
267 if p == NX_PERCEPT_DOG_GENERIC { return 2 }
268 if p == NX_PERCEPT_CAT_DOMESTIC { return 2 }
269 if p == NX_PERCEPT_CAT_FERAL { return 2 }
270 if p == NX_PERCEPT_CATTLE { return 2 }
271 if p == NX_PERCEPT_SHEEP { return 2 }
272 if p == NX_PERCEPT_GOAT { return 2 }
273 if p == NX_PERCEPT_PIG { return 2 }
274 if p == NX_PERCEPT_HORSE { return 2 }
275 if p == NX_PERCEPT_CHICKEN { return 4 }
276 if p == NX_PERCEPT_SONGBIRD_PASSERINE { return 4 }
277 if p == NX_PERCEPT_RAPTOR { return 4 }
278 if p == NX_PERCEPT_WATERFOWL_DUCK { return 4 }
279 if p == NX_PERCEPT_WATERFOWL_GOOSE { return 4 }
280 if p == NX_PERCEPT_GAMEBIRD_PHEASANT { return 4 }
281 if p == NX_PERCEPT_GAMEBIRD_QUAIL { return 4 }
282 if p == NX_PERCEPT_HONEYBEE { return 3 }
283 if p == NX_PERCEPT_BUMBLEBEE { return 3 }
284 if p == NX_PERCEPT_MANTIS_SHRIMP { return 16 }
285 if p == NX_PERCEPT_MOUSE_LAB { return 2 }
286 if p == NX_PERCEPT_RAT_LAB { return 2 }
287 if p == NX_PERCEPT_HAMSTER { return 2 }
288 if p == NX_PERCEPT_RABBIT_DOMESTIC { return 2 }
289 if p == NX_PERCEPT_SQUIRREL { return 2 }
290 if p == NX_PERCEPT_BAT_GENERIC { return 1 }
291 if p == NX_PERCEPT_DOLPHIN_BOTTLENOSE { return 1 }
292 if p == NX_PERCEPT_PORPOISE { return 1 }
293 if p == NX_PERCEPT_FISH_SALMONID { return 3 }
294 if p == NX_PERCEPT_FISH_TILAPIA { return 3 }
295 if p == NX_PERCEPT_PRESERVE_ALL { return 16 }
296 return 3
297}
298
299// ===== Flicker fusion threshold (Hz) ==============================
300//
301// Frame rate above which the visual system perceives motion as
302// continuous. Substrate uses this to decide minimum frame rate when
303// rendering visual content per declared profile. Pigeons / chickens
304// see fluorescent-light flicker invisible to humans; this matters
305// for animal-facing displays.
306
307func nx_perceptual_profile_flicker_fusion_hz(p: i64) -> i64 {
308 if p == NX_PERCEPT_HUMAN_NORMAL { return 60 }
309 if p == NX_PERCEPT_HUMAN_PRESBYCUSIS { return 50 }
310 if p == NX_PERCEPT_DOG_VIZSLA { return 75 }
311 if p == NX_PERCEPT_DOG_GSP { return 75 }
312 if p == NX_PERCEPT_DOG_WEIMARANER { return 75 }
313 if p == NX_PERCEPT_DOG_POINTER { return 75 }
314 if p == NX_PERCEPT_DOG_SETTER { return 75 }
315 if p == NX_PERCEPT_DOG_RETRIEVER { return 75 }
316 if p == NX_PERCEPT_DOG_TERRIER { return 75 }
317 if p == NX_PERCEPT_DOG_SIGHTHOUND { return 75 }
318 if p == NX_PERCEPT_DOG_SCENTHOUND { return 75 }
319 if p == NX_PERCEPT_DOG_HERDING { return 75 }
320 if p == NX_PERCEPT_DOG_GENERIC { return 75 }
321 if p == NX_PERCEPT_CAT_DOMESTIC { return 100 }
322 if p == NX_PERCEPT_CAT_FERAL { return 100 }
323 if p == NX_PERCEPT_CATTLE { return 50 }
324 if p == NX_PERCEPT_SHEEP { return 50 }
325 if p == NX_PERCEPT_CHICKEN { return 100 }
326 if p == NX_PERCEPT_SONGBIRD_PASSERINE { return 145 }
327 if p == NX_PERCEPT_RAPTOR { return 130 }
328 if p == NX_PERCEPT_HONEYBEE { return 300 }
329 if p == NX_PERCEPT_BUMBLEBEE { return 300 }
330 if p == NX_PERCEPT_PRESERVE_ALL { return 1000 }
331 return 60
332}
333
334// ===== Validity gate ==============================================
335
336func nx_perceptual_profile_is_valid(p: i64) -> i64 {
337 if p == NX_PERCEPT_NONE { return 1 }
338 if p == NX_PERCEPT_PRESERVE_ALL { return 1 }
339 if p >= 1 && p <= 2 { return 1 } // human band
340 if p >= 10 && p <= 20 { return 1 } // canine band
341 if p >= 30 && p <= 31 { return 1 } // feline band
342 if p >= 40 && p <= 44 { return 1 } // livestock band
343 if p >= 50 && p <= 56 { return 1 } // avian band
344 if p >= 70 && p <= 72 { return 1 } // insecta band
345 if p >= 80 && p <= 84 { return 1 } // small-mammal band
346 if p >= 90 && p <= 92 { return 1 } // echolocator band
347 if p >= 100 && p <= 101 { return 1 } // fish band
348 return 0
349}