Skip to main content

A developer-first, research-grade Python framework for programmatic access to the Constitution of India — built for legal NLP, RAG, civic AI, and constitutional informatics.

Project description

IndianConstitution

A Developer-First, Research-Grade Python Framework for the Constitution of India


PyPI Downloads Total Downloads CI OpenSSF Scorecard

License Python Typed Ruff DOI


Sub-millisecond search · Strictly-typed API · Graph analysis · AI/RAG-ready · Zero external dependencies in core

📖 Docs  ·  🚀 Quick Start  ·  🔬 Research Use  ·  📊 Benchmarks  ·  📜 Cite


Abstract

indianconstitution is a production-grade Python library providing programmatic, structured, and type-safe access to the complete text of the Constitution of India — including all 448 articles, 12 schedules, the Preamble, and 106 amendments through the Constitution (One Hundred and Sixth Amendment) Act, 2023.

The library implements a zero-dependency inverted-index search engine (O(1) token lookup), a Pydantic v2 data model layer for type-safe constitutional data access, a NetworkX-backed relational graph for cross-article analysis, and a multi-format export engine. It is designed for deployment in legal AI, retrieval-augmented generation (RAG), civic NLP, and constitutional informatics research — with full reproducibility, strict typing, and offline-first guarantees.


✨ Key Capabilities

Capability Description Install Extra
Typed Article API Fully annotated Article, Part, Schedule, Preamble Pydantic v2 models core
Inverted-Index Search Sub-millisecond lexical search via built-in inverted index — O(1) per token core
Graph Analysis NetworkX-backed relational graph of constitutional cross-references [data]
Semantic / AI Search Sentence-Transformers embeddings for contextual RAG retrieval [ai]
Multi-Format Export Export to JSON, CSV, and Markdown with a single call core
pandas Integration Direct DataFrame output of articles for data science workflows [data]
Rich CLI Terminal-native interface powered by Typer + Rich with syntax highlighting core
Fully Offline No API keys, no rate limits, no network calls required in core mode core
Type Safety 100% mypy strict-mode compliance across all public APIs core
Reproducible Deterministic outputs; hermetic data layer pinned to 106th Amendment core

📐 Architecture

┌─────────────────────────────────────────────────────────────────┐
│                        Public API Layer                         │
│          get_article()  ·  search()  ·  get_constitution()      │
└───────────────────────────────┬─────────────────────────────────┘
                                │
               ┌────────────────▼────────────────┐
               │    Constitution  (engine.py)     │
               │  Lazy-loading · Singleton cache  │
               └──┬──────────────┬───────────────┘
                  │              │
     ┌────────────▼───┐  ┌───────▼───────────┐  ┌──────────────────┐
     │  SearchEngine  │  │  ConstitutionGraph │  │    Exporter      │
     │ (inverted idx) │  │  (NetworkX graph)  │  │  JSON · CSV · MD │
     └────────────────┘  └────────────────────┘  └──────────────────┘
                  │
     ┌────────────▼──────────────────────────────────┐
     │             Pydantic v2 Data Layer             │
     │   Article · Part · Schedule · Preamble ·       │
     │   ConstitutionData · Amendment                 │
     └───────────────────────────────────────────────┘
                  │
     ┌────────────▼──────────────────────────────────┐
     │      constitution.json  (data/)                │
     │   Authoritative corpus — 106th Amendment 2023  │
     └────────────────────────────────────────────────┘

🚀 Quick Start

Installation

# Core (zero external dependencies)
pip install indianconstitution

# With data science integrations (pandas, NetworkX, SciPy)
pip install "indianconstitution[data]"

# With AI/semantic search (sentence-transformers)
pip install "indianconstitution[ai]"

# Full
pip install "indianconstitution[data,ai]"

Programmatic Access

from indianconstitution import get_article, search, get_constitution

# Type-safe article retrieval
article = get_article("21A")
print(f"Article {article.number}: {article.title}")
# → Article 21A: Right to Education

# Sub-millisecond keyword search
results = search("right to equality", limit=5)
for r in results:
    print(f"  [{r.number}] {r.title}")

# Full Constitution object
ic = get_constitution()
print(ic.preamble[:200])
print(f"Total Articles: {len(ic.data.articles)}")

Graph Analysis

from indianconstitution import get_constitution
import networkx as nx

ic = get_constitution()

# Cross-article relational structure
related = ic.get_related_articles("32")
print("Article 32 references   :", related["references"])
print("Articles referencing 32 :", related["referenced_by"])

# Centrality analysis
G = ic.get_graph()
centrality = nx.degree_centrality(G)
top_5 = sorted(centrality, key=centrality.get, reverse=True)[:5]
print("Most referenced articles:", top_5)

Data Science Integration

from indianconstitution import get_constitution
import pandas as pd

ic = get_constitution()

# Direct pandas DataFrame
df = pd.DataFrame([a.model_dump() for a in ic.data.articles])
print(df[["number", "title", "part"]].head(10))

# Multi-format export
ic.export("json",     "constitution_export.json")
ic.export("csv",      "constitution_export.csv")
ic.export("markdown", "constitution_export.md")

Semantic Search (AI)

from indianconstitution import get_constitution

ic = get_constitution()

# Contextual retrieval beyond keyword matching
# Requires: pip install "indianconstitution[ai]"
results = ic.semantic_search(
    "protection against arbitrary state action",
    top_k=5
)
for r in results:
    print(f"[{r.number}] {r.title}  (score: {r.score:.4f})")

RAG Pipeline Integration

from indianconstitution import get_constitution

ic = get_constitution()

def build_rag_context(query: str, top_k: int = 3) -> str:
    """Build a constitutional context block for LLM prompting."""
    results = ic.search(query, limit=top_k)
    context_blocks = []
    for article in results:
        context_blocks.append(
            f"**Article {article.number}{article.title}**\n"
            f"{article.text}\n"
        )
    return "\n---\n".join(context_blocks)

context = build_rag_context("right to life and personal liberty")

🖥️ Command-Line Interface

indianconstitution get 21                        # Retrieve article
indianconstitution search "equality before law"  # Full-text search
indianconstitution stats                         # Metadata summary
indianconstitution export --format json -o out.json
indianconstitution --version

📊 Performance Benchmarks

Measured on a commodity laptop (Intel i7-11th Gen, 16 GB RAM, Python 3.11, single thread, 1,000 iterations).

Operation Latency Notes
Initial data load ~45 ms First call; lazy-loaded from bundled JSON
Subsequent calls ~0 ms In-process singleton cache — zero I/O
Keyword search (1 token) < 0.1 ms Inverted-index O(1) lookup
Keyword search (3 tokens) < 0.5 ms Set intersection over index
Full CSV export ~12 ms Streaming writer
Full JSON export ~8 ms orjson-compatible output
Graph construction ~30 ms One-time, lazy; cached thereafter
Semantic search ~80 ms GPU-accelerated with [ai] extra

All benchmarks are deterministic. The bundled corpus is static and version-pinned. No external I/O is required in core mode.


🔬 Research & Academic Use

indianconstitution is designed as a corpus infrastructure layer for:

  • Constitutional NLP — structured retrieval for legal reasoning models, clause boundary detection
  • RAG pipelines — grounding LLM outputs with authoritative, citation-traceable constitutional text
  • Civic data science — network analysis of rights inter-dependencies and amendment history
  • Legal education technology — interactive constitutional exploration platforms
  • Comparative constitutional law — structured data enabling cross-jurisdictional studies

Data Provenance

The constitutional corpus (constitution.json) is derived from the official text of the Constitution of India as published by the Ministry of Law and Justice, Government of India. The data is:

  • Curated and validated to the Constitution (One Hundred and Sixth Amendment) Act, 2023
  • Structured against the Pydantic v2 schema — every field is validated on load
  • Versioned alongside the library — data updates are tracked via CHANGELOG.md
  • Reproducible — the corpus is deterministic and hermetically bundled in the wheel

📜 Citation

If you use indianconstitution in academic research, a thesis, or any published work, please cite:

BibTeX

@software{vikhram2026indianconstitution,
  author       = {S, Vikhram},
  title        = {{IndianConstitution: A Developer-First, Research-Grade
                   Python Framework for the Constitution of India}},
  year         = {2026},
  version      = {1.3.1},
  publisher    = {PyPI},
  url          = {https://github.com/Vikhram-S/IndianConstitution},
  doi          = {10.5281/zenodo.18200429},
  note         = {Available on PyPI: \url{https://pypi.org/project/indianconstitution/}.
                  Corpus pinned to the Constitution (106th Amendment) Act, 2023.},
  license      = {Apache-2.0},
}

APA 7th Edition

S, Vikhram. (2026). IndianConstitution: A Developer-First, Research-Grade Python Framework for the Constitution of India (Version 1.3.1) [Software]. PyPI. https://doi.org/10.5281/zenodo.18200429

IEEE

V. S, "IndianConstitution: A Developer-First, Research-Grade Python Framework for the Constitution of India," version 1.3.1, 2026. [Online]. Available: https://github.com/Vikhram-S/IndianConstitution. DOI: 10.5281/zenodo.18200429.

ACL Anthology

Vikhram S. 2026. IndianConstitution: A Developer-First, Research-Grade Python Framework
for the Constitution of India. Software release v1.3.1.
Available: https://github.com/Vikhram-S/IndianConstitution

A machine-readable CITATION.cff is provided at the repository root for use with GitHub's "Cite this repository" feature and Zenodo DOI minting.


🛡️ Security

Security vulnerabilities should be reported privately via the GitHub Security Advisory mechanism. Do not open public issues for security reports.

  • All GitHub Actions pinned to immutable SHA hashes (OSSF Scorecard compliant)
  • Automated Dependabot PRs for dependency updates
  • CodeQL scanning on every push to main
  • See SECURITY.md for the full disclosure policy

🤝 Contributing

We welcome contributions from researchers, legal professionals, and developers. See CONTRIBUTING.md for:

  • Development environment setup
  • Test suite (pytest + Hypothesis property-based testing)
  • Code quality standards (Ruff + Mypy strict mode)
  • Pull request checklist and review process

🙏 Acknowledgements

Developed and maintained by Vikhram S.

  • The Ministry of Law and Justice, Government of India for maintaining the authoritative constitutional text
  • Pydantic, Typer, Rich, NetworkX, and sentence-transformers — foundational libraries powering this framework
  • The open-source community for feedback and contributions

📄 License

Copyright © 2026 Vikhram S. Released under the Apache License 2.0. See LICENSE.


GitHub Stars GitHub Forks

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

indianconstitution-1.3.1.tar.gz (237.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

indianconstitution-1.3.1-py3-none-any.whl (234.4 kB view details)

Uploaded Python 3

File details

Details for the file indianconstitution-1.3.1.tar.gz.

File metadata

  • Download URL: indianconstitution-1.3.1.tar.gz
  • Upload date:
  • Size: 237.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for indianconstitution-1.3.1.tar.gz
Algorithm Hash digest
SHA256 7fc052ec34b5b979e29c1065dd5cf66b1cf2c70218ce8b3874305dd7457e6f84
MD5 51fb2683df18d625a70883683b89008e
BLAKE2b-256 1bfdb26e25217d5ba8fa30c9bf214bd8f0df0362dc3fbcb3c0b3f2c4cef30080

See more details on using hashes here.

File details

Details for the file indianconstitution-1.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for indianconstitution-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 295b2044c435c654ac4832bb7027503a47bf9a25d4470f0030ecea4cb105169d
MD5 125b273c26b2745436d7a1ea5da271bb
BLAKE2b-256 5ad031c0f51b3466fe33eeff8480006e4174ec5bee3277a4a51ab0d55994a8de

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page