orthonym.data.pin_policy#
Note
Internal API. Names and behaviour may change between releases.
Single loader for the curated IUPAC-2013 PIN allow/deny list.
iupac_2013_pin_list.json is the project’s adjudicated PIN authority: each row
carries a Blue Book citation and (for a deny) a verified systematic replacement.
Before Task E the loader lived inline in data/__init__.py and therefore
governed exactly one surface – the merged retained-names dict. The amino-acid,
natural-product and trivial-acid tables never consulted it at all, which is how
sarcosine, saccharin and camphor reached the DEFAULT --style pin
path. This module exists so every surface reads one set, not a copy.
The deny is deliberately a global withdrawal, matching the behaviour every
existing deny row already has: a denied name leaves the PIN-path lookup and
moves to the general-only companion dict, reachable via --trivial. It is not
a per-style switch – glycerol, catechol and nicotinic acid have
emitted their systematic names under --style general since the deny list
shipped, and Task E does not introduce a second, differently-behaving mechanism.
⚠ The OPSIN is_pin field is NOT an input here. scripts/import_opsin_xml.py
hard-codes "is_pin": False (lines 268, 742, 847), so all 232 entries in
amino_acids_opsin.py and all 423 in simple_groups.py carry False. The
flag is a generator default with zero per-entry information; gating on it would
withdraw cystine (Blue Book Table 10.5, along with the junk.
Adjudication happens per row in the JSON, with a citation.
- orthonym.data.pin_policy.PIN_ALLOW: FrozenSet[str] = frozenset({'acenaphthene', 'acenaphthylene', 'acetylene', 'acridine', 'adamantane', 'anisole', 'anthracene', 'benzene', 'chalcone', 'chrysene', 'cubane', 'furan', 'imidazole', 'imidazolidine', 'indene', 'indole', 'isoquinoline', 'isothiazole', 'isoxazole', 'morpholine', 'naphthalene', 'oxazole', 'pentacene', 'perylene', 'phenanthrene', 'piperazine', 'piperidine', 'pyran', 'pyrazine', 'pyrazole', 'pyrazolidine', 'pyrene', 'pyridazine', 'pyridine', 'pyrimidine', 'pyrrole', 'pyrrolidine', 'quinoline', 'selenomorpholine', 'telluromorpholine', 'thiazole', 'thiophene', 'toluene', 'xylene'})#
Names the curated list positively affirms as preferred IUPAC names.
- orthonym.data.pin_policy.PIN_DENY: FrozenSet[str] = frozenset({'1,4-divinylbenzene', '1-naphthol', "2'-adenylic acid", '2,4,6-trinitrotoluene', '2-naphthol', "3'-adenylic acid", '4-phenylphenol', "5'-adenylic acid", '[6]annulene', 'abrine', 'acetophenone', 'acetylide', 'alane', 'alanopine', 'allyl alcohol', 'aluminane', 'anthra-1,2-quinone', 'anthra-1,4-quinone', 'anthra-9,10-quinone', 'anthranilic acid', 'aspirin', 'azine', 'barbituric acid', 'benzhydrol', 'benzidine', 'benzo-1,2-quinone', 'benzo-1,4-quinone', 'benzophenone', 'beta-alanopine', 'betacarboline', 'biguanide', 'biphenyl', 'cadaverine', 'camphor', 'caprolactam', 'carbazide', 'carbazole', 'carbazone', 'carbodiazone', 'carbodiimide', 'carbohydrazide', 'carbon tetrachloride', 'carbonohydrazide', 'carvacrol', 'catechol', 'chloroform', 'chromane', 'chromanone', 'chromene', 'chromone', 'cinnoline', 'citronellol', 'citronellyl pentanoate', 'coumarin', 'creatine', 'crotonylene', 'cumene', 'cyanogen chloride', 'cyclopentadienylium', 'cymene', 'cytosine', 'diacetamide', 'diaminopimelic acid', 'diethanolamine', 'diethyl sulfide', 'dihydrofumarate', 'dihydromaleate', 'dihydrosuccinate', 'dihydrosulfate', 'dihydrotartrate', 'dihydroxalate', 'dimethyl sulfide', 'dimethyl sulfone', 'dimethyl sulfoxide', 'dimethylacetamide', 'dimethylurea', 'diphenylamine', 'durene', 'erythrene', 'ethylamine', 'ethylene', 'ethylene glycol', 'flavanone', 'flavone', 'fluorene', 'fluorouracil', 'fulminic acid', 'glutarimide', 'glycerol', 'glycerone', 'glycocyamine', 'glyoxal', 'homomorpholine', 'homopiperazine', 'homopiperidine', 'homotaurine', 'hydro-p-toluenesulfonate', 'hydroastatic acid', 'hydrolactate', 'hydroquinone', 'hypotaurocyamine', 'indan', 'indane', 'indazole', 'indoline', 'indolizidine', 'iodinane', 'isobenzothiofuran', 'isobutylene', 'isochromane', 'isochromene', 'isoflavone', 'isofulminic acid', 'isoindol', 'isoindoline', 'isonicotinic acid', 'isophorone', 'isophthalic acid', 'isoselenazole', 'isoselenazolidine', 'isoselenochromane', 'isotellurazole', 'isotellurazolidine', 'isotellurochromane', 'isothiazolidine', 'isothiochromane', 'isothiourea', 'isoxazolidine', 'lysopine', 'maleimide', 'mesityl oxide', 'mesitylene', 'mesitylenic acid', 'methylamine', 'methyleneimine', 'monoethanolamine', 'naphtho-1,4-quinone', 'neopentyl glycol', 'nicotinamide', 'nicotinic acid', 'nopaline', 'octopine', 'octopinic acid', 'oxine', 'paracetamol', 'pentaerythritol', 'peracetic acid', 'perbenzoic acid', 'performic acid', 'perimidine', 'phenetol', 'phenoselenazine', 'phenotellurazine', 'phenothiazine', 'phenoxazine', 'phloroglucinol', 'phosgene', 'phthalazine', 'phthalimide', 'piazthiol', 'picolinic acid', 'picric acid', 'pinacol', 'prismane', 'propione', 'propylene', 'propylene glycol', 'pseudothiourea', 'purine', 'putrescine', 'pyrogallol', 'pyrrolizidine', 'quinol', 'quinolizidine', 'quinuclidine', 'resorcinol', 'sarcosine', 'selenochromane', 'selenofuran', 'selenohomomorpholine', 'selenopyran', 'skatol', 'skatole', 'statine', 'strombine', 'styrene', 'styrol', 'succinimide', 'sulfurane', 'taurine', 'taurocyamine', 'tauropine', 'tellurochromane', 'tellurofuran', 'tellurohomomorpholine', 'telluropyran', 'terephthalyl alcohol', 'thiahomomorpholine', 'thiazolidine', 'thiochromane', 'thiochromene', 'thiopyran', 'thiuram disulfide', 'thiuram monosulfide', 'thymine', 'thymol', 'triacetamide', 'tricine', 'triethanolamine', 'triethylamine', 'triguanide', 'trihydrocitrate', 'trimethylamine', 'trimethylene glycol', 'trinitrotoluene', 'uracil', 'vanillic acid', 'vanillin', 'veratrol', 'vinylbenzene', 'xanthone'})#
Names the curated list denies. Applies to the OPSIN-import surfaces.
- orthonym.data.pin_policy.PIN_DENY_HC: FrozenSet[str] = frozenset({'1,4-divinylbenzene', '1-naphthol', '2,4,6-trinitrotoluene', '2-naphthol', '4-phenylphenol', '[6]annulene', 'abrine', 'acetophenone', 'acetylide', 'alane', 'alanopine', 'allyl alcohol', 'aluminane', 'anthra-1,2-quinone', 'anthra-1,4-quinone', 'anthra-9,10-quinone', 'anthranilic acid', 'aspirin', 'azine', 'barbituric acid', 'benzhydrol', 'benzidine', 'benzo-1,2-quinone', 'benzo-1,4-quinone', 'benzophenone', 'beta-alanopine', 'betacarboline', 'biguanide', 'biphenyl', 'cadaverine', 'camphor', 'caprolactam', 'carbazide', 'carbazole', 'carbazone', 'carbodiazone', 'carbodiimide', 'carbohydrazide', 'carbon tetrachloride', 'carbonohydrazide', 'carvacrol', 'catechol', 'chloroform', 'chromane', 'chromanone', 'chromene', 'chromone', 'cinnoline', 'citronellol', 'citronellyl pentanoate', 'coumarin', 'creatine', 'crotonylene', 'cumene', 'cyanogen chloride', 'cyclopentadienylium', 'cymene', 'cytosine', 'diacetamide', 'diaminopimelic acid', 'diethanolamine', 'diethyl sulfide', 'dihydrofumarate', 'dihydromaleate', 'dihydrosuccinate', 'dihydrosulfate', 'dihydrotartrate', 'dihydroxalate', 'dimethyl sulfide', 'dimethyl sulfone', 'dimethyl sulfoxide', 'dimethylacetamide', 'dimethylurea', 'diphenylamine', 'durene', 'erythrene', 'ethylamine', 'ethylene', 'ethylene glycol', 'flavanone', 'flavone', 'fluorene', 'fluorouracil', 'fulminic acid', 'glutarimide', 'glycerol', 'glycerone', 'glycocyamine', 'glyoxal', 'homomorpholine', 'homopiperazine', 'homopiperidine', 'homotaurine', 'hydro-p-toluenesulfonate', 'hydroastatic acid', 'hydrolactate', 'hydroquinone', 'hypotaurocyamine', 'indan', 'indane', 'indazole', 'indoline', 'indolizidine', 'iodinane', 'isobenzothiofuran', 'isobutylene', 'isochromane', 'isochromene', 'isoflavone', 'isofulminic acid', 'isoindol', 'isoindoline', 'isonicotinic acid', 'isophorone', 'isophthalic acid', 'isoselenazole', 'isoselenazolidine', 'isoselenochromane', 'isotellurazole', 'isotellurazolidine', 'isotellurochromane', 'isothiazolidine', 'isothiochromane', 'isothiourea', 'isoxazolidine', 'lysopine', 'maleimide', 'mesityl oxide', 'mesitylene', 'mesitylenic acid', 'methylamine', 'methyleneimine', 'monoethanolamine', 'naphtho-1,4-quinone', 'neopentyl glycol', 'nicotinamide', 'nicotinic acid', 'nopaline', 'octopine', 'octopinic acid', 'oxine', 'paracetamol', 'pentaerythritol', 'peracetic acid', 'perbenzoic acid', 'performic acid', 'perimidine', 'phenetol', 'phenoselenazine', 'phenotellurazine', 'phenothiazine', 'phenoxazine', 'phloroglucinol', 'phosgene', 'phthalazine', 'phthalimide', 'piazthiol', 'picolinic acid', 'picric acid', 'pinacol', 'prismane', 'propione', 'propylene', 'propylene glycol', 'pseudothiourea', 'purine', 'putrescine', 'pyrogallol', 'pyrrolizidine', 'quinol', 'quinolizidine', 'quinuclidine', 'resorcinol', 'sarcosine', 'selenochromane', 'selenofuran', 'selenohomomorpholine', 'selenopyran', 'skatol', 'skatole', 'statine', 'strombine', 'styrene', 'styrol', 'succinimide', 'sulfurane', 'taurine', 'taurocyamine', 'tauropine', 'tellurochromane', 'tellurofuran', 'tellurohomomorpholine', 'telluropyran', 'terephthalyl alcohol', 'thiahomomorpholine', 'thiazolidine', 'thiochromane', 'thiochromene', 'thiopyran', 'thiuram disulfide', 'thiuram monosulfide', 'thymine', 'thymol', 'triacetamide', 'tricine', 'triethanolamine', 'triethylamine', 'triguanide', 'trihydrocitrate', 'trimethylamine', 'trimethylene glycol', 'trinitrotoluene', 'uracil', 'vanillic acid', 'vanillin', 'veratrol', 'vinylbenzene', 'xanthone'})#
Deny subset that ALSO filters the hand-curated dicts. Excludes
hc_overriderows (cumene/quinuclidine/acetylene), whose deny applies only to OPSIN-side promotion (a phase / a phase).
- orthonym.data.pin_policy.is_pin_denied(name)#
True iff
nameis an adjudicated non-PIN name (hand-curated scope).Used by the amino-acid, natural-product and trivial-acid surfaces, all of which are hand-curated or OPSIN-imported tables with no
hc_overridesemantics of their own – so they take the HC-scoped set.