Disclaimer: This article is satirical. The selective outrage, double standards, and oversimplified analysis are intentional elements of the satire.
One morning, as India awoke from troubled dreams, it found itself transformed in its bed into a monstrous villain. It lay on its hard, armored back feeling the weight of accusation pressing down upon it. Lifting its head slightly, it could see the figure of Mr. President looming in the doorway, his finger already extended in judgment.
“You have been summoned,” said Mr. President without greeting. His voice carried the impersonal authority of one who need not explain himself. “The evidence of your transgressions has been documented.” He did not specify which court had found India guilty, nor did he need to. The machinery of condemnation had been set in motion long before this moment.
The charges were read from a scroll that seemed to extend infinitely: petroleum imports from Russia rising from 280 million to 724 million (Figure 1), a crime made more severe by its mathematical precision. India attempted to explain that it had merely participated in the global market, but found its mouth unable to form words that would be understood. The language of self-defense had been declared inadmissible.
Figure 1: Petroleum imported by India from Russia
“You have taken oil,” continued Mr. President, “and through processes both mysterious and condemnable, transformed it into different oil, which you then sold to Europe. (Figure 2)” He spoke as though describing an obscene ritual. “This is not permitted.” He did not clarify who had established these permissions, or when India had been informed of them.
Figure 2: Indian Petroleam Export to EU
India tried to point to others in the waiting room—China sat comfortably in one corner, Europe huddled beneath blankets in another—but (Figure 3) Mr. President’s gaze remained fixed, as though these others existed in a different dimension, visible to India but not to him. “Their circumstances are different,” he said, though he did not elaborate on the nature of these differences. “Their geographies and histories have been properly filed and approved.”
Figure 3: Top Payers to Russia for Fossil Fuels
A clerk appeared with a thick ledger documenting India’s arms relationship with Russia (Figure 4). The clerk wore spectacles but did not appear to read through them; the contents of the ledger were apparently known to him through some other sense. “The diversification is noted,” said the clerk, “but has been deemed insufficient.” He did not specify what threshold would have been sufficient, nor did he seem to think this information relevant.
Figure 4: Arms import by India
When India attempted to introduce evidence of America’s own arms dealings (Figure 5), the clerk closed his ledger with a decisive snap. “That is a separate department,” he said. “Different forms would be required, which must be submitted in triplicate to an office whose location changes daily.” He smiled thinly. “Business is business, after all.”
Figure 5: Export of Arms to Israel
The proceedings continued without clear indication of when they had begun or might end. India’s status as a democracy was acknowledged but found to be an aggravating rather than mitigating factor. “A democracy,” said Mr. President, “should know better than to exercise independence.” The paradox did not appear to trouble him.
As the indictment concluded, India realized that no defense had been requested, no opportunity for rebuttal provided. The judgment had been rendered before the charges were even read. “You must choose sides,” said Mr. President, though there was clearly only one choice being offered. “Now, not later.” The distinction between now and later remained unclear, as though time itself had been compressed into a single, eternal moment of decision.
India looked around for an exit but found only walls covered in regulations written in fading ink, their meanings obscured by countless amendments and exceptions. It understood then that it had always been guilty, and would remain so indefinitely. The trial, such as it was, had been merely a formality—the bureaucratic confirmation of a sentence long ago determined by some hidden cause.
---title: "The Indictment"author: "Asitav Sen"date: "2025-08-08"date-modified: "2025-08-11"categories: [article,analysis]image: "chart.png"format: html: page-layout: article toc: false lightbox: auto---```{r init, message=FALSE, warning=FALSE, include=FALSE, paged.print=FALSE}# Load required librarieslibrary(highcharter)library(dplyr)library(tidyr)library(lubridate)#' Custom Theme for Highcharter Plotscustom_theme <- hc_theme( colors = c("#3b5998", "#8b9dc3", "#ff4500", "#FFD700", "#ADFF2F", "#20B2AA"), chart = list( backgroundColor = "#FFF1E5", style = list(fontFamily = "Arial, sans-serif") ), title = list( style = list( color = "#333333", fontWeight = "bold", textDecoration = "underline" ) ), subtitle = list(style = list(color = "#666666")), xAxis = list( gridLineColor = "#e6e6e6", labels = list(style = list(color = "#333333")), lineColor = "#e6e6e6" ), yAxis = list( gridLineColor = "#e6e6e6", labels = list(style = list(color = "#333333")), lineColor = "#e6e6e6" ), legend = list( itemStyle = list(color = "#333333"), itemHoverStyle = list(color = "#000000") ))russian.export<-read.csv("rus_oi_exp.csv")#russian.exportindia.arm.import<-read.csv("india_arms_import.csv")#india.arm.importexport.to.is<-read.csv("export_to_is.csv")#export.to.isindia.oil.export.eu<-read.csv("Ind_Oil_exp_eu.csv")#india.oil.export.euind.oil.imp<-read.csv("Ind_oil_import.csv")```*Disclaimer: This article is satirical. The selective outrage, double standards, and oversimplified analysis are intentional elements of the satire.*One morning, as India awoke from troubled dreams, it found itself transformed in its bed into a monstrous villain. It lay on its hard, armored back feeling the weight of accusation pressing down upon it. Lifting its head slightly, it could see the figure of Mr. President looming in the doorway, his finger already extended in judgment."You have been summoned," said Mr. President without greeting. His voice carried the impersonal authority of one who need not explain himself. "The evidence of your transgressions has been documented." He did not specify which court had found India guilty, nor did he need to. The machinery of condemnation had been set in motion long before this moment.The charges were read from a scroll that seemed to extend infinitely: petroleum imports from Russia rising from 280 million to 724 million (@fig-petroleum-import), a crime made more severe by its mathematical precision. India attempted to explain that it had merely participated in the global market, but found its mouth unable to form words that would be understood. The language of self-defense had been declared inadmissible.```{r}#| label: fig-petroleum-import#| echo: false#| error: false#| message: false#| warning: false#| cache: TRUE#| fig-cap: Petroleum imported by India from Russia# Read the datadata <- ind.oil.imp# Convert MonthYear to Datedata$Date <-as.Date(data$MonthYear)# Create the highcharter timeseries plothighchart(type ="stock") |>hc_chart(style =list(fontFamily ="Arial, sans-serif"),backgroundColor ="#FFF1E5",marginBottom =100,events =list(load =JS("function() { var bgRect = this.renderer.rect( 0, this.chartHeight - 40, this.chartWidth, 30, 0 ) .attr({ fill: '#3b5998', stroke: 'none' }) .add(); var logo = this.renderer.image( 'https://blog.asitavsen.com/img/logo.png', this.chartWidth - 140, this.chartHeight - 35, 100, 20 ) .css({ 'cursor': 'pointer' }) .add(); var sourceText = this.renderer.text( 'Source: Ministry of Commerce and Industry, India', 10, this.chartHeight - 20 ) .css({ 'font-size': '12px', 'color': '#FFFFFF', 'font-family': 'Arial' }) .add(); logo.on('click', function() { window.open('https://blog.asitavsen.com', '_blank'); }); }") ) ) |>hc_title(text ="India's Petroleum Imports from Russia",align ="left",style =list(fontSize ="18px") ) |>hc_subtitle(text ="Monthly values in million USD (2021-2025)",align ="left" ) |>hc_add_series(data = data |>select(Date, Value) |>arrange(Date) |>mutate(Date =as.numeric(as.POSIXct(Date)) *1000) |>as.matrix(),type ="area",name ="Petroleum Imports",color ="#3b5998",fillColor =list(linearGradient =list(x1 =0, y1 =0, x2 =0, y2 =1 ),stops =list(list(0, "rgba(118, 143, 194, 0.7)"),list(1, "rgba(119, 211, 237, 0.1)") ) ),threshold =NULL,lineWidth =2 ) |>hc_xAxis(type ="datetime",labels =list(format ="{value:%b %Y}" ),gridLineWidth =0.3,gridLineColor ="gray" ) |>hc_yAxis(title =list(text ="Import Value (Million USD)"),labels =list(format ="${value}"),gridLineWidth =0.3,gridLineColor ="gray" ) |>hc_tooltip(valuePrefix ="$",valueSuffix =" million",xDateFormat ="%B %Y" ) |>hc_plotOptions(series =list(marker =list(enabled =TRUE,radius =3 ) ) ) |># Add marker for war starthc_add_series(type ="flags",data =list(list(x =as.numeric(as.POSIXct("2022-02-24")) *1000,title ="War",text ="Russian Invasion of Ukraine" ) ),onSeries ="Petroleum Imports",shape ="squarepin",width =16 ) |>hc_navigator(enabled =FALSE ) |>hc_scrollbar(enabled =FALSE ) |>hc_rangeSelector(enabled =FALSE ) |>hc_credits(enabled =FALSE)|>hc_exporting(enabled =TRUE)```"You have taken oil," continued Mr. President, "and through processes both mysterious and condemnable, transformed it into different oil, which you then sold to Europe. (@fig-ind-export-eu)" He spoke as though describing an obscene ritual. "This is not permitted." He did not clarify who had established these permissions, or when India had been informed of them.```{r}#| label: fig-ind-export-eu#| echo: false#| error: false#| message: false#| warning: false#| cache: TRUE#| fig-cap: Indian Petroleam Export to EU# Read the datadata <- india.oil.export.eu# Convert MonthYear to Datedata$Date <-as.Date(data$MonthYear)# Create the highcharter plothighchart(type ="stock") |>hc_chart(style =list(fontFamily ="Arial, sans-serif"),backgroundColor ="#FFF1E5",marginBottom =100,events =list(load =JS("function() { var bgRect = this.renderer.rect( 0, this.chartHeight - 40, this.chartWidth, 30, 0 ) .attr({ fill: '#3b5998', stroke: 'none' }) .add(); var logo = this.renderer.image( 'https://blog.asitavsen.com/img/logo.png', this.chartWidth - 140, this.chartHeight - 35, 100, 20 ) .css({ 'cursor': 'pointer' }) .add(); var sourceText = this.renderer.text( 'Source: Ministry of Commerce and Industry, India', 10, this.chartHeight - 20 ) .css({ 'font-size': '12px', 'color': '#FFFFFF', 'font-family': 'Arial' }) .add(); logo.on('click', function() { window.open('https://blog.asitavsen.com', '_blank'); }); }") ) ) |>hc_title(text ="India's Oil Exports to EU",align ="left",style =list(fontSize ="18px") ) |>hc_add_series(data = data,type ="line",hcaes(x = Date, y = Value),name ="Oil Exports (Million USD)",color="#3b5998" ) |>hc_xAxis(title =list(text =""),gridLineWidth =0.3,gridLineColor ="gray" ) |>hc_yAxis(title =list(text ="Exports (Million USD)"),labels =list(format ="{value}"),gridLineWidth =0.3,gridLineColor ="gray" ) |>hc_navigator(enabled = FALSE#,# height = 30,# yAxis = list(# top = "5%", # Moves slider up# height = 50 # Adjust height as needed#)) |>hc_scrollbar(enabled =FALSE) |>hc_legend(align ="right",verticalAlign ="top",layout ="horizontal" ) |>hc_tooltip(valueDecimals =2,valuePrefix ="$" ) |># Add marker for war starthc_add_series(type ="flags",data =list(list(x =as.numeric(as.POSIXct("2022-02-24")) *1000,title ="War Start",text ="Russian Invasion of Ukraine" ) ),onSeries =0,shape ="circlepin",width =80 ) |>hc_plotOptions(series =list(marker =list(enabled =TRUE,radius =3 ) ) ) |>hc_credits(enabled =FALSE)|>hc_exporting(enabled =TRUE)```India tried to point to others in the waiting room—China sat comfortably in one corner, Europe huddled beneath blankets in another—but (@fig-payments-to-russia) Mr. President's gaze remained fixed, as though these others existed in a different dimension, visible to India but not to him. "Their circumstances are different," he said, though he did not elaborate on the nature of these differences. "Their geographies and histories have been properly filed and approved."```{r}#| label: fig-payments-to-russia#| echo: false#| error: false#| message: false#| warning: false#| cache: TRUE#| fig-cap: Top Payers to Russia for Fossil Fuels# Prepare the data# Sum up Oil, Coal, and Gas for total fossil fuel purchasesdata <- russian.export |>mutate(Total = Oil + Coal + Gas) |>select(destination_country, period, Total) |># Keep top 10 countries by total purchasesgroup_by(destination_country) |>summarise(`From 2023`=sum(Total[period =="From 1 January 2023 until 01 August 2025"]),`Since War`=sum(Total[period =="From beginning of the war until 01 August 2025"]) ) |>arrange(desc(`Since War`)) |>head(10)# Create the highcharthighchart() |>hc_chart(type ="column") |>hc_xAxis(categories = data$destination_country) |>hc_yAxis(title =list(text ="Value (USD)"),labels =list(formatter =JS("function() { return this.value / 1e9 + 'B'; }")) ) |>hc_add_series(name ="Since Start of War(Feb 24 2022) to Aug 06 2025",data = data$`Since War`,color ="#f6262d" ) |>hc_add_series(name ="From Jan 01 2023 to Aug 06 2025",data = data$`From 2023`,color ="#3b5998" ) |>hc_plotOptions(column =list(groupPadding =0.1,pointPadding =0.05 ) ) |>hc_chart(style =list(fontFamily ="Arial, sans-serif"),backgroundColor ="#FFF1E5",marginBottom =100,events =list(load =JS("function() { var bgRect = this.renderer.rect( 0, this.chartHeight - 40, this.chartWidth, 30, 0 ) .attr({ fill: '#3b5998', stroke: 'none' }) .add(); var logo = this.renderer.image( 'https://blog.asitavsen.com/img/logo.png', this.chartWidth - 140, this.chartHeight - 35, 100, 20 ) .css({ 'cursor': 'pointer' }) .add(); var sourceText = this.renderer.text( 'Source: Centre for Research on Energy and Clean Air', 10, this.chartHeight - 20 ) .css({ 'font-size': '12px', 'color': '#FFFFFF', 'font-family': 'Arial' }) .add(); logo.on('click', function() { window.open('https://blog.asitavsen.com', '_blank'); }); }") ) ) |>hc_title(text ="Top Payers to Russia for Fossil Fuels",align ="left",style =list(fontSize ="18px") ) |>hc_yAxis(title =list(text ="Purchase in USD"),labels =list(format ="{value}"),gridLineWidth =0.3,gridLineColor ="gray" ) |>hc_xAxis(title =list(text =""),allowDecimals =FALSE,gridLineWidth =0.3,gridLineColor ="gray" ) |>hc_legend(align ="right",verticalAlign ="top",layout ="horizontal" ) |>hc_tooltip(shared =FALSE,formatter =JS("function() { return '<b>' + this.x + '</b><br/>' + this.series.name + ': $' + Highcharts.numberFormat(this.y / 1e9, 1) + ' billion'; }") ) |>hc_add_theme(custom_theme) |>hc_credits(enabled =FALSE)|>hc_exporting(enabled =TRUE)```A clerk appeared with a thick ledger documenting India's arms relationship with Russia (@fig-india-arms-import). The clerk wore spectacles but did not appear to read through them; the contents of the ledger were apparently known to him through some other sense. "The diversification is noted," said the clerk, "but has been deemed insufficient." He did not specify what threshold would have been sufficient, nor did he seem to think this information relevant.```{r}#| label: fig-india-arms-import#| echo: false#| error: false#| message: false#| warning: false#| cache: TRUE#| fig-cap: Arms import by India# Read the datadata <- india.arm.import# Prepare data for plotting (excluding total row)plot_data <- data |>filter(Supplier !="Total exports to India") |>select(Supplier, `X2015`:`X2024`) |>pivot_longer(cols =-Supplier, names_to ="Year", values_to ="Imports") |>mutate(Year =as.numeric(gsub("X", "", Year)),Imports =as.numeric(Imports) ) |>complete(Supplier, Year =2015:2024, fill =list(Imports =0))# Top 5 supplierstop_suppliers <- plot_data |>group_by(Supplier) |>summarise(Total =sum(Imports, na.rm =TRUE)) |>top_n(5, Total) |>pull(Supplier)# Filter data for top suppliersplot_data_filtered <- plot_data |>filter(Supplier %in% top_suppliers)# Create color palettecolors <-c("#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd")# Highcharter plothighchart() |>hc_chart(style =list(fontFamily ="Arial, sans-serif"),backgroundColor ="#FFF1E5",marginBottom =100,events =list(load =JS("function() { var bgRect = this.renderer.rect( 0, this.chartHeight - 40, this.chartWidth, 30, 0 ) .attr({ fill: '#3b5998', stroke: 'none' }) .add(); var logo = this.renderer.image( 'https://blog.asitavsen.com/img/logo.png', this.chartWidth - 140, this.chartHeight - 35, 100, 20 ) .css({ 'cursor': 'pointer' }) .add(); var sourceText = this.renderer.text( 'Source: Ministry of Commerce and Industry, India', 10, this.chartHeight - 20 ) .css({ 'font-size': '12px', 'color': '#FFFFFF', 'font-family': 'Arial' }) .add(); logo.on('click', function() { window.open('https://blog.asitavsen.com', '_blank'); }); }") ) ) |>hc_title(text ="India's Arms Imports by Top 5 Suppliers (2015-2024)",align ="left",style =list(fontSize ="18px") ) |>hc_xAxis(categories =2015:2024,title =list(text ="Year"),gridLineWidth =0.3,gridLineColor ="gray" ) |>hc_yAxis(title =list(text ="Arms Imports"),gridLineWidth =0.3,gridLineColor ="gray" ) |>hc_add_series_list(lapply(unique(plot_data_filtered$Supplier), function(supplier) {list(name = supplier,data = plot_data_filtered |>filter(Supplier == supplier) |>arrange(Year) |>pull(Imports),color = colors[match(supplier, unique(plot_data_filtered$Supplier))] ) }) ) |>hc_legend(align ="right",verticalAlign ="top",layout ="horizontal" ) |>hc_tooltip(shared = FALSE#,# formatter = JS("function() {# var tooltip = '<b>' + this.x + '</b><br/>';# this.points.forEach(function(point) {# tooltip += point.series.name + ': ' + point.y + '<br/>';# });# return tooltip;# }") ) |>hc_plotOptions(series =list(marker =list(enabled =TRUE,radius =3 ) ) ) |>hc_credits(enabled =FALSE)|>hc_exporting(enabled =TRUE)```When India attempted to introduce evidence of America's own arms dealings (@fig-export-to-is), the clerk closed his ledger with a decisive snap. "That is a separate department," he said. "Different forms would be required, which must be submitted in triplicate to an office whose location changes daily." He smiled thinly. "Business is business, after all."```{r}#| label: fig-export-to-is#| echo: false#| error: false#| message: false#| warning: false#| cache: TRUE#| fig-cap: Export of Arms to Israel #| # Read the datadata <- export.to.is# Prepare data for plotting (excluding total row)plot_data <- data |>filter(Supplier !="Total exports to Israel") |>select(Supplier, `X2015`:`X2024`) |>pivot_longer(cols =-Supplier, names_to ="Year", values_to ="Exports") |>mutate(Year =as.numeric(gsub("X", "", Year)),Exports =as.numeric(Exports) ) |>complete(Supplier, Year =2015:2024, fill =list(Exports =0))# Create color palettecolors <-c("#1f77b4", "#ff7f0e", "#2ca02c")# Highcharter plothighchart() |>hc_chart(style =list(fontFamily ="Arial, sans-serif"),backgroundColor ="#FFF1E5",marginBottom =100,events =list(load =JS("function() { var bgRect = this.renderer.rect( 0, this.chartHeight - 40, this.chartWidth, 30, 0 ) .attr({ fill: '#3b5998', stroke: 'none' }) .add(); var logo = this.renderer.image( 'https://blog.asitavsen.com/img/logo.png', this.chartWidth - 140, this.chartHeight - 35, 100, 20 ) .css({ 'cursor': 'pointer' }) .add(); var sourceText = this.renderer.text( 'Source: Stockholm International Peace Research Institute', 10, this.chartHeight - 20 ) .css({ 'font-size': '12px', 'color': '#FFFFFF', 'font-family': 'Arial' }) .add(); logo.on('click', function() { window.open('https://blog.asitavsen.com', '_blank'); }); }") ) ) |>hc_title(text ="Arms Exports to Israel by Supplier (2015-2024)",align ="left",style =list(fontSize ="18px") ) |>hc_xAxis(categories =2015:2024,title =list(text ="Year"),gridLineWidth =0.3,gridLineColor ="gray" ) |>hc_yAxis(title =list(text ="Arms Exports (SIPRI TIV)"),gridLineWidth =0.3,gridLineColor ="gray" ) |>hc_add_series_list(lapply(unique(plot_data$Supplier), function(supplier) {list(name = supplier,data = plot_data |>filter(Supplier == supplier) |>arrange(Year) |>pull(Exports),color = colors[match(supplier, unique(plot_data$Supplier))] ) }) ) |>hc_legend(align ="right",verticalAlign ="top",layout ="horizontal" ) |>hc_tooltip(shared = FALSE#,# formatter = JS("function() {# var tooltip = '<b>' + this.x + '</b><br/>';# this.points.forEach(function(point) {# tooltip += point.series.name + ': ' + point.y + ' SIPRI TIV<br/>';# });# return tooltip;# }") ) |>hc_plotOptions(column =list(stacking ="normal",dataLabels =list(enabled =FALSE,format ="{point.y}" ) ) ) |>hc_credits(enabled =FALSE)|>hc_exporting(enabled =TRUE)```The proceedings continued without clear indication of when they had begun or might end. India's status as a democracy was acknowledged but found to be an aggravating rather than mitigating factor. "A democracy," said Mr. President, "should know better than to exercise independence." The paradox did not appear to trouble him.As the indictment concluded, India realized that no defense had been requested, no opportunity for rebuttal provided. The judgment had been rendered before the charges were even read. "You must choose sides," said Mr. President, though there was clearly only one choice being offered. "Now, not later." The distinction between now and later remained unclear, as though time itself had been compressed into a single, eternal moment of decision.India looked around for an exit but found only walls covered in regulations written in fading ink, their meanings obscured by countless amendments and exceptions. It understood then that it had always been guilty, and would remain so indefinitely. The trial, such as it was, had been merely a formality—the bureaucratic confirmation of a sentence long ago determined by some hidden cause.