Skip to content

koriyoshi2041/tangragraph

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tangragraph — Indian-Chinese cuisine in food-pairing space

MIT License Python 3.11+ 24 tests passing Ahn 2011 Zenodo Jain 2015 PLOS ONE five figures

“饮食男女,人之大欲存焉。”
— 《礼记・礼运》, via 李安 Eat Drink Man Woman (1994).
Food, love, and — apparently — a 1975 Bombay catering shift are among the great desires.


What is this

tangragraph is a small-corpus, honestly-bounded replication of the Ahn et al. 2011 and Jain et al. 2015 food-pairing framework applied to a specific fusion cuisine that neither paper covers: Indian-Chinese, the cuisine invented in the Hakka tanneries of Tangra, Kolkata (c. 1778 onward) and coined-into-a-national-phenomenon by Nelson Wang at the Cricket Club of India, Bombay, in 1975.

In one question:

If Sankar 2017 argues qualitatively that Indian-Chinese cuisine is "neither Indian nor Chinese", where does it sit quantitatively when you run the same flavor-pairing metric that everyone else has been running on everyone else's cuisines for fifteen years?

Chicken Manchurian (Miansari66, Wikimedia Commons, CC0) Vegetable noodles with Gobi Manchurian (Siya Bedi, Wikimedia Commons, CC BY-SA 4.0) Hakka Noodles (Farhana Sayyed, Wikimedia Commons, CC BY-SA 4.0) Schezwan Fried Rice (Thamizhpparithi Maari, Wikimedia Commons, CC BY-SA 4.0)

The four canonical faces of Indian-Chinese. Left to right: Chicken Manchurian by Miansari66 (CC0) · Vegetable noodles and gobi manchurian by Siya Bedi (CC BY-SA 4.0) · Hakka Noodles Veg by Farhana Sayyed (CC BY-SA 4.0) · Schezwan fried rice by Thamizhpparithi Maari (CC BY-SA 4.0). All four photographs were sourced from Wikimedia Commons; no illustrations.


TL;DR

“只要用心,人人都是食神。”
— 周星驰, 食神 (God of Cookery), 1996. We did not bring 心 — we brought an 829 kB zip file and a grep pipeline.

  • 📦 Input: the Ahn 2011 public dataset (1529 ingredients × 1107 flavor compounds × 36,781 edges, mirrored on Zenodo), the Ahn 2011 recipe corpora for nine reference cuisines, and one newly-authored YAML corpus of 40 canonical Indian-Chinese dishes normalised to the same ingredient vocabulary.
  • 📐 Output: one ΔNs coordinate for Indian-Chinese, placed next to the same metric computed from the same pipeline on American, French, Italian, Chinese, Korean, Thai, Japanese, Mexican, and Indian.
  • 🎯 Headline: ΔNs(Indian-Chinese) = −0.31, sitting between ΔNs(Chinese Ahn corpus) = −0.86 and ΔNs(Indian Ahn corpus) = +0.18. Sankar's "neither" has a coordinate now.
  • 🌶️ Bonus: the "Manchurian" name audit. Of 7 hallmark Dongbei ingredients (fermented cabbage, pork, chive, star-anise, sweet potato, bay, wheat), only 2 appear in Wang's Manchurian family. Real Manchuria eats suan cai and pork; Nelson Wang invented chicken in red sauce and named it after a province he'd never visited.
  • Verified: 24 tests, including 5 Tier-1 published-sign regressions (East Asian negative, North American strongly positive, French positive) and 3 IC-signature tests that fail loudly if the observed ΔNs ordering flips.

NASA already said half of this

The flattering thing about running a pipeline on a claim food writers have been making for a decade is that the qualitative answer is already in the literature. Sankar (Journal of Ethnic Foods 4(4), 2017) did qualitative fieldwork in Dharavi, Mumbai, scraped restaurant blogs, and wrote:

"The Chinese food served in India is intrinsically Indianized Chinese food… a distinct cuisine neither Indian, nor Chinese." — Sankar 2017

Sankar's method was symbolic analysis — serving styles, restaurant iconography, menu language. No ingredient graph, no pairing score, no numbers. Our contribution is the number: the Ahn/Jain food-pairing framework lands IC at ΔNs = −0.31, which is literally between its two parent cuisines on the same axis. The popular shorthand "Indian-Chinese is just Indian food with soy sauce" or "Indian-Chinese is just fake Chinese food" both turn out to be strictly wrong under this metric. Sankar's neither survives quantification.


The running joke, made load-bearing

The project's central fact is that Nelson Wang coined the name Chicken Manchurian in 1975 without thinking especially hard about it. Wang was a 25-year-old caterer, born to Hakka Chinese parents in Kolkata, working the Chinese banquet menu at the Cricket Club of India in Bombay. A diner asked for something not on the menu. Wang coated chicken in cornstarch, deep-fried it, and tossed it in a sauce of garlic, ginger, green chilli, soy sauce, vinegar, and a generous base of Indian spices. He called it Manchurian — after a region he had never visited, 4,500 km from the dish's actual kitchen of origin — and it became the single most widely sold restaurant dish in India.

This repository quantifies the distance between "Manchurian" the word and Manchuria the place:

what "Chicken Manchurian" claims what Dongbei (Manchuria) actually eats
chicken, sauce, restaurant dish pork, stew, winter dish
fresh ingredients + cornstarch fermented cabbage (suan cai), potato-starch noodles
served with fried rice / Hakka noodles served with wheat dumplings (饺子), steamed buns
central aromatic: green chili + red chili powder central aromatic: star anise + chive + bay
canonical chef: Nelson Wang, Bombay 1975 canonical chefs: Harbin / Shenyang / Changchun, c. 1880–present

Each row is a documented fact. Each documented fact has a source in the ## Sources section below.

“That's why they call it an original — because you never saw it before.”
— Nelson Wang, on inventing the dish, interview via Homegrown (2022).


Two-stage narrative

  Stage 1 — Kolkata (1778 – 1960s): the Hakka kitchen meets the Indian pantry
  ─────────────────────────────────────────────────────────────────────────────
  [Cantonese-Hakka cooking] ──(substitutions: tofu→paneer, bok choy→capsicum,
                                dark soy+garam masala, etc.)──▶
                      Tangra Chinatown menu, c. 1900, serving Indian diners
                                           ▼
                                     Hakka Noodles (name intact, recipe Indianised)
                                     Chilli Chicken (Cantonese stir-fry + capsaicin load)

                    🔥 "Only the name 'Hakka' continues without change,
                        but the Hakka dishes have been changed to suit the Indian taste."
                         — commonly cited observation, Tangra food-historians

  Stage 2 — Bombay (1975 →): Nelson Wang invents the Manchurian family
  ─────────────────────────────────────────────────────────────────────
  [Off-menu diner request, CCI] ──(improvisation)──▶ fried cornstarch chicken
                                             ▼
                              tossed in Tangra-lineage wok sauce
                                             ▼
                              arbitrarily named "Manchurian"
                                             ▼
                       national adoption throughout the 1980s and 1990s
                                             ▼
                 Gobi Manchurian (veg) and Schezwan fried rice (misspelling intact)
                 join the canon

                         ⚡ "This is how liberty dies.
                            With thunderous cornstarch."
                            — not exactly Padmé Amidala

Why Indian-Chinese, specifically? (the serious version)

The literature on food-pairing analysis has covered:

  • the Ahn 2011 world-cuisine set (Western-European, North-American, East Asian, Latin American, Southern European — roughly, 11 regions);
  • the Jain 2015 Indian regional set (Bengali, Gujarati, Jain, Maharashtrian, Mughlai, Punjabi, Rajasthani, South Indian);
  • the Varshney 2013 Medieval European replication (with a public cautionary tale about data quality);
  • a Chinese regional variant (Zhu 2013 PLOS ONE);
  • and roughly a dozen follow-ups covering Algerian, Saudi, Turkish, Brazilian and other cuisines.

No existing study tests a fusion cuisine under this framework. That gap has two kinds of interest. First, if the food-pairing hypothesis is a real signal of how a cuisine evolves, then fusion cuisines should inherit or interpolate between parents in a measurable way. Second, if Varshney 2013's critique is correct — that the hypothesis is brittle under corpus choice — the fusion case is an especially sharp test: if the signal survives a 30-to-50-dish corpus of an inherently hybrid menu, the underlying framework is less fragile than Varshney's case for medieval European suggests.

Either outcome is informative. Below is what we actually observed.


Why Indian-Chinese, actually?

"मेरे पास माँ है।" — Shashi Kapoor, Deewar, 1975. The same year Nelson Wang, a Calcutta Hakka, tossed a plate of fried chicken in ginger-garlic-soy at the Cricket Club of India and named it after a province he had never visited. Indian cinematic history and Indian culinary history share a calendar year that, somehow, nobody ever makes a film about.

The honest origin is that this author was eating Gobi Manchurian at a strip-mall Indian-Chinese restaurant in Fremont, California, saw the word "Schezwan" on the laminated menu, and wondered whether there was a way to measure how Sichuan the dish wasn't. The Ahn/Jain framework turned out to be an answer — not the answer, but an answer — that required no new math and no new data. The rest of this repository is what that one wondering produced.


Headline figures

All six figures are produced by tangra figures from the bundled data. Matplotlib style: Nature single-column, Okabe-Ito colour-blind palette (Wong 2011, Nature Methods), 300 dpi PDF + PNG.

Figure 1 — world cuisines in food-pairing space

Figure 1 — world cuisines in food-pairing space

Mean recipe size (x) vs ΔNs (y) for nine reference cuisines drawn from the Ahn 2011 Epicurious + allrecipes + menupan dump. The dashed line at ΔNs = 0 separates negative food pairing (recipes avoid compound-sharing ingredient pairs — the East Asian pattern) from positive food pairing (ingredient pairs share more compounds than random — the North American pattern). The red star is this repository's Indian-Chinese corpus at (13.6, −0.31).

"The Force is strong with this one." — Darth Vader. The Force here is a random-shuffle null model with n_nulls = 25.

Figure 2 — ingredient affinity: IC vs each parent cuisine

Figure 2 — ingredient affinity scatter

For every common ingredient (prevalence ≥ 20 % in at least one of IC / Chinese / Indian), we plot the Laplace-smoothed log-odds ratio of IC prevalence against each parent. Quadrant membership is the cultural story:

  • Top-right (IC-distinctive): ingredients IC amplifies over both parents — soy_sauce, starch, sesame_oil, scallion, vinegar, egg_noodle, bell_pepper, carrot, sugarcane, cabbage. This is the Hakka-lineage stir-fry pantry transposed onto Indian produce.
  • Top-left (Chinese-dominated): rice is the only ingredient IC uses less than Chinese and more than Indian. IC's starch call is overwhelmingly noodles, not rice, which bends rice toward Chinese.
  • Bottom-right (Indian-dominated): cumin, turmeric, yogurt, onion — Indian staples IC politely skips.
  • Bottom-left (parents both beat IC): pork, butter, wine, coriander, fenugreek — ingredients neither Tangra nor Wang adopted.

"Neither Indian nor Chinese" rendered as a 2D diagram.

Figure 3 — the "Manchurian" name audit

Figure 3 — the Manchurian name audit

Panel A. For each of 7 hallmark ingredients of real Dongbei (Manchuria) cuisine, is it present (green) or absent (vermillion) in any dish of the IC Manchurian family (Chicken / Gobi / Paneer / Vegetable / Mushroom / Baby-corn Manchurian)? Hallmark coverage: 2 / 7 ≈ 29%. Cabbage and wheat are the two hits. Cabbage is a generic stir-fry vegetable; wheat is in Hakka noodles. Neither carries a Dongbei signal.

Panel B. After removing "scaffolding" (garlic, ginger, scallion, oil, pepper, vinegar, soy sauce — present in every East Asian cuisine), the IC Manchurian family and the Dongbei canonical corpus share only a handful of ingredients. The two cuisines are largely disjoint.

“这是东北菜吗?” — 任何一个真正的东北人 on being served Chicken Manchurian.

Figure 4 — bootstrap confidence interval

Figure 4 — bootstrap confidence interval

The IC corpus is 40 recipes. Reporting a single ΔNs estimate at that sample size is not defensible. This figure shows the 95% bootstrap CI (200 resamples, 20 nulls per resample) for the IC corpus, plotted next to point estimates from the same pipeline on the Chinese, Indian (Ahn corpus), and French reference corpora.

The yellow band marks the range reported by Jain 2015 for their eight Indian regional cuisines (ΔNs from −0.76 to −4.52 on a TarlaDalal-based corpus). The Ahn corpus's "Indian" slice, as published, sits at +0.18 in our pipeline — which disagrees with Jain and which we think is an artefact of Ahn's Indian sample being drawn from Western recipe aggregators. That disagreement is discussed in the FAQ below.

Figure 5 — ingredient prevalence across the three cuisines

Figure 5 — ingredient prevalence heatmap

Panel A. For each of the most-used ingredients, the fraction of recipes in each cuisine that contain it. IC's top rows — soy_sauce, garlic, vinegar, ginger, black_pepper, scallion — sit at 1.00 or near it, consistent with a stir-fry pantry. Indian spices (cumin, turmeric, coriander) collapse to ≤ 0.10 in IC despite > 0.45 in Indian.

Panel B. The amplification bar: IC prevalence minus the stronger of the two parent prevalences. Positive bars mark ingredients IC uses more than either parent does on its own — the IC-distinctive set. Negative bars mark parent-dominated ingredients. Cornstarch, scallion, sesame_oil, cabbage, bell_pepper are canonical amplifications.

Figure 6 — which ingredients push IC below the null?

Figure 6 — per-ingredient ΔNs contribution

The per-ingredient view of the negative-pairing signal. For each IC ingredient we compute its mean contribution to Ns when it appears in a recipe (average compounds shared with its pantry-mates), minus the prevalence-weighted null expectation. Strongly negative values are ingredients that tend to co-occur with pantry-mates that share fewer compounds than average — they pull IC below the zero line.

potato, cottage_cheese (paneer), tomato, cauliflower, bell_pepper, onion are the mechanistic drivers: they are chemically dissimilar from the rest of the IC pantry, so every time Nelson Wang reached for a handful of capsicum or a slab of paneer, he moved his cuisine further into negative-pairing territory. The positive ingredients at the bottom (coriander, pepper, mung_bean) are small-effect and rare in IC; they raise Ns only when they show up.

This is what "IC inherits its pairing structure from the Hakka-Chinese branch" means at the ingredient level.


What has been verified against external sources

Check Source of truth Result
East Asian negative food pairing Ahn et al. 2011, Scientific Reports 1, 196, DOI 10.1038/srep00196 Chinese ΔNs = −0.86 ✅ ; Korean ΔNs = −0.96 ✅ ; Japanese ΔNs = −0.11
North American strongly positive food pairing Ahn 2011, Fig. 3 American ΔNs = +1.63 ✅ (same direction, same magnitude band)
Western European positive food pairing Ahn 2011 French ΔNs = +0.55
Ingredient-graph loads without Farnesol self-loop Ahn 2017 ingr_comp/README.md erratum Farnesol (id 339) correctly dropped ✅
Sankar 2017's "neither Indian nor Chinese" holds quantitatively Sankar, Journal of Ethnic Foods 4(4), pp 268–273, ScienceDirect IC ΔNs = −0.31 lies between Chinese (−0.86) and Ahn-Indian (+0.18) ✅
Nelson Wang, Chicken Manchurian origin: 1975, CCI, Hakka descent Wikipedia + SCMP + Homegrown Dates and biography confirmed ✅
Tangra population peaked at ~20,000 Hakka, now ~2,000 Wikipedia: Tangra + Global Chinese migration case study (PMC) Used as context; not a numerical CI claim

24 tests, all passing. See tests/test_golden_baselines.py for the direction-of-sign regressions, tests/test_ic_signature.py for the IC positioning claim, tests/test_manchuria_audit.py for the name audit.


Case studies you can run right now

Case 1 — "Where does Indian-Chinese sit?"

Chilli chicken with egg and vegetable fried rice — two canonical Indian-Chinese dishes in one frame (Charlie4404, Wikimedia Commons, CC BY-SA 4.0)

Two dishes from our 40-dish IC corpus in a single frame: chilli chicken (dry-style) and vegetable fried rice. Photo by Charlie4404 (CC BY-SA 4.0).

$ tangra pair IndianChinese --bootstrap
Pairing signature — IndianChinese
  n_recipes (in scope)   40
  mean recipe size       13.60
  Ns (observed)           4.18
  Ns (null mean)          4.47
  ΔNs = Ns - null        −0.31
  vocabulary coverage   100%
  MSG-tagged fraction    90%

95% bootstrap CI (n=200): ΔNs = −0.31  [−0.63, +0.00]

The CI is wide, because 40 recipes is not many. The sign is stable — every bootstrap replicate produced a non-positive ΔNs — and the ordering Chinese (−0.86) < IC (−0.31) < Ahn-Indian (+0.18) is robust to the choice of null-shuffle seed.

Case 2 — "Is Chicken Manchurian actually Manchurian?"

Chicken Manchurian — the Nelson Wang 1975 invention (Miansari66, Wikimedia Commons, CC0)

Exhibit A: the dish named *Manchurian* in 1975 at the Cricket Club of India, Bombay — 4,500 km from the Manchurian plain. Photo by Miansari66 (CC0).

$ tangra audit
The 'Manchurian' audit: IC Manchurian family vs Dongbei canon
  IC 'Manchurian' dishes counted     6
  Dongbei canonical dishes           8
  shared (any)                       black_pepper, cabbage, carrot, chicken,
                                     egg, garlic, ginger, scallion, soy_sauce,
                                     starch, sugarcane, tomato, vegetable_oil,
                                     vinegar, wheat
  shared (drop scaffolding)          cabbage, carrot, chicken, egg, starch,
                                     sugarcane, tomato, wheat
  Dongbei hallmarks present in IC    cabbage, wheat

Two out of seven. The name is ceremonial.

Case 3 — "Does the Chinese negative-pairing signal survive?"

Mapo doufu photographed at Chen Mapo Restaurant in Chengdu, Sichuan — the canonical 19th-century Chinese original (Kos88, Wikimedia Commons, CC BY-SA 4.0)

Exhibit B: mapo doufu, photographed at 陳麻婆豆腐店 (Chen Mapo Doufu Restaurant, Chengdu) — the canonical 19th-century Sichuan original. Representative of the Ahn-2011 Chinese slice that lands at ΔNs = −0.86. Photo by Kos88 (CC BY-SA 4.0).

$ tangra verify ahn-chinese
Tier-1 golden checks
  Ahn Chinese negative pairing    ✓   ΔNs=−0.86, n=221

If Ahn's Zenodo data ever drifts in a way that breaks this, CI turns red.

Case 4 — "What about real Manchuria?"

Liaoning-style guo bao rou — the Harbin-origin signature Dongbei (Manchuria) dish (N509FZ, Wikimedia Commons, CC BY-SA 4.0)

Exhibit C: 锅包肉 (guō bāo ròu), Liaoning style. Invented in Harbin c. 1907 by Zheng Xingwen of the Daotai Mansion — a real, documented Dongbei (Manchuria) dish. Side by side with Nelson Wang's 1975 Bombay namesake, the geography becomes the joke. Photo by N509FZ (CC BY-SA 4.0).

$ tangra pair Manchuria
Pairing signature — Manchuria
  n_recipes (in scope)    8
  mean recipe size        9.00
  Ns (observed)           3.12
  Ns (null mean)          3.94
  ΔNs                    −0.83

Real Dongbei, at n=8, still comes out as cleanly negative as broader Chinese. That is to say: a corpus of 8 carefully-chosen dishes, with real Dongbei hallmarks, reproduces the East-Asian pattern — while the Bombay restaurateur's namesake fusion does not. "Chicken Manchurian" is further from Manchuria than Manchuria is from itself.

“看起来像是 Chinese 菜,吃起来是 Indian 菜,名字是 Manchurian — 三者各取其一。”
— 蔡澜, on being served Indian-Chinese in Bombay (paraphrase, 1990s newspaper column).


Installation

# uv (recommended)
uv venv
uv pip install -e ".[dev]"

# or plain pip
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

The Ahn 2011 zip is bundled as data/ahn2011_flavor_network_data.zip (829 kB, MIT-licensed redistribution from Zenodo 11449658). Unzip once:

cd data && unzip ahn2011_flavor_network_data.zip && rm -rf __MACOSX

Quickstart

tangra cuisines                      # list all cuisines Ahn 2011 includes
tangra pair Chinese                  # compute Ns / ΔNs for any Ahn cuisine
tangra pair IndianChinese --bootstrap
tangra verify all                    # Tier-1 baseline regressions
tangra audit                         # the Manchurian name audit
tangra figures                       # regenerate all 5 figures
tangra demo                          # everything end-to-end
pytest                               # 24 tests, ~1 minute

Project layout

tangragraph/
├── tangragraph/                    # package (stdlib + matplotlib + pyyaml + typer)
│   ├── flavor.py                   # Ahn 2011 ingredient-compound loader
│   ├── corpus.py                   # Ahn recipe reader + YAML corpus loader
│   ├── pairing.py                  # Ns + frequency-preserving null + ΔNs
│   ├── bootstrap.py                # 95% bootstrap CI
│   ├── audit.py                    # Manchuria name audit
│   ├── figures.py                  # five Nature-style figures
│   └── cli.py                      # typer CLI (tangra …)
├── data/
│   ├── ahn2011_flavor_network_data.zip   # bundled Zenodo mirror (MIT)
│   ├── ingr_comp/                  # 1529 ingredients, 1107 compounds, 36.7k edges
│   ├── scirep-cuisines-detail/     # Ahn's per-cuisine recipe dump
│   ├── pantry_ic.yaml              # IC → Ahn vocabulary map, with honest gaps
│   ├── corpus_ic.yaml              # 40 canonical IC dishes
│   └── manchuria_canon.yaml        # 8 Dongbei canonical dishes (Dunlop 2023 etc.)
├── tests/                          # 24 passing tests; 5 Tier-1 golden
├── figures/                        # auto-regenerated PDF + 300-dpi PNG
├── assets/                         # title banner (SVG) + 7 Wikimedia-Commons dish photos
└── docs/                           # verification notes (optional)

Frequently Asked Nervous Questions

Is 40 dishes really enough? No, not for the kind of claim Jain 2015 made with 2,543 recipes. That is why we report the bootstrap CI, which is honestly wide, and why we lean on the direction and ordering of the signal rather than the point estimate. If you have a larger IC corpus — e.g. the full TarlaDalal Indian-Chinese section, or the Sanjeev Kapoor Indo-Chinese cookbook fully ingredient-normalised — we would very much like a pull request.

Why is Ahn's own Indian corpus reading positive here? We reproduce Ahn's Fig. 3 East-Asian signal exactly, but our Indian recomputation on their bundled Epicurious + allrecipes slice comes out at ΔNs = +0.18 — mildly positive. Jain 2015, using their own TarlaDalal.com scrape, got the opposite: every one of eight Indian regional cuisines was negative, with ΔNs between −0.76 and −4.52. The most defensible reading is that the "Indian" slice inside Western recipe aggregators is Americanised Indian cuisine — fewer whole spices per dish, more dairy, more simplified spice blends — and that cuisine-via-corpus is not the same thing as cuisine-in-the-ground-truth-kitchen. This is the Varshney 2013 concern in a nutshell, and we do not try to resolve it; we state the tension and leave the reader to weigh which corpus speaks for "Indian cuisine".

MSG is the signature of Indian-Chinese. Why isn't it in your figures? Because Ahn's flavor network, by construction, is a graph of volatile aroma compounds — the stuff you smell. MSG (monosodium glutamate, ajinomoto in Indian kitchens since its Ikeda-1908 isolation) contributes pure umami taste via a non-volatile glutamate anion. It has no aroma fingerprint. So the single ingredient most responsible for the "Chineseness" Indian diners perceive in their IC restaurant food is structurally invisible to this metric. We tag per-dish MSG presence as metadata (90% of our IC corpus is MSG-canonical) but do not and cannot count it toward ΔNs. This is the most important methodological limitation in the repo.

Same for Sichuan peppercorn? Exactly. Hydroxy-α-sanshool, the tingling alkamide (Bautista 2008 Nat. Neurosci.) that makes real Sichuan food make your lips vibrate, is a non-volatile alkamide. Ahn has no node for Sichuan peppercorn; we fall back to generic pepper, with the understanding that the signature molecule is outside the framework's vocabulary. Schezwan sauce in India does not have sanshool in the first place, so for our IC corpus this is a loss of precision, not a distortion.

Does this actually prove anything about Indian-Chinese cuisine? It quantifies one specific claim (Sankar 2017's "neither") on one specific framework (Ahn 2011) with one specific corpus (ours, 40 dishes). What we can say: under the Ahn/Jain methodology, the IC signature is robustly negative and sits between its two parents. What we cannot say: that the IC signature is causally Cantonese-Hakka-inherited, that MSG matters as much as food history implies, or that the result would hold under a much larger corpus. Those would require more data and more framework.

Why not use FlavorDB instead of Ahn 2011? FlavorDB (Garg et al. 2018, Nucleic Acids Research) is a larger, more recent resource (2,254 molecules × 936 ingredients) from Bagler's lab at IIIT-Delhi — the same lab that published Jain 2015. Using it would be legitimate but would not help replicate Ahn 2011's baseline. Our design choice was to stay in one data layer for the baseline regression tests. A parallel FlavorDB branch is a natural next step and is open as a good-first PR.

What if a future Ahn data update changes the numbers? CI turns red. The Tier-1 tests encode the published sign of each baseline and will fail loudly if any of them flip. We prefer that to silent rot.

Can I add dishes to the IC corpus? Yes. Edit data/corpus_ic.yaml and confirm every ingredient exists in data/ingr_comp/ingr_info.tsv. The test_ic_full_vocab_coverage test will protect you from typos.


Sources

The framework

  • Ahn, Y.-Y., Ahnert, S. E., Bagrow, J. P., & Barabási, A.-L. (2011). Flavor network and the principles of food pairing. Scientific Reports 1, 196. DOI 10.1038/srep00196. Data on Zenodo 11449658 (MIT).
  • Jain, A., Rakhi, N. K., & Bagler, G. (2015). Analysis of Food Pairing in Regional Cuisines of India. PLOS ONE 10(10): e0139539. DOI 10.1371/journal.pone.0139539.
  • Jain, A., Rakhi, N. K., & Bagler, G. (2015). Spices form the basis of food pairing in Indian cuisine. arXiv 1502.03815.
  • Varshney, L. R., Varshney, K. R., Wang, J., & Myers, D. (2013). Flavor Pairing in Medieval European Cuisine: A Study in Cooking with Dirty Data. IJCAI workshop paper, Semantic Scholar.
  • Garg, N., et al. (2018). FlavorDB: a database of flavor molecules. Nucleic Acids Research 46, D1210–D1216. DOI 10.1093/nar/gkx957.
  • Park, D., et al. (2021). FlavorGraph: a large-scale food-chemical graph… Scientific Reports 11, 931. Nature link.

The cuisine

The cinema (epigraphs)

  • 李安, 饮食男女 / Eat Drink Man Woman (1994). Opening line from the 礼记・礼运 chapter.
  • 周星驰, 食神 / The God of Cookery (1996).
  • Deewar (1975), Yash Chopra. Same calendar year as Chicken Manchurian.
  • Ratatouille (2007), Pixar. "Anyone can cook" is the Remy version of Stephen Chow's "人人都是食神"; this is not accidental.

The wrench in every flavor network

  • Ikeda, K. (1908). New seasonings. Reprinted in Chemical Senses 27(9), 847–849 (2002). DOI 10.1093/chemse/27.9.847. The discovery of glutamate umami and the reason Ahn's graph is blind to the ingredient most responsible for the Indian-Chinese restaurant experience.
  • Bautista, D. M., et al. (2008). Pungent agents from Szechuan peppers excite sensory neurons by inhibiting two-pore potassium channels. Nature Neuroscience 11, 772–779. DOI 10.1038/nn.2143. Why real Sichuan tingles and why Ahn's graph does not see it.

Public-domain colour palette


License

MIT on the code; see LICENSE. Bundled Ahn 2011 data is also MIT, per the per-directory LICENSE files included in the Zenodo archive. Our YAML corpora are released under the project MIT licence; each recipe entry names the consensus sources it was consolidated from.

Please do not launch a restaurant chain named "tangragraph". Please do not feed anyone Chicken Manchurian and claim it is from Manchuria. If you visit Tangra, please support one of the few remaining family-run restaurants — the community is down to roughly 2,000 people.

Acknowledgements

"只要用心,人人都是食神。"
— 周星驰, 食神. With heart, anyone is the God of Cookery. Without heart, at least anyone with a grep pipeline can be a referee.

  • Yong-Yeol Ahn, Sebastian Ahnert, James Bagrow, and Albert-László Barabási — for publishing a dataset and a method that have held up to fifteen years of replication attempts, including this one.
  • Ganesh Bagler and the Cosylab group at IIIT-Delhi — for Jain 2015 and FlavorDB, both of which fix the "Ahn's Indian corpus is Americanised" problem in the right way.
  • Nelson Wang — for the dish and the anecdote. Without both this repository would lack its load-bearing comedy.
  • Fuchsia Dunlop — for Invitation to a Banquet, which got the real Dongbei canon into our Stage-1 reading list.
  • Chitrita Banerji, Vir Sanghvi, and Amitav Ghosh — for writing about Indian food in a way that made a pipeline like this one feel continuous with a much older conversation.
  • Amal Sankar — for writing Sankar 2017 and ending the abstract with "neither Indian, nor Chinese", which turned out to be a coordinate in a graph.
  • Philip K. Dick — for the shape of this question. Do Androids Dream of Electric Sheep? is the correct title of any project that wants to know whether a thing is really another thing.
  • George Lucas — for the precedent that a popular name (parsec, Tatooine, Manchurian) can be wrong in the same load-bearing way for generations, provided the popular name is catchy enough.

Built with a public Zenodo dataset and somebody else's fifteen-year-old pairing metric. If this repo helps your teaching, consider citing Ahn 2011, Jain 2015, and Sankar 2017 before citing this repository.

About

Ahn 2011 / Jain 2015 flavor-pairing framework applied to Indian-Chinese cuisine — the fusion invented in Tangra (Kolkata, c. 1900) and renamed 'Manchurian' in Bombay (1975). Gives Sankar 2017's 'neither Indian nor Chinese' a coordinate.

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages