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_override rows (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 name is 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_override semantics of their own – so they take the HC-scoped set.