Create a detailed presentation on topic sarp vish with the help of Agadtantra evam Vidhivaidhak book for the presentation infront of class
mkdir -p /tmp/workspace/sarp-vish-ppt && ls /tmp/workspace/sarp-vish-ppt/
~/sarp-vish-ppt/create_ppt.py
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from io import BytesIO
# ─── Color palette (Ayurvedic/Medical theme) ───────────────────────────────
DEEP_GREEN = RGBColor(0x1B, 0x5E, 0x20) # header/accent
DARK_GREEN = RGBColor(0x2E, 0x7D, 0x32)
MID_GREEN = RGBColor(0x43, 0xA0, 0x47)
LIGHT_GREEN = RGBColor(0xC8, 0xE6, 0xC9)
SAFFRON = RGBColor(0xFF, 0x8F, 0x00) # Ayurvedic accent
DARK_SAFFRON = RGBColor(0xE6, 0x51, 0x00)
BG_CREAM = RGBColor(0xF9, 0xF6, 0xEE) # slide background
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
BLACK = RGBColor(0x1A, 0x1A, 0x1A)
GRAY = RGBColor(0x55, 0x55, 0x55)
LIGHT_GRAY = RGBColor(0xF5, 0xF5, 0xF5)
RED_DARK = RGBColor(0xB7, 0x1C, 0x1C)
BLUE_DARK = RGBColor(0x0D, 0x47, 0xA1)
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
blank = prs.slide_layouts[6]
def fill_bg(slide, color):
from pptx.util import Emu
bg = slide.background
fill = bg.fill
fill.solid()
fill.fore_color.rgb = color
def add_rect(slide, l, t, w, h, fill_color, line_color=None, line_width=None):
shape = slide.shapes.add_shape(1, Inches(l), Inches(t), Inches(w), Inches(h))
shape.fill.solid()
shape.fill.fore_color.rgb = fill_color
if line_color:
shape.line.color.rgb = line_color
if line_width:
shape.line.width = Pt(line_width)
else:
shape.line.fill.background()
return shape
def add_text(slide, text, l, t, w, h, size=18, bold=False, color=BLACK,
align=PP_ALIGN.LEFT, italic=False, wrap=True, font="Calibri"):
tb = slide.shapes.add_textbox(Inches(l), Inches(t), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = wrap
tf.margin_left = 0
tf.margin_right = 0
tf.margin_top = Pt(2)
tf.margin_bottom = 0
p = tf.paragraphs[0]
p.alignment = align
r = p.add_run()
r.text = text
r.font.name = font
r.font.size = Pt(size)
r.font.bold = bold
r.font.italic = italic
r.font.color.rgb = color
return tf
def add_multiline(slide, lines, l, t, w, h, size=16, bold=False, color=BLACK,
align=PP_ALIGN.LEFT, font="Calibri", line_spacing=None):
"""lines: list of (text, bold, color) tuples OR plain strings"""
tb = slide.shapes.add_textbox(Inches(l), Inches(t), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = True
tf.margin_left = 0
tf.margin_right = 0
tf.margin_top = 0
tf.margin_bottom = 0
first = True
for line in lines:
if isinstance(line, str):
txt, b, c = line, bold, color
else:
txt, b, c = line
if first:
p = tf.paragraphs[0]
first = False
else:
p = tf.add_paragraph()
p.alignment = align
if line_spacing:
from pptx.util import Pt as Ptt
p.line_spacing = Ptt(line_spacing)
r = p.add_run()
r.text = txt
r.font.name = font
r.font.size = Pt(size)
r.font.bold = b
r.font.color.rgb = c
return tf
def header_bar(slide, title, subtitle=None):
"""Full-width green header with optional subtitle"""
add_rect(slide, 0, 0, 13.333, 1.2, DEEP_GREEN)
add_rect(slide, 0, 1.2, 13.333, 0.06, SAFFRON)
add_text(slide, title, 0.4, 0.08, 12, 0.75, size=34, bold=True,
color=WHITE, align=PP_ALIGN.LEFT, font="Calibri")
if subtitle:
add_text(slide, subtitle, 0.4, 0.75, 12, 0.5, size=16,
color=LIGHT_GREEN, align=PP_ALIGN.LEFT, font="Calibri")
def bullet_slide(slide, heading, bullets, col2_heading=None, col2_bullets=None):
fill_bg(slide, BG_CREAM)
header_bar(slide, heading)
# Left column
y = 1.4
for item in bullets:
if isinstance(item, tuple):
txt, indent = item
else:
txt, indent = item, 0
bx = 0.5 + indent * 0.35
add_text(slide, "▶", bx, y, 0.4, 0.45, size=13, bold=True,
color=SAFFRON, align=PP_ALIGN.LEFT)
add_text(slide, txt, bx + 0.35, y, 5.6 - bx, 0.55, size=15,
color=BLACK, wrap=True)
y += 0.45
# Right column
if col2_heading and col2_bullets:
add_rect(slide, 6.9, 1.35, 6.1, 5.8, LIGHT_GREEN, line_color=MID_GREEN, line_width=1)
add_text(slide, col2_heading, 7.0, 1.45, 5.8, 0.5, size=17, bold=True,
color=DEEP_GREEN, align=PP_ALIGN.LEFT)
y2 = 2.1
for item in col2_bullets:
add_text(slide, "• " + item, 7.0, y2, 5.7, 0.55, size=14, color=BLACK, wrap=True)
y2 += 0.47
# ═══════════════════════════════════════════════════════════
# SLIDE 1 — TITLE SLIDE
# ═══════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
fill_bg(slide, DEEP_GREEN)
add_rect(slide, 0, 0, 13.333, 7.5, DEEP_GREEN)
# Decorative top saffron band
add_rect(slide, 0, 0, 13.333, 0.18, SAFFRON)
# Decorative bottom band
add_rect(slide, 0, 7.1, 13.333, 0.4, SAFFRON)
# Side accent
add_rect(slide, 0, 0.18, 0.18, 6.92, MID_GREEN)
# Central white card
add_rect(slide, 1.2, 1.0, 10.9, 5.2, WHITE, line_color=SAFFRON, line_width=2)
# Inner light band
add_rect(slide, 1.2, 1.0, 10.9, 0.12, SAFFRON)
add_text(slide, "सर्प विष", 1.4, 1.3, 10.6, 1.4, size=52, bold=True,
color=DEEP_GREEN, align=PP_ALIGN.CENTER, font="Calibri")
add_text(slide, "SARP VISH | Snake Venom Poisoning", 1.4, 2.65, 10.6, 0.75,
size=26, bold=True, color=DARK_SAFFRON, align=PP_ALIGN.CENTER)
add_rect(slide, 2.5, 3.45, 8.3, 0.06, MID_GREEN)
add_text(slide, "Agadtantra Evam Vidhivaidhak Ayurveda", 1.4, 3.58, 10.6, 0.55,
size=20, bold=False, color=DARK_GREEN, align=PP_ALIGN.CENTER, italic=True)
add_text(slide, "Reference: P C Dikshit Textbook of Forensic Medicine & Toxicology", 1.4, 4.1, 10.6, 0.45,
size=14, color=GRAY, align=PP_ALIGN.CENTER)
add_text(slide, "Class Presentation | Ayurveda / Forensic Toxicology", 1.4, 4.7, 10.6, 0.45,
size=15, color=GRAY, align=PP_ALIGN.CENTER)
# ═══════════════════════════════════════════════════════════
# SLIDE 2 — INTRODUCTION & OVERVIEW
# ═══════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
fill_bg(slide, BG_CREAM)
header_bar(slide, "Introduction to Sarp Vish", "Snake venom — Definition & Overview")
add_rect(slide, 0.4, 1.35, 8.2, 5.75, WHITE, line_color=MID_GREEN, line_width=1)
add_rect(slide, 0.4, 1.35, 8.2, 0.08, MID_GREEN)
intro_lines = [
("What is Sarp Vish (Snake Venom)?", True, DEEP_GREEN),
("", False, BLACK),
("Snake venom is the secretion of the racemose salivary glands — a modification", False, BLACK),
("of the parotid salivary gland of vertebrates, situated below and behind each eye,", False, BLACK),
("invested in a muscular sheath.", False, BLACK),
("", False, BLACK),
("Key facts:", True, DARK_GREEN),
("• Venom is stored in large alveoli before being conveyed by a duct to the fang base.", False, BLACK),
("• Venom is POISONOUS only when INJECTED — not absorbed by stomach mucosa.", False, BLACK),
("• Blood of animals bitten by snakes can be lethal if injected into a human.", False, BLACK),
("• The Vipers have the most highly developed poison apparatus.", False, BLACK),
("", False, BLACK),
("In Ayurveda (Agadtantra), it is termed SARP VISH — one of the", False, BLACK),
("eight types of Jangama Visha (animal poisons).", False, BLACK),
]
add_multiline(slide, intro_lines, 0.55, 1.5, 7.9, 5.5, size=14, font="Calibri")
# Right panel: classification box
add_rect(slide, 8.9, 1.35, 4.0, 5.75, DEEP_GREEN)
add_text(slide, "Sarp Classification", 9.0, 1.42, 3.8, 0.5, size=16, bold=True, color=WHITE)
add_rect(slide, 8.9, 1.85, 4.0, 0.05, SAFFRON)
types = [
("1. Viperidae", "Viper / Russell's Viper / Echis"),
("2. Elapidae", "Cobra / Krait / Bungarus"),
("3. Hydrophidae", "Sea Snakes"),
("4. Colubridae", "Rear-fanged snakes"),
("Non-Poisonous", "Python, Rat Snake etc."),
]
y = 1.98
for name, desc in types:
add_text(slide, name, 9.0, y, 3.8, 0.38, size=14, bold=True, color=SAFFRON)
y += 0.34
add_text(slide, desc, 9.15, y, 3.65, 0.38, size=12, color=LIGHT_GREEN)
y += 0.38
# ═══════════════════════════════════════════════════════════
# SLIDE 3 — POISON APPARATUS & MECHANISM
# ═══════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
fill_bg(slide, BG_CREAM)
header_bar(slide, "Poison Apparatus & Bite Mechanism", "How venom is delivered")
# Three columns
boxes = [
("Solenoglyphous\n(Vipers)", DEEP_GREEN,
["Tubular, hollow fangs", "Maxillary bone movable", "Most developed apparatus",
"Masseter/temporal muscle wrings gland", "Fang erected by transverse bone", "e.g. Viper, Echis"]),
("Proteroglyphous\n(Elapids)", DARK_GREEN,
["Front-channelled fangs", "Not tubular — open groove", "Maxillary not movable vertically",
"Venom duct runs above maxilla", "Bend only at anterior end", "e.g. Cobra, Krait"]),
("Opisthoglyphous\n(Rear-fanged)", MID_GREEN,
["Grooved teeth at posterior maxilla", "Light yellow secretory gland", "Smaller gland",
"Duct larger than other saliva ducts", "e.g. some Colubrids"]),
]
for i, (title, col, pts) in enumerate(boxes):
x = 0.4 + i * 4.25
add_rect(slide, x, 1.38, 4.0, 5.7, col)
add_text(slide, title, x + 0.1, 1.45, 3.8, 0.7, size=16, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_rect(slide, x, 2.12, 4.0, 0.05, SAFFRON)
y = 2.25
for pt in pts:
add_text(slide, "• " + pt, x + 0.15, y, 3.7, 0.5, size=13, color=WHITE, wrap=True)
y += 0.5
# ═══════════════════════════════════════════════════════════
# SLIDE 4 — COMPOSITION OF SNAKE VENOM
# ═══════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
fill_bg(slide, BG_CREAM)
header_bar(slide, "Composition of Sarp Vish", "Biochemical constituents of snake venom")
# Left panel — General composition
add_rect(slide, 0.3, 1.35, 6.0, 5.75, WHITE, line_color=MID_GREEN, line_width=1)
add_rect(slide, 0.3, 1.35, 6.0, 0.45, DEEP_GREEN)
add_text(slide, "General Composition", 0.4, 1.38, 5.8, 0.42, size=16, bold=True, color=WHITE)
general = [
"1. Water — 75–80%",
"2. Proteins — 90–95% of dry weight",
"3. Non-protein nitrogen compounds",
"4. Carbohydrates",
"5. Lipids",
"6. Metal ions — Zn²⁺, Ca²⁺, Mg²⁺",
"7. Biogenic amines",
"8. Inorganic salts",
"",
"Enzymes present:",
" • Acetylcholine, 5-Hydroxytryptamine",
" • 5-nucleotidase, Endonucleases",
" • Transaminases, NAD nucleosidase",
" • Phosphodiesterase, ATP",
" • Acid phosphatase, Phosphomonoesterase",
]
y = 1.9
for line in general:
bold = line.endswith(":") or line.startswith(" ")
col = DARK_GREEN if line.startswith(" •") else (DEEP_GREEN if line.endswith(":") else BLACK)
add_text(slide, line, 0.45, y, 5.7, 0.4, size=13, bold=False, color=col, wrap=True)
y += 0.35
# Right panel split into colubrine / viperine
# Colubrine
add_rect(slide, 6.6, 1.35, 6.3, 2.75, DEEP_GREEN)
add_text(slide, "Colubrine Venom (Neurotoxic)", 6.7, 1.4, 6.1, 0.5, size=15, bold=True, color=WHITE)
add_rect(slide, 6.6, 1.88, 6.3, 0.05, SAFFRON)
cob = ["(i) Neurotoxin", "(ii) Cholinesterase", "(iii) Proteases",
"(iv) Phospholipidases", "(v) Hyaluronidase", "(vi) Ribonuclease",
"(vii) Thromboplastin", "(viii) Fibrinolysin", "(ix) Proteolysin",
"(x) Cardiotoxin", "(xi) Phospholipase A"]
y = 1.98
for i in range(0, len(cob), 2):
row = cob[i]
row2 = cob[i+1] if i+1 < len(cob) else ""
add_text(slide, row, 6.7, y, 3.0, 0.38, size=12, color=LIGHT_GREEN)
if row2:
add_text(slide, row2, 9.7, y, 3.0, 0.38, size=12, color=LIGHT_GREEN)
y += 0.36
# Viperine
add_rect(slide, 6.6, 4.2, 6.3, 2.9, DARK_SAFFRON)
add_text(slide, "Viperine Venom (Hemotoxic)", 6.7, 4.25, 6.1, 0.5, size=15, bold=True, color=WHITE)
add_rect(slide, 6.6, 4.72, 6.3, 0.05, WHITE)
vip = ["(i) Proteases", "(ii) Hyaluronidase", "(iii) Haemorrhagin",
"(iv) Haemolysin", "(v) Leucolysin", "(vi) Lecithinase",
"(vii) Cytolysin", "(viii) Thromboplastin", "(ix) Phospholipase A",
"(x) Proteinases"]
y = 4.82
for i in range(0, len(vip), 2):
row = vip[i]
row2 = vip[i+1] if i+1 < len(vip) else ""
add_text(slide, row, 6.7, y, 3.0, 0.38, size=12, color=WHITE)
if row2:
add_text(slide, row2, 9.7, y, 3.0, 0.38, size=12, color=WHITE)
y += 0.36
# ═══════════════════════════════════════════════════════════
# SLIDE 5 — PATHOPHYSIOLOGY / MECHANISM OF ACTION
# ═══════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
fill_bg(slide, BG_CREAM)
header_bar(slide, "Mechanism of Action of Sarp Vish", "How venom causes toxicity in the body")
# Two big panels
# Neurotoxic mechanism
add_rect(slide, 0.3, 1.38, 6.2, 5.7, DEEP_GREEN)
add_text(slide, "NEUROTOXIC ACTION\n(Colubrine — Cobra, Krait)", 0.45, 1.45, 6.0, 0.8,
size=17, bold=True, color=SAFFRON, align=PP_ALIGN.CENTER)
add_rect(slide, 0.3, 2.22, 6.2, 0.06, SAFFRON)
neuro = [
"Site: Central nervous mechanism controlling respiration",
"Cobra venom → muscular paralysis (curare-like action)",
"Sequence: Mouth & throat muscles → respiratory muscles",
"Action: Motor nerve cells affected (resembles curare)",
"Cobra → convulsions + paralysis",
"Krait → only muscular paralysis (no convulsions)",
"Effect on cardiovascular system (secondary)",
"Respiratory paralysis leads to DEATH",
"",
"Clinical: Little local swelling; rapid CNS involvement",
"Onset: Within 10–20 minutes",
]
y = 2.38
for line in neuro:
col = SAFFRON if "DEATH" in line else (LIGHT_GREEN if line.startswith("Clinical") or line.startswith("Onset") else WHITE)
add_text(slide, "• " + line if line and not line.startswith("•") else line,
0.5, y, 5.9, 0.45, size=13, color=col, wrap=True)
y += 0.44
# Hemotoxic mechanism
add_rect(slide, 6.8, 1.38, 6.2, 5.7, DARK_SAFFRON)
add_text(slide, "HEMOTOXIC / CYTOTOXIC ACTION\n(Viperine — Viper, Echis, Russell's)", 6.95, 1.45, 6.0, 0.8,
size=17, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_rect(slide, 6.8, 2.22, 6.2, 0.06, WHITE)
hemo = [
"Cytolysis of vascular endothelium cells",
"Lysis of RBCs and other tissue cells",
"Coagulation disorders (DIC)",
"Viper acts mainly on vascular system",
"Blood coagulation + pulmonary artery clotting",
"Haemostatic defects via multiple mechanisms",
"Daboia russelli: activates Factors V & X (procoagulant)",
"Defibrinogenation via fibrinolytic system",
"Platelet function — qualitative & quantitative defects",
"Russell's viper → massive intravascular haemolysis",
"Onset: Within seconds to 10 minutes",
]
y = 2.38
for line in hemo:
add_text(slide, "• " + line, 6.95, y, 5.9, 0.45, size=13, color=WHITE, wrap=True)
y += 0.44
# ═══════════════════════════════════════════════════════════
# SLIDE 6 — CLINICAL FEATURES
# ═══════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
fill_bg(slide, BG_CREAM)
header_bar(slide, "Clinical Features of Ophitoxaemia", "Signs & symptoms after snake bite")
# Comparison table
add_rect(slide, 0.3, 1.38, 12.7, 0.55, DEEP_GREEN)
for i, hdr in enumerate(["Feature", "Colubrine Bite (Neurotoxic)", "Viperine Bite (Hemotoxic)"]):
add_text(slide, hdr, 0.4 + i * 4.2, 1.42, 4.1, 0.45, size=15, bold=True,
color=WHITE, align=PP_ALIGN.CENTER)
rows = [
("Onset of symptoms", "Within 10–20 min", "Within seconds to 10 min"),
("Gangrene development", "Early, wet type", "Slower onset, dry type"),
("Local swelling", "Mild, not severe", "Severe, rapid spread"),
("Pain at bite site", "Not usually severe", "Intense pain"),
("Respiratory effects", "Respiratory paralysis", "Less common"),
("Bleeding tendency", "Rare", "Common — gums, GIT, urine"),
("Neurological", "Paralysis, convulsions", "Occasional CNS effects"),
("Cardiovascular", "Cardiac centre affected", "Vascular damage, DIC"),
("Renal failure", "Less common", "Common (Russell's viper)"),
("Coagulation defects", "Mild", "Severe — consumption coagulopathy"),
]
y = 2.0
for j, row in enumerate(rows):
bg = LIGHT_GREEN if j % 2 == 0 else WHITE
add_rect(slide, 0.3, y, 12.7, 0.45, bg)
for i, cell in enumerate(row):
bold = (i == 0)
col = DEEP_GREEN if i == 0 else (RED_DARK if "paralysis" in cell.lower() or "DIC" in cell or "failure" in cell.lower() else BLACK)
add_text(slide, cell, 0.4 + i * 4.2, y + 0.02, 4.1, 0.4, size=13,
bold=bold, color=col, align=PP_ALIGN.LEFT)
y += 0.46
add_text(slide, "* Rarer features: Hypopituitarism, Bilateral thalamic haematoma, Hysterical paralysis, Subarachnoid haemorrhage",
0.4, 6.7, 12.5, 0.4, size=11, color=GRAY, italic=True)
# ═══════════════════════════════════════════════════════════
# SLIDE 7 — SYSTEMIC MANIFESTATIONS
# ═══════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
fill_bg(slide, BG_CREAM)
header_bar(slide, "Systemic Manifestations of Sarp Vish", "Organ-system wise effects")
systems = [
("🧠 Neurological", DEEP_GREEN, ["Respiratory paralysis (cobra/krait)", "Motor nerve paralysis — curare-like", "Convulsions (cobra)", "EEG abnormalities in up to 96% of patients", "Temporal lobe abnormal patterns", "Bilateral thalamic haematoma (rare)", "Hysterical paralysis"]),
("🩸 Haematological", DARK_SAFFRON, ["Bleeding from gums, GIT, urinary tract", "Multiple petechiae and purpurae", "Disseminated Intravascular Coagulation", "Massive intravascular haemolysis", "Haematological changes — local & systemic", "Subarachnoid, subdural, extradural haemorrhage"]),
("❤️ Cardiovascular", MID_GREEN, ["Cytolysis of vascular endothelium", "Pulmonary artery clotting", "Coagulation of blood", "Cardiotoxin (cobra) — direct cardiac toxicity", "Hypotension, shock", "Bradycardia"]),
("🫘 Renal", BLUE_DARK, ["Acute Renal Failure", "Common in Russell's viper bites", "In 40 viper bites — 1/3 developed ARF", "Myoglobinuria", "Renal defects persist after coagulation normalises", "Multiple factors involved"]),
]
for i, (sys_name, col, pts) in enumerate(systems):
x = 0.3 + (i % 2) * 6.5
y = 1.42 + (i // 2) * 3.1
add_rect(slide, x, y, 6.15, 2.85, col)
add_text(slide, sys_name, x + 0.1, y + 0.05, 5.9, 0.5, size=16, bold=True, color=WHITE)
add_rect(slide, x, y + 0.55, 6.15, 0.05, WHITE)
yy = y + 0.7
for pt in pts:
add_text(slide, "• " + pt, x + 0.15, yy, 5.85, 0.38, size=12, color=WHITE, wrap=True)
yy += 0.36
# ═══════════════════════════════════════════════════════════
# SLIDE 8 — LABORATORY DIAGNOSIS
# ═══════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
fill_bg(slide, BG_CREAM)
header_bar(slide, "Laboratory Diagnosis in Ophitoxaemia", "Investigations for snake bite poisoning")
add_rect(slide, 0.3, 1.38, 12.7, 5.75, WHITE, line_color=MID_GREEN, line_width=1)
left_items = [
("HAEMATOLOGICAL TESTS", True, DEEP_GREEN),
("• Complete Blood Count (CBC)", False, BLACK),
("• Haemoglobin estimation", False, BLACK),
("• Platelet count", False, BLACK),
("• Peripheral smear — RBC morphology", False, BLACK),
("• Bleeding time / Clotting time", False, BLACK),
("", False, BLACK),
("COAGULATION PROFILE", True, DEEP_GREEN),
("• Prothrombin Time (PT)", False, BLACK),
("• Activated Partial Thromboplastin Time (aPTT)", False, BLACK),
("• Fibrinogen levels", False, BLACK),
("• D-Dimer (for DIC)", False, BLACK),
("• Fibrin Degradation Products (FDP)", False, BLACK),
("", False, BLACK),
("URINE ANALYSIS", True, DEEP_GREEN),
("• Myoglobinuria (sea snake/viper)", False, BLACK),
("• Haematuria", False, BLACK),
("• Proteinuria", False, BLACK),
]
y = 1.48
for item in left_items:
add_text(slide, item[0], 0.5, y, 6.0, 0.38, size=13, bold=item[1], color=item[2], wrap=True)
y += 0.33
right_items = [
("BIOCHEMICAL TESTS", True, DEEP_GREEN),
("• Blood Urea Nitrogen (BUN)", False, BLACK),
("• Serum Creatinine (renal function)", False, BLACK),
("• Liver Function Tests", False, BLACK),
("• Serum Electrolytes", False, BLACK),
("• CPK (rhabdomyolysis)", False, BLACK),
("", False, BLACK),
("SPECIFIC TESTS", True, DEEP_GREEN),
("• ELISA for specific venom identification", False, BLACK),
("• Venom detection kits", False, BLACK),
("", False, BLACK),
("IMAGING & ECG", True, DEEP_GREEN),
("• ECG — cardiac toxicity monitoring", False, BLACK),
("• EEG — abnormal in 96% of patients", False, BLACK),
("• CT Brain — subarachnoid/subdural bleed", False, BLACK),
("• Chest X-ray — pulmonary complications", False, BLACK),
("", False, BLACK),
("Note: Lab serves POORLY in diagnosis alone.", True, RED_DARK),
("Use clinically to guide management.", True, RED_DARK),
]
y = 1.48
for item in right_items:
add_text(slide, item[0], 6.9, y, 6.1, 0.38, size=13, bold=item[1], color=item[2], wrap=True)
y += 0.33
add_rect(slide, 6.6, 1.38, 0.05, 5.75, MID_GREEN)
# ═══════════════════════════════════════════════════════════
# SLIDE 9 — FIRST AID MANAGEMENT
# ═══════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
fill_bg(slide, BG_CREAM)
header_bar(slide, "First Aid for Sarp Vish (Snake Bite)", "Immediate management at site of bite")
steps = [
("1", "Do NOT wash the bite",
"Traces of venom left on skin can identify the snake species and guide antivenom selection."),
("2", "DO NOT incise and suck",
"Venom is injected deeply — cutting/sucking provides no benefit. Systemic absorption starts almost instantly. (Some experts allow longitudinal incision within 15 min)."),
("3", "Pressure-Immobilization Technique (MOST EFFECTIVE)",
"Apply firm bandage to bitten limb. Immobilise the victim. Traps venom in bitten area for hours. Tourniquet: tight enough to occlude lymphatics but NOT venous drainage. Space for ONE finger between limb and bandage."),
("4", "Caution in Viper bites",
"Viper venom has procoagulant enzymes — clotting in small space below tourniquet can cause embolism and death when released. Use with extreme caution."),
("5", "Transport to Hospital",
"Do not delay. Antivenom is available only in hospital. Release tourniquet only after antivenom is ready."),
("6", "Reassurance",
"80% of bites are dry bites (no venom injected). Panic increases venom spread. Keep the patient calm and still."),
]
y = 1.45
for num, title, desc in steps:
add_rect(slide, 0.3, y, 0.55, 0.55, SAFFRON)
add_text(slide, num, 0.3, y + 0.05, 0.55, 0.44, size=18, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_text(slide, title, 0.95, y, 5.5, 0.42, size=14, bold=True, color=DEEP_GREEN)
add_text(slide, desc, 0.95, y + 0.4, 11.9, 0.52, size=12, color=BLACK, wrap=True)
y += 1.02
# ═══════════════════════════════════════════════════════════
# SLIDE 10 — ANTIVENOM THERAPY
# ═══════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
fill_bg(slide, BG_CREAM)
header_bar(slide, "Antivenom Therapy (Antivenin)", "Specific treatment for Sarp Vish")
# Left - indications + dose
add_rect(slide, 0.3, 1.38, 6.1, 5.75, WHITE, line_color=MID_GREEN, line_width=1)
add_rect(slide, 0.3, 1.38, 6.1, 0.48, DEEP_GREEN)
add_text(slide, "Indications & Dosing", 0.45, 1.42, 5.8, 0.42, size=16, bold=True, color=WHITE)
ind_lines = [
("INDICATIONS for Antivenom:", True, DEEP_GREEN),
("I. Serious manifestations evident:", True, DARK_GREEN),
(" • Coma / Neurotoxicity", False, BLACK),
(" • Hypotension / Shock", False, BLACK),
(" • Bleeding / DIC", False, BLACK),
(" • Acute Renal Failure", False, BLACK),
(" • Rhabdomyolysis / ECG changes", False, BLACK),
("II. Even without systemic features:", True, DARK_GREEN),
(" • Swelling > half the affected limb", False, BLACK),
(" • Extensive bruising or blistering", False, BLACK),
(" • Progression within 30–60 min", False, BLACK),
("", False, BLACK),
("DOSE (Conventional):", True, DEEP_GREEN),
("• Mild (local swelling ± lymphadenopathy): 50 mL", False, BLACK),
("• Moderate (coagulation defect/bradycardia): 100 mL", False, BLACK),
("• Severe (rapid progression, DIC, encephalopathy): 150 mL", False, BLACK),
]
y = 1.95
for item in ind_lines:
add_text(slide, item[0], 0.45, y, 5.8, 0.38, size=12.5, bold=item[1], color=item[2], wrap=True)
y += 0.33
# Right - Administration
add_rect(slide, 6.7, 1.38, 6.3, 5.75, DEEP_GREEN)
add_text(slide, "Administration Protocol", 6.85, 1.42, 6.1, 0.42, size=16, bold=True, color=WHITE)
add_rect(slide, 6.7, 1.88, 6.3, 0.05, SAFFRON)
admin = [
("Preparation:", True, SAFFRON),
("Freeze-dried powder → reconstitute with 10 mL distilled water/saline/dextrose", False, WHITE),
("", False, WHITE),
("Sensitivity Test:", True, SAFFRON),
("0.02 mL of 1:10 solution intradermally on forearm.", False, WHITE),
("Same volume saline on other forearm (control).", False, WHITE),
("Erythema/wheal > 10 mm within 30 min = POSITIVE", False, WHITE),
("", False, WHITE),
("If Positive — Desensitisation:", True, SAFFRON),
("Start 0.01 mL of 1:100 solution, gradually increase", False, WHITE),
("at 15-min intervals until 1.0 mL s.c. by 2 hours.", False, WHITE),
("", False, WHITE),
("Infusion:", True, SAFFRON),
("Start: 20 mL/kg/hour → slow down later", False, WHITE),
("Route: INTRAVENOUS (not local injection at bite site)", False, WHITE),
("Systemic antivenom also effective at local site", False, WHITE),
("", False, WHITE),
("Caution: Risk of hypersensitivity — not for every bite!", True, SAFFRON),
]
y = 2.02
for item in admin:
add_text(slide, item[0], 6.85, y, 6.05, 0.42, size=12.5, bold=item[1], color=item[2], wrap=True)
y += 0.34
# ═══════════════════════════════════════════════════════════
# SLIDE 11 — SUPPORTIVE & SPECIFIC MANAGEMENT
# ═══════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
fill_bg(slide, BG_CREAM)
header_bar(slide, "Supportive & Specific Management", "Hospital management of Sarp Vish")
cols_data = [
("General Supportive", DEEP_GREEN, [
"Secure IV access; fluid resuscitation",
"Oxygen supplementation",
"Airway management / intubation if needed",
"Monitor vitals every 15–30 minutes",
"Urinary catheter for urine output monitoring",
"ECG monitoring",
"Nil by mouth initially",
]),
("For Neurotoxic Bites", MID_GREEN, [
"Neostigmine (anticholinesterase) + Atropine",
"Mechanical ventilation for respiratory paralysis",
"Anticholinesterase drugs may reverse paralysis",
"Sedation if convulsions present",
"Diazepam for convulsions",
"Close monitoring of respiratory status",
]),
("For Hemotoxic Bites", DARK_SAFFRON, [
"Fresh Frozen Plasma (FFP) for coagulation",
"Platelet transfusion if < 20,000/µL",
"Packed RBCs for severe anaemia",
"Vitamin K for prolonged PT",
"Dialysis for acute renal failure",
"Monitoring for DIC",
]),
("Wound Management", DARK_GREEN, [
"Wound debridement if necrosis",
"Fasciotomy for compartment syndrome",
"Avoid unnecessary surgery",
"Antibiotics if secondary infection",
"Tetanus toxoid prophylaxis",
"No local antivenom injection",
]),
]
for i, (title, col, pts) in enumerate(cols_data):
x = 0.3 + i * 3.2
add_rect(slide, x, 1.38, 3.0, 5.75, col)
add_text(slide, title, x + 0.08, 1.44, 2.85, 0.6, size=14, bold=True,
color=WHITE, align=PP_ALIGN.CENTER)
add_rect(slide, x, 2.02, 3.0, 0.06, WHITE)
y = 2.15
for pt in pts:
add_text(slide, "• " + pt, x + 0.1, y, 2.8, 0.52, size=12, color=WHITE, wrap=True)
y += 0.5
# ═══════════════════════════════════════════════════════════
# SLIDE 12 — AYURVEDIC PERSPECTIVE (AGADTANTRA)
# ═══════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
fill_bg(slide, BG_CREAM)
header_bar(slide, "Agadtantra Perspective on Sarp Vish", "Ayurvedic classification & treatment principles")
add_rect(slide, 0.3, 1.38, 12.7, 5.75, WHITE, line_color=MID_GREEN, line_width=1)
add_rect(slide, 0.3, 1.38, 12.7, 0.08, SAFFRON)
# Left
left = [
("Classification in Agadtantra:", True, DEEP_GREEN),
("Sarp Vish falls under Jangama Visha (animal poisons)", False, BLACK),
("8 types of Jangama Visha recognised in Ayurveda", False, BLACK),
("Further classified into Darvikara, Mandali, Rajimanta, Nirvisha sarp", False, BLACK),
("", False, BLACK),
("Lakshana (Symptoms) as per Ayurveda:", True, DEEP_GREEN),
("• Daha (burning sensation)", False, BLACK),
("• Shvayathu (swelling)", False, BLACK),
("• Trishna (thirst)", False, BLACK),
("• Moha (altered consciousness)", False, BLACK),
("• Vishada (depression/weakness)", False, BLACK),
("• Spandana (twitching/trembling)", False, BLACK),
("• Vaivarnya (discolouration)", False, BLACK),
("• Raktasrava (bleeding)", False, BLACK),
("", False, BLACK),
("Vegas (stages) of venom spread:", True, DEEP_GREEN),
("Twak → Rakta → Mamsa → Meda → Asthi → Majja → Shukra", False, BLACK),
]
y = 1.55
for item in left:
add_text(slide, item[0], 0.5, y, 5.9, 0.4, size=13, bold=item[1], color=item[2], wrap=True)
y += 0.35
# Right
right = [
("Chikitsa (Treatment) in Agadtantra:", True, DEEP_GREEN),
("1. Avsechana — removal of venom (ligature, incision)", False, BLACK),
("2. Parisheka — medicated stream pouring", False, BLACK),
("3. Avagaha — immersing in medicated decoction", False, BLACK),
("4. Nasya — nasal instillation", False, BLACK),
("5. Dhooma — medicated fumigation", False, BLACK),
("6. Lepa — application of medicated paste", False, BLACK),
("", False, BLACK),
("Key Drugs in Agadtantra:", True, DEEP_GREEN),
("• Shirisha (Albizia lebbeck) — antidote", False, BLACK),
("• Haridra (Curcuma longa) — anti-inflammatory", False, BLACK),
("• Garlic (Lasuna) — antivenom properties", False, BLACK),
("• Sarpagandha (Rauwolfia) — specific for sarp vish", False, BLACK),
("• Ahiphena (Papaver) — used cautiously", False, BLACK),
("", False, BLACK),
("Agad (Antidotes):", True, DEEP_GREEN),
("Mahaagad, Sarpagandha Vati, Vishahar preparations", False, BLACK),
("Talika, Darvyadi Agad, Mushikadi Agad", False, BLACK),
]
y = 1.55
for item in right:
add_text(slide, item[0], 7.0, y, 5.9, 0.4, size=13, bold=item[1], color=item[2], wrap=True)
y += 0.35
add_rect(slide, 6.7, 1.38, 0.06, 5.75, MID_GREEN)
# ═══════════════════════════════════════════════════════════
# SLIDE 13 — MEDICOLEGAL / VIDHIVAIDHAK ASPECTS
# ═══════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
fill_bg(slide, BG_CREAM)
header_bar(slide, "Vidhivaidhak (Medicolegal) Aspects", "Forensic and legal importance of Sarp Vish")
boxes2 = [
("Medicolegal Significance", DEEP_GREEN, [
"Snake bite can be used as a METHOD OF HOMICIDE",
"Very rare but documented in literature",
"Difficult to diagnose at autopsy if no fang marks",
"Local tissue necrosis may obscure bite marks",
"Venom may be extracted and injected via syringe",
"No visible fang marks in such cases",
]),
("Post-Mortem Findings", DARK_SAFFRON, [
"Two small puncture marks at bite site",
"Local edema and ecchymosis at site",
"Congestion and haemorrhages — brain, lungs, GIT",
"Haemolysis of blood",
"Petechiae on serosal surfaces",
"Renal tubular necrosis (viper cases)",
"Pulmonary oedema",
]),
("Medico-legal Points", MID_GREEN, [
"PM venom detection — ELISA or other methods",
"Snake identification from photos/skin shed",
"Wound characteristics distinguish species",
"Time since bite can be estimated from pathology",
"Section 304A IPC — negligent treatment issues",
"Doctor's duty to treat snake bite as emergency",
]),
("Prevention & Awareness", DARK_GREEN, [
"Wear footwear in snake-prone areas",
"Use a torch at night",
"Do NOT handle unknown snakes",
"Avoid sleeping on ground without protection",
"Community awareness about first aid",
"Rapid transport to hospital is KEY",
]),
]
for i, (title, col, pts) in enumerate(boxes2):
x = 0.3 + (i % 2) * 6.4
y = 1.42 + (i // 2) * 3.1
add_rect(slide, x, y, 6.1, 2.95, col)
add_text(slide, title, x + 0.1, y + 0.06, 5.9, 0.5, size=15, bold=True, color=WHITE)
add_rect(slide, x, y + 0.55, 6.1, 0.05, WHITE)
yy = y + 0.68
for pt in pts:
add_text(slide, "• " + pt, x + 0.15, yy, 5.8, 0.38, size=12.5, color=WHITE, wrap=True)
yy += 0.37
# ═══════════════════════════════════════════════════════════
# SLIDE 14 — SUMMARY / KEY POINTS
# ═══════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
fill_bg(slide, DEEP_GREEN)
add_rect(slide, 0, 0, 13.333, 0.18, SAFFRON)
add_rect(slide, 0, 7.1, 13.333, 0.4, SAFFRON)
add_text(slide, "Summary — Key Points", 0.5, 0.25, 12.0, 0.75, size=30, bold=True,
color=WHITE, align=PP_ALIGN.CENTER)
add_text(slide, "Agadtantra Evam Vidhivaidhak | Sarp Vish", 0.5, 0.9, 12.0, 0.45,
size=16, color=SAFFRON, align=PP_ALIGN.CENTER, italic=True)
add_rect(slide, 0.5, 1.42, 12.3, 0.06, SAFFRON)
key_points = [
"1. Snake venom = modified parotid secretion — poisonous only by injection, NOT ingestion",
"2. Three types of fang apparatus: Solenoglyphous (vipers), Proteroglyphous (elapids), Opisthoglyphous",
"3. Colubrine venom is NEUROTOXIC — respiratory paralysis; Viperine venom is HEMOTOXIC — DIC/haemolysis",
"4. Cobra → convulsions + paralysis; Krait → only paralysis; Viper → haemorrhagic syndrome",
"5. Pressure-immobilization is the most effective first aid — NOT incision/suction",
"6. Antivenom is indicated only for serious systemic manifestations — dose 50–150 mL IV",
"7. EEG abnormalities found in up to 96% of snake bite patients",
"8. Russell's viper envenomation → Acute Renal Failure (1/3 of cases in one series)",
"9. Agadtantra classifies as Jangama Visha — 8 types; treatment includes Avsechana, Lepa, Agad",
"10. Medicolegal: snake bite can be used for homicide; PM findings are characteristic",
]
y = 1.6
for point in key_points:
add_text(slide, point, 0.6, y, 12.1, 0.5, size=14, color=WHITE, wrap=True)
y += 0.5
add_text(slide, "Reference: P C Dikshit Textbook of Forensic Medicine & Toxicology | Agadtantra Evam Vidhivaidhak",
0.5, 7.0, 12.3, 0.4, size=11, color=LIGHT_GREEN, align=PP_ALIGN.CENTER, italic=True)
# ═══════════════════════════════════════════════════════════
# SAVE
# ═══════════════════════════════════════════════════════════
out = "/tmp/workspace/sarp-vish-ppt/Sarp_Vish_Agadtantra.pptx"
buf = BytesIO()
prs.save(buf)
with open(out, "wb") as f:
f.write(buf.getvalue())
print(f"Saved: {out}")
print(f"Slides: {len(prs.slides)}")
cd /tmp/workspace/sarp-vish-ppt && python create_ppt.py
Sarp Vish Agadtantra
Presentation · PPTX
| Slide | Topic |
|---|---|
| 1 | Title Slide — सर्प विष / Sarp Vish (Ayurvedic green + saffron theme) |
| 2 | Introduction & Overview — Definition, nature of venom, classification of snakes |
| 3 | Poison Apparatus & Bite Mechanism — Solenoglyphous / Proteroglyphous / Opisthoglyphous |
| 4 | Composition of Sarp Vish — General composition, Colubrine vs Viperine venom constituents |
| 5 | Mechanism of Action — Neurotoxic action vs Hemotoxic/Cytotoxic action (side by side) |
| 6 | Clinical Features — Comparison table: Colubrine bite vs Viperine bite |
| 7 | Systemic Manifestations — Neurological, Haematological, Cardiovascular, Renal |
| 8 | Laboratory Diagnosis — Haematology, Coagulation, Urine, ECG/EEG, ELISA |
| 9 | First Aid — 6 numbered steps including pressure-immobilization technique |
| 10 | Antivenom Therapy — Indications, doses (50/100/150 mL), administration protocol |
| 11 | Supportive & Specific Management — 4 columns: General / Neurotoxic / Hemotoxic / Wound |
| 12 | Agadtantra Perspective — Classification, Lakshana, Vegas, Chikitsa, key drugs, Agad |
| 13 | Vidhivaidhak (Medicolegal) Aspects — Homicide, PM findings, legal points, prevention |
| 14 | Summary — 10 key takeaway points on dark green background |