From 25a671535ac2a6b98d0001b8e29e444274e50202 Mon Sep 17 00:00:00 2001 From: Codex Agent Date: Sun, 8 Mar 2026 02:58:17 +0000 Subject: [PATCH] Add next 40 backlog calculators (banana dose, bar/barn, awg-swg) --- calculators_list.md | 120 ++++++++++++++++-------- hdyc-svelte/src/lib/data/calculators.ts | 43 ++++++++- hdyc-svelte/src/lib/engine.ts | 94 ++++++++++++++++--- 3 files changed, 201 insertions(+), 56 deletions(-) diff --git a/calculators_list.md b/calculators_list.md index 6a13bf9..d2fc4df 100644 --- a/calculators_list.md +++ b/calculators_list.md @@ -2160,6 +2160,46 @@ The registry currently contains 1333 unique calculator slugs. | Attograms to Tons | attograms-to-tons | weight | 1e-24 | | Attograms to Troy Ounces | attograms-to-troy-ounces | weight | 3.215074656862798e-20 | | Attograms to Yoctograms | attograms-to-yoctograms | weight | 999999.9999999999 | +| Attograms to Zeptograms | attograms-to-zeptograms | weight | 1000.0 | +| Awg to Swg | awg-to-swg | electrical | 1 | +| Banana Equivalent Dose to Becquerel | banana-equivalent-dose-to-becquerel | radiation | 15.0 | +| Banana Equivalent Dose to Coulomb Per Kilogram | banana-equivalent-dose-to-coulomb-per-kilogram | radiation | 2.94e-09 | +| Banana Equivalent Dose to Counts Per Minute | banana-equivalent-dose-to-counts-per-minute | radiation | 900.0 | +| Banana Equivalent Dose to Curie | banana-equivalent-dose-to-curie | radiation | 4.054054054054054e-10 | +| Banana Equivalent Dose to Disintegrations Per Second | banana-equivalent-dose-to-disintegrations-per-second | radiation | 15.0 | +| Banana Equivalent Dose to Gray | banana-equivalent-dose-to-gray | radiation | 1e-07 | +| Banana Equivalent Dose to Millirem | banana-equivalent-dose-to-millirem | radiation | 0.009999999999999998 | +| Banana Equivalent Dose to Millisievert | banana-equivalent-dose-to-millisievert | radiation | 9.999999999999999e-05 | +| Banana Equivalent Dose to Picocurie | banana-equivalent-dose-to-picocurie | radiation | 405.4054054054054 | +| Banana Equivalent Dose to Rad | banana-equivalent-dose-to-rad | radiation | 9.999999999999999e-06 | +| Banana Equivalent Dose to Rem | banana-equivalent-dose-to-rem | radiation | 9.999999999999999e-06 | +| Banana Equivalent Dose to Roentgen | banana-equivalent-dose-to-roentgen | radiation | 1.14e-05 | +| Banana Equivalent Dose to Rutherford | banana-equivalent-dose-to-rutherford | radiation | 1.5e-05 | +| Banana Equivalent Dose to Sievert | banana-equivalent-dose-to-sievert | radiation | 1e-07 | +| Bar to Barye | bar-to-barye | pressure | 1000000.0 | +| Bar to Cmhg | bar-to-cmhg | pressure | 75.00637554192106 | +| Bar to Dynes Per Sq Cm | bar-to-dynes-per-sq-cm | pressure | 1000000.0 | +| Bar to Feet Of Seawater | bar-to-feet-of-seawater | length | 32.5945812686106 | +| Bar to Feet Of Water | bar-to-feet-of-water | length | 33.49601339491917 | +| Bar to Hectopascals | bar-to-hectopascals | pressure | 1000.0 | +| Bar to Inches Of Mercury | bar-to-inches-of-mercury | pressure | 29.529980164712324 | +| Bar to Kilopascals | bar-to-kilopascals | pressure | 100.0 | +| Bar to Millibars | bar-to-millibars | pressure | 1000.0 | +| Bar to Millimeters Of Mercury | bar-to-millimeters-of-mercury | pressure | 750.0637554192106 | +| Bar to Pascals | bar-to-pascals | pressure | 100000.0 | +| Bar to Technical Atmosphere | bar-to-technical-atmosphere | pressure | 1.0197162129779282 | +| Bar to Technical Atmosphere (at) | bar-to-technical-atmosphere-at | pressure | 1.0197162129779282 | +| Barns to Ares | barns-to-ares | area | 9.999999999999999e-31 | +| Barns to Circular Mils | barns-to-circular-mils | area | 1.9735252413899847e-19 | +| Barns to Dunams | barns-to-dunams | area | 9.999999999999999e-32 | +| Barns to Hectares | barns-to-hectares | area | 9.999999999999999e-33 | +| Barns to Roods | barns-to-roods | area | 9.884215258686612e-32 | +| Barns to Sections | barns-to-sections | area | 3.8610215854244585e-35 | +| Barns to Square Centimeters | barns-to-square-centimeters | area | 1e-24 | +| Barns to Square Feet | barns-to-square-feet | area | 1.0763910416709721e-27 | +| Barns to Square Inches | barns-to-square-inches | area | 1.5500031000062e-25 | +| Barns to Square Kilometers | barns-to-square-kilometers | area | 1e-34 | +| Barns to Square Miles | barns-to-square-miles | area | 3.8610215854244585e-35 | ## Completion Checklist - [x] Inches to Feet (`inches-to-feet`) @@ -4135,47 +4175,47 @@ The registry currently contains 1333 unique calculator slugs. - [x] Attograms to Tons - [x] Attograms to Troy Ounces - [x] Attograms to Yoctograms -- [ ] Attograms to Zeptograms -- [ ] Awg to Swg -- [ ] Banana Equivalent Dose to Becquerel -- [ ] Banana Equivalent Dose to Coulomb Per Kilogram -- [ ] Banana Equivalent Dose to Counts Per Minute -- [ ] Banana Equivalent Dose to Curie -- [ ] Banana Equivalent Dose to Disintegrations Per Second -- [ ] Banana Equivalent Dose to Gray -- [ ] Banana Equivalent Dose to Millirem -- [ ] Banana Equivalent Dose to Millisievert -- [ ] Banana Equivalent Dose to Picocurie -- [ ] Banana Equivalent Dose to Rad -- [ ] Banana Equivalent Dose to Rem -- [ ] Banana Equivalent Dose to Roentgen -- [ ] Banana Equivalent Dose to Rutherford -- [ ] Banana Equivalent Dose to Sievert -- [ ] Bar to Barye -- [ ] Bar to Cmhg -- [ ] Bar to Dynes Per Sq Cm -- [ ] Bar to Feet Of Seawater -- [ ] Bar to Feet Of Water -- [ ] Bar to Hectopascals -- [ ] Bar to Inches Of Mercury -- [ ] Bar to Kilopascals -- [ ] Bar to Millibars -- [ ] Bar to Millimeters Of Mercury -- [ ] Bar to Pascals -- [ ] Bar to Technical Atmosphere -- [ ] Bar to Technical Atmosphere (at) +- [x] Attograms to Zeptograms +- [x] Awg to Swg +- [x] Banana Equivalent Dose to Becquerel +- [x] Banana Equivalent Dose to Coulomb Per Kilogram +- [x] Banana Equivalent Dose to Counts Per Minute +- [x] Banana Equivalent Dose to Curie +- [x] Banana Equivalent Dose to Disintegrations Per Second +- [x] Banana Equivalent Dose to Gray +- [x] Banana Equivalent Dose to Millirem +- [x] Banana Equivalent Dose to Millisievert +- [x] Banana Equivalent Dose to Picocurie +- [x] Banana Equivalent Dose to Rad +- [x] Banana Equivalent Dose to Rem +- [x] Banana Equivalent Dose to Roentgen +- [x] Banana Equivalent Dose to Rutherford +- [x] Banana Equivalent Dose to Sievert +- [x] Bar to Barye +- [x] Bar to Cmhg +- [x] Bar to Dynes Per Sq Cm +- [x] Bar to Feet Of Seawater +- [x] Bar to Feet Of Water +- [x] Bar to Hectopascals +- [x] Bar to Inches Of Mercury +- [x] Bar to Kilopascals +- [x] Bar to Millibars +- [x] Bar to Millimeters Of Mercury +- [x] Bar to Pascals +- [x] Bar to Technical Atmosphere +- [x] Bar to Technical Atmosphere (at) - [x] Barns to Acres -- [ ] Barns to Ares -- [ ] Barns to Circular Mils -- [ ] Barns to Dunams -- [ ] Barns to Hectares -- [ ] Barns to Roods -- [ ] Barns to Sections -- [ ] Barns to Square Centimeters -- [ ] Barns to Square Feet -- [ ] Barns to Square Inches -- [ ] Barns to Square Kilometers -- [ ] Barns to Square Miles +- [x] Barns to Ares +- [x] Barns to Circular Mils +- [x] Barns to Dunams +- [x] Barns to Hectares +- [x] Barns to Roods +- [x] Barns to Sections +- [x] Barns to Square Centimeters +- [x] Barns to Square Feet +- [x] Barns to Square Inches +- [x] Barns to Square Kilometers +- [x] Barns to Square Miles - [ ] Barns to Square Mils - [x] Barns to Square Yards - [ ] Barns to Townships diff --git a/hdyc-svelte/src/lib/data/calculators.ts b/hdyc-svelte/src/lib/data/calculators.ts index b830a78..45c2326 100644 --- a/hdyc-svelte/src/lib/data/calculators.ts +++ b/hdyc-svelte/src/lib/data/calculators.ts @@ -1,5 +1,5 @@ // THIS FILE IS AUTO-GENERATED BY migrate.py -export type CalcType = 'standard' | 'inverse' | '3col' | '3col-mul' | 'base' | 'text-bin' | 'bin-text' | 'dms-dd' | 'dd-dms' | 'dec-frac' | 'db-int' | 'db-spl' | 'db-v' | 'db-w' | 'awg' | 'brinell-rockwell' | 'ev-lux' | 'aov' | 'swg' | 'rockwell-vickers' | 'sus-cst' | 'molarity'; +export type CalcType = 'standard' | 'inverse' | '3col' | '3col-mul' | 'base' | 'text-bin' | 'bin-text' | 'dms-dd' | 'dd-dms' | 'dec-frac' | 'db-int' | 'db-spl' | 'db-v' | 'db-w' | 'awg' | 'awg-swg' | 'brinell-rockwell' | 'ev-lux' | 'aov' | 'swg' | 'rockwell-vickers' | 'sus-cst' | 'molarity'; export interface CalculatorDef { slug: string; @@ -1888,6 +1888,47 @@ export const calculators: CalculatorDef[] = [ {"slug": "attograms-to-troy-ounces", "name": "Attograms to Troy Ounces", "category": "weight", "type": "standard", "labels": {"in1": "Attograms", "in2": "Troy Ounces"}, "factor": 3.215074656862798e-20}, {"slug": "attograms-to-yoctograms", "name": "Attograms to Yoctograms", "category": "weight", "type": "standard", "labels": {"in1": "Attograms", "in2": "Yoctograms"}, "factor": 999999.9999999999}, + {"slug": "attograms-to-zeptograms", "name": "Attograms to Zeptograms", "category": "weight", "type": "standard", "labels": {"in1": "Attograms", "in2": "Zeptograms"}, "factor": 1000.0}, + {"slug": "awg-to-swg", "name": "Awg to Swg", "category": "electrical", "type": "awg-swg", "labels": {"in1": "Awg", "in2": "Swg"}, "factor": 1}, + {"slug": "banana-equivalent-dose-to-becquerel", "name": "Banana Equivalent Dose to Becquerel", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Becquerel"}, "factor": 15.0}, + {"slug": "banana-equivalent-dose-to-coulomb-per-kilogram", "name": "Banana Equivalent Dose to Coulomb Per Kilogram", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Coulomb Per Kilogram"}, "factor": 2.94e-09}, + {"slug": "banana-equivalent-dose-to-counts-per-minute", "name": "Banana Equivalent Dose to Counts Per Minute", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Counts Per Minute"}, "factor": 900.0}, + {"slug": "banana-equivalent-dose-to-curie", "name": "Banana Equivalent Dose to Curie", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Curie"}, "factor": 4.054054054054054e-10}, + {"slug": "banana-equivalent-dose-to-disintegrations-per-second", "name": "Banana Equivalent Dose to Disintegrations Per Second", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Disintegrations Per Second"}, "factor": 15.0}, + {"slug": "banana-equivalent-dose-to-gray", "name": "Banana Equivalent Dose to Gray", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Gray"}, "factor": 1e-07}, + {"slug": "banana-equivalent-dose-to-millirem", "name": "Banana Equivalent Dose to Millirem", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Millirem"}, "factor": 0.009999999999999998}, + {"slug": "banana-equivalent-dose-to-millisievert", "name": "Banana Equivalent Dose to Millisievert", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Millisievert"}, "factor": 9.999999999999999e-05}, + {"slug": "banana-equivalent-dose-to-picocurie", "name": "Banana Equivalent Dose to Picocurie", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Picocurie"}, "factor": 405.4054054054054}, + {"slug": "banana-equivalent-dose-to-rad", "name": "Banana Equivalent Dose to Rad", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Rad"}, "factor": 9.999999999999999e-06}, + {"slug": "banana-equivalent-dose-to-rem", "name": "Banana Equivalent Dose to Rem", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Rem"}, "factor": 9.999999999999999e-06}, + {"slug": "banana-equivalent-dose-to-roentgen", "name": "Banana Equivalent Dose to Roentgen", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Roentgen"}, "factor": 1.14e-05}, + {"slug": "banana-equivalent-dose-to-rutherford", "name": "Banana Equivalent Dose to Rutherford", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Rutherford"}, "factor": 1.5e-05}, + {"slug": "banana-equivalent-dose-to-sievert", "name": "Banana Equivalent Dose to Sievert", "category": "radiation", "type": "standard", "labels": {"in1": "Banana Equivalent Dose", "in2": "Sievert"}, "factor": 1e-07}, + {"slug": "bar-to-barye", "name": "Bar to Barye", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Barye"}, "factor": 1000000.0}, + {"slug": "bar-to-cmhg", "name": "Bar to Cmhg", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Cmhg"}, "factor": 75.00637554192106}, + {"slug": "bar-to-dynes-per-sq-cm", "name": "Bar to Dynes Per Sq Cm", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Dynes Per Sq Cm"}, "factor": 1000000.0}, + {"slug": "bar-to-feet-of-seawater", "name": "Bar to Feet Of Seawater", "category": "length", "type": "standard", "labels": {"in1": "Bar", "in2": "Feet Of Seawater"}, "factor": 32.5945812686106}, + {"slug": "bar-to-feet-of-water", "name": "Bar to Feet Of Water", "category": "length", "type": "standard", "labels": {"in1": "Bar", "in2": "Feet Of Water"}, "factor": 33.49601339491917}, + {"slug": "bar-to-hectopascals", "name": "Bar to Hectopascals", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Hectopascals"}, "factor": 1000.0}, + {"slug": "bar-to-inches-of-mercury", "name": "Bar to Inches Of Mercury", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Inches Of Mercury"}, "factor": 29.529980164712324}, + {"slug": "bar-to-kilopascals", "name": "Bar to Kilopascals", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Kilopascals"}, "factor": 100.0}, + {"slug": "bar-to-millibars", "name": "Bar to Millibars", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Millibars"}, "factor": 1000.0}, + {"slug": "bar-to-millimeters-of-mercury", "name": "Bar to Millimeters Of Mercury", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Millimeters Of Mercury"}, "factor": 750.0637554192106}, + {"slug": "bar-to-pascals", "name": "Bar to Pascals", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Pascals"}, "factor": 100000.0}, + {"slug": "bar-to-technical-atmosphere", "name": "Bar to Technical Atmosphere", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Technical Atmosphere"}, "factor": 1.0197162129779282}, + {"slug": "bar-to-technical-atmosphere-at", "name": "Bar to Technical Atmosphere (at)", "category": "pressure", "type": "standard", "labels": {"in1": "Bar", "in2": "Technical Atmosphere (at)"}, "factor": 1.0197162129779282}, + {"slug": "barns-to-ares", "name": "Barns to Ares", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Ares"}, "factor": 9.999999999999999e-31}, + {"slug": "barns-to-circular-mils", "name": "Barns to Circular Mils", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Circular Mils"}, "factor": 1.9735252413899847e-19}, + {"slug": "barns-to-dunams", "name": "Barns to Dunams", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Dunams"}, "factor": 9.999999999999999e-32}, + {"slug": "barns-to-hectares", "name": "Barns to Hectares", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Hectares"}, "factor": 9.999999999999999e-33}, + {"slug": "barns-to-roods", "name": "Barns to Roods", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Roods"}, "factor": 9.884215258686612e-32}, + {"slug": "barns-to-sections", "name": "Barns to Sections", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Sections"}, "factor": 3.8610215854244585e-35}, + {"slug": "barns-to-square-centimeters", "name": "Barns to Square Centimeters", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Square Centimeters"}, "factor": 1e-24}, + {"slug": "barns-to-square-feet", "name": "Barns to Square Feet", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Square Feet"}, "factor": 1.0763910416709721e-27}, + {"slug": "barns-to-square-inches", "name": "Barns to Square Inches", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Square Inches"}, "factor": 1.5500031000062e-25}, + {"slug": "barns-to-square-kilometers", "name": "Barns to Square Kilometers", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Square Kilometers"}, "factor": 1e-34}, + {"slug": "barns-to-square-miles", "name": "Barns to Square Miles", "category": "area", "type": "standard", "labels": {"in1": "Barns", "in2": "Square Miles"}, "factor": 3.8610215854244585e-35}, + ]; const slugIndex = new Map(calculators.map(c => [c.slug, c])); diff --git a/hdyc-svelte/src/lib/engine.ts b/hdyc-svelte/src/lib/engine.ts index 83cf5ec..4f54c62 100644 --- a/hdyc-svelte/src/lib/engine.ts +++ b/hdyc-svelte/src/lib/engine.ts @@ -129,26 +129,47 @@ export function solve( } break; - case 'dec-frac': - if (source === 1) { - if (!isNaN(v1)) { - const parts = v1.toString().split('.'); - const len = parts[1] ? parts[1].length : 0; - const den = Math.pow(10, len); - const num = v1 * den; - const div = gcd(num, den); - out.val2 = `${num / div}/${den / div}`; - } else { out.val2 = ''; } - } else { - const parts = rawVal2.split('/'); + case 'dec-frac': { + // Two calculators share this type: + // - decimal -> fraction + // - fraction -> decimal + // Detect which direction the left field represents via its label. + const fractionFirst = calc.labels.in1.toLowerCase().includes('fraction'); + + const decimalToFraction = (n: number) => { + if (isNaN(n)) return ''; + const parts = n.toString().split('.'); + const len = parts[1] ? parts[1].length : 0; + const den = Math.pow(10, len); + const num = n * den; + const div = gcd(num, den); + return `${num / div}/${den / div}`; + }; + + const fractionToDecimal = (raw: string) => { + const parts = raw.split('/'); if (parts.length === 2 && !isNaN(Number(parts[0])) && !isNaN(Number(parts[1])) && Number(parts[1]) !== 0) { - out.val1 = fmt(Number(parts[0]) / Number(parts[1])); + return fmt(Number(parts[0]) / Number(parts[1])); + } + const f = parseFloat(parts[0]); + return !isNaN(f) ? f.toString() : ''; + }; + + if (fractionFirst) { + if (source === 1) { + out.val2 = fractionToDecimal(rawVal1); } else { - const f = parseFloat(parts[0]); - out.val1 = !isNaN(f) ? f.toString() : ''; + out.val1 = decimalToFraction(v2); + } + } else { + if (source === 1) { + out.val2 = decimalToFraction(v1); + } else { + out.val1 = fractionToDecimal(rawVal2); } } break; + } case 'db-int': if (source === 1) { @@ -232,6 +253,49 @@ export function solve( break; } + case 'awg-swg': { + const log92 = Math.log(92); + const awgToDiameterMm = (g: number) => 0.127 * Math.pow(92, (36 - g) / 39); + const diameterMmToAwg = (d: number) => 36 - 39 * Math.log(d / 0.127) / log92; + const swgTable: Record = { + 0: 8.23, 1: 7.62, 2: 7.01, 3: 6.4, 4: 5.89, 5: 5.385, 6: 4.877, + 7: 4.47, 8: 4.064, 9: 3.658, 10: 3.251, 11: 2.946, 12: 2.642, 13: 2.337, + 14: 2.032, 15: 1.829, 16: 1.626, 17: 1.422, 18: 1.219, 19: 1.016, + 20: 0.914, 21: 0.813, 22: 0.711, 23: 0.61, 24: 0.559, 25: 0.508, + 26: 0.457, 27: 0.417, 28: 0.376, 29: 0.345, 30: 0.315, 31: 0.294, + 32: 0.274, 33: 0.254, 34: 0.234, 35: 0.213, 36: 0.193, + 37: 0.173, 38: 0.152, 39: 0.132, 40: 0.122, 41: 0.112, 42: 0.102, + 43: 0.091, 44: 0.081, 45: 0.071, 46: 0.061, 47: 0.051, 48: 0.04, + 49: 0.03, 50: 0.025 + }; + + const nearestSwg = (diamMm: number) => { + let bestGauge = 0; + let bestDiff = Number.POSITIVE_INFINITY; + for (const [gStr, d] of Object.entries(swgTable)) { + const diff = Math.abs(diamMm - d); + if (diff < bestDiff) { bestDiff = diff; bestGauge = Number(gStr); } + } + return bestGauge; + }; + + if (source === 1) { + // AWG -> SWG + if (!isNaN(v1)) { + const diam = awgToDiameterMm(v1); + out.val2 = fmt(nearestSwg(diam)); + } else { out.val2 = ''; } + } else { + // SWG -> AWG + if (!isNaN(v2)) { + const diam = swgTable[Math.round(v2)]; + if (diam) out.val1 = fmt(diameterMmToAwg(diam)); + else out.val1 = ''; + } else { out.val1 = ''; } + } + break; + } + case 'ev-lux': { const isEvFirst = calc.labels.in1.toLowerCase().includes('ev'); const toLux = (ev: number) => 2.5 * Math.pow(2, ev);