From f5593dfc36f7405d4a7e32712ef8abba9ef7f1d2 Mon Sep 17 00:00:00 2001 From: Amey Bhagwatkar <141252614+amey1234444@users.noreply.github.com> Date: Mon, 13 Jan 2025 17:06:26 +0530 Subject: [PATCH 1/5] Update inference.py --- inference.py | 114 ++++++++++++++------------------------------------- 1 file changed, 31 insertions(+), 83 deletions(-) diff --git a/inference.py b/inference.py index d87ad9e..dcff6d7 100755 --- a/inference.py +++ b/inference.py @@ -1,7 +1,10 @@ -import time, tiktoken -from openai import OpenAI +import time import openai -import os, anthropic, json +import os +import anthropic +import json +import tiktoken +from openai import OpenAI TOKENS_IN = dict() TOKENS_OUT = dict() @@ -19,7 +22,7 @@ def curr_cost_est(): "o1": 15.00 / 1000000, } costmap_out = { - "gpt-4o": 10.00/ 1000000, + "gpt-4o": 10.00 / 1000000, "gpt-4o-mini": 0.6 / 1000000, "o1-preview": 60.00 / 1000000, "o1-mini": 12.00 / 1000000, @@ -27,7 +30,7 @@ def curr_cost_est(): "deepseek-chat": 5.00 / 1000000, "o1": 60.00 / 1000000, } - return sum([costmap_in[_]*TOKENS_IN[_] for _ in TOKENS_IN]) + sum([costmap_out[_]*TOKENS_OUT[_] for _ in TOKENS_OUT]) + return sum([costmap_in[_] * TOKENS_IN[_] for _ in TOKENS_IN]) + sum([costmap_out[_] * TOKENS_OUT[_] for _ in TOKENS_OUT]) def query_model(model_str, prompt, system_prompt, openai_api_key=None, anthropic_api_key=None, tries=5, timeout=5.0, temp=None, print_cost=True, version="1.5"): preloaded_api = os.getenv('OPENAI_API_KEY') @@ -40,9 +43,18 @@ def query_model(model_str, prompt, system_prompt, openai_api_key=None, anthropic os.environ["OPENAI_API_KEY"] = openai_api_key if anthropic_api_key is not None: os.environ["ANTHROPIC_API_KEY"] = anthropic_api_key + for _ in range(tries): try: - if model_str == "gpt-4o-mini" or model_str == "gpt4omini" or model_str == "gpt-4omini" or model_str == "gpt4o-mini": + # Standardizing the model name to "claude-3-5-sonnet" + if model_str == "claude-3-5-sonnet": + client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"]) + message = client.messages.create( + model="claude-3-5-sonnet", # Updated model name here + system=system_prompt, + messages=[{"role": "user", "content": prompt}]) + answer = json.loads(message.to_json())["content"][0]["text"] + elif model_str == "gpt-4o-mini" or model_str == "gpt4omini" or model_str == "gpt-4omini" or model_str == "gpt4o-mini": model_str = "gpt-4o-mini" messages = [ {"role": "system", "content": system_prompt}, @@ -50,30 +62,24 @@ def query_model(model_str, prompt, system_prompt, openai_api_key=None, anthropic if version == "0.28": if temp is None: completion = openai.ChatCompletion.create( - model=f"{model_str}", # engine = "deployment_name". + model=f"{model_str}", messages=messages ) else: completion = openai.ChatCompletion.create( - model=f"{model_str}", # engine = "deployment_name". + model=f"{model_str}", messages=messages, temperature=temp ) else: client = OpenAI() if temp is None: completion = client.chat.completions.create( - model="gpt-4o-mini-2024-07-18", messages=messages, ) + model="gpt-4o-mini-2024-07-18", messages=messages) else: completion = client.chat.completions.create( model="gpt-4o-mini-2024-07-18", messages=messages, temperature=temp) answer = completion.choices[0].message.content - elif model_str == "claude-3.5-sonnet": - client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"]) - message = client.messages.create( - model="claude-3-5-sonnet-latest", - system=system_prompt, - messages=[{"role": "user", "content": prompt}]) - answer = json.loads(message.to_json())["content"][0]["text"] + elif model_str == "gpt4o" or model_str == "gpt-4o": model_str = "gpt-4o" messages = [ @@ -82,95 +88,38 @@ def query_model(model_str, prompt, system_prompt, openai_api_key=None, anthropic if version == "0.28": if temp is None: completion = openai.ChatCompletion.create( - model=f"{model_str}", # engine = "deployment_name". + model=f"{model_str}", messages=messages ) else: completion = openai.ChatCompletion.create( - model=f"{model_str}", # engine = "deployment_name". + model=f"{model_str}", messages=messages, temperature=temp) else: client = OpenAI() if temp is None: completion = client.chat.completions.create( - model="gpt-4o-2024-08-06", messages=messages, ) + model="gpt-4o-2024-08-06", messages=messages) else: completion = client.chat.completions.create( model="gpt-4o-2024-08-06", messages=messages, temperature=temp) answer = completion.choices[0].message.content - elif model_str == "deepseek-chat": - model_str = "deepseek-chat" - messages = [ - {"role": "system", "content": system_prompt}, - {"role": "user", "content": prompt}] - if version == "0.28": - raise Exception("Please upgrade your OpenAI version to use DeepSeek client") - else: - deepseek_client = OpenAI( - api_key=os.getenv('DEEPSEEK_API_KEY'), - base_url="https://api.deepseek.com/v1" - ) - if temp is None: - completion = deepseek_client.chat.completions.create( - model="deepseek-chat", - messages=messages) - else: - completion = deepseek_client.chat.completions.create( - model="deepseek-chat", - messages=messages, - temperature=temp) - answer = completion.choices[0].message.content - elif model_str == "o1-mini": - model_str = "o1-mini" - messages = [ - {"role": "user", "content": system_prompt + prompt}] - if version == "0.28": - completion = openai.ChatCompletion.create( - model=f"{model_str}", # engine = "deployment_name". - messages=messages) - else: - client = OpenAI() - completion = client.chat.completions.create( - model="o1-mini-2024-09-12", messages=messages) - answer = completion.choices[0].message.content - elif model_str == "o1": - model_str = "o1" - messages = [ - {"role": "user", "content": system_prompt + prompt}] - if version == "0.28": - completion = openai.ChatCompletion.create( - model="o1-2024-12-17", # engine = "deployment_name". - messages=messages) - else: - client = OpenAI() - completion = client.chat.completions.create( - model="o1-2024-12-17", messages=messages) - answer = completion.choices[0].message.content - elif model_str == "o1-preview": - model_str = "o1-preview" - messages = [ - {"role": "user", "content": system_prompt + prompt}] - if version == "0.28": - completion = openai.ChatCompletion.create( - model=f"{model_str}", # engine = "deployment_name". - messages=messages) - else: - client = OpenAI() - completion = client.chat.completions.create( - model="o1-preview", messages=messages) - answer = completion.choices[0].message.content + # (Continues with other model cases as needed...) - if model_str in ["o1-preview", "o1-mini", "claude-3.5-sonnet", "o1"]: + if model_str in ["o1-preview", "o1-mini", "claude-3-5-sonnet", "o1"]: encoding = tiktoken.encoding_for_model("gpt-4o") elif model_str in ["deepseek-chat"]: encoding = tiktoken.encoding_for_model("cl100k_base") else: encoding = tiktoken.encoding_for_model(model_str) + if model_str not in TOKENS_IN: TOKENS_IN[model_str] = 0 TOKENS_OUT[model_str] = 0 + TOKENS_IN[model_str] += len(encoding.encode(system_prompt + prompt)) TOKENS_OUT[model_str] += len(encoding.encode(answer)) + if print_cost: print(f"Current experiment cost = ${curr_cost_est()}, ** Approximate values, may not reflect true cost") return answer @@ -180,5 +129,4 @@ def query_model(model_str, prompt, system_prompt, openai_api_key=None, anthropic continue raise Exception("Max retries: timeout") - -#print(query_model(model_str="o1-mini", prompt="hi", system_prompt="hey")) \ No newline at end of file +#print(query_model(model_str="o1-mini", prompt="hi", system_prompt="hey")) From bae7752ecd817703b9def49d1f9ba93fe7e4a932 Mon Sep 17 00:00:00 2001 From: Amey Bhagwatkar <141252614+amey1234444@users.noreply.github.com> Date: Mon, 13 Jan 2025 17:13:18 +0530 Subject: [PATCH 2/5] Update inference.py --- inference.py | 115 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 83 insertions(+), 32 deletions(-) diff --git a/inference.py b/inference.py index dcff6d7..7b2da29 100755 --- a/inference.py +++ b/inference.py @@ -1,10 +1,7 @@ -import time -import openai -import os -import anthropic -import json -import tiktoken +import time, tiktoken from openai import OpenAI +import openai +import os, anthropic, json TOKENS_IN = dict() TOKENS_OUT = dict() @@ -17,20 +14,20 @@ def curr_cost_est(): "gpt-4o-mini": 0.150 / 1000000, "o1-preview": 15.00 / 1000000, "o1-mini": 3.00 / 1000000, - "claude-3-5-sonnet": 3.00 / 1000000, + "claude-3-5-sonnet": 3.00 / 1000000, # Updated model string "deepseek-chat": 1.00 / 1000000, "o1": 15.00 / 1000000, } costmap_out = { - "gpt-4o": 10.00 / 1000000, + "gpt-4o": 10.00/ 1000000, "gpt-4o-mini": 0.6 / 1000000, "o1-preview": 60.00 / 1000000, "o1-mini": 12.00 / 1000000, - "claude-3-5-sonnet": 12.00 / 1000000, + "claude-3-5-sonnet": 12.00 / 1000000, # Updated model string "deepseek-chat": 5.00 / 1000000, "o1": 60.00 / 1000000, } - return sum([costmap_in[_] * TOKENS_IN[_] for _ in TOKENS_IN]) + sum([costmap_out[_] * TOKENS_OUT[_] for _ in TOKENS_OUT]) + return sum([costmap_in[_]*TOKENS_IN[_] for _ in TOKENS_IN]) + sum([costmap_out[_]*TOKENS_OUT[_] for _ in TOKENS_OUT]) def query_model(model_str, prompt, system_prompt, openai_api_key=None, anthropic_api_key=None, tries=5, timeout=5.0, temp=None, print_cost=True, version="1.5"): preloaded_api = os.getenv('OPENAI_API_KEY') @@ -43,18 +40,9 @@ def query_model(model_str, prompt, system_prompt, openai_api_key=None, anthropic os.environ["OPENAI_API_KEY"] = openai_api_key if anthropic_api_key is not None: os.environ["ANTHROPIC_API_KEY"] = anthropic_api_key - for _ in range(tries): try: - # Standardizing the model name to "claude-3-5-sonnet" - if model_str == "claude-3-5-sonnet": - client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"]) - message = client.messages.create( - model="claude-3-5-sonnet", # Updated model name here - system=system_prompt, - messages=[{"role": "user", "content": prompt}]) - answer = json.loads(message.to_json())["content"][0]["text"] - elif model_str == "gpt-4o-mini" or model_str == "gpt4omini" or model_str == "gpt-4omini" or model_str == "gpt4o-mini": + if model_str == "gpt-4o-mini" or model_str == "gpt4omini" or model_str == "gpt-4omini" or model_str == "gpt4o-mini": model_str = "gpt-4o-mini" messages = [ {"role": "system", "content": system_prompt}, @@ -62,24 +50,30 @@ def query_model(model_str, prompt, system_prompt, openai_api_key=None, anthropic if version == "0.28": if temp is None: completion = openai.ChatCompletion.create( - model=f"{model_str}", + model=f"{model_str}", # engine = "deployment_name". messages=messages ) else: completion = openai.ChatCompletion.create( - model=f"{model_str}", + model=f"{model_str}", # engine = "deployment_name". messages=messages, temperature=temp ) else: client = OpenAI() if temp is None: completion = client.chat.completions.create( - model="gpt-4o-mini-2024-07-18", messages=messages) + model="gpt-4o-mini-2024-07-18", messages=messages, ) else: completion = client.chat.completions.create( model="gpt-4o-mini-2024-07-18", messages=messages, temperature=temp) answer = completion.choices[0].message.content - + elif model_str == "claude-3-5-sonnet": # Updated check for model + client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"]) + message = client.messages.create( + model="claude-3-5-sonnet", # Standardized model name + system=system_prompt, + messages=[{"role": "user", "content": prompt}]) + answer = json.loads(message.to_json())["content"][0]["text"] elif model_str == "gpt4o" or model_str == "gpt-4o": model_str = "gpt-4o" messages = [ @@ -88,38 +82,95 @@ def query_model(model_str, prompt, system_prompt, openai_api_key=None, anthropic if version == "0.28": if temp is None: completion = openai.ChatCompletion.create( - model=f"{model_str}", + model=f"{model_str}", # engine = "deployment_name". messages=messages ) else: completion = openai.ChatCompletion.create( - model=f"{model_str}", + model=f"{model_str}", # engine = "deployment_name". messages=messages, temperature=temp) else: client = OpenAI() if temp is None: completion = client.chat.completions.create( - model="gpt-4o-2024-08-06", messages=messages) + model="gpt-4o-2024-08-06", messages=messages, ) else: completion = client.chat.completions.create( model="gpt-4o-2024-08-06", messages=messages, temperature=temp) answer = completion.choices[0].message.content - # (Continues with other model cases as needed...) + elif model_str == "deepseek-chat": + model_str = "deepseek-chat" + messages = [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": prompt}] + if version == "0.28": + raise Exception("Please upgrade your OpenAI version to use DeepSeek client") + else: + deepseek_client = OpenAI( + api_key=os.getenv('DEEPSEEK_API_KEY'), + base_url="https://api.deepseek.com/v1" + ) + if temp is None: + completion = deepseek_client.chat.completions.create( + model="deepseek-chat", + messages=messages) + else: + completion = deepseek_client.chat.completions.create( + model="deepseek-chat", + messages=messages, + temperature=temp) + answer = completion.choices[0].message.content + elif model_str == "o1-mini": + model_str = "o1-mini" + messages = [ + {"role": "user", "content": system_prompt + prompt}] + if version == "0.28": + completion = openai.ChatCompletion.create( + model=f"{model_str}", # engine = "deployment_name". + messages=messages) + else: + client = OpenAI() + completion = client.chat.completions.create( + model="o1-mini-2024-09-12", messages=messages) + answer = completion.choices[0].message.content + elif model_str == "o1": + model_str = "o1" + messages = [ + {"role": "user", "content": system_prompt + prompt}] + if version == "0.28": + completion = openai.ChatCompletion.create( + model="o1-2024-12-17", # engine = "deployment_name". + messages=messages) + else: + client = OpenAI() + completion = client.chat.completions.create( + model="o1-2024-12-17", messages=messages) + answer = completion.choices[0].message.content + elif model_str == "o1-preview": + model_str = "o1-preview" + messages = [ + {"role": "user", "content": system_prompt + prompt}] + if version == "0.28": + completion = openai.ChatCompletion.create( + model=f"{model_str}", # engine = "deployment_name". + messages=messages) + else: + client = OpenAI() + completion = client.chat.completions.create( + model="o1-preview", messages=messages) + answer = completion.choices[0].message.content - if model_str in ["o1-preview", "o1-mini", "claude-3-5-sonnet", "o1"]: + if model_str in ["o1-preview", "o1-mini", "claude-3-5-sonnet", "o1"]: # Updated model name encoding = tiktoken.encoding_for_model("gpt-4o") elif model_str in ["deepseek-chat"]: encoding = tiktoken.encoding_for_model("cl100k_base") else: encoding = tiktoken.encoding_for_model(model_str) - if model_str not in TOKENS_IN: TOKENS_IN[model_str] = 0 TOKENS_OUT[model_str] = 0 - TOKENS_IN[model_str] += len(encoding.encode(system_prompt + prompt)) TOKENS_OUT[model_str] += len(encoding.encode(answer)) - if print_cost: print(f"Current experiment cost = ${curr_cost_est()}, ** Approximate values, may not reflect true cost") return answer From eed22f55812d3d37ae76b47ab42e9be7a7242339 Mon Sep 17 00:00:00 2001 From: Amey Bhagwatkar <141252614+amey1234444@users.noreply.github.com> Date: Sat, 15 Feb 2025 05:17:11 +0530 Subject: [PATCH 3/5] Created using Colab --- CircularFraudDetection.ipynb | 883 +++++++++++++++++++++++++++++++++++ 1 file changed, 883 insertions(+) create mode 100644 CircularFraudDetection.ipynb diff --git a/CircularFraudDetection.ipynb b/CircularFraudDetection.ipynb new file mode 100644 index 0000000..a99d3fe --- /dev/null +++ b/CircularFraudDetection.ipynb @@ -0,0 +1,883 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyOPzXScc8njExYCPoLxWqY2", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "q4IWItgvkaJ2" + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import networkx as nx\n", + "import csv" + ] + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "\n", + "def getSize(fileName):\n", + " # Read CSV file\n", + " dataFrame = pd.read_csv(fileName)\n", + "\n", + " # Clean column names (remove spaces and tab characters)\n", + " dataFrame.columns = dataFrame.columns.str.strip().str.replace(r'\\t', '', regex=True)\n", + "\n", + " # Extract trader IDs\n", + " traderList = list(dataFrame['SELL_TRADER_ID'])\n", + " traderList.extend(list(dataFrame['BUY_TRADER_ID']))\n", + "\n", + " # Convert to set to get unique trader IDs\n", + " traderSet = set(traderList)\n", + " traderSize = len(traderSet)\n", + "\n", + " return traderSize\n" + ], + "metadata": { + "id": "pIenB2R4kgE3" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "import networkx as nx\n", + "import numpy as np\n", + "\n", + "def getSize(fileName):\n", + " dataFrame = pd.read_csv(fileName)\n", + " dataFrame.columns = dataFrame.columns.str.strip().str.replace(r'\\t', '', regex=True)\n", + "\n", + " # Find max trader ID instead of count of unique traders\n", + " max_trader_id = max(dataFrame['SELL_TRADER_ID'].max(), dataFrame['BUY_TRADER_ID'].max())\n", + "\n", + " return max_trader_id # Ensure array size matches max ID\n", + "\n", + "def getUndirectedGraph(fileName):\n", + " # Read CSV file\n", + " dataFrame = pd.read_csv(fileName)\n", + "\n", + " # Clean column names (remove spaces and tabs)\n", + " dataFrame.columns = dataFrame.columns.str.strip().str.replace(r'\\t', '', regex=True)\n", + "\n", + " print(dataFrame.columns) # Debugging: Check cleaned column names\n", + "\n", + " # Use max trader ID as nodeSize\n", + " nodeSize = getSize(fileName)\n", + "\n", + " # Initialize an undirected graph\n", + " myGraph = nx.Graph()\n", + "\n", + " # Add nodes to the graph\n", + " myGraph.add_nodes_from(list(range(1, nodeSize + 1)))\n", + "\n", + " # Initialize lists\n", + " buyer = []\n", + " seller = []\n", + " trader = []\n", + "\n", + " # Extract seller and buyer IDs\n", + " for ind in dataFrame.index:\n", + " u = dataFrame['SELL_TRADER_ID'][ind] # Fixed column name\n", + " v = dataFrame['BUY_TRADER_ID'][ind] # Fixed column name\n", + " seller.append(u)\n", + " buyer.append(v)\n", + "\n", + " # Initialize presence arrays with correct size\n", + " vSeller = np.zeros(nodeSize + 1, dtype=int)\n", + " vBuyer = np.zeros(nodeSize + 1, dtype=int)\n", + "\n", + " for x in seller:\n", + " if x < len(vSeller): # Avoid index error\n", + " vSeller[x] = 1\n", + " for x in buyer:\n", + " if x < len(vBuyer): # Avoid index error\n", + " vBuyer[x] = 1\n", + "\n", + " # Adding edges with weights\n", + " for ind in dataFrame.index:\n", + " u = dataFrame['SELL_TRADER_ID'][ind]\n", + " v = dataFrame['BUY_TRADER_ID'][ind]\n", + " w = dataFrame['TRADE_RATE'][ind]\n", + "\n", + " # Ensure both are traders and u != v\n", + " if (u < len(vSeller) and v < len(vBuyer) and\n", + " vSeller[u] == 1 and vBuyer[u] == 1 and\n", + " vSeller[v] == 1 and vBuyer[v] == 1 and (u != v)):\n", + "\n", + " trader.append(u)\n", + " trader.append(v)\n", + "\n", + " # If edge exists, update weight; otherwise, add a new edge\n", + " if myGraph.has_edge(u, v):\n", + " myGraph[u][v]['weight'] += w\n", + " else:\n", + " myGraph.add_edge(u, v, weight=w)\n", + "\n", + " return myGraph, list(set(trader))\n", + "\n", + "# Run function\n", + "undirectedGraph, nodeSet = getUndirectedGraph('/content/Trades.csv')\n", + "\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "FnU3Q9Nv_tVZ", + "outputId": "4e2d87b0-f51c-4c06-886a-3c8cb22cbf6c" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Index(['TRADE_SEQUENCE', 'TRADE_NUMBER', 'TRADE_TIME', 'TRADE_DATE',\n", + " 'SCRIP_CODE', 'BUY_MEMBER_CODE', 'SELL_MEMBER_CODE', 'BUY_CLIENT_ID',\n", + " 'SELL_CLIENT_ID', 'BUY_ORDER_ID', 'SELL_ORDER_ID', 'BUY_TRADER_ID',\n", + " 'SELL_TRADER_ID', 'TRADE_QUANTITY', 'TRADE_RATE', 'TRADE_VALUE',\n", + " 'BUY_LOCATION_ID', 'SELL_LOCATION_ID', 'BUY_TIMESTAMP',\n", + " 'SELL_TIMESTAMP'],\n", + " dtype='object')\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "nodeSize = getSize('/content/Trades.csv')\n", + "undirectedDict = {}\n", + "for node in range(1, nodeSize+1):\n", + " neighbors = undirectedGraph[node].items()\n", + " neighborList = [x[0] for x in neighbors]\n", + " undirectedDict[node] = neighborList\n", + "w = csv.writer(open(\"Undirected_Graph.csv\", \"w\"))\n", + "for key, val in undirectedDict.items():\n", + " w.writerow([key, val])" + ], + "metadata": { + "id": "KerifQShCpP4" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def getDirectedGraph(fileName):\n", + " # Load CSV and clean column names\n", + " dataFrame = pd.read_csv(fileName, delimiter=',')\n", + " dataFrame.columns = dataFrame.columns.str.strip() # Remove leading/trailing spaces\n", + "\n", + " print(\"Column Names After Cleaning:\", dataFrame.columns.tolist()) # Debugging\n", + "\n", + " nodeSize = getSize(fileName)\n", + " myGraph = nx.DiGraph()\n", + "\n", + " # Add nodes to the Graph\n", + " # myGraph.add_nodes_from(range(1, int(nodeSize) + 1))\n", + " myGraph.add_nodes_from(list(range(1, int(nodeSize)+1)))\n", + "\n", + " # Adding edges with weights to the Graph\n", + " for ind in dataFrame.index:\n", + " u = dataFrame['SELL_TRADER_ID'][ind]\n", + " v = dataFrame['BUY_TRADER_ID'][ind]\n", + " w = dataFrame['TRADE_RATE'][ind]\n", + "\n", + " if u in myGraph[v]: # Check if edge exists\n", + " myGraph[v][u]['weight'] += w\n", + " else:\n", + " myGraph.add_edge(v, u, weight=w)\n", + "\n", + " return myGraph\n", + "\n", + "# Run the function\n", + "DirectedGraph = getDirectedGraph('/content/Trades.csv')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "KuxpEFjqCwox", + "outputId": "9271081d-820b-4166-c8b6-52c80d67d472" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Column Names After Cleaning: ['TRADE_SEQUENCE', 'TRADE_NUMBER', 'TRADE_TIME', 'TRADE_DATE', 'SCRIP_CODE', 'BUY_MEMBER_CODE', 'SELL_MEMBER_CODE', 'BUY_CLIENT_ID', 'SELL_CLIENT_ID', 'BUY_ORDER_ID', 'SELL_ORDER_ID', 'BUY_TRADER_ID', 'SELL_TRADER_ID', 'TRADE_QUANTITY', 'TRADE_RATE', 'TRADE_VALUE', 'BUY_LOCATION_ID', 'SELL_LOCATION_ID', 'BUY_TIMESTAMP', 'SELL_TIMESTAMP']\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "\n", + "def kNear(graph, nodeSet, K):\n", + " Dict = {}\n", + " for node in nodeSet:\n", + " neighbors = np.array(sorted(graph[node].items(), key=lambda e: e[1][\"weight\"], reverse=True))\n", + " if(neighbors.shape[0]clusterSize[y]:\n", + " clusterId[y] = x\n", + " clusterSize[x]+=clusterSize[y]\n", + " else :\n", + " clusterId[x] = y\n", + " clusterSize[y]+=clusterSize[x]" + ], + "metadata": { + "id": "rMIdKVAUDtMO" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "kt = 2\n", + "for u in nodeSet:\n", + " for v in nodeSet:\n", + " x = parent(u)\n", + " y = parent(v)\n", + " if x!= y :\n", + " if (u in knnGraph[v]) and (v in knnGraph[u]):\n", + " if common(u,v)>=kt:\n", + " union(u,v)" + ], + "metadata": { + "id": "4j6G0tkwD0X-" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "SNNClust = {}\n", + "vis = np.zeros(nodeSize+1, dtype = int)\n", + "for node in range(1, nodeSize+1):\n", + " currId = parent(node)\n", + " if vis[currId]==0:\n", + " SNNClust[currId]=[node]\n", + " else:\n", + " SNNClust[currId].append(node)\n", + " vis[currId] = 1" + ], + "metadata": { + "id": "7BwFjG1jD3mv" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "SNNDict = {}\n", + "for x in SNNClust:\n", + " if len(SNNClust[x])>2:\n", + " SNNDict[x]=SNNClust[x]" + ], + "metadata": { + "id": "DfsPD6IdEASn" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "w = csv.writer(open(\"Shared_Nearest_Neighbor.csv\", \"w\"))\n", + "for key, val in SNNDict.items():\n", + " w.writerow([key, val])" + ], + "metadata": { + "id": "Cxjsg0fbECz-" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "path ='SNNResult/Cluster'\n", + "cnt = 1\n", + "for clusterId in SNNDict:\n", + " tempGraph = nx.Graph()\n", + " for u in SNNDict[clusterId]:\n", + " for v in SNNDict[clusterId]:\n", + " if u!=v and undirectedGraph.has_edge(u,v):\n", + " tempGraph.add_edge(u,v)\n", + " nx.draw(tempGraph, with_labels=True, node_size=1500, node_color = 'y',font_weight='bold')\n", + " plt.savefig(path+str(cnt))\n", + " plt.clf()\n", + " cnt+=1" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "FnWGBp0MEI3P", + "outputId": "7139b087-1d92-4388-a123-f412ebd5944e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "import os # Import the os module\n", + "\n", + "path ='SNNResult/Cluster'\n", + "# Create the directory if it doesn't exist\n", + "os.makedirs(os.path.dirname(path), exist_ok=True)\n", + "\n", + "cnt = 1\n", + "for clusterId in SNNDict:\n", + " tempGraph = nx.Graph()\n", + " for u in SNNDict[clusterId]:\n", + " for v in SNNDict[clusterId]:\n", + " if u!=v and undirectedGraph.has_edge(u,v):\n", + " tempGraph.add_edge(u,v)\n", + " nx.draw(tempGraph, with_labels=True, node_size=1500, node_color = 'y',font_weight='bold')\n", + " plt.savefig(path+str(cnt)) # Now this should work\n", + " plt.clf()\n", + " cnt+=1" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "TToEtLyxEtY2", + "outputId": "8063e6e6-9dae-4946-d9d9-2cdafa3a47a3" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "import os\n", + "import matplotlib.pyplot as plt\n", + "import networkx as nx\n", + "from IPython.display import Image, display\n", + "\n", + "def drawGraph(tempGraph, path, cnt):\n", + " # ✅ Create directory if it doesn’t exist\n", + " os.makedirs(path, exist_ok=True)\n", + "\n", + " # ✅ Draw the graph\n", + " nx.draw(tempGraph, with_labels=True, node_size=1500, node_color='y', font_weight='bold')\n", + "\n", + " # ✅ Save the image\n", + " image_path = os.path.join(path, f\"Cluster{cnt}.png\")\n", + " plt.savefig(image_path)\n", + "\n", + " # ✅ Show the image in Jupyter Notebook\n", + " plt.show()\n", + "\n", + " # ✅ Clear figure to avoid overlapping\n", + " plt.clf()\n", + "\n", + " # ✅ Display saved image\n", + " display(Image(image_path))\n" + ], + "metadata": { + "id": "fpz7VVpXE8jO" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def virtualGraph(fileName, Dict):\n", + " dataFrame = pd.read_csv(fileName, delimiter =',')\n", + " dataFrame.columns = dataFrame.columns.str.strip().str.replace(r'\\t', '', regex=True)\n", + " nodeSize = getSize(fileName)\n", + " vis = np.zeros(nodeSize+1, dtype= int)\n", + " mark= np.zeros(nodeSize+1, dtype = int)\n", + "# creation of virtual Graph\n", + " vGraph = nx.DiGraph()\n", + " vGraph.add_nodes_from(list(range(1, nodeSize+1)))\n", + " nodeList = []\n", + "# adding nodes of the SNNDict\n", + " for clusterId in Dict:\n", + " for node in Dict[clusterId]:\n", + " vis[node] = 1\n", + " mark[node] = 1\n", + "# adding nodes which have either of them visited\n", + " cnt = 0\n", + " for ind in dataFrame.index:\n", + " u = dataFrame['SELL_TRADER_ID'][ind]\n", + " v = dataFrame['BUY_TRADER_ID'][ind]\n", + " w = dataFrame['TRADE_RATE'][ind]\n", + " if ((vis[u]==1) or (vis[v]==1)):\n", + " if (mark[u]==0) or (mark[v]==0):\n", + " cnt+=1\n", + " mark[u] = 1\n", + " mark[v] = 1\n", + " if u in list(vGraph.adj[v]):\n", + " vGraph[v][u]['weight']+=w\n", + " else :\n", + " vGraph.add_edge(v, u, weight = w)\n", + " for i in range(1, nodeSize+1):\n", + " if mark[i]==0:\n", + " vGraph.remove_node(i)\n", + " else :\n", + " nodeList.append(i)\n", + " return (nodeList, vGraph)" + ], + "metadata": { + "id": "MsXKbfrcFLXs" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "(vNodeList, vGraph) = virtualGraph('/content/Trades.csv', SNNDict)" + ], + "metadata": { + "id": "Pmb75CyUFYg1" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "print(\"vNodeList--->>\" , vNodeList);" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dT4Ij4dSJgOa", + "outputId": "1d967594-ee04-48b8-83c7-97a352a08bed" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "vNodeList--->> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 302, 305, 307, 308, 310, 311, 312, 313, 314, 315, 316, 317, 319, 321, 322, 324, 325, 328, 329, 331, 332, 336, 337, 338, 339, 340, 342, 344, 345, 346, 349, 350, 351, 352, 353, 354, 355, 357, 359, 360, 361, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 381, 382, 384, 386, 387, 389, 390, 392, 396, 397, 398, 399, 400, 401, 402, 403, 405, 406, 407, 408, 411, 412, 413, 414, 416, 417, 418, 419, 420, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 449, 451, 452, 453, 454, 455, 456, 457, 459, 464, 470, 472, 475, 486, 489, 490, 492, 496, 497, 498, 500, 502, 505, 506, 509, 511, 513, 514, 515, 517, 527, 532, 536, 538, 539, 541, 542, 544, 545, 549, 550, 551, 557, 559, 574, 576, 579, 580, 581, 582, 583, 585, 602, 613, 614, 615, 623, 660, 661, 689, 693, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 767, 771, 772, 776, 777, 780, 781, 782, 783, 784, 785, 786, 787, 801, 802, 809, 825, 880]\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "print(\"vGraph--->>\" , vGraph);" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "c5BfBIYHJ2gT", + "outputId": "7861cdcf-dc0a-4b74-cbb7-c2198b5515c0" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "vGraph--->> DiGraph with 547 nodes and 6379 edges\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "vdirectedDict = {}\n", + "for node in vNodeList:\n", + " neighbors = vGraph[node].items()\n", + " neighborList = [x[0] for x in neighbors]\n", + " vdirectedDict[node] = neighborList\n", + "w = csv.writer(open(\"vdirected_Graph.csv\", \"w\"))\n", + "for key, val in vdirectedDict.items():\n", + " w.writerow([key, val])" + ], + "metadata": { + "id": "nOCwhvNWKEOL" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "knnGraph = kNear(vGraph, vNodeList, 6)\n", + "DictofClusters = {}\n", + "for i in vNodeList:\n", + " DictofClusters[i] = [i]" + ], + "metadata": { + "id": "lYNqpMwmKJ2Z" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def mnvForNodes(u, v):\n", + " listU = knnGraph[u]\n", + " listV = knnGraph[v]\n", + " rankOfVinU = 100\n", + " rankOfUinV = 100\n", + "\n", + " for i in range(len(listU)):\n", + " if listU[i]==v:\n", + " rankOfVinU = i+1\n", + " break\n", + "\n", + " for i in range(len(listV)):\n", + " if listV[i]==u:\n", + " rankOfUinV = i+1\n", + " break\n", + "\n", + " return rankOfUinV+rankOfVinU\n" + ], + "metadata": { + "id": "5oHsMYQAKRSx" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def mnvForClusters(c1, c2):\n", + " cluster1 = DictofClusters[c1]\n", + " cluster2 = DictofClusters[c2]\n", + " s = 0\n", + " for u in cluster1:\n", + " for v in cluster2:\n", + " val = mnvForNodes(u, v)\n", + " s = s + val\n", + " length = len(cluster1) * len(cluster2)\n", + " return s/length" + ], + "metadata": { + "id": "jD6ka5VdWHbJ" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "mnvSet = set()\n", + "\n", + "# Identify the minimum node value (mnv) for each cluster pair and store in a set\n", + "for cluster_a in vNodeList:\n", + " for cluster_b in vNodeList:\n", + " if cluster_a != cluster_b:\n", + " min_node_value = mnvForClusters(cluster_a, cluster_b)\n", + " mnvSet.add((min_node_value, cluster_a, cluster_b))\n" + ], + "metadata": { + "id": "3-COcJBKWZcK" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def mutual_nn_neighbour(target_clusters, max_mnv):\n", + " global DictofClusters, mnvSet\n", + " current_cluster_count = len(DictofClusters)\n", + "\n", + " # Continue merging clusters until the desired count is reached\n", + " iteration = 0\n", + " while current_cluster_count > target_clusters:\n", + " # Find the cluster pair with the minimum MNV\n", + " min_cluster = min(mnvSet)\n", + "\n", + " # Stop merging if the smallest MNV exceeds the allowed threshold\n", + " if min_cluster[0] > max_mnv:\n", + " break\n", + "\n", + " cluster_a, cluster_b = min_cluster[1], min_cluster[2]\n", + " clusters_to_merge = [cluster_a, cluster_b]\n", + "\n", + " # Remove all entries involving either cluster_a or cluster_b from mnvSet\n", + " for existing_cluster in DictofClusters:\n", + " for merging_cluster in clusters_to_merge:\n", + " value = mnvForClusters(existing_cluster, merging_cluster)\n", + " mnvSet.discard((value, existing_cluster, merging_cluster))\n", + " mnvSet.discard((value, merging_cluster, existing_cluster))\n", + "\n", + " # Merge cluster_b into cluster_a and delete cluster_b\n", + " DictofClusters[cluster_a].extend(DictofClusters[cluster_b])\n", + " del DictofClusters[cluster_b]\n", + "\n", + " # Recalculate MNV values for the new merged cluster\n", + " for existing_cluster in DictofClusters:\n", + " if existing_cluster != cluster_a:\n", + " new_mnv = mnvForClusters(existing_cluster, cluster_a)\n", + " mnvSet.add((new_mnv, existing_cluster, cluster_a))\n", + "\n", + " print(f\"Iteration {iteration + 1} completed: {current_cluster_count} → {target_clusters}\")\n", + "\n", + " iteration += 1\n", + " current_cluster_count -= 1\n" + ], + "metadata": { + "id": "FfTdWqJZWxhm" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "print(f\"Initial number of clusters: {len(vNodeList)}\")\n", + "mutual_nn_neighbour(target_clusters=len(vNodeList) - 500, max_mnv=150)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4nN0GYJtW0xt", + "outputId": "1f962196-f35a-4a0f-b691-ae8002e3b0c2" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Initial number of clusters: 547\n", + "Iteration 1 completed: 547 → 47\n", + "Iteration 2 completed: 546 → 47\n", + "Iteration 3 completed: 545 → 47\n", + "Iteration 4 completed: 544 → 47\n", + "Iteration 5 completed: 543 → 47\n", + "Iteration 6 completed: 542 → 47\n", + "Iteration 7 completed: 541 → 47\n", + "Iteration 8 completed: 540 → 47\n", + "Iteration 9 completed: 539 → 47\n", + "Iteration 10 completed: 538 → 47\n", + "Iteration 11 completed: 537 → 47\n", + "Iteration 12 completed: 536 → 47\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "mnn_clusters = {cluster_id: nodes for cluster_id, nodes in DictofClusters.items() if len(nodes) > 2}\n", + "\n", + "# Save Mutual Nearest Neighbor clusters to a CSV file\n", + "with open(\"Mutual_Nearest_Neighbor.csv\", \"w\", newline=\"\") as file:\n", + " writer = csv.writer(file)\n", + " for cluster_id, nodes in mnn_clusters.items():\n", + " writer.writerow([cluster_id, nodes])\n" + ], + "metadata": { + "id": "Yfo3wHTGXxMF" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "output_path = 'MNNResult/Cluster'\n", + "cluster_index = 1\n", + "\n", + "for cluster_id, nodes in mnn_clusters.items():\n", + " temp_graph = nx.DiGraph()\n", + " for node_u in nodes:\n", + " for node_v in nodes:\n", + " if node_u != node_v and vGraph.has_edge(node_u, node_v):\n", + " temp_graph.add_edge(node_u, node_v)\n", + "\n", + " nx.draw(temp_graph, with_labels=True, node_size=1500, node_color='yellow', font_weight='bold')\n", + " plt.savefig(f\"{output_path}{cluster_index}.png\")\n", + " plt.clf()\n", + " cluster_index += 1\n", + "\n", + "# Display dataset size\n", + "print(getSize('/content/Trades.csv'))\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 865 + }, + "id": "3yTWkX72X4AZ", + "outputId": "d78107ba-3033-43c5-c7a9-3efe55f2ea1a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "error", + "ename": "FileNotFoundError", + "evalue": "[Errno 2] No such file or directory: 'MNNResult/Cluster1.png'", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0mnx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtemp_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwith_labels\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnode_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1500\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnode_color\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'yellow'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfont_weight\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'bold'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 12\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msavefig\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"{output_path}{cluster_index}.png\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 13\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0mcluster_index\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/matplotlib/pyplot.py\u001b[0m in \u001b[0;36msavefig\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 1241\u001b[0m \u001b[0;31m# savefig default implementation has no return, so mypy is unhappy\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1242\u001b[0m \u001b[0;31m# presumably this is here because subclasses can return?\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1243\u001b[0;31m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msavefig\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore[func-returns-value]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1244\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcanvas\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw_idle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# Need this if 'transparent=True', to reset colors.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1245\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/matplotlib/figure.py\u001b[0m in \u001b[0;36msavefig\u001b[0;34m(self, fname, transparent, **kwargs)\u001b[0m\n\u001b[1;32m 3488\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0max\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3489\u001b[0m \u001b[0m_recursively_make_axes_transparent\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstack\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3490\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcanvas\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprint_figure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3491\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3492\u001b[0m def ginput(self, n=1, timeout=30, show_clicks=True,\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/matplotlib/backend_bases.py\u001b[0m in \u001b[0;36mprint_figure\u001b[0;34m(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs)\u001b[0m\n\u001b[1;32m 2182\u001b[0m \u001b[0;31m# force the figure dpi to 72), so we need to set it again here.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2183\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mcbook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_setattr_cm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdpi\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdpi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2184\u001b[0;31m result = print_method(\n\u001b[0m\u001b[1;32m 2185\u001b[0m \u001b[0mfilename\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2186\u001b[0m \u001b[0mfacecolor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfacecolor\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/matplotlib/backend_bases.py\u001b[0m in \u001b[0;36m\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 2038\u001b[0m \"bbox_inches_restore\"}\n\u001b[1;32m 2039\u001b[0m \u001b[0mskip\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0moptional_kws\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minspect\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msignature\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmeth\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparameters\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2040\u001b[0;31m print_method = functools.wraps(meth)(lambda *args, **kwargs: meth(\n\u001b[0m\u001b[1;32m 2041\u001b[0m *args, **{k: v for k, v in kwargs.items() if k not in skip}))\n\u001b[1;32m 2042\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Let third-parties do as they see fit.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/matplotlib/backends/backend_agg.py\u001b[0m in \u001b[0;36mprint_png\u001b[0;34m(self, filename_or_obj, metadata, pil_kwargs)\u001b[0m\n\u001b[1;32m 479\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0mmetadata\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mincluding\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mdefault\u001b[0m \u001b[0;34m'Software'\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 480\u001b[0m \"\"\"\n\u001b[0;32m--> 481\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_print_pil\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename_or_obj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"png\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpil_kwargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmetadata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 482\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 483\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mprint_to_buffer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/matplotlib/backends/backend_agg.py\u001b[0m in \u001b[0;36m_print_pil\u001b[0;34m(self, filename_or_obj, fmt, pil_kwargs, metadata)\u001b[0m\n\u001b[1;32m 428\u001b[0m \"\"\"\n\u001b[1;32m 429\u001b[0m \u001b[0mFigureCanvasAgg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 430\u001b[0;31m mpl.image.imsave(\n\u001b[0m\u001b[1;32m 431\u001b[0m \u001b[0mfilename_or_obj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbuffer_rgba\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mformat\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfmt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morigin\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"upper\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 432\u001b[0m dpi=self.figure.dpi, metadata=metadata, pil_kwargs=pil_kwargs)\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/matplotlib/image.py\u001b[0m in \u001b[0;36mimsave\u001b[0;34m(fname, arr, vmin, vmax, cmap, format, origin, dpi, metadata, pil_kwargs)\u001b[0m\n\u001b[1;32m 1632\u001b[0m \u001b[0mpil_kwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msetdefault\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"format\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mformat\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1633\u001b[0m \u001b[0mpil_kwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msetdefault\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"dpi\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mdpi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdpi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1634\u001b[0;31m \u001b[0mimage\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mpil_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1635\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1636\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.11/dist-packages/PIL/Image.py\u001b[0m in \u001b[0;36msave\u001b[0;34m(self, fp, format, **params)\u001b[0m\n\u001b[1;32m 2589\u001b[0m \u001b[0mfp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbuiltins\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"r+b\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2590\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2591\u001b[0;31m \u001b[0mfp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbuiltins\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"w+b\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2592\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2593\u001b[0m \u001b[0mfp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mIO\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mbytes\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'MNNResult/Cluster1.png'" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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D7l06VJ27NhRLsmU0cApXrw4e/TowTVr1jApKYkpKSmUJInly5enSqWiUqnkzp07bdbLgKHvucFw7du3r91kO4p169bJmdqtWrXK1kv7xRdfUJIkurq68tixY3z33XflBDTD96R///7y+P/++09O3gLAjh07Uu912UayNe0bX2nwSLbmwIFBVCjAihUr8t9//7Xz1XI+p0+f5oQJE1inTh2545Rhc3d3Z6VKlfjWW29x7969Znsx//nnH44ZM4aRkZFGS+8+Pj5s2bIlV69ezadPnzr4zPIziSRHMm9jgg2f6ZEsSF72nBAGpeCFISUlhZMnT2ZAQIC8HFS9enXu2LEjy9igoCAGBARYPZfBy5mfYpjatm1LANl6p3Lif//7X5ZEGJIsXry4fKOzxxKwSqViYGAgq1evbuRZMcSG1apVi+PHj+fgwYMJgIcPH84io2TJknRxceHhw4ep0WioUCi4adMmm3UzMGzYMPmcAXDChAl2k21PkpKS5M+hq6srv/3222zHGupuent78+rVq3L5K0O86Lp166jRaPjzzz8zLS2N33zzDX18fIwM/Pfffz+T1EskxzJj/JlWqzCzOHrm+LOxNMSfGcpGGfS1V//5/EpycjLXr1/PXr16MSIiwqickCRJDA4OZqtWrThv3jzeunUrV3k6nY67du3iyy+/bFQeS5IkFitWjP379+cff/yRB2eWX9DHAevjcfPCkMy85d84YEsRBqXguefMmTNs1aqV/GTu7u7OAQMG8M6dO9keU6lSJbq4uFg956JFiwiAq1evtlqGvYmPj6dSqWRQUJBVxxcvXpySJMlZquvWrZNvRrm1KDRFQkICly9fzs6dO5tMWihevDi7detmsvTKzp07CYCzZs3KInfcuHEEwD179vDMmTN0c3OjJElWd/8xRcuWLeXlYwBcuHCh3WTbgx9++EE2eBs0aJBjGac333yTABgUFMR79+7Jn92AgACj4548eUKSHDhwoMlknfnz52czg47k3yTXcdEiNx496sHsMmSTkxUkG5J8h+S69OOMH1RGjx6dpaPPkCFDmJSUZM2lKpBcuHCBU6dOZYMGDejn55cl7KN8+fIcNGgQd+zYkeuDXmJiIj/77DM2aNDAKIREo9GwatWqnDp1KuPi4vLozPIaUanAngiDUvBcotPpuGjRIoaFhck/kKVKleKqVavM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778T8csvocjPL0qCquhJburUqey6SSEFlrzSdevWNYpZs4Zdu3axyatz5852TUCZmZnYs2cPqxld2JspLdf5+voiPj4eAwYMwOrVq3Hx4kUjb51URaRoD946lLaxaM32ySedjUIUCm9Hjx4t8ppeunQJRJYF68+ePYvOnTszg14QBLRo0aLMSLFIkj6LFy/G119/zXQHJfmza9euGV0bQRCwePFi5tUvWtHiGvSi974ouOZK5Odb89kU1g+eAWfqB9vDhg0bQKTXgpQE6319fbFjxw6r+7hw4QILJwkICGDGe2kwZ84cEOmTrexNRpR59JANynJATk4OC9Zu0qSJUzwVmzZtYlI0FSpUcFrc1rlz59C2bVvmrfH09MTYsWOtrj9etjE/yVlngFie5KQJ9oknngDHcahRo4bFEcydOxdEZNVkkpuby6qcaDQa7N27166zBvQPDevWrWN6pRzHoXnz5jh58iQ++ugjTJ06Fa1bt0alSpWY8WpoaHp7e6N69erw9/cHx3E4f/58MUblyyhtg7HobTEyMzNBpI+fLKxJOmrUqGKvqeStK66ogSiK2LRpE6uVLS0xjho1qlQLESxbtgxExORsUlNTWWWUrVu3su+14damTRvk5uaypCTjqi0PoJeQ6gj9NXZmhTN62O8h2FvhzBG++eYbo6S7+fPnWx0WIYoiRo4cyaSAnC3rZSuSdFRYWJhL9HBlyi+yQVlOEEURTzzxBIj0otPOWGIQRRHPPfcc8zbFx8fbXLHHEnl5eZg9ezYCAgKYUdGgQYMy412xHtdOclpta/Tpo8BTT/VD69atQURFJk/dvHkTRISRI0cWOerExETm7WzRooXdP/w5OTmYMGECk7xRqVQYOnQo/vrrryL3y83NxeHDhzFjxgy0a9cOlStXZskDhoaml5cX4uLi0KtXL7zyyitISUmBKIo4dCgRixZZa6yX9LYEUihDSEgIPDw8mBEteeQEQShSf/DAgQMgIpv1FDMyMjBp0iSm4kCkFxp//fXXS3xJvH///iAiI4/3tWvXTCSTDDelUon//vsPGRkZ8PT0BMdxDz25ydBLRznzHrNkWEY/PJ7rSUtLY6Em0jZixAir9z927BjzaEZHRzvt99leJFmzqKioUltqlym7yAZlOePFF19ky9XO0gzMyspCt27d2A9e9+7dnSpmfuzYMSQkJLDJ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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "print(getSize('/content/Trades.csv'))\n" + ], + "metadata": { + "id": "EldH3zvAbecN" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file From eabb805b7bc57b1c4f8c28deaeb9d06b780d7175 Mon Sep 17 00:00:00 2001 From: Amey Bhagwatkar <141252614+amey1234444@users.noreply.github.com> Date: Wed, 19 Feb 2025 20:03:21 +0530 Subject: [PATCH 4/5] Created using Colab From ac79d4fa6e8d0a0f9e8fe8be5a0fed652b9312c0 Mon Sep 17 00:00:00 2001 From: Amey Bhagwatkar <141252614+amey1234444@users.noreply.github.com> Date: Fri, 4 Jul 2025 09:33:35 +0530 Subject: [PATCH 5/5] Created using Colab --- PDFQuery_LangChain.ipynb | 621 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 621 insertions(+) create mode 100644 PDFQuery_LangChain.ipynb diff --git a/PDFQuery_LangChain.ipynb b/PDFQuery_LangChain.ipynb new file mode 100644 index 0000000..4f4289a --- /dev/null +++ b/PDFQuery_LangChain.ipynb @@ -0,0 +1,621 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wrgOhk8U4Rpl" + }, + "source": [ + "# Quickstart: Querying PDF With Astra and LangChain\n", + "\n", + "### A question-answering demo using Astra DB and LangChain, powered by Vector Search" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MqfJKgRM4Rpo" + }, + "source": [ + "#### Pre-requisites:\n", + "\n", + "You need a **_Serverless Cassandra with Vector Search_** database on [Astra DB](https://astra.datastax.com) to run this demo. As outlined in more detail [here](https://docs.datastax.com/en/astra-serverless/docs/vector-search/quickstart.html#_prepare_for_using_your_vector_database), you should get a DB Token with role _Database Administrator_ and copy your Database ID: these connection parameters are needed momentarily.\n", + "\n", + "You also need an [OpenAI API Key](https://cassio.org/start_here/#llm-access) for this demo to work.\n", + "\n", + "#### What you will do:\n", + "\n", + "- Setup: import dependencies, provide secrets, create the LangChain vector store;\n", + "- Run a Question-Answering loop retrieving the relevant headlines and having an LLM construct the answer." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "m_FeN-Ep4Rpp" + }, + "source": [ + "Install the required dependencies:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Uk0qUhJUQrkO" + }, + "outputs": [], + "source": [ + "!pip install -q cassio datasets langchain openai tiktoken" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XQQN-L2J4Rpq" + }, + "source": [ + "Import the packages you'll need:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "V4qBIihE4Rpq" + }, + "outputs": [], + "source": [ + "# LangChain components to use\n", + "from langchain.vectorstores.cassandra import Cassandra\n", + "from langchain.indexes.vectorstore import VectorStoreIndexWrapper\n", + "from langchain.llms import OpenAI\n", + "from langchain.embeddings import OpenAIEmbeddings\n", + "\n", + "# Support for dataset retrieval with Hugging Face\n", + "from datasets import load_dataset\n", + "\n", + "# With CassIO, the engine powering the Astra DB integration in LangChain,\n", + "# you will also initialize the DB connection:\n", + "import cassio" + ] + }, + { + "cell_type": "code", + "source": [ + "!pip install PyPDF2" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WIs76OPQ6JyD", + "outputId": "2464981f-aea9-499d-ccb4-5f43ea76061d" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: PyPDF2 in /usr/local/lib/python3.10/dist-packages (3.0.1)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from PyPDF2 import PdfReader" + ], + "metadata": { + "id": "1itBNL1v6N9-" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Vu2UauiC4Rpr" + }, + "source": [ + "### Setup" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "eqpM6I854Rpr" + }, + "outputs": [], + "source": [ + "ASTRA_DB_APPLICATION_TOKEN = \"AstraCS:JTDQoZstIQWtINZvEsHkTL:9c4b1cd867115db62547bddbcfe479625191db4cf7b00da237b0fd3eaf8dabf\" # enter the \"AstraCS:...\" string found in in your Token JSON file\n", + "ASTRA_DB_ID = \"56eada22-55b6-4100-aeab-a83b9f82e\" # enter your Database ID\n", + "\n", + "OPENAI_API_KEY = \"sk-J3ZbnEqytFesD7kWKuVaT3BlbkVr9dpDbViv2R2un\" # enter your OpenAI key" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Q1cmD5EF4Rpr" + }, + "source": [ + "#### Provide your secrets:\n", + "\n", + "Replace the following with your Astra DB connection details and your OpenAI API key:" + ] + }, + { + "cell_type": "code", + "source": [ + "# provide the path of pdf file/files.\n", + "pdfreader = PdfReader('budget_speech.pdf')" + ], + "metadata": { + "id": "waVKJW-n6jqJ" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from typing_extensions import Concatenate\n", + "# read text from pdf\n", + "raw_text = ''\n", + "for i, page in enumerate(pdfreader.pages):\n", + " content = page.extract_text()\n", + " if content:\n", + " raw_text += content" + ], + "metadata": { + "id": "42BKuFRO6meP" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "raw_text" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 192 + }, + "id": "vR41Iq-4ZHnG", + "outputId": "861bc27a-fd4d-47f9-f722-8e365a6fd030" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "\"GOVERNMENT OF INDIA\\nBUDGET 2023-2024\\nSPEECH\\nOF\\nNIRMALA SITHARAMAN\\nMINISTER OF FINANCE\\nFebruary 1, 2023CONTENTS \\nPART-A \\n Page No. \\n\\uf0b7 Introduction 1 \\n\\uf0b7 Achievements since 2014: Leaving no one behind 2 \\n\\uf0b7 Vision for Amrit Kaal – an empowered and inclusive economy 3 \\n\\uf0b7 Priorities of this Budget 5 \\ni. Inclusive Development \\nii. Reaching the Last Mile \\niii. Infrastructure and Investment \\niv. Unleashing the Potential \\nv. Green Growth \\nvi. Youth Power \\nvii. Financial Sector \\n \\n \\n \\n \\n \\n \\n \\n \\n\\uf0b7 Fiscal Management 24 \\nPART B \\n \\nIndirect Taxes 27 \\n\\uf0b7 Green Mobility \\n\\uf0b7 Electronics \\n\\uf0b7 Electrical \\n\\uf0b7 Chemicals and Petrochemicals \\n\\uf0b7 Marine products \\n\\uf0b7 Lab Grown Diamonds \\n\\uf0b7 Precious Metals \\n\\uf0b7 Metals \\n\\uf0b7 Compounded Rubber \\n\\uf0b7 Cigarettes \\n \\nDirect Taxes 30 \\n\\uf0b7 MSMEs and Professionals \\n\\uf0b7 Cooperation \\n\\uf0b7 Start-Ups \\n\\uf0b7 Appeals \\n\\uf0b7 Better targeting of tax concessions \\n\\uf0b7 Rationalisation \\n\\uf0b7 Others \\n\\uf0b7 Personal Income Tax \\n \\nAnnexures 35 \\n\\uf0b7 Annexure to Part B of the Budget Speech 2023-24 \\ni. Amendments relating to Direct Taxes \\nii. Amendments relating to Indirect Taxes \\n Budget 2023-2024 \\n \\nSpeech of \\nNirmala Sitharaman \\nMinister of Finance \\nFebruary 1, 2023 \\nHon’ble Speaker, \\n I present the Budget for 2023-24. This is the first Budget in Amrit \\nKaal . \\nIntroduction \\n1. This Budget hopes to build on the foundation laid in the previous \\nBudget, and the blueprint drawn for India@100. We envision a prosperous \\nand inclusive India, in which the fruits of development reach all regions and \\ncitizens, especially our youth, women, farmers, OBCs, Scheduled Castes and \\nScheduled Tribes. \\n2. In the 75th year of our Independence, the world has recognised the \\nIndian economy as a ‘bright star’. Our current year’s economic growth is \\nestimated to be at 7 per cent. It is notable that this is the highest among all \\nthe major economies. This is in spite of the massive slowdown globally \\ncaused by Covid-19 and a war. The Indian economy is therefore on the right \\ntrack, and despite a time of challenges, heading towards a bright future. \\n3. Today as Indians stands with their head held high, and the world \\nappreciates India’s achievements and successes, we are sure that elders \\nwho had fought for India’s independence, will with joy, bless us our \\nendeavors going forward. \\nResilience amidst multiple crises \\n4. Our focus on wide-ranging reforms and sound policies, implemented \\nthrough Sabka Prayas resulting in Jan Bhagidari and targeted support to \\nthose in need, helped us perform well in trying times. India’s rising global 2 \\n \\n \\n profile is because of several accomplishments: unique world class digital \\npublic infrastructure, e.g., Aadhaar, Co-Win and UPI; Covid vaccination drive \\nin unparalleled scale and speed; proactive role in frontier areas such as \\nachieving the climate related goals, mission LiFE, and National Hydrogen \\nMission. \\n5. During the Covid-19 pandemic, we ensured that no one goes to bed \\nhungry, with a scheme to supply free food grains to over 80 crore persons \\nfor 28 months. Continuing our commitment to ensure food and nutritional \\nsecurity, we are implementing, from 1st January 2023, a scheme to supply \\nfree food grain to all Antyodaya and priority households for the next one \\nyear, under PM Garib Kalyan Anna Yojana (PMGKAY). The entire \\nexpenditure of about ` 2 lakh crore will be borne by the Central \\nGovernment. \\nG20 Presidency: Steering the global agenda through challenges \\n6. In these times of global challenges, the G20 Presidency gives us a \\nunique opportunity to strengthen India’s role in the world economic order. \\nWith the theme of ‘ Vasudhaiva Kutumbakam’ , we are steering an \\nambitious, people-centric agenda to address global challenges, and to \\nfacilitate sustainable economic development. \\nAchievements since 2014: Leaving no one behind \\n7. The government’s efforts since 2014 have ensured for all citizens a \\nbetter quality of living and a life of dignity. The per capita income has more \\nthan doubled to ` 1.97 lakh. \\n8. In these nine years, the Indian economy has increased in size from \\nbeing 10th to 5th largest in the world. We have significantly improved our \\nposition as a well-governed and innovative country with a conducive \\nenvironment for business as reflected in several global indices. We have \\nmade significant progress in many Sustainable Development Goals. 3 \\n \\n \\n 9. The economy has become a lot more formalised as reflected in the \\nEPFO membership more than doubling to 27 crore, and 7,400 crore digital \\npayments of ` 126 lakh crore through UPI in 2022. \\n10. The efficient implementation of many schemes, with \\nuniversalisation of targeted benefits, has resulted in inclusive development. \\nSome of the schemes are: \\ni. 11.7 crore household toilets under Swachh Bharat Mission, \\nii. 9.6 crore LPG connections under Ujjawala, \\niii. 220 crore Covid vaccination of 102 crore persons, \\niv. 47.8 crore PM Jan Dhan bank accounts, \\nv. Insurance cover for 44.6 crore persons under PM Suraksha \\nBima and PM Jeevan Jyoti Yojana, and \\nvi. Cash transfer of ` 2.2 lakh crore to over 11.4 crore farmers \\nunder PM Kisan Samman Nidhi. \\nVision for Amrit Kaal – an empowered and inclusive economy \\n11. Our vision for the Amrit Kaal includes technology-driven and \\nknowledge-based economy with strong public finances, and a robust \\nfinancial sector. To achieve this, Jan Bhagidari through Sabka Saath Sabka \\nPrayas is essential. \\n12. The economic agenda for achieving this vision focuses on three \\nthings: first, facilitating ample opportunities for citizens, especially the \\nyouth, to fulfil their aspirations; second, providing strong impetus to growth \\nand job creation; and third, strengthening macro-economic stability. \\n13. To service these focus areas in our journey to India@100, we believe \\nthat the following four opportunities can be transformative during Amrit \\nKaal. 4 \\n \\n \\n 1) Economic Empowerment of Women : Deendayal Antyodaya Yojana \\nNational Rural Livelihood Mission has achieved remarkable success \\nby mobilizing rural women into 81 lakh Self Help Groups. We will \\nenable these groups to reach the next stage of economic \\nempowerment through formation of large producer enterprises or \\ncollectives with each having several thousand members and \\nmanaged professionally. They will be helped with supply of raw \\nmaterials and for better design, quality, branding and marketing of \\ntheir products. Through supporting policies, they will be enabled to \\nscale up their operations to serve the large consumer markets, as \\nhas been the case with several start-ups growing into ‘Unicorns’. \\n2) PM VIshwakarma KAushal Samman (PM VIKAS) : For centuries, \\ntraditional artisans and craftspeople, who work with their hands \\nusing tools, have brought renown for India. They are generally \\nreferred to as Vishwakarma. The art and handicraft created by them \\nrepresents the true spirit of Atmanirbhar Bharat. For the first time, a \\npackage of assistance for them has been conceptualized. The new \\nscheme will enable them to improve the quality, scale and reach of \\ntheir products, integrating them with the MSME value chain. The \\ncomponents of the scheme will include not only financial support \\nbut also access to advanced skill training, knowledge of modern \\ndigital techniques and efficient green technologies, brand \\npromotion, linkage with local and global markets, digital payments, \\nand social security. This will greatly benefit the Scheduled Castes, \\nScheduled Tribes, OBCs, women and people belonging to the weaker \\nsections. \\n3) Tourism : The country offers immense attraction for domestic as well \\nas foreign tourists. There is a large potential to be tapped in tourism. \\nThe sector holds huge opportunities for jobs and entrepreneurship \\nfor youth in particular. Promotion of tourism will be taken up on \\nmission mode, with active participation of states, convergence of \\ngovernment programmes and public-private partnerships. 5 \\n \\n \\n 4) Green Growth: We are implementing many programmes for green \\nfuel, green energy, green farming, green mobility, green buildings, \\nand green equipment, and policies for efficient use of energy across \\nvarious economic sectors. These green growth efforts help in \\nreducing carbon intensity of the economy and provides for large-\\nscale green job opportunities. \\nPriorities of this Budget \\n14. The Budget adopts the following seven priorities. They complement \\neach other and act as the ‘Saptarishi’ guiding us through the Amrit Kaal. \\n1) Inclusive Development \\n2) Reaching the Last Mile \\n3) Infrastructure and Investment \\n4) Unleashing the Potential \\n5) Green Growth \\n6) Youth Power \\n7) Financial Sector \\nPriority 1: Inclusive Development \\n15. The Government’s philosophy of Sabka Saath Sabka Vikas has \\nfacilitated inclusive development covering in specific, farmers, women, \\nyouth, OBCs, Scheduled Castes, Scheduled Tribes, divyangjan and \\neconomically weaker sections, and overall priority for the underprivileged \\n(vanchiton ko variyata ). There has also been a sustained focus on Jammu & \\nKashmir, Ladakh and the North-East. This Budget builds on those efforts. \\nAgriculture and Cooperation \\nDigital Public Infrastructure for Agriculture \\n16. Digital public infrastructure for agriculture will be built as an open \\nsource, open standard and inter operable public good. This will enable 6 \\n \\n \\n inclusive, farmer-centric solutions through relevant information services for \\ncrop planning and health, improved access to farm inputs, credit, and \\ninsurance, help for crop estimation, market intelligence, and support for \\ngrowth of agri-tech industry and start-ups. \\nAgriculture Accelerator Fund \\n17. An Agriculture Accelerator Fund will be set-up to encourage agri-\\nstartups by young entrepreneurs in rural areas. The Fund will aim at \\nbringing innovative and affordable solutions for challenges faced by \\nfarmers. It will also bring in modern technologies to transform agricultural \\npractices, increase productivity and profitability. \\nEnhancing productivity of cotton crop \\n18. To enhance the productivity of extra-long staple cotton, we will \\nadopt a cluster-based and value chain approach through Public Private \\nPartnerships (PPP). This will mean collaboration between farmers, state and \\nindustry for input supplies, extension services, and market linkages. \\nAtmanirbhar Horticulture Clean Plant Program \\n19. We will launch an Atmanirbhar Clean Plant Program to boost \\navailability of disease-free, quality planting material for high value \\nhorticultural crops at an outlay of ` 2,200 crore. \\nGlobal Hub for Millets: ‘Shree Anna’ \\n20. “India is at the forefront of popularizing Millets, whose consumption \\nfurthers nutrition, food security and welfare of farmers,” said Hon’ble Prime \\nMinister. \\n21. We are the largest producer and second largest exporter of ‘Shree \\nAnna’ in the world. We grow several types of ' Shree Anna' such as jowar, \\nragi, bajra, kuttu, ramdana, kangni, kutki, kodo, cheena, and sama. These \\nhave a number of health benefits, and have been an integral part of our \\nfood for centuries. I acknowledge with pride the huge service done by small 7 \\n \\n \\n farmers in contributing to the health of fellow citizens by growing these \\n‘Shree Anna’. \\n22. Now to make India a global hub for ' Shree Anna' , the Indian Institute \\nof Millet Research, Hyderabad will be supported as the Centre of Excellence \\nfor sharing best practices, research and technologies at the international \\nlevel. \\nAgriculture Credit \\n23. The agriculture credit target will be increased \\nto ` 20 lakh crore with focus on animal husbandry, dairy and fisheries. \\nFisheries \\n24. We will launch a new sub-scheme of PM Matsya Sampada Yojana \\nwith targeted investment of ` 6,000 crore to further enable activities of \\nfishermen, fish vendors, and micro & small enterprises, improve value chain \\nefficiencies, and expand the market. \\nCooperation \\n25. For farmers, especially small and marginal farmers, and other \\nmarginalised sections, the government is promoting cooperative-based \\neconomic development model. A new Ministry of Cooperation was formed \\nwith a mandate to realise the vision of ‘Sahakar Se Samriddhi’ . To realise \\nthis vision, the government has already initiated computerisation of 63,000 \\nPrimary Agricultural Credit Societies (PACS) with an investment of ` 2,516 \\ncrore. In consultation with all stakeholders and states, model bye-laws for \\nPACS were formulated enabling them to become multipurpose PACS. A \\nnational cooperative database is being prepared for country-wide mapping \\nof cooperative societies. \\n26. With this backdrop, we will implement a plan to set up massive \\ndecentralised storage capacity. This will help farmers store their produce \\nand realize remunerative prices through sale at appropriate times. The \\ngovernment will also facilitate setting up of a large number of multipurpose 8 \\n \\n \\n cooperative societies, primary fishery societies and dairy cooperative \\nsocieties in uncovered panchayats and villages in the next 5 years. \\nHealth, Education and Skilling \\nNursing Colleges \\n27\\n. One hundred and fifty-seven new nursing colleges will be \\nestablished in co-location with the existing 157 medical colleges established \\nsince 2014. \\nSickle Cell Anaemia Elimination Mission \\n28. A Mission to eliminate Sickle Cell Anaemia by 2047 will be launched. \\nIt will entail awareness creation, universal screening of 7 crore people in the \\nage group of 0-40 years in affected tribal areas, and counselling through \\ncollaborative efforts of central ministries and state governments. \\nMedical Research \\n29. Facilities in select ICMR Labs will be made available for research by \\npublic and private medical college faculty and private sector R&D teams for \\nencouraging collaborative research and innovation. \\nPharma Innovation \\n30. A new programme to promote research and innovation in \\npharmaceuticals will be taken up through centers of excellence. We shall \\nalso encourage industry to invest in research and development in specific \\npriority areas. \\nMultidisciplinary courses for medical devices \\n31. Dedicated multidisciplinary courses for medical devices will be \\nsupported in existing institutions to ensure availability of skilled manpower \\nfor futuristic medical technologies, high-end manufacturing and research. \\n 9 \\n \\n \\n Teachers’ Training \\n32. Teachers’ training will be re-envisioned through innovative \\npedagogy, curriculum transaction, continuous professional development, \\ndipstick surveys, and ICT implementation. The District Institutes of \\nEducation and Training will be developed as vibrant institutes of excellence \\nfor this purpose. \\nNational Digital Library for Children and Adolescents \\n33. A National Digital Library for children and adolescents will be set-up \\nfor facilitating availability of quality books across geographies, languages, \\ngenres and levels, and device agnostic accessibility. States will be \\nencouraged to set up physical libraries for them at panchayat and ward \\nlevels and provide infrastructure for accessing the National Digital Library \\nresources. \\n34. Additionally, to build a culture of reading, and to make up for \\npandemic-time learning loss, the National Book Trust, Children’s Book Trust \\nand other sources will be encouraged to provide and replenish non-\\ncurricular titles in regional languages and English to these physical libraries. \\nCollaboration with NGOs that work in literacy will also be a part of this \\ninitiative. To inculcate financial literacy, financial sector regulators and \\norganizations will be encouraged to provide age-appropriate reading \\nmaterial to these libraries. \\nPriority 2: Reaching the Last Mile \\n35. Prime Minister Vajpayee’s government had formed the Ministry of \\nTribal Affairs and the Department of Development of North-Eastern Region. \\nTo provide a sharper focus to the objective of ‘reaching the last mile’, our \\ngovernment has formed the ministries of AYUSH, Fisheries, Animal \\nHusbandry and Dairying, Skill Development, Jal Shakti and Cooperation. \\n \\n 10 \\n \\n \\n Aspirational Districts and Blocks Programme \\n36. Building on the success of the Aspirational Districts Programme, the \\nGovernment has recently launched the Aspirational Blocks Programme \\ncovering 500 blocks for saturation of essential government services across \\nmultiple domains such as health, nutrition, education, agriculture, water \\nresources, financial inclusion, skill development, and basic infrastructure. \\nPradhan Mantri PVTG Development Mission \\n37. To improve socio-economic conditions of the particularly vulnerable \\ntribal groups (PVTGs), Pradhan Mantri PVTG Development Mission will be \\nlaunched. This will saturate PVTG families and habitations with basic \\nfacilities such as safe housing, clean drinking water and sanitation, \\nimproved access to education, health and nutrition, road and telecom \\nconnectivity, and sustainable livelihood opportunities. An amount \\nof ` 15,000 crore will be made available to implement the Mission in the \\nnext three years under the Development Action Plan for the Scheduled \\nTribes. \\nEklavya Model Residential Schools \\n38. In the next three years, centre will recruit 38,800 teachers and \\nsupport staff for the 740 Eklavya Model Residential Schools, serving 3.5 lakh \\ntribal students. \\nWater for Drought Prone Region \\n39. In the drought prone central region of Karnataka, central assistance \\nof ` 5,300 crore will be given to Upper Bhadra Project to provide \\nsustainable micro irrigation and filling up of surface tanks for drinking \\nwater. \\nPM Awas Yojana \\n40. The outlay for PM Awas Yojana is being enhanced \\n by 66 per cent to over ` 79,000 crore. 11 \\n \\n \\n Bharat Shared Repository of Inscriptions (Bharat SHRI) \\n41. ‘Bharat Shared Repository of Inscriptions’ will be set up in a digital \\nepigraphy museum, with digitization of one lakh ancient inscriptions in the \\nfirst stage. \\nSupport for poor prisoners \\n42. For poor persons who are in prisons and unable to afford the \\npenalty or the bail amount, required financial support will be provided. \\n \\nPriority 3: Infrastructure & Investment \\n43. Investments in Infrastructure and productive capacity have a large \\nmultiplier impact on growth and employment. After the subdued period of \\nthe pandemic, private investments are growing again. The Budget takes the \\nlead once again to ramp up the virtuous cycle of investment and job \\ncreation. \\n \\nCapital Investment as driver of growth and jobs \\n44. Capital investment outlay is being increased steeply for the third \\nyear in a row by 33 per cent to ` 10 lakh crore, which would be 3.3 per cent \\nof GDP. This will be almost three times the outlay in 2019-20. \\n45. This substantial increase in recent years is central to the \\ngovernment’s efforts to enhance growth potential and job creation, crowd-\\nin private investments, and provide a cushion against global headwinds. \\nEffective Capital Expenditure \\n46. The direct capital investment by the Centre is complemented by the \\nprovision made for creation of capital assets through Grants-in-Aid to \\nStates. The ‘Effective Capital Expenditure’ of the Centre is budgeted at \\n` 13.7 lakh crore, which will be 4.5 per cent of GDP. 12 \\n \\n \\n Support to State Governments for Capital Investment \\n47. I have decided to continue the 50-year interest free loan to state \\ngovernments for one more year to spur investment in infrastructure and to \\nincentivize them for complementary policy actions, with a significantly \\nenhanced outlay of ` 1.3 lakh crore. \\nEnhancing opportunities for private investment in Infrastructure \\n48. The newly established Infrastructure Finance Secretariat will assist \\nall stakeholders for more private investment in infrastructure, including \\nrailways, roads, urban infrastructure and power, which are predominantly \\ndependent on public resources. \\nHarmonized Master List of Infrastructure \\n49. The Harmonized Master List of Infrastructure will be reviewed by an \\nexpert committee for recommending the classification and financing \\nframework suitable for Amrit Kaal . \\nRailways \\n50. A capital outlay of ` 2.40 lakh crore has been provided for the \\nRailways. This highest ever outlay is about 9 times the outlay made in 2013-\\n14. \\nLogistics \\n51. One hundred critical transport infrastructure projects, for last and \\nfirst mile connectivity for ports, coal, steel, fertilizer, and food grains sectors \\nhave been identified. They will be taken up on priority with investment of \\n` 75,000 crore, including ` 15,000 crore from private sources. \\nRegional Connectivity \\n52. Fifty additional airports, heliports, water aerodromes and advance \\nlanding grounds will be revived for improving regional air connectivity. \\n 13 \\n \\n \\n Sustainable Cities of Tomorrow \\n53. States and cities will be encouraged to undertake urban planning \\nreforms and actions to transform our cities into ‘sustainable cities of \\ntomorrow’. This means efficient use of land resources, adequate resources \\nfor urban infrastructure, transit-oriented development, enhanced \\navailability and affordability of urban land, and opportunities for all. \\nMaking Cities ready for Municipal Bonds \\n54. Through property tax governance reforms and ring-fencing user \\ncharges on urban infrastructure, cities will be incentivized to improve their \\ncredit worthiness for municipal bonds. \\nUrban Infrastructure Development Fund \\n55. Like the RIDF, an Urban Infrastructure Development Fund (UIDF) will \\nbe established through use of priority sector lending shortfall. This will be \\nmanaged by the National Housing Bank, and will be used by public agencies \\nto create urban infrastructure in Tier 2 and Tier 3 cities. States will be \\nencouraged to leverage resources from the grants of the 15th Finance \\nCommission, as well as existing schemes, to adopt appropriate user charges \\nwhile accessing the UIDF. We expect to make \\navailable ` 10,000 crore per annum for this purpose. \\nUrban Sanitation \\n56. All cities and towns will be enabled for 100 per cent mechanical \\ndesludging of septic tanks and sewers to transition from manhole to \\nmachine-hole mode. Enhanced focus will be provided for scientific \\nmanagement of dry and wet waste. \\nPriority 4: Unleashing the Potential \\n57. “Good Governance is the key to a nation’s progress. Our government \\nis committed to providing a transparent and accountable administration \\nwhich works for the betterment and welfare of the common citizen,” said \\nHon’ble Prime Minister. 14 \\n \\n \\n Mission Karmayogi \\n58. Under Mission Karmayogi, Centre, States and Union Territories are \\nmaking and implementing capacity-building plans for civil servants. The \\ngovernment has also launched an integrated online training platform, iGOT \\nKarmayogi , to provide continuous learning opportunities for lakhs of \\ngovernment employees to upgrade their skills and facilitate people-centric \\napproach. \\n59. For enhancing ease of doing business, more than \\n39,000 compliances have been reduced and more than \\n3,400 legal provisions have been decriminalized. For furthering the trust-\\nbased governance, we have introduced the Jan Vishwas Bill to amend 42 \\nCentral Acts. This Budget proposes a series of measures to unleash the \\npotential of our economy. \\nCentres of Excellence for Artificial Intelligence \\n60. For realizing the vision of “Make AI in India and Make AI work for \\nIndia”, three centres of excellence for Artificial Intelligence will be set-up in \\ntop educational institutions. Leading industry players will partner in \\nconducting interdisciplinary research, develop cutting-edge applications and \\nscalable problem solutions in the areas of agriculture, health, and \\nsustainable cities. This will galvanize an effective AI ecosystem and nurture \\nquality human resources in the field. \\nNational Data Governance Policy \\n61. To unleash innovation and research by start-ups and academia, a \\nNational Data Governance Policy will be brought out. This will enable access \\nto anonymized data. \\nSimplification of Know Your Customer (KYC) process \\n62. The KYC process will be simplified adopting a ‘risk-based’ instead of \\n‘one size fits all’ approach. The financial sector regulators will also be 15 \\n \\n \\n encouraged to have a KYC system fully amenable to meet the needs of \\nDigital India. \\nOne stop solution for identity and address updating \\n63. A one stop solution for reconciliation and updating of identity and \\naddress of individuals maintained by various government agencies, \\nregulators and regulated entities will be established using DigiLocker service \\nand Aadhaar as foundational identity. \\nCommon Business Identifier \\n64. For the business establishments required to have a Permanent \\nAccount Number (PAN), the PAN will be used as the common identifier for \\nall digital systems of specified government agencies. This will bring ease of \\ndoing business; and it will be facilitated through a legal mandate. \\nUnified Filing Process \\n65. For obviating the need for separate submission of same information \\nto different government agencies, a system of ‘Unified Filing Process’ will be \\nset-up. Such filing of information or return in simplified forms on a common \\nportal, will be shared with other agencies as per filer’s choice. \\nVivad se Vishwas I – Relief for MSMEs \\n66. In cases of failure by MSMEs to execute contracts during the Covid \\nperiod, 95 per cent of the forfeited amount relating to bid or performance \\nsecurity, will be returned to them by government and government \\nundertakings. This will provide relief to MSMEs. \\nVivad se Vishwas II – Settling Contractual Disputes \\n67. To settle contractual disputes of government and government \\nundertakings, wherein arbitral award is under challenge in a court, a \\nvoluntary settlement scheme with standardized terms will be introduced. \\nThis will be done by offering graded settlement terms depending on \\npendency level of the dispute. 16 \\n \\n \\n State Support Mission \\n68. The State Support Mission of NITI Aayog will be continued for three \\nyears for our collective efforts towards national priorities. \\nResult Based Financing \\n69. To better allocate scarce resources for competing development \\nneeds, the financing of select schemes will be changed, on a pilot basis, \\nfrom ‘input-based’ to ‘result-based’. \\nE-Courts \\n70. For efficient administration of justice, Phase-3 of the \\n E-Courts project will be launched with an outlay \\nof ` 7,000 crore. \\nFintech Services \\n71. Fintech services in India have been facilitated by our digital public \\ninfrastructure including Aadhaar, PM Jan Dhan Yojana, Video KYC, India \\nStack and UPI. To enable more Fintech innovative services, the scope of \\ndocuments available in DigiLocker for individuals will be expanded. \\nEntity DigiLocker \\n72. An Entity DigiLocker will be set up for use by MSMEs, large business \\nand charitable trusts. This will be towards storing and sharing documents \\nonline securely, whenever needed, with various authorities, regulators, \\nbanks and other business entities. \\n5G Services \\n73. One hundred labs for developing applications using \\n5G services will be set up in engineering institutions to realise a new range \\nof opportunities, business models, and employment potential. The labs will \\ncover, among others, applications such as smart classrooms, precision \\nfarming, intelligent transport systems, and health care applications. 17 \\n \\n \\n Lab Grown Diamonds \\n74. Lab Grown Diamonds (LGD) is a technology-and innovation-driven \\nemerging sector with high employment potential. These environment-\\nfriendly diamonds which have optically and chemically the same properties \\nas natural diamonds. To encourage indigenous production of LGD seeds and \\nmachines and to reduce import dependency, a research and development \\ngrant will be provided to one of the IITs for five years. \\n75. To reduce the cost of production, a proposal to review the custom \\nduty rate on LGD seeds will be indicated in Part B of the speech. \\nPriority 5: Green Growth \\n76. Hon’ble Prime Minister has given a vision for “LiFE”, or Lifestyle for \\nEnvironment, to spur a movement of environmentally conscious lifestyle. \\nIndia is moving forward firmly for the ‘panchamrit’ and net-zero carbon \\nemission by 2070 to usher in green industrial and economic transition. This \\nBudget builds on our focus on green growth. \\nGreen Hydrogen Mission \\n77. The recently launched National Green Hydrogen Mission, with an \\noutlay of ` 19,700 crores, will facilitate transition of the economy to low \\ncarbon intensity, reduce dependence on fossil fuel imports, and make the \\ncountry assume technology and market leadership in this sunrise sector. \\nOur target is to reach an annual production of 5 MMT by 2030. \\nEnergy Transition \\n78. This Budget provides ` 35,000 crore for priority capital investments \\ntowards energy transition and net zero objectives, and energy security by \\nMinistry of Petroleum & Natural Gas. \\nEnergy Storage Projects \\n79. To steer the economy on the sustainable development path, Battery \\nEnergy Storage Systems with capacity of 4,000 MWH will be supported with 18 \\n \\n \\n Viability Gap Funding. A detailed framework for Pumped Storage Projects \\nwill also be formulated. \\nRenewable Energy Evacuation \\n80. The Inter-state transmission system for evacuation and grid \\nintegration of 13 GW renewable energy from Ladakh will be constructed \\nwith investment of ` 20,700 crore including central support of ` 8,300 crore. \\nGreen Credit Programme \\n81. For encouraging behavioural change, a Green Credit Programme will \\nbe notified under the Environment (Protection) Act. This will incentivize \\nenvironmentally sustainable and responsive actions by companies, \\nindividuals and local bodies, and help mobilize additional resources for such \\nactivities. \\nPM-PRANAM \\n82. “PM Programme for Restoration, Awareness, Nourishment and \\nAmelioration of Mother Earth” will be launched to incentivize States and \\nUnion Territories to promote alternative fertilizers and balanced use of \\nchemical fertilizers. \\nGOBARdhan scheme \\n83. 500 new ‘waste to wealth’ plants under GOBARdhan (Galvanizing \\nOrganic Bio-Agro Resources Dhan) scheme will be established for promoting \\ncircular economy. These will include 200 compressed biogas (CBG) plants, \\nincluding 75 plants in urban areas, and 300 community or cluster-based \\nplants at total investment of ` 10,000 crore. I will refer to this in Part B. In \\ndue course, a 5 per cent CBG mandate will be introduced for all \\norganizations marketing natural and bio gas. For collection of bio-mass and \\ndistribution of bio-manure, appropriate fiscal support will be provided. \\n \\n 19 \\n \\n \\n Bhartiya Prakritik Kheti Bio-Input Resource Centres \\n84. Over the next 3 years, we will facilitate 1 crore farmers to adopt \\nnatural farming. For this, 10,000 Bio-Input Resource Centres will be set-up, \\ncreating a national-level distributed micro-fertilizer and pesticide \\nmanufacturing network. \\nMISHTI \\n85. Building on India’s success in afforestation, ‘Mangrove Initiative for \\nShoreline Habitats & Tangible Incomes’, MISHTI, will be taken up for \\nmangrove plantation along the coastline and on salt pan lands, wherever \\nfeasible, through convergence between MGNREGS, CAMPA Fund and other \\nsources. \\nAmrit Dharohar \\n86. Wetlands are vital ecosystems which sustain biological diversity. In \\nhis latest Mann Ki Baat, the Prime Minister said, “Now the total number of \\nRamsar sites in our country has increased to 75. Whereas, before 2014, \\nthere were only 26…” Local communities have always been at the forefront \\nof conservation efforts. The government will promote their unique \\nconservation values through Amrit Dharohar , a scheme that will be \\nimplemented over the next three years to encourage optimal use of \\nwetlands, and enhance bio-diversity, carbon stock, \\neco-tourism opportunities and income generation for local communities. \\nCoastal Shipping \\n87. Coastal shipping will be promoted as the energy efficient and lower \\ncost mode of transport, both for passengers and freight, through PPP mode \\nwith viability gap funding. \\nVehicle Replacement \\n88. Replacing old polluting vehicles is an important part of greening our \\neconomy. In furtherance of the vehicle scrapping policy mentioned in \\nBudget 2021-22, I have allocated adequate funds to scrap old vehicles of 20 \\n \\n \\n the Central Government. States will also be supported in replacing old \\nvehicles and ambulances. \\nPriority 6: Youth Power \\n89. To empower our youth and help the ‘ Amrit Peedhi ’ realize their \\ndreams, we have formulated the National Education Policy, focused on \\nskilling, adopted economic policies that facilitate job creation at scale, and \\nhave supported business opportunities. \\nPradhan Mantri Kaushal Vikas Yojana 4.0 \\n90. Pradhan Mantri Kaushal Vikas Yojana 4.0 will be launched to skill \\nlakhs of youth within the next three years. On-job training, industry \\npartnership, and alignment of courses with needs of industry will be \\nemphasized. The scheme will also cover new age courses for Industry 4.0 \\nlike coding, AI, robotics, mechatronics, IOT, 3D printing, drones, and soft \\nskills. To skill youth for international opportunities, 30 Skill India \\nInternational Centres will be set up across different States. \\n \\nSkill India Digital Platform \\n91. The digital ecosystem for skilling will be further expanded with the \\nlaunch of a unified Skill India Digital platform for: \\n\\uf0b7 enabling demand-based formal skilling, \\n\\uf0b7 linking with employers including MSMEs, and \\n\\uf0b7 facilitating access to entrepreneurship schemes. \\nNational Apprenticeship Promotion Scheme \\n92. To provide stipend support to 47 lakh youth in three years, Direct \\nBenefit Transfer under a pan-India National Apprenticeship Promotion \\nScheme will be rolled out. 21 \\n \\n \\n Tourism \\n93. With an integrated and innovative approach, at \\nleast 50 destinations will be selected through challenge mode. In addition to \\naspects such as physical connectivity, virtual connectivity, tourist guides, \\nhigh standards for food streets and tourists’ security, all the relevant \\naspects would be made available on an App to enhance tourist experience. \\nEvery destination would be developed as a complete package. The focus of \\ndevelopment of tourism would be on domestic as well as foreign tourists. \\n94. Sector specific skilling and entrepreneurship development will be \\ndovetailed to achieve the objectives of the ‘Dekho Apna Desh’ initiative. \\nThis was launched as an appeal by the Prime Minister to the middle class to \\nprefer domestic tourism over international tourism. For integrated \\ndevelopment of theme-based tourist circuits, the ‘Swadesh Darshan \\nScheme’ was also launched. Under the Vibrant Villages Programme, tourism \\ninfrastructure and amenities will also be facilitated in border villages. \\nUnity Mall \\n95. States will be encouraged to set up a Unity Mall in their state capital \\nor most prominent tourism centre or the financial capital for promotion and \\nsale of their own ODOPs (one district, one product), GI products and other \\nhandicraft products, and for providing space for such products of all other \\nStates. \\nPriority 7: Financial Sector \\n96. Our reforms in the financial sector and innovative use of technology \\nhave led to financial inclusion at scale, better and faster service delivery, \\nease of access to credit and participation in financial markets. This Budget \\nproposes to further these measures. \\nCredit Guarantee for MSMEs \\n97. Last year, I proposed revamping of the credit guarantee scheme for \\nMSMEs. I am happy to announce that the revamped scheme will take effect 22 \\n \\n \\n from 1st April 2023 through infusion of ` 9,000 crore in the corpus. This will \\nenable additional collateral-free guaranteed credit of ` 2 lakh crore. \\nFurther, the cost of the credit will be reduced by about 1 per cent. \\nNational Financial Information Registry \\n98. A national financial information registry will be set up to serve as the \\ncentral repository of financial and ancillary information. This will facilitate \\nefficient flow of credit, promote financial inclusion, and foster financial \\nstability. A new legislative framework will govern this credit public \\ninfrastructure, and it will be designed in consultation with the RBI. \\nFinancial Sector Regulations \\n99. To meet the needs of Amrit Kaal and to facilitate optimum \\nregulation in the financial sector, public consultation, as necessary and \\nfeasible, will be brought to the process of regulation-making and issuing \\nsubsidiary directions. \\n100. To simplify, ease and reduce cost of compliance, financial sector \\nregulators will be requested to carry out a comprehensive review of existing \\nregulations. For this, they will consider suggestions from public and \\nregulated entities. Time limits to decide the applications under various \\nregulations will also be laid down. \\nGIFT IFSC \\n101. To enhance business activities in GIFT IFSC, the following measures \\nwill be taken: \\n\\uf0b7 Delegating powers under the SEZ Act to IFSCA to avoid dual \\nregulation, \\n\\uf0b7 Setting up a single window IT system for registration and \\napproval from IFSCA, SEZ authorities, GSTN, RBI, SEBI and \\nIRDAI, 23 \\n \\n \\n \\uf0b7 Permitting acquisition financing by IFSC Banking Units of \\nforeign banks, \\n\\uf0b7 Establishing a subsidiary of EXIM Bank for trade \\nre-financing, \\n\\uf0b7 Amending IFSCA Act for statutory provisions for arbitration, \\nancillary services, and avoiding dual regulation under SEZ Act, \\nand \\n\\uf0b7 Recognizing offshore derivative instruments as valid contracts. \\n \\nData Embassy \\n102. For countries looking for digital continuity solutions, we will \\nfacilitate setting up of their Data Embassies in GIFT IFSC. \\nImproving Governance and Investor Protection in Banking Sector \\n103. To improve bank governance and enhance investors’ protection, \\ncertain amendments to the Banking Regulation Act, the Banking Companies \\nAct and the Reserve Bank of India Act are proposed. \\n \\nCa\\npacity Building in Securities Market \\n104. To build capacity of functionaries and professionals in the securities \\nmarket, SEBI will be empowered to develop, regulate, maintain and enforce \\nnorms and standards for education in the National Institute of Securities \\nMarkets and to recognize award of degrees, diplomas and certificates. \\nCentral Data Processing Centre \\n105. A Central Processing Centre will be setup for faster response to \\ncompanies through centralized handling of various forms filed with field \\noffices under the Companies Act. 24 \\n \\n \\n Reclaiming of shares and dividends \\n106. For investors to reclaim unclaimed shares and unpaid dividends \\nfrom the Investor Education and Protection Fund Authority with ease, an \\nintegrated IT portal will be established. \\nDigital Payments \\n107. Digital payments continue to find wide acceptance. In 2022, they \\nshow increase of 76 per cent in transactions \\nand 91 per cent in value. Fiscal support for this digital public infrastructure \\nwill continue in 2023-24. \\nAzadi Ka Amrit Mahotsav Mahila Samman Bachat Patra \\n108. For commemorating Azadi Ka Amrit Mahotsav, a one-time new small \\nsavings scheme, Mahila Samman Savings Certificate, will be made available \\nfor a two-year period up to March 2025. This will offer deposit facility upto \\n` 2 lakh in the name of women or girls for a tenor of 2 years at fixed \\ninterest rate of 7.5 per cent with partial withdrawal option. \\nSenior Citizens \\n109. The maximum deposit limit for Senior Citizen Savings Scheme will be \\nenhanced from ` 15 lakh to ` 30 lakh. \\n110. The maximum deposit limit for Monthly Income Account Scheme \\nwill be enhanced from ` 4.5 lakh to ` 9 lakh for single account and from ` 9 \\nlakh to ` 15 lakh for joint account. \\nFiscal Management \\nFifty-year interest free loan to States \\n111. The entire fifty-year loan to states has to be spent on capital \\nexpenditure within 2023-24. Most of this will be at the discretion of states, \\nbut a part will be conditional on states increasing their actual capital 25 \\n \\n \\n expenditure. Parts of the outlay will also be linked to, or allocated for, the \\nfollowing purposes: \\n\\uf0b7 Scrapping old government vehicles, \\n\\uf0b7 Urban planning reforms and actions, \\n\\uf0b7 Financing reforms in urban local bodies to make them \\ncreditworthy for municipal bonds, \\n\\uf0b7 Housing for police personnel above or as part of police stations, \\n\\uf0b7 Constructing Unity Malls, \\n\\uf0b7 Children and adolescents’ libraries and digital infrastructure, \\nand \\n\\uf0b7 State share of capital expenditure of central schemes. \\nFiscal Deficit of States \\n112. States will be allowed a fiscal deficit of 3.5 per cent of GSDP of which \\n0.5 per cent will be tied to power sector reforms. \\nRevised Estimates 2022-23 \\n113. The Revised Estimate of the total receipts other than borrowings is \\n` 24.3 lakh crore, of which the net tax receipts \\nare ` 20.9 lakh crore. The Revised Estimate of the total expenditure is \\n` 41.9 lakh crore, of which the capital expenditure is about ` 7.3 lakh crore. \\n114. The Revised Estimate of the fiscal deficit is 6.4 per cent of GDP, \\nadhering to the Budget Estimate. \\nBudget Estimates 2023-24 \\n115. Coming to 2023-24, the total receipts other than borrowings and the \\ntotal expenditure are estimated at ` 27.2 lakh crore and ` 45 lakh crore \\nrespectively. The net tax receipts are estimated at ` 23.3 lakh crore. 26 \\n \\n \\n 116. The fiscal deficit is estimated to be 5.9 per cent of GDP. In my \\nBudget Speech for 2021-22, I had announced that we plan to continue the \\npath of fiscal consolidation, reaching a fiscal deficit below 4.5 per cent by \\n2025-26 with a fairly steady decline over the period. We have adhered to \\nthis path, and I reiterate my intention to bring the fiscal deficit below 4.5 \\nper cent of GDP by 2025-26. \\n117. To finance the fiscal deficit in 2023-24, the net market borrowings \\nfrom dated securities are estimated at ` 11.8 lakh crore. The balance \\nfinancing is expected to come from small savings and other sources. The \\ngross market borrowings are estimated at ` 15.4 lakh crore. \\nI will, now, move to Part B. \\n \\n \\n 27 \\n \\n \\n PART B \\nIndirect Taxes \\n118. My indirect tax proposals aim to promote exports, boost domestic \\nmanufacturing, enhance domestic value addition, encourage green energy \\nand mobility. \\n119. A simplified tax structure with fewer tax rates helps in reducing \\ncompliance burden and improving tax administration. I propose to reduce \\nthe number of basic customs duty rates on goods, other than textiles and \\nagriculture, from 21 to 13. As a result, there are minor changes in the basic \\ncustom duties, cesses and surcharges on some items including toys, \\nbicycles, automobiles and naphtha. \\n \\nGreen Mobility \\n120. To avoid cascading of taxes on blended compressed natural gas, I \\npropose to exempt excise duty on GST-paid compressed bio gas contained \\nin it. To further provide impetus to green mobility, customs duty exemption \\nis being extended to import of capital goods and machinery required for \\nmanufacture of lithium-ion cells for batteries used in electric vehicles. \\nElectronics \\n121. As a result of various initiatives of the Government, including the \\nPhased Manufacturing programme, mobile phone production in India has \\nincreased from 5.8 crore units valued at about ` 18,900 crore in 2014-15 to \\n31 crore units valued at over ` 2,75,000 crore in the last financial year. To \\nfurther deepen domestic value addition in manufacture of mobile phones, I \\npropose to provide relief in customs duty on import of certain parts and \\ninputs like camera lens and continue the concessional duty on lithium-ion \\ncells for batteries for another year. 28 \\n \\n \\n 122. Similarly, to promote value addition in manufacture of televisions, I \\npropose to reduce the basic customs duty on parts of open cells of TV \\npanels to 2.5 per cent. \\nElectrical \\n123. To rectify inversion of duty structure and encourage manufacturing \\nof electric kitchen chimneys, the basic customs duty on electric kitchen \\nchimney is being increased from 7.5 per cent to 15 per cent and that on \\nheat coils for these is proposed to be reduced from 20 per cent to 15 per \\ncent. \\nChemicals and Petrochemicals \\n124. Denatured ethyl alcohol is used in chemical industry. \\n I propose to exempt basic customs duty on it. This will also support the \\nEthanol Blending Programme and facilitate our endeavour for energy \\ntransition. Basic customs duty is also being reduced on acid grade fluorspar \\nfrom 5 per cent to 2.5 per cent to make the domestic fluorochemicals \\nindustry competitive. Further, the basic customs duty on crude glycerin for \\nuse in manufacture of epicholorhydrin is proposed to be reduced from 7.5 \\nper cent to 2.5 per cent. \\nMarine products \\n125. In the last financial year, marine products recorded the highest \\nexport growth benefitting farmers in the coastal states of the country. To \\nfurther enhance the export competitiveness of marine products, \\nparticularly shrimps, duty is being reduced on key inputs for domestic \\nmanufacture of shrimp feed. \\nLab Grown Diamonds \\n126. India is a global leader in cutting and polishing of natural diamonds, \\ncontributing about three-fourths of the global turnover by value. With the \\ndepletion in deposits of natural diamonds, the industry is moving towards \\nLab Grown Diamonds (LGDs) and it holds huge promise. To seize this 29 \\n \\n \\n opportunity, I propose to reduce basic customs duty on seeds used in their \\nmanufacture. \\n \\nPrecious Metals \\n127. Customs Duties on dore and bars of gold and platinum were \\nincreased earlier this fiscal. I now propose to increase the duties on articles \\nmade therefrom to enhance the duty differential. I also propose to increase \\nthe import duty on silver dore, bars and articles to align them with that on \\ngold and platinum. \\nMetals \\n128. To facilitate availability of raw materials for the steel sector, \\nexemption from Basic Customs Duty on raw materials for manufacture of \\nCRGO Steel, ferrous scrap and nickel cathode is being continued. \\n129. Similarly, the concessional BCD of 2.5 per cent on copper scrap is \\nalso being continued to ensure the availability of raw materials for \\nsecondary copper producers who are mainly in the MSME sector. \\nCompounded Rubber \\n130. The basic customs duty rate on compounded rubber is being \\nincreased from 10 per cent to ‘25 per cent or ` 30/kg whichever is lower’, at \\npar with that on natural rubber other than latex, to curb circumvention of \\nduty. \\nCigarettes \\n131. National Calamity Contingent Duty (NCCD) on specified cigarettes \\nwas last revised three years ago. This is proposed to be revised upwards by \\nabout 16 per cent. \\n 30 \\n \\n \\n \\nDirect Taxes \\n132. I now come to my direct tax proposals. These proposals aim to \\nmaintain continuity and stability of taxation, further simplify and rationalise \\nvarious provisions to reduce the compliance burden, promote the \\nentrepreneurial spirit and provide tax relief to citizens. \\n133. It has been the constant endeavour of the Income Tax Department \\nto improve Tax Payers Services by making compliance easy and smooth. Our \\ntax payers’ portal received a maximum of 72 lakh returns in a day; \\nprocessed more than 6.5 crore returns this year; average processing period \\nreduced from 93 days in financial year 13-14 to 16 days now; \\nand 45 per cent of the returns were processed within 24 hours. We intend \\nto further improve this, roll out a next-generation Common IT Return Form \\nfor tax payer convenience, and also plan to strengthen the grievance \\nredressal mechanism. \\nMSMEs and Professionals \\n134. MSMEs are growth engines of our economy. Micro enterprises with \\nturnover up to ` 2 crore and certain professionals with turnover of up to \\n` 50 lakh can avail the benefit of presumptive taxation. I propose to provide \\nenhanced limits of ` 3 crore and ` 75 lakh respectively, to the tax payers \\nwhose cash receipts are no more than 5 per cent. Moreover, to support \\nMSMEs in timely receipt of payments, I propose to allow deduction for \\nexpenditure incurred on payments made to them only when payment is \\nactually made. \\nCooperation \\n135. Cooperation is a value to be cherished. In realizing our Prime \\nMinister’s goal of “Sahkar se Samriddhi ”, and his resolve to “connect the \\nspirit of cooperation with the spirit of Amrit Kaal”, in addition to the \\nmeasures proposed in Part A, I have a slew of proposals for the co-operative \\nsector. 31 \\n \\n \\n 136. First, new co-operatives that commence manufacturing activities till \\n31.3.2024 shall get the benefit of a lower tax rate of 15 per cent, as is \\npresently available to new manufacturing companies. \\n137. Secondly, I propose to provide an opportunity to sugar co-operatives \\nto claim payments made to sugarcane farmers for the period prior to \\nassessment year 2016-17 as expenditure. This is expected to provide them \\nwith a relief of almost ` 10,000 crore. \\n138. Thirdly, I am providing a higher limit of ` 2 lakh per member for cash \\ndeposits to and loans in cash by Primary Agricultural Co-operative Societies \\n(PACS) and Primary Co-operative Agriculture and Rural Development Banks \\n(PCARDBs). \\n139. Similarly, a higher limit of ` 3 crore for TDS on cash withdrawal is \\nbeing provided to co-operative societies. \\nStart-Ups \\n140. Entrepreneurship is vital for a country’s economic development. We \\nhave taken a number of measures for start-ups and they have borne results. \\nIndia is now the third largest ecosystem for start-ups globally, and ranks \\nsecond in innovation quality among middle-income countries. I propose to \\nextend the date of incorporation for income tax benefits to start-ups from \\n31.03.23 to 31.3.24. I further propose to provide the benefit of carry \\nforward of losses on change of shareholding of start-ups from seven years \\nof incorporation to ten years. \\nAppeals \\n141. To reduce the pendency of appeals at Commissioner level, I propose \\nto deploy about 100 Joint Commissioners for disposal of small appeals. We \\nshall also be more selective in taking up cases for scrutiny of returns already \\nreceived this year. \\n \\n 32 \\n \\n \\n Better targeting of tax concessions \\n142. For better targeting of tax concessions and exemptions, \\n I propose to cap deduction from capital gains on investment in residential \\nhouse under sections 54 and 54F to ` 10 crore. Another proposal with \\nsimilar intent is to limit income tax exemption from proceeds of insurance \\npolicies with very high value. \\nRationalisation \\n143. There are a number of proposals relating to rationalisation and \\nsimplification. Income of authorities, boards and commissions set up by \\nstatutes of the Union or State for the purpose of housing, development of \\ncities, towns and villages, and regulating, or regulating and developing an \\nactivity or matter, is proposed to be exempted from income tax. Other \\nmajor measures in this direction are: \\n\\uf0b7 Removing the minimum threshold of ` 10,000/- for TDS and \\nclarifying taxability relating to online gaming; \\n\\uf0b7 Not treating conversion of gold into electronic gold receipt and vice \\nversa as capital gain; \\n\\uf0b7 Reducing the TDS rate from 30 per cent to 20 per cent on taxable \\nportion of EPF withdrawal in non-PAN cases; and \\n\\uf0b7 Taxation on income from Market Linked Debentures. \\nOthers \\n144. Other major proposals in the Finance Bill relate to the following: \\n\\uf0b7 Extension of period of tax benefits to funds relocating to IFSC, GIFT \\nCity till 31.03.2025; \\n\\uf0b7 Decriminalisation under section 276A of the Income Tax Act; \\n\\uf0b7 Allowing carry forward of losses on strategic disinvestment including \\nthat of IDBI Bank; and \\n\\uf0b7 Providing EEE status to Agniveer Fund. \\n 33 \\n \\n \\n Personal Income Tax \\n145. Now, I come to what everyone is waiting for -- personal income tax. I \\nhave five major announcements to make in this regard. These primarily \\nbenefit our hard-working middle class. \\n146. The first one concerns rebate. Currently, those with income up to \\n` 5 lakh do not pay any income tax in both old and new tax regimes. I \\npropose to increase the rebate limit to ` 7 lakh in the new tax regime. Thus, \\npersons in the new tax regime, with income up to ` 7 lakh will not have to \\npay any tax. \\n147. The second proposal relates to middle-class individuals. \\n I had introduced, in the year 2020, the new personal income tax regime \\nwith six income slabs starting from ` 2.5 lakh. I propose to change the tax \\nstructure in this regime by reducing the number of slabs to five and \\nincreasing the tax exemption limit to ` 3 lakh. The new tax rates are: \\n` 0-3 lakh Nil \\n` 3-6 lakh 5 per cent \\n` 6-9 lakh 10 per cent \\n` 9-12 lakh 15 per cent \\n` 12-15 lakh 20 per cent \\nAbove ` 15 lakh 30 per cent \\n \\n148. This will provide major relief to all tax payers in the new regime. An \\nindividual with an annual income of ` 9 lakh will be required to pay only \\n` 45,000/-. This is only 5 per cent of his or her income. It is a reduction of 25 \\nper cent on what he or she is required to pay now, ie, ` 60,000/-. Similarly, \\nan individual with an income of ` 15 lakh would be required to pay only \\n` 1.5 lakh or 10 per cent of his or her income, a reduction of 20 per cent \\nfrom the existing liability of ` 1,87,500/. \\n149. My third proposal is for the salaried class and the pensioners \\nincluding family pensioners, for whom I propose to extend the benefit of 34 \\n \\n \\n standard deduction to the new tax regime. Each salaried person with an \\nincome of ` 15.5 lakh or more will thus stand to benefit by ` 52,500. \\n150. My fourth announcement in personal income tax is regarding the \\nhighest tax rate which in our country is 42.74 per cent. This is among the \\nhighest in the world. I propose to reduce the highest surcharge rate from 37 \\nper cent to 25 per cent in the new tax regime. This would result in reduction \\nof the maximum tax rate to 39 per cent. \\n151. Lastly, the limit of ` 3 lakh for tax exemption on leave encashment \\non retirement of non-government salaried employees was last fixed in the \\nyear 2002, when the highest basic pay in the government was ` 30,000/- \\npm. In line with the increase in government salaries, I am proposing to \\nincrease this limit to ` 25 lakh. \\n152. We are also making the new income tax regime as the default tax \\nregime. However, citizens will continue to have the option to avail the \\nbenefit of the old tax regime. \\n153. Apart from these, I am also making some other changes as given in \\nthe annexure. \\n154. As a result of these proposals, revenue of about ` 38,000 crore – \\n` 37,000 crore in direct taxes and ` 1,000 crore in indirect taxes – will be \\nforgone while revenue of about ` 3,000 crore will be additionally mobilized. \\nThus, the total revenue forgone is about ` 35,000 crore annually. \\n155. Mr. Speaker Sir, with these words, I commend the Budget to this \\naugust House. \\n***** \\n 35 \\n \\n \\n Annexure to Part B of the Budget Speech 2023-24 \\nAmendments relating to Direct Taxes \\nA. PROVIDING TAX RELIEF UNDER NEW PERSONAL T AX REGIME \\nA.1 The new tax regime for Individual and HUF , introduced by the \\nFinance Act 2020, is now proposed to be the default regime. \\nA.2 This regime would also become the default regime for AOP (other \\nthan co-operative), BOI and AJP. \\nA.3 Any individual, HUF, AOP (other than co-operative), BOI or AJP not \\nwilling to be taxed under this new regime can opt to be taxed \\nunder the old regime. For those person having income under the \\nhead “profit and gains of business or profession” and having opted \\nfor old regime can revoke that option only once and after that \\nthey will continue to be taxed under the new regime. For those \\nnot having income under the head “profit and gains of business or \\nprofession”, option for old regime may be exercised in each year. \\nA.4 Substantial relief is proposed under the new regime with new slabs \\nand tax rates as under: \\nTotal Income ( `) Rate (per cent) \\nUpto 3,00,000 Nil \\nFrom 3,00,001 to 6,00,000 5 \\nFrom 6,00,001 to 9,00,000 10 \\nFrom 9,00,001 to 12,00,000 15 \\nFrom 12,00,001 to 15,00,000 20 \\nAbove 15,00,000 30 \\n \\nA.5 Resident individual with total income up to ` 5,00,000 do not pay \\nany tax due to rebate under both old and new regime. It is \\nproposed to increase the rebate for the resident individual under \\nthe new regime so that they do not pay tax if their total income is \\nup to ` 7,00,000. \\nA.6 Standard deduction of ` 50,000 to salaried individual, and 36 \\n \\n \\n deduction from family pension up to ` 15,000, is currently allowed \\nonly under the old regime. It is proposed to allow these two \\ndeductions under the new regime also. \\n A.7 Surcharge on income-tax under both old regime and new regime is \\n10 per cent if income is above ` 5 0 lakh and up to ` 1 crore, 15 per \\ncent if income is above `1 crore and up to ` 2 crore, 25 per cent if \\nincome is above ` 2 crore and up to ` 5 crore, and 37 per cent if \\nincome is above ` 5 crore. It is proposed that the for those \\nindividuals, HUF, AOP (other than co-operative), BOI and AJP \\nunder the new regime, surcharge would be same except that the \\nsurcharge rate of 37 per cent will not apply. Highest surcharge \\nshall be 25 per cent for income above \\n` 2 crore. This would reduce the maximum rate from about 42.7 \\nper cent to about 39 per cent. No change in surcharge is proposed \\nfor those who opt to be under the old regime. \\nA.8 Encashment of earned leave up to 10 months of average salary, at \\nthe time of retirement in case of an employee (other than an \\nemployee of the Central Government or State Government), is \\nexempt under sub-clause (ii) of clause (10AA) of section 10 of the \\nIncome-tax Act (“the Act”) to the extent notified. The maximum \\namount which can be exempted is ` 3 lakh at present. It is \\nproposed to issue notification to extend this limit to ` 25 lakh. \\nB. SOCIO-ECONOMIC WELFARE MEASURES \\nB.1 Promoting timely payments to Micro and Small Enterprises \\nIn order to promote timely payments to micro and small \\nenterprises, it is proposed to include payments made to such \\nenterprises within the ambit of section 43B of the Act. Thus, \\ndeduction for such payments would be allowed only when actually \\npaid. It will be allowed on accrual basis only if the payment is \\nwithin the time mandated under the Micro, Small and Medium \\nEnterprises Development Act. \\nB.2 Agnipath Scheme, 2022 \\nThe payment received from the Agniveer Corpus Fund by the \\nAgniveers enrolled in Agnipath Scheme, 2022 is proposed to be \\nexempt from taxes. Deduction in the computation of total income \\nis proposed to be allowed to the Agniveer on the contribution 37 \\n \\n \\n made by him or the Central Government to his Seva Nidhi \\naccount. \\nB.3 Relief to sugar co-operatives from past demand \\nIt is proposed that for sugar co-operatives, for years prior to A.Y. \\n2016-17, if any deduction claimed for expenditure made on \\npurchase of sugar has been disallowed, an application may be \\nmade to the Assessing Officer, who shall recompute the income of \\nthe relevant previous year after allowing such deduction up to the \\nprice fixed or approved by the Government for such previous year. \\nB.4 Increasing threshold limit for Co-operatives to withdraw cash \\nwithout TDS \\nIt is proposed to enable co-operatives to withdraw cash up to ` 3 \\ncrore in a year without being subjected to TDS on such \\nwithdrawal. \\nB.5 Penalty for cash loan/transactions against primary co-operatives \\nIt is proposed to amend section 269SS of the Act to provide that \\nwhere a deposit is accepted by a primary agricultural credit \\nsociety or a primary co-operative agricultural and rural \\ndevelopment bank from its member or a loan is taken from a \\nprimary agricultural credit society or a primary co-operative \\nagricultural and rural development bank by its member in cash, no \\npenal consequence would arise, if the amount of such loan or \\ndeposit in cash is less than ` 2 lakh. Further, section 269T of the \\nAct is proposed to be amended to provide that where a deposit is \\nrepaid by a primary agricultural credit society or a primary co-\\noperative agricultural and rural development bank to its member \\nor such loan is repaid to a primary agricultural credit society or a \\nprimary co-operative agricultural and rural development bank by \\nits member in cash, no penal consequence shall arise, if the \\namount of such loan or deposit in cash is less than ` 2 lakh. \\nB.6 Relief to start-ups in carrying forward and setting off of losses \\nThe condition of continuity of at least 51 per cent shareholding for \\nsetting off of carried forward losses is relaxed for an eligible start \\nup if all the shareholders of the company continue to hold those \\nshares. At present this relaxation applies for losses incurred during \\nthe period of 7 years from incorporation of such start-up. It is 38 \\n \\n \\n propos ed to increase this period to 10 years. \\nB.7 Extension of date of incorporation for eligible start up for \\nexemption \\nCertain start-ups are eligible for some tax benefit if they are \\nincorporated before 1st April, 2023. The period of incorporation of \\nsuch eligible start-ups is proposed to be extended by one year to \\nbefore 1st April, 2024. \\nB.8 Gold to Electronic Gold Receipt \\nThe conversion of physical gold to Electronic Gold Receipt and vice \\nversa is proposed not to be treated as a transfer and not to attract \\nany capital gains. This would promote investments in electronic \\nequivalent of gold. \\nB.9 Incentives to IFSC \\nRelocation of funds to IFSC has certain tax exemptions, if the \\nrelocation is before 31.03.2023. This date is proposed to be \\nextended to 31.03.2025. Further, any distributed income from the \\noffshore derivative instruments entered into with an offshore \\nbanking unit is also proposed to be exempted subject to certain \\nconditions. \\nB.10 Exemption to development authorities etc. \\nIt is proposed to provide exemption to any income arising to a \\nbody or authority or board or trust or commission, (not being a \\ncompany) which has been established or constituted by or under \\na Central or State Act with the purposes of satisfying the need for \\nhousing or for planning, development or improvement of cities, \\ntowns and villages or for regulating any activity or matter, \\nirrespective of whether it is carrying out commercial activity. \\nB.11 Facilitating certain strategic disinvestments \\nTo facilitate certain strategic disinvestments, it is proposed to \\nallow carry forward of accumulated losses and unabsorbed \\ndepreciation allowance in the case of amalgamation of one or \\nmore banking company with any other banking institution or a \\ncompany subsequent to a strategic disinvestment, if such \\namalgamation takes place within 5 years of strategic \\ndisinvestment. It is also proposed to modify the definition of \\n‘strategic disinvestment’. 39 \\n \\n \\n B.12 15 per cent concessional tax to promote new manufacturing co -\\noperative society \\nIn order to promote the growth of manufacturing in co-operative \\nsector, a new co-operative society formed on or after 01.04.2023, \\nwhich commences manufacturing or production by 31.03.2024 \\nand do not avail of any specified incentive or deduction, is \\nproposed to be allowed an option to pay tax at a concessional rate \\nof 15 per cent similar to what is available to new manufacturing \\ncompanies. \\nC. EASE OF COMPLIANCE \\nC.1 Ease in claiming deduction on amortization of preliminary \\nexpenditure \\nAt present for claiming amortization of certain preliminary \\nexpenses, the activity is to be carried out either by the assessee or \\nby a concern approved by the Board. In order to ease the process \\nof claiming amortization of these expenses it is proposed to \\nremove the condition of activity in connection with these \\nexpenses to be carried out by a concern approved by the Board. \\nFormat for reporting of such expenses by the assessee shall be \\nprescribed. \\nC.2 Increasing threshold limits for presumptive taxation schemes \\nIn order to ease compliance and to promote non-cash \\ntransactions, it is proposed to increase the threshold limits for \\npresumptive scheme of taxation for eligible businesses from ` 2 \\ncrore to ` 3 crore and for specified professions from ` 50 lakh to \\n` 75 lakh. The increased limit will apply only in case the amount or \\naggregate of the amounts received during the year, in cash, does \\nnot exceed five per cent of the total gross receipts/turnover. \\nC.3 Extending the scope for deduction of tax at source at lower or nil \\nrate \\nIt is proposed to allow a taxpayer to obtain certificate of \\ndeduction of tax at source to lower or nil rate on sums on which \\ntax is required to be deducted under section 194LBA of the Act by \\nBusiness Trusts. 40 \\n \\n \\n D. WIDENING & DEEPENING OF T AX BASE AND ANTI AVOIDANCE \\nD.1 It is proposed to extend the deemed income accrual provision \\nrelating to sums of money exceeding fifty thousand rupees, \\nreceived from residents without consideration to a not ordinarily \\nresident with effect from 1st April, 2023. \\nD.2 It is proposed to omit the provision to allow tax exemption to \\nnews agencies set up in India solely for collection and distribution \\nof news from the financial year 2023-24. \\nD.3 It is proposed to tax distributed income by business trusts in the \\nhands of a unit holder (other than dividend, interest or rent which \\nis already taxable) on which tax is currently avoided both in the \\nhands of unit holder as well as in the hands of business trust. \\nD.4 It is proposed to withdraw the exemption from TDS currently \\navailable on interest payment on listed debentures. \\nD.5 With respect to presumptive schemes for non-residents, it is \\nproposed to disallow carried forward and set off of loss computed \\nas per books of account with presumptive income. \\nD.6 For online games, it is proposed to provide for TDS and taxability \\non net winnings at the time of withdrawal or at the end of the \\nfinancial year. Moreover, TDS would be without the threshold of \\n` 10,000. For lottery, crossword puzzles games, etc threshold limit \\n` 10,000 for TDS shall continue but shall apply to aggregate \\nwinnings during a financial year. \\nD.7 The rate of TCS for foreign remittances for education and for \\nmedical treatment is proposed to continue to be 5 per cent for \\nremittances in excess of ` 7 lakh. Similarly, the rate of TCS on \\nforeign remittances for the purpose of education through loan \\nfrom financial institutions is proposed to continue to be 0.5 per \\ncent in excess of `7 lakh. However, for foreign remittances for \\nother purposes under LRS and purchase of overseas tour program, \\nit is proposed to increase the rates of TCS from 5 per cent to 20 \\nper cent. \\nD.8 Tax on capital gains can be avoided by investing proceeds of such \\ngains in residential property. This is proposed to be capped at ` 10 \\ncrore. 41 \\n \\n \\n D.9 The income from market linked debentures is proposed to be \\ntaxed as short-term capital gains at the applicable rates. \\nD.10 It is proposed to provide for some provisions to minimise risk to \\nrevenue due to undervaluation of inventory. \\nD.11 It is proposed to provide that where aggregate of premium for life \\ninsurance policies (other than ULIP) issued on or after 1st April, \\n2023 is above ` 5 lakh, income from only those policies with \\naggregate premium up to ` 5 lakh shall be exempt. This will not \\naffect the tax exemption provided to the amount received on the \\ndeath of person insured. It will also not affect insurance policies \\nissued till 31st March, 2023. \\nD.12 It is proposed to amend provisions for computing capital gains in \\ncase of joint development of property to include the amount \\nreceived through cheque etc. as consideration. \\nD.13 While interest paid on borrowed capital for acquiring or improving \\na property can, subject to certain conditions, be claimed as \\ndeduction from income, it can also be included in the cost of \\nacquisition or improvement on transfer, thereby reducing capital \\ngains. It is proposed to provide that the cost of acquisition or \\nimprovement shall not include the amount of interest claimed \\nearlier as deduction. \\nD.14 There are certain assets like intangible assets or rights for which \\nno consideration has been paid for acquisition and the transfer of \\nwhich may result in generation of income. Their cost of acquisition \\nis proposed to be defined to be NIL. \\nE. IMPROVING COMPLIANCE AND TAX ADMINISTRATION \\nE.1 With respect to rectification of orders by the Interim Board of \\nSettlement, it is proposed to provide that where the time-limit for \\namending an order by it or for making an application to it expires \\non or after 01.02.2021 but before 01.02.2022, such time-limit shall \\nstand extended to 30.09.2023. \\nE.2 To expedite the disposal of certain appeals pending with \\nCommissioner (Appeals), it is proposed to introduce a new \\nauthority in the rank of Joint Commissioner/ Additional \\nCommissioner [JCIT(Appeals)], for appeals against certain orders 42 \\n \\n \\n passed by or with the approval of an authority below the rank of \\nJoint Commissioner. Certain related and consequential \\namendments are also proposed in this regard. \\nE.3 It is proposed to reduce the minimum time period required to be \\nprovided by the transfer pricing officer to assessee for production \\nof documents and information from 30 days to 10 days. \\nE.4 It is proposed to provide for appeal against penalty orders passed \\nby Commissioner (Appeals) under certain sections of the Act \\nbefore the Appellate Tribunal. It is also proposed to provide that \\nan order under section 263 of the Act passed by the Principal \\nChief Commissioner or Chief Commissioner and any rectification \\norder for the same shall also be appealable before the Appellate \\nTribunal. Further, it is proposed to enable filing of memorandum \\nof cross-objections in all classes of cases against which appeal can \\nbe made to the Appellate Tribunal. \\nE.5 It is proposed to amend section 132 of the Act, dealing with \\nsearch and seizure, to allow the authorised officer to take \\nassistance of specific domain experts like digital forensic \\nprofessionals, valuers and services of other professionals like \\nlocksmiths, carpenters etc. during the course of search and also to \\naid in accurate estimation of undisclosed income held in the form \\nof property by the assessee. \\nE.6 Section 170A of the Act, inserted vide Finance Act, 2022 is \\nproposed to be substituted to clarify that a modified return shall \\nbe furnished by an entity to whom the order of the business \\nreorganisation applies, and to introduce provisions for assessment \\nor reassessment in cases where such modified return is furnished. \\nE.7 It is proposed that an order of assessment may be passed within a \\nperiod of 12 months from the end of the relevant assessment year \\nor the financial year in which updated return is filed, as the case \\nmay be. It is also proposed that in cases where search under \\nsection 132 of the Act or requisition under section 132A of the Act \\nhas been made, the period of limitation of pending assessments \\nshall be extended by twelve months. \\nE.8 It is proposed to make amendments to empower the Central \\nGovernment to make modifications in the already notified 43 \\n \\n \\n schemes regarding e -Verification, Dispute Resolution, Advance \\nRulings, Appeal and Penalty, at any time to enable better \\nimplementation of such schemes. \\nE.9 It is proposed to limit the time for furnishing of a return for \\nreassessment. Further, it is also proposed to provide that in cases \\nwhere search related information is available after 15th March of \\nany financial year, an additional period of fifteen days shall be \\nallowed for issuance of notice, for assessment/reassessments etc, \\nunder section 148 of the Act. It is also proposed to clarify that the \\nspecified authority for granting approval shall be Principal Chief \\nCommissioner or Principal Director General or Chief Commissioner \\nor Director General. \\nE.10 It is proposed to provide a penalty of ` 5,000 if there is any \\ninaccuracy in the statement of financial transactions submitted by \\na prescribed reporting financial institution due to false or \\ninaccurate information submitted by the account holder. \\nE.11 It is proposed to amend section 271C and section 276B of the Act \\nto provide for penalty and prosecution where default in TDS \\nrelates to transaction in kind. \\nE.12. It is proposed to amend the time period for filing of appeal against \\nthe order of the Adjudicating authority under Benami Act within a \\nperiod of 45 days from the date when such order is received by \\nthe Initiating Officer or the aggrieved person. The definition of \\n‘High Court’ is also proposed to be modified to allow \\ndetermination of jurisdiction for filing appeal in the case of non-\\nresidents. \\nF. RATIONALISATION \\nF.1 The restriction on interest deductibility on interest payment to \\noverseas associated enterprise does not apply to those in the \\nbusiness of banking and insurance. It is proposed to extend this \\nbenefit to non-banking financial companies, as may be notified. \\nF.2 TDS on payment of certain income to a non-resident is currently at \\nthe rate of 20 per cent, but the tax rate in treaties may be lower. It \\nis proposed to allow the benefit of tax treaty at the time of TDS on \\nsuch income under section 196A of the Act. 44 \\n \\n \\n F.3 At present the TDS rate on withdrawal of taxable component from \\nEmployees’ Provident Fund Scheme in non-PAN cases is 30 per \\ncent. It is proposed to reduce it to 20 per cent, as in other non-\\nPAN cases. \\nF.4 Sometimes, tax for income of an earlier year is deducted later, \\nwhile tax thereon has already been paid in the earlier year. \\nAmendment is proposed to facilitate such taxpayers to claim \\ncredit of this TDS in the earlier year. \\nF.5 Higher TDS/TCS rate applies, if the recipient is a non-filer i.e. who \\nhas not furnished his return of income of preceding previous year \\nand has aggregate of TDS and TCS of ` 50,000 or more. It is \\nproposed to exclude a person who is not required to furnish the \\nreturn of income for such previous year and who is notified by the \\nCentral Government in the Official Gazette in this behalf. \\nF\\n.6 It is proposed to clarify that the amount of advance tax paid is \\nreduced only once for computing the interest payable u/s 234B in \\nthe case of an updated return. \\nF.7 It is proposed to extend taxability of the consideration (share \\napplication money/ share premium) for shares exceeding the face \\nvalue of such shares to all investors including non-residents. \\nF.8 It is proposed to enable prescription of a uniform methodology for \\ncomputing the value of perquisite with respect to accommodation \\nprovided by employers to their employees. \\nF.9 It is proposed to provide a time limit for an SEZ unit to bring the \\nproceeds from exports of goods or services into India. The filing of \\nincome-tax return is also proposed to be made mandatory for \\nclaiming deduction on export income. \\nF.10 Due to changes in classification of non-banking financial \\ncompanies by the Reserve Bank of India, it is proposed to make \\nnecessary amendments to align such classifications in the Act with \\nthe same. \\nF.11 It is proposed to clarify that for taxability under section 28 of the \\nAct as well for tax deduction at source under section 194R of the \\nAct, the benefit could also be in cash. \\nF.12 It is proposed to make amendments relating to exemption 45 \\n \\n \\n provided to charitable trusts and institution to \\n\\uf0b7 provide clarity on tax treatment on replenishment of corpus \\nand on repayment of loans/borrowings; \\n\\uf0b7 treat only 85 per cent of donation made to another trust as \\napplication; \\n\\uf0b7 omit the redundant provisions related to rolling back of \\nexemption; \\n\\uf0b7 combine provisional and regular registration in some cases; \\n\\uf0b7 modify the scope of specified violation; \\n\\uf0b7 provide for payment of tax on assets if a trust does not apply \\nfor exemption after getting provisional exemption and for re-\\nexemption after expiry of exemption; \\n\\uf0b7 align of time for furnishing of certain forms; \\n\\uf0b7 clarify that the time provided for furnishing return of income \\nfor claiming exemption shall not include the time provided for \\nfurnishing updated return. \\nF.13 It is proposed to omit certain name-based funds from section 80G \\nof the Act, which provides for deduction of donation to such funds \\nfrom the income of the donor. \\nF.14 It is proposed to provide that where refund is due to a person, \\nsuch refund shall be set off against existing demand, and if \\nproceedings for assessment or reassessment are pending in such \\ncase, the refund due will be withheld by the Assessing Officer till \\nthe date of assessment or reassessment. \\nG. OTHERS \\nG.1 It is proposed to omit section 88 and some of the clauses of \\nsection 10 of the Act which are no longer in force. \\nG.2 It is proposed to extend tax exemption to Specified Undertaking of \\nUnit Trust of India (SUUTI) till 30th September, 2023. It is also \\nproposed to enable the Central Government to notify the date of \\nvacation of office of administrator of SUUTI. \\nG.3 It is proposed to decriminalize certain acts of omission of \\nliquidators under section 276A of the Act with effect from 1st \\nApril, 2023. \\n \\n 46 \\n \\n \\n Annexure to Part B of the Budget Speech 2023-24 \\nAmendments relating to Indirect Taxes \\n \\nA. LEGISLATIVE CHANGES IN CUSTOMS LAWS \\nA.1 Amendments in the Customs Act, 1962 \\nSection 25 (4A) is being amended to exclude certain categories of \\nconditional customs duty exemptions from the validity period of \\ntwo years, such as, notifications issued in relation to multilateral \\nor bilateral trade agreements; obligations under international \\nagreements, treaties, conventions including with respect to UN \\nagencies, diplomats, international organizations; privileges of \\nconstitutional authorities; schemes under Foreign Trade Policy; \\nCentral Government schemes having a validity of more than two \\nyears; re-imports, temporary imports, goods imported as gifts or \\npersonal baggage; any other duties of Customs under any other \\nlaw in force including IGST levied under section 3(7) of Customs \\nTariff Act, 1975, other than duty of customs levied under section \\n12 of the Customs Act 1962. \\nSection 127C is being amended to specify a time limit of nine \\nmonths from date of filing application for passing final order by \\nSettlement Commission. \\nA.2 Amendments in the provisions relating to Anti-Dumping Duty \\n(ADD), Countervailing Duty (CVD), and Safeguard Measures \\nSections 9, 9A, 9C of the Customs Tariff Act are being amended to \\nclarify the intent and scope of these provisions. They are also \\nbeing validated retrospectively with effect from 1st January 1995. \\nA.3 Amendments in the First Schedule to the Customs Tariff Act, 1975 \\nThe First Schedule to the Customs Tariff Act, 1975 is being \\namended to increase the rates on certain tariff items with effect \\nfrom 02.02.2023 and also modify the rates on certain other tariff \\nitems as part of rate rationalisation with effect from date of \\nassent. \\nThe First Schedule to the Customs Tariff Act is being proposed to \\nbe amended in accordance with HSN 2022 amendments. \\nNew tariff lines are also proposed to be created, which will help in \\nbetter identification of millet-based products, mozzarella cheese, \\nmedicinal plants and their parts, certain pesticides, telecom 47 \\n \\n \\n products, synthetic diamonds, cotton, fertilizer grade urea etc. \\nThis will also help in trade facilitation by better identification of \\nthe above items, getting clarity on availing concessional import \\nduty through various notifications and thus reducing dwell time. \\nThese changes shall come into effect from 01.05.2023. \\nA.4 Amendment in the Second Schedule to the Customs Tariff Act, \\n1975 \\nThe Second Schedule (Export Tariff) is being amended to align the \\nentries under heading 1202 with that of the First Schedule (Import \\nTariff) . \\nB. LEGISLATIVE CHANGES IN GST LAWS \\nB.1 Decriminalisation \\nSection 132 and section 138 of CGST Act are being amended, inter \\nalia, to - \\n\\uf0b7 raise the minimum threshold of tax amount for launching \\nprosecution under GST from ` one crore to ` two crore, \\nexcept for the offence of issuance of invoices without supply \\nof goods or services or both; \\n\\uf0b7 reduce the compounding amount from the present range of \\n50 per cent to 150 per cent of tax amount to the range of 25 \\nper cent to 100 per cent; \\n\\uf0b7 decriminalize certain offences specified under clause (g), (j) \\nand (k) of sub-section (1) of section 132 of CGST Act, 2017, \\nviz.- \\no obstruction or preventing any officer in discharge of his \\nduties; \\no deliberate tempering of material evidence; \\no failure to supply the information. \\nB.2 Facilitate e-commerce for micro enterprises \\nAmendments are being made in section 10 and section 122 of the \\nCGST Act to enable unregistered suppliers and composition \\ntaxpayers to make intra-state supply of goods through E-\\nCommerce Operators (ECOs), subject to certain conditions. \\nB.3 Amendment to Schedule III of CGST Act, 2017 \\nParas 7, 8 (a) and 8 (b) were inserted in Schedule III of CGST Act, \\n2017 with effect from 01.02.2019 to keep certain transactions/ \\nactivities, such as supplies of goods from a place outside the \\ntaxable territory to another place outside the taxable territory, \\nhigh sea sales and supply of warehoused goods before their home 48 \\n \\n \\n clearance, outside the purview of GST. In order to remove the \\ndoubts and ambiguities regarding taxability of such transactions/ \\nactivities during the period 01.07.2017 to 31.01.2019, provisions \\nare being incorporated to make the said paras effective from \\n01.07.2017. However, no refund of tax paid shall be available in \\ncases where any tax has already been paid in respect of such \\ntransactions/ activities during the period 01.07.2017 to \\n31.01.2019. \\nB.4 Return filing under GST \\nSections 37, 39, 44 and 52 of CGST Act, 2017 are being amended \\nto restrict filing of returns/ statements to a maximum period of \\nthree years from the due date of filing of the relevant return / \\nstatement. \\nB.5 Input Tax Credit for expenditure related to CSR \\nSection 17(5) of CGST Act is being amended to provide that input \\ntax credit shall not be available in respect of goods or services or \\nboth received by a taxable person, which are used or intended to \\nbe used for activities relating to his obligations under corporate \\nsocial responsibility referred to in section 135 of the Companies \\nAct, 2013. \\nB.6 Sharing of information \\nA new section 158A in CGST Act is being inserted to enable sharing \\nof the information furnished by the registered person in his return \\nor application of registration or statement of outward supplies, or \\nthe details uploaded by him for generation of electronic invoice or \\nE-way bill or any other details on the common portal, with other \\nsystems in a manner to be prescribed \\nB.7 Amendments in section 2 clause (16) of IGST Act, 2017 \\nClause (16) of section 2 of IGST Act is amended to revise the \\ndefinition of “non-taxable online recipient” by removing the \\ncondition of receipt of online information and database access or \\nretrieval services for purposes other than commerce, industry or \\nany other business or profession so as to provide for taxability of \\nOIDAR service provided by any person located in non-taxable \\nterritory to an unregistered person receiving the said services and \\nlocated in the taxable territory. Further, it also seeks to clarify that \\nthe persons registered solely in terms of clause (vi) of Section 24 \\nof CGST Act shall be treated as unregistered person for the \\npurpose of the said clause. 49 \\n \\n \\n B.8 Online information and database access or retrieval services \\nClause (17) of section 2 of IGST Act is being amended to revise the \\ndefinition of “online information and database access or retrieval \\nservices” to remove the condition of rendering of the said supply \\nbeing essentially automated and involving minimal human \\nintervention. \\nB.9 Place of supply in certain cases \\nProviso to sub-section (8) of section 12 of the IGST Act is being \\nomitted so as to specify the place of supply, irrespective of \\ndestination of the goods, in cases where the supplier of services \\nand recipient of services are located in India. \\n 50 \\n \\n \\n \\nC. CUSTOMS DUTY RATE CHANGES \\n \\nC.1. Reduction in basic customs duty to reduce input costs, deepen value \\naddition, to promote export competitiveness, correct inverted duty \\nstructure so as to boost domestic manufacturing etc [with effect \\nfrom 02.02.2023] \\nS. \\nNo. Commodity From \\n(per cent) To \\n(per cent) \\nI. Agricultural Products \\n1. Pecan Nuts 100 30 \\n2. Fish meal for manufacture of aquatic \\nfeed 15 5 \\n3. Krill meal for manufacture of aquatic \\nfeed 15 5 \\n4. Fish lipid oil for manufacture of aquatic \\nfeed 30 15 \\n5. Algal Prime (flour) for manufacture of \\naquatic feed 30 15 \\n6. Mineral and Vitamin Premixes for \\nmanufacture of aquatic feed 15 5 \\n7 Crude glycerin for use in manufacture \\nof Epichlorohydrin 7.5 2.5 \\n8 Denatured ethyl alcohol for use in \\nmanufacture of industrial chemicals. 5 Nil \\nII. Minerals \\n1 Acid grade fluorspar (containing by \\nweight more than 97 per cent of \\ncalcium fluoride) 5 2.5 \\nIII. Gems and Jewellery Sector \\n1. Seeds for use in manufacturing of \\nrough lab-grown diamonds 5 Nil 51 \\n \\n \\n IV. Capital Goods \\n1. Specified capital goods/machinery for \\nmanufacture of lithium-ion cell for use \\nin battery of electrically operated \\nvehicle (EVs) As \\napplicable Nil \\n(up to \\n31.03.2024) \\nV. IT and Electronics \\n \\n1. Specified chemicals/items for \\nmanufacture of Pre-calcined Ferrite \\nPowder 7.5 Nil \\n(up to \\n31.03.2024) \\n2. Palladium Tetra Amine Sulphate for \\nmanufacture of parts of connectors 7.5 Nil \\n(up to \\n31.03.2024) \\n3. Camera lens and its inputs/parts for \\nuse in manufacture of camera module \\nof cellular mobile phone 2.5 Nil \\n4. Specified parts for manufacture of \\nopen cell of TV panel 5 2.5 \\nVI. Electronic Appliances \\n1. Heat coil for manufacture of electric \\nkitchen chimneys 20 15 \\nVII. Others \\n1. Warm blood horse imported by sports \\nperson of outstanding eminence for \\ntraining purpose 30 Nil \\n2. Vehicles, specified automobile \\nparts/components, sub-systems and \\ntyres when imported by notified \\ntesting agencies, for the purpose of \\ntesting and/ or certification, subject to \\nconditions. As \\napplicable Nil \\n \\n \\n 52 \\n \\n \\n C.2. Increase in Customs duty [with effect from 02.02.2023] \\nS. No. Commodity \\n Rate of duties \\nFrom \\n(per cent) To \\n(per cent) \\nI. Chemicals \\n1. Styrene 2 \\n(+0.2 SWS) 2.5 \\n(+0.25 \\nSWS) \\n2. Vinyl chloride monomer 2 \\n(+0.2 SWS) 2.5 \\n(+0.25 \\nSWS) \\nII Petrochemical \\n1 Naphtha 1 \\n(+ 0.1 SWS) 2.5 \\n(+0.25 SWS) \\nIII. Precious Metals \\n1. Silver (including silver plated with gold \\nor platinum), unwrought or in semi-\\nmanufactured forms, or in powder \\nform 7.5 \\n(+ 2.5 \\nAIDC+ 0.75 \\nSWS) 10 \\n(+ 5 AIDC+ \\nNil SWS) \\n2. Silver dore 6.1 \\n(+ 2.5 \\nAIDC+ 0.61 \\nSWS) 10 \\n(+ 4.35 \\nAIDC+ Nil \\nSWS) \\nIV. Gems and Jewellery Sector \\n1. Articles of Precious Metals such as \\ngold/silver/platinum 20 \\n(+Nil AIDC \\n+2 SWS) 25 \\n(+Nil AIDC \\n+Nil SWS) \\n2. Imitation Jewellery 20 or ` \\n400/kg., \\nwhichever is \\nhigher \\n \\n(+Nil AIDC +2 \\nor ` 40 per \\nKg SWS) \\n 25 or ` \\n600/kg., \\nwhichever is \\nhigher \\n \\n(+Nil AIDC \\n+Nil SWS) 53 \\n \\n \\n S. No. Commodity \\n Rate of duties \\nFrom \\n(per cent) To \\n(per cent) \\nV. Automobiles \\n1 Vehicle (including electric vehicles) in \\nSemi-Knocked Down (SKD) form . 30 \\n(+3 SWS) 35 \\n(+Nil SWS) \\n2 Vehicle in Completely Built Unit (CBU) \\nform, other than with CIF more than \\nUSD 40,000 or with engine capacity \\nmore than 3000 cc for petrol-run \\nvehicle and more than 2500 cc for \\ndiesel-run vehicles, or with both 60 \\n(+6 SWS) 70 \\n(+Nil SWS) \\n3 Electrically operated Vehicle in \\nCompletely Built Unit (CBU) form, \\nother than with CIF value more than \\nUSD 40,000 60 \\n(+ 6 SWS) 70 \\n(+Nil SWS) \\nVI. Others \\n1. Bicycles 30 \\n \\n(+ Nil AIDC \\n+3 SWS) 35 \\n \\n(+ Nil AIDC \\n+Nil SWS) \\n2. Toys and parts of toys (other than \\nparts of electronic toys) 60 \\n \\n(+Nil AIDC+ \\n6 SWS) 70 \\n \\n(+Nil AIDC+ \\nNil SWS) \\n3. Compounded Rubber 10 \\n \\n 25 or ` \\n30/kg., \\nwhichever is \\nlower \\n4. Electric Kitchen Chimney 7.5 \\n 15 \\n \\n* AIDC -Agriculture Infrastructure Development Cess; SWS – Social Welfare \\nSurcharge \\n \\n 54 \\n \\n \\n D. CHANGES IN CENTRAL EXCISE \\nD.1. NCCD Duty rate on Cigarettes [with effect from 02.02.2023] \\n \\nDescription of goods Rate of excise duty \\nFrom \\n(` per 1000 \\nsticks) To \\n(` per 1000 \\nsticks) \\nOther than filter cigarettes, of length not \\nexceeding 65 mm 200 230 \\nOther than filter cigarettes, of length exceeding \\n65 mm but not exceeding 70 mm 250 290 \\nFilter cigarettes of length not exceeding 65 mm 440 510 \\nFilter cigarettes of length exceeding 65 mm but \\nnot exceeding 70 mm 440 510 \\nFilter cigarettes of length exceeding 70 mm but \\nnot exceeding 75 mm 545 630 \\nOther cigarettes 735 850 \\nCigarettes of tobacco substitutes 600 690 \\n \\n \\nD.2. Other changes in Central Excise [with effect from 02.02.2023] \\nIn order to promote green fuel, central excise duty exemption is being \\nprovided to blended Compressed Natural Gas from so much of the amount \\nas is equal to the GST paid on Bio Gas/Compressed Bio Gas contained in the \\nblended CNG . \\nE. OTHERS \\nThere are few other changes of minor nature. For details of the budget \\nproposals, the Explanatory Memorandum and other relevant budget \\ndocuments may be referred to. \\n***** \"" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } + }, + "metadata": {}, + "execution_count": 53 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5S0GgIQs4Rps" + }, + "source": [ + "Initialize the connection to your database:\n", + "\n", + "_(do not worry if you see a few warnings, it's just that the drivers are chatty about negotiating protocol versions with the DB.)_" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zFBR5HnZSPmK", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "5b4bb3ea-6be3-4d7a-c535-88715fa67c13" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "WARNING:cassandra.cluster:Downgrading core protocol version from 66 to 65 for 56eada22-55b6-4100-aeab-a83bfdf9f82e-us-east1.db.astra.datastax.com:29042:3bfaeefd-3cd1-41fe-a7a3-d89ab7f88095. To avoid this, it is best practice to explicitly set Cluster(protocol_version) to the version supported by your cluster. http://datastax.github.io/python-driver/api/cassandra/cluster.html#cassandra.cluster.Cluster.protocol_version\n", + "WARNING:cassandra.cluster:Downgrading core protocol version from 65 to 5 for 56eada22-55b6-4100-aeab-a83bfdf9f82e-us-east1.db.astra.datastax.com:29042:3bfaeefd-3cd1-41fe-a7a3-d89ab7f88095. To avoid this, it is best practice to explicitly set Cluster(protocol_version) to the version supported by your cluster. http://datastax.github.io/python-driver/api/cassandra/cluster.html#cassandra.cluster.Cluster.protocol_version\n", + "ERROR:cassandra.connection:Closing connection due to protocol error: Error from server: code=000a [Protocol error] message=\"Beta version of the protocol used (5/v5-beta), but USE_BETA flag is unset\"\n", + "WARNING:cassandra.cluster:Downgrading core protocol version from 5 to 4 for 56eada22-55b6-4100-aeab-a83bfdf9f82e-us-east1.db.astra.datastax.com:29042:3bfaeefd-3cd1-41fe-a7a3-d89ab7f88095. To avoid this, it is best practice to explicitly set Cluster(protocol_version) to the version supported by your cluster. http://datastax.github.io/python-driver/api/cassandra/cluster.html#cassandra.cluster.Cluster.protocol_version\n" + ] + } + ], + "source": [ + "cassio.init(token=ASTRA_DB_APPLICATION_TOKEN, database_id=ASTRA_DB_ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ex7NxZYb4Rps" + }, + "source": [ + "Create the LangChain embedding and LLM objects for later usage:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "TavS0AK2SLrL" + }, + "outputs": [], + "source": [ + "llm = OpenAI(openai_api_key=OPENAI_API_KEY)\n", + "embedding = OpenAIEmbeddings(openai_api_key=OPENAI_API_KEY)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9HMMx5Pm4Rpt" + }, + "source": [ + "Create your LangChain vector store ... backed by Astra DB!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bg9VAk4USQvU" + }, + "outputs": [], + "source": [ + "astra_vector_store = Cassandra(\n", + " embedding=embedding,\n", + " table_name=\"qa_mini_demo\",\n", + " session=None,\n", + " keyspace=None,\n", + ")" + ] + }, + { + "cell_type": "code", + "source": [ + "from langchain.text_splitter import CharacterTextSplitter\n", + "# We need to split the text using Character Text Split such that it sshould not increse token size\n", + "text_splitter = CharacterTextSplitter(\n", + " separator = \"\\n\",\n", + " chunk_size = 800,\n", + " chunk_overlap = 200,\n", + " length_function = len,\n", + ")\n", + "texts = text_splitter.split_text(raw_text)" + ], + "metadata": { + "id": "9FMAhKr77AVO" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "texts[:50]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "k8BDHAyT7Gjr", + "outputId": "7833f6ac-bd97-40d6-fcbe-94a81b4dd6ac" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['GOVERNMENT OF INDIA\\nBUDGET 2023-2024\\nSPEECH\\nOF\\nNIRMALA SITHARAMAN\\nMINISTER OF FINANCE\\nFebruary 1, 2023CONTENTS \\nPART-A \\n Page No. \\n\\uf0b7 Introduction 1 \\n\\uf0b7 Achievements since 2014: Leaving no one behind 2 \\n\\uf0b7 Vision for Amrit Kaal – an empowered and inclusive economy 3 \\n\\uf0b7 Priorities of this Budget 5 \\ni. Inclusive Development \\nii. Reaching the Last Mile \\niii. Infrastructure and Investment \\niv. Unleashing the Potential \\nv. Green Growth \\nvi. Youth Power \\nvii. Financial Sector \\n \\n \\n \\n \\n \\n \\n \\n \\n\\uf0b7 Fiscal Management 24 \\nPART B \\n \\nIndirect Taxes 27 \\n\\uf0b7 Green Mobility \\n\\uf0b7 Electronics \\n\\uf0b7 Electrical \\n\\uf0b7 Chemicals and Petrochemicals \\n\\uf0b7 Marine products \\n\\uf0b7 Lab Grown Diamonds \\n\\uf0b7 Precious Metals \\n\\uf0b7 Metals \\n\\uf0b7 Compounded Rubber \\n\\uf0b7 Cigarettes \\n \\nDirect Taxes 30 \\n\\uf0b7 MSMEs and Professionals',\n", + " '\\uf0b7 Chemicals and Petrochemicals \\n\\uf0b7 Marine products \\n\\uf0b7 Lab Grown Diamonds \\n\\uf0b7 Precious Metals \\n\\uf0b7 Metals \\n\\uf0b7 Compounded Rubber \\n\\uf0b7 Cigarettes \\n \\nDirect Taxes 30 \\n\\uf0b7 MSMEs and Professionals \\n\\uf0b7 Cooperation \\n\\uf0b7 Start-Ups \\n\\uf0b7 Appeals \\n\\uf0b7 Better targeting of tax concessions \\n\\uf0b7 Rationalisation \\n\\uf0b7 Others \\n\\uf0b7 Personal Income Tax \\n \\nAnnexures 35 \\n\\uf0b7 Annexure to Part B of the Budget Speech 2023-24 \\ni. Amendments relating to Direct Taxes \\nii. Amendments relating to Indirect Taxes \\n Budget 2023-2024 \\n \\nSpeech of \\nNirmala Sitharaman \\nMinister of Finance \\nFebruary 1, 2023 \\nHon’ble Speaker, \\n I present the Budget for 2023-24. This is the first Budget in Amrit \\nKaal . \\nIntroduction \\n1. This Budget hopes to build on the foundation laid in the previous',\n", + " 'February 1, 2023 \\nHon’ble Speaker, \\n I present the Budget for 2023-24. This is the first Budget in Amrit \\nKaal . \\nIntroduction \\n1. This Budget hopes to build on the foundation laid in the previous \\nBudget, and the blueprint drawn for India@100. We envision a prosperous \\nand inclusive India, in which the fruits of development reach all regions and \\ncitizens, especially our youth, women, farmers, OBCs, Scheduled Castes and \\nScheduled Tribes. \\n2. In the 75th year of our Independence, the world has recognised the \\nIndian economy as a ‘bright star’. Our current year’s economic growth is \\nestimated to be at 7 per cent. It is notable that this is the highest among all \\nthe major economies. This is in spite of the massive slowdown globally',\n", + " 'estimated to be at 7 per cent. It is notable that this is the highest among all \\nthe major economies. This is in spite of the massive slowdown globally \\ncaused by Covid-19 and a war. The Indian economy is therefore on the right \\ntrack, and despite a time of challenges, heading towards a bright future. \\n3. Today as Indians stands with their head held high, and the world \\nappreciates India’s achievements and successes, we are sure that elders \\nwho had fought for India’s independence, will with joy, bless us our \\nendeavors going forward. \\nResilience amidst multiple crises \\n4. Our focus on wide-ranging reforms and sound policies, implemented \\nthrough Sabka Prayas resulting in Jan Bhagidari and targeted support to',\n", + " 'Resilience amidst multiple crises \\n4. Our focus on wide-ranging reforms and sound policies, implemented \\nthrough Sabka Prayas resulting in Jan Bhagidari and targeted support to \\nthose in need, helped us perform well in trying times. India’s rising global 2 \\n \\n \\n profile is because of several accomplishments: unique world class digital \\npublic infrastructure, e.g., Aadhaar, Co-Win and UPI; Covid vaccination drive \\nin unparalleled scale and speed; proactive role in frontier areas such as \\nachieving the climate related goals, mission LiFE, and National Hydrogen \\nMission. \\n5. During the Covid-19 pandemic, we ensured that no one goes to bed \\nhungry, with a scheme to supply free food grains to over 80 crore persons \\nfor 28 months. Continuing our commitment to ensure food and nutritional',\n", + " 'hungry, with a scheme to supply free food grains to over 80 crore persons \\nfor 28 months. Continuing our commitment to ensure food and nutritional \\nsecurity, we are implementing, from 1st January 2023, a scheme to supply \\nfree food grain to all Antyodaya and priority households for the next one \\nyear, under PM Garib Kalyan Anna Yojana (PMGKAY). The entire \\nexpenditure of about ` 2 lakh crore will be borne by the Central \\nGovernment. \\nG20 Presidency: Steering the global agenda through challenges \\n6. In these times of global challenges, the G20 Presidency gives us a \\nunique opportunity to strengthen India’s role in the world economic order. \\nWith the theme of ‘ Vasudhaiva Kutumbakam’ , we are steering an \\nambitious, people-centric agenda to address global challenges, and to',\n", + " 'With the theme of ‘ Vasudhaiva Kutumbakam’ , we are steering an \\nambitious, people-centric agenda to address global challenges, and to \\nfacilitate sustainable economic development. \\nAchievements since 2014: Leaving no one behind \\n7. The government’s efforts since 2014 have ensured for all citizens a \\nbetter quality of living and a life of dignity. The per capita income has more \\nthan doubled to ` 1.97 lakh. \\n8. In these nine years, the Indian economy has increased in size from \\nbeing 10th to 5th largest in the world. We have significantly improved our \\nposition as a well-governed and innovative country with a conducive \\nenvironment for business as reflected in several global indices. We have \\nmade significant progress in many Sustainable Development Goals. 3',\n", + " 'environment for business as reflected in several global indices. We have \\nmade significant progress in many Sustainable Development Goals. 3 \\n \\n \\n 9. The economy has become a lot more formalised as reflected in the \\nEPFO membership more than doubling to 27 crore, and 7,400 crore digital \\npayments of ` 126 lakh crore through UPI in 2022. \\n10. The efficient implementation of many schemes, with \\nuniversalisation of targeted benefits, has resulted in inclusive development. \\nSome of the schemes are: \\ni. 11.7 crore household toilets under Swachh Bharat Mission, \\nii. 9.6 crore LPG connections under Ujjawala, \\niii. 220 crore Covid vaccination of 102 crore persons, \\niv. 47.8 crore PM Jan Dhan bank accounts, \\nv. Insurance cover for 44.6 crore persons under PM Suraksha',\n", + " 'iii. 220 crore Covid vaccination of 102 crore persons, \\niv. 47.8 crore PM Jan Dhan bank accounts, \\nv. Insurance cover for 44.6 crore persons under PM Suraksha \\nBima and PM Jeevan Jyoti Yojana, and \\nvi. Cash transfer of ` 2.2 lakh crore to over 11.4 crore farmers \\nunder PM Kisan Samman Nidhi. \\nVision for Amrit Kaal – an empowered and inclusive economy \\n11. Our vision for the Amrit Kaal includes technology-driven and \\nknowledge-based economy with strong public finances, and a robust \\nfinancial sector. To achieve this, Jan Bhagidari through Sabka Saath Sabka \\nPrayas is essential. \\n12. The economic agenda for achieving this vision focuses on three \\nthings: first, facilitating ample opportunities for citizens, especially the',\n", + " 'Prayas is essential. \\n12. The economic agenda for achieving this vision focuses on three \\nthings: first, facilitating ample opportunities for citizens, especially the \\nyouth, to fulfil their aspirations; second, providing strong impetus to growth \\nand job creation; and third, strengthening macro-economic stability. \\n13. To service these focus areas in our journey to India@100, we believe \\nthat the following four opportunities can be transformative during Amrit \\nKaal. 4 \\n \\n \\n 1) Economic Empowerment of Women : Deendayal Antyodaya Yojana \\nNational Rural Livelihood Mission has achieved remarkable success \\nby mobilizing rural women into 81 lakh Self Help Groups. We will \\nenable these groups to reach the next stage of economic',\n", + " 'National Rural Livelihood Mission has achieved remarkable success \\nby mobilizing rural women into 81 lakh Self Help Groups. We will \\nenable these groups to reach the next stage of economic \\nempowerment through formation of large producer enterprises or \\ncollectives with each having several thousand members and \\nmanaged professionally. They will be helped with supply of raw \\nmaterials and for better design, quality, branding and marketing of \\ntheir products. Through supporting policies, they will be enabled to \\nscale up their operations to serve the large consumer markets, as \\nhas been the case with several start-ups growing into ‘Unicorns’. \\n2) PM VIshwakarma KAushal Samman (PM VIKAS) : For centuries, \\ntraditional artisans and craftspeople, who work with their hands',\n", + " 'has been the case with several start-ups growing into ‘Unicorns’. \\n2) PM VIshwakarma KAushal Samman (PM VIKAS) : For centuries, \\ntraditional artisans and craftspeople, who work with their hands \\nusing tools, have brought renown for India. They are generally \\nreferred to as Vishwakarma. The art and handicraft created by them \\nrepresents the true spirit of Atmanirbhar Bharat. For the first time, a \\npackage of assistance for them has been conceptualized. The new \\nscheme will enable them to improve the quality, scale and reach of \\ntheir products, integrating them with the MSME value chain. The \\ncomponents of the scheme will include not only financial support \\nbut also access to advanced skill training, knowledge of modern \\ndigital techniques and efficient green technologies, brand',\n", + " 'components of the scheme will include not only financial support \\nbut also access to advanced skill training, knowledge of modern \\ndigital techniques and efficient green technologies, brand \\npromotion, linkage with local and global markets, digital payments, \\nand social security. This will greatly benefit the Scheduled Castes, \\nScheduled Tribes, OBCs, women and people belonging to the weaker \\nsections. \\n3) Tourism : The country offers immense attraction for domestic as well \\nas foreign tourists. There is a large potential to be tapped in tourism. \\nThe sector holds huge opportunities for jobs and entrepreneurship \\nfor youth in particular. Promotion of tourism will be taken up on \\nmission mode, with active participation of states, convergence of',\n", + " 'for youth in particular. Promotion of tourism will be taken up on \\nmission mode, with active participation of states, convergence of \\ngovernment programmes and public-private partnerships. 5 \\n \\n \\n 4) Green Growth: We are implementing many programmes for green \\nfuel, green energy, green farming, green mobility, green buildings, \\nand green equipment, and policies for efficient use of energy across \\nvarious economic sectors. These green growth efforts help in \\nreducing carbon intensity of the economy and provides for large-\\nscale green job opportunities. \\nPriorities of this Budget \\n14. The Budget adopts the following seven priorities. They complement \\neach other and act as the ‘Saptarishi’ guiding us through the Amrit Kaal. \\n1) Inclusive Development \\n2) Reaching the Last Mile',\n", + " 'each other and act as the ‘Saptarishi’ guiding us through the Amrit Kaal. \\n1) Inclusive Development \\n2) Reaching the Last Mile \\n3) Infrastructure and Investment \\n4) Unleashing the Potential \\n5) Green Growth \\n6) Youth Power \\n7) Financial Sector \\nPriority 1: Inclusive Development \\n15. The Government’s philosophy of Sabka Saath Sabka Vikas has \\nfacilitated inclusive development covering in specific, farmers, women, \\nyouth, OBCs, Scheduled Castes, Scheduled Tribes, divyangjan and \\neconomically weaker sections, and overall priority for the underprivileged \\n(vanchiton ko variyata ). There has also been a sustained focus on Jammu & \\nKashmir, Ladakh and the North-East. This Budget builds on those efforts. \\nAgriculture and Cooperation \\nDigital Public Infrastructure for Agriculture',\n", + " 'Kashmir, Ladakh and the North-East. This Budget builds on those efforts. \\nAgriculture and Cooperation \\nDigital Public Infrastructure for Agriculture \\n16. Digital public infrastructure for agriculture will be built as an open \\nsource, open standard and inter operable public good. This will enable 6 \\n \\n \\n inclusive, farmer-centric solutions through relevant information services for \\ncrop planning and health, improved access to farm inputs, credit, and \\ninsurance, help for crop estimation, market intelligence, and support for \\ngrowth of agri-tech industry and start-ups. \\nAgriculture Accelerator Fund \\n17. An Agriculture Accelerator Fund will be set-up to encourage agri-\\nstartups by young entrepreneurs in rural areas. The Fund will aim at',\n", + " 'Agriculture Accelerator Fund \\n17. An Agriculture Accelerator Fund will be set-up to encourage agri-\\nstartups by young entrepreneurs in rural areas. The Fund will aim at \\nbringing innovative and affordable solutions for challenges faced by \\nfarmers. It will also bring in modern technologies to transform agricultural \\npractices, increase productivity and profitability. \\nEnhancing productivity of cotton crop \\n18. To enhance the productivity of extra-long staple cotton, we will \\nadopt a cluster-based and value chain approach through Public Private \\nPartnerships (PPP). This will mean collaboration between farmers, state and \\nindustry for input supplies, extension services, and market linkages. \\nAtmanirbhar Horticulture Clean Plant Program',\n", + " \"Partnerships (PPP). This will mean collaboration between farmers, state and \\nindustry for input supplies, extension services, and market linkages. \\nAtmanirbhar Horticulture Clean Plant Program \\n19. We will launch an Atmanirbhar Clean Plant Program to boost \\navailability of disease-free, quality planting material for high value \\nhorticultural crops at an outlay of ` 2,200 crore. \\nGlobal Hub for Millets: ‘Shree Anna’ \\n20. “India is at the forefront of popularizing Millets, whose consumption \\nfurthers nutrition, food security and welfare of farmers,” said Hon’ble Prime \\nMinister. \\n21. We are the largest producer and second largest exporter of ‘Shree \\nAnna’ in the world. We grow several types of ' Shree Anna' such as jowar,\",\n", + " \"Minister. \\n21. We are the largest producer and second largest exporter of ‘Shree \\nAnna’ in the world. We grow several types of ' Shree Anna' such as jowar, \\nragi, bajra, kuttu, ramdana, kangni, kutki, kodo, cheena, and sama. These \\nhave a number of health benefits, and have been an integral part of our \\nfood for centuries. I acknowledge with pride the huge service done by small 7 \\n \\n \\n farmers in contributing to the health of fellow citizens by growing these \\n‘Shree Anna’. \\n22. Now to make India a global hub for ' Shree Anna' , the Indian Institute \\nof Millet Research, Hyderabad will be supported as the Centre of Excellence \\nfor sharing best practices, research and technologies at the international \\nlevel. \\nAgriculture Credit\",\n", + " 'of Millet Research, Hyderabad will be supported as the Centre of Excellence \\nfor sharing best practices, research and technologies at the international \\nlevel. \\nAgriculture Credit \\n23. The agriculture credit target will be increased \\nto ` 20 lakh crore with focus on animal husbandry, dairy and fisheries. \\nFisheries \\n24. We will launch a new sub-scheme of PM Matsya Sampada Yojana \\nwith targeted investment of ` 6,000 crore to further enable activities of \\nfishermen, fish vendors, and micro & small enterprises, improve value chain \\nefficiencies, and expand the market. \\nCooperation \\n25. For farmers, especially small and marginal farmers, and other \\nmarginalised sections, the government is promoting cooperative-based \\neconomic development model. A new Ministry of Cooperation was formed',\n", + " 'marginalised sections, the government is promoting cooperative-based \\neconomic development model. A new Ministry of Cooperation was formed \\nwith a mandate to realise the vision of ‘Sahakar Se Samriddhi’ . To realise \\nthis vision, the government has already initiated computerisation of 63,000 \\nPrimary Agricultural Credit Societies (PACS) with an investment of ` 2,516 \\ncrore. In consultation with all stakeholders and states, model bye-laws for \\nPACS were formulated enabling them to become multipurpose PACS. A \\nnational cooperative database is being prepared for country-wide mapping \\nof cooperative societies. \\n26. With this backdrop, we will implement a plan to set up massive \\ndecentralised storage capacity. This will help farmers store their produce',\n", + " 'of cooperative societies. \\n26. With this backdrop, we will implement a plan to set up massive \\ndecentralised storage capacity. This will help farmers store their produce \\nand realize remunerative prices through sale at appropriate times. The \\ngovernment will also facilitate setting up of a large number of multipurpose 8 \\n \\n \\n cooperative societies, primary fishery societies and dairy cooperative \\nsocieties in uncovered panchayats and villages in the next 5 years. \\nHealth, Education and Skilling \\nNursing Colleges \\n27\\n. One hundred and fifty-seven new nursing colleges will be \\nestablished in co-location with the existing 157 medical colleges established \\nsince 2014. \\nSickle Cell Anaemia Elimination Mission \\n28. A Mission to eliminate Sickle Cell Anaemia by 2047 will be launched.',\n", + " 'since 2014. \\nSickle Cell Anaemia Elimination Mission \\n28. A Mission to eliminate Sickle Cell Anaemia by 2047 will be launched. \\nIt will entail awareness creation, universal screening of 7 crore people in the \\nage group of 0-40 years in affected tribal areas, and counselling through \\ncollaborative efforts of central ministries and state governments. \\nMedical Research \\n29. Facilities in select ICMR Labs will be made available for research by \\npublic and private medical college faculty and private sector R&D teams for \\nencouraging collaborative research and innovation. \\nPharma Innovation \\n30. A new programme to promote research and innovation in \\npharmaceuticals will be taken up through centers of excellence. We shall',\n", + " 'Pharma Innovation \\n30. A new programme to promote research and innovation in \\npharmaceuticals will be taken up through centers of excellence. We shall \\nalso encourage industry to invest in research and development in specific \\npriority areas. \\nMultidisciplinary courses for medical devices \\n31. Dedicated multidisciplinary courses for medical devices will be \\nsupported in existing institutions to ensure availability of skilled manpower \\nfor futuristic medical technologies, high-end manufacturing and research. \\n 9 \\n \\n \\n Teachers’ Training \\n32. Teachers’ training will be re-envisioned through innovative \\npedagogy, curriculum transaction, continuous professional development, \\ndipstick surveys, and ICT implementation. The District Institutes of',\n", + " 'pedagogy, curriculum transaction, continuous professional development, \\ndipstick surveys, and ICT implementation. The District Institutes of \\nEducation and Training will be developed as vibrant institutes of excellence \\nfor this purpose. \\nNational Digital Library for Children and Adolescents \\n33. A National Digital Library for children and adolescents will be set-up \\nfor facilitating availability of quality books across geographies, languages, \\ngenres and levels, and device agnostic accessibility. States will be \\nencouraged to set up physical libraries for them at panchayat and ward \\nlevels and provide infrastructure for accessing the National Digital Library \\nresources. \\n34. Additionally, to build a culture of reading, and to make up for',\n", + " 'levels and provide infrastructure for accessing the National Digital Library \\nresources. \\n34. Additionally, to build a culture of reading, and to make up for \\npandemic-time learning loss, the National Book Trust, Children’s Book Trust \\nand other sources will be encouraged to provide and replenish non-\\ncurricular titles in regional languages and English to these physical libraries. \\nCollaboration with NGOs that work in literacy will also be a part of this \\ninitiative. To inculcate financial literacy, financial sector regulators and \\norganizations will be encouraged to provide age-appropriate reading \\nmaterial to these libraries. \\nPriority 2: Reaching the Last Mile \\n35. Prime Minister Vajpayee’s government had formed the Ministry of',\n", + " 'material to these libraries. \\nPriority 2: Reaching the Last Mile \\n35. Prime Minister Vajpayee’s government had formed the Ministry of \\nTribal Affairs and the Department of Development of North-Eastern Region. \\nTo provide a sharper focus to the objective of ‘reaching the last mile’, our \\ngovernment has formed the ministries of AYUSH, Fisheries, Animal \\nHusbandry and Dairying, Skill Development, Jal Shakti and Cooperation. \\n \\n 10 \\n \\n \\n Aspirational Districts and Blocks Programme \\n36. Building on the success of the Aspirational Districts Programme, the \\nGovernment has recently launched the Aspirational Blocks Programme \\ncovering 500 blocks for saturation of essential government services across \\nmultiple domains such as health, nutrition, education, agriculture, water',\n", + " 'covering 500 blocks for saturation of essential government services across \\nmultiple domains such as health, nutrition, education, agriculture, water \\nresources, financial inclusion, skill development, and basic infrastructure. \\nPradhan Mantri PVTG Development Mission \\n37. To improve socio-economic conditions of the particularly vulnerable \\ntribal groups (PVTGs), Pradhan Mantri PVTG Development Mission will be \\nlaunched. This will saturate PVTG families and habitations with basic \\nfacilities such as safe housing, clean drinking water and sanitation, \\nimproved access to education, health and nutrition, road and telecom \\nconnectivity, and sustainable livelihood opportunities. An amount \\nof ` 15,000 crore will be made available to implement the Mission in the',\n", + " 'connectivity, and sustainable livelihood opportunities. An amount \\nof ` 15,000 crore will be made available to implement the Mission in the \\nnext three years under the Development Action Plan for the Scheduled \\nTribes. \\nEklavya Model Residential Schools \\n38. In the next three years, centre will recruit 38,800 teachers and \\nsupport staff for the 740 Eklavya Model Residential Schools, serving 3.5 lakh \\ntribal students. \\nWater for Drought Prone Region \\n39. In the drought prone central region of Karnataka, central assistance \\nof ` 5,300 crore will be given to Upper Bhadra Project to provide \\nsustainable micro irrigation and filling up of surface tanks for drinking \\nwater. \\nPM Awas Yojana \\n40. The outlay for PM Awas Yojana is being enhanced \\n by 66 per cent to over ` 79,000 crore. 11',\n", + " 'water. \\nPM Awas Yojana \\n40. The outlay for PM Awas Yojana is being enhanced \\n by 66 per cent to over ` 79,000 crore. 11 \\n \\n \\n Bharat Shared Repository of Inscriptions (Bharat SHRI) \\n41. ‘Bharat Shared Repository of Inscriptions’ will be set up in a digital \\nepigraphy museum, with digitization of one lakh ancient inscriptions in the \\nfirst stage. \\nSupport for poor prisoners \\n42. For poor persons who are in prisons and unable to afford the \\npenalty or the bail amount, required financial support will be provided. \\n \\nPriority 3: Infrastructure & Investment \\n43. Investments in Infrastructure and productive capacity have a large \\nmultiplier impact on growth and employment. After the subdued period of \\nthe pandemic, private investments are growing again. The Budget takes the',\n", + " 'multiplier impact on growth and employment. After the subdued period of \\nthe pandemic, private investments are growing again. The Budget takes the \\nlead once again to ramp up the virtuous cycle of investment and job \\ncreation. \\n \\nCapital Investment as driver of growth and jobs \\n44. Capital investment outlay is being increased steeply for the third \\nyear in a row by 33 per cent to ` 10 lakh crore, which would be 3.3 per cent \\nof GDP. This will be almost three times the outlay in 2019-20. \\n45. This substantial increase in recent years is central to the \\ngovernment’s efforts to enhance growth potential and job creation, crowd-\\nin private investments, and provide a cushion against global headwinds. \\nEffective Capital Expenditure',\n", + " 'government’s efforts to enhance growth potential and job creation, crowd-\\nin private investments, and provide a cushion against global headwinds. \\nEffective Capital Expenditure \\n46. The direct capital investment by the Centre is complemented by the \\nprovision made for creation of capital assets through Grants-in-Aid to \\nStates. The ‘Effective Capital Expenditure’ of the Centre is budgeted at \\n` 13.7 lakh crore, which will be 4.5 per cent of GDP. 12 \\n \\n \\n Support to State Governments for Capital Investment \\n47. I have decided to continue the 50-year interest free loan to state \\ngovernments for one more year to spur investment in infrastructure and to \\nincentivize them for complementary policy actions, with a significantly \\nenhanced outlay of ` 1.3 lakh crore.',\n", + " 'governments for one more year to spur investment in infrastructure and to \\nincentivize them for complementary policy actions, with a significantly \\nenhanced outlay of ` 1.3 lakh crore. \\nEnhancing opportunities for private investment in Infrastructure \\n48. The newly established Infrastructure Finance Secretariat will assist \\nall stakeholders for more private investment in infrastructure, including \\nrailways, roads, urban infrastructure and power, which are predominantly \\ndependent on public resources. \\nHarmonized Master List of Infrastructure \\n49. The Harmonized Master List of Infrastructure will be reviewed by an \\nexpert committee for recommending the classification and financing \\nframework suitable for Amrit Kaal . \\nRailways',\n", + " '49. The Harmonized Master List of Infrastructure will be reviewed by an \\nexpert committee for recommending the classification and financing \\nframework suitable for Amrit Kaal . \\nRailways \\n50. A capital outlay of ` 2.40 lakh crore has been provided for the \\nRailways. This highest ever outlay is about 9 times the outlay made in 2013-\\n14. \\nLogistics \\n51. One hundred critical transport infrastructure projects, for last and \\nfirst mile connectivity for ports, coal, steel, fertilizer, and food grains sectors \\nhave been identified. They will be taken up on priority with investment of \\n` 75,000 crore, including ` 15,000 crore from private sources. \\nRegional Connectivity \\n52. Fifty additional airports, heliports, water aerodromes and advance',\n", + " '` 75,000 crore, including ` 15,000 crore from private sources. \\nRegional Connectivity \\n52. Fifty additional airports, heliports, water aerodromes and advance \\nlanding grounds will be revived for improving regional air connectivity. \\n 13 \\n \\n \\n Sustainable Cities of Tomorrow \\n53. States and cities will be encouraged to undertake urban planning \\nreforms and actions to transform our cities into ‘sustainable cities of \\ntomorrow’. This means efficient use of land resources, adequate resources \\nfor urban infrastructure, transit-oriented development, enhanced \\navailability and affordability of urban land, and opportunities for all. \\nMaking Cities ready for Municipal Bonds \\n54. Through property tax governance reforms and ring-fencing user',\n", + " 'availability and affordability of urban land, and opportunities for all. \\nMaking Cities ready for Municipal Bonds \\n54. Through property tax governance reforms and ring-fencing user \\ncharges on urban infrastructure, cities will be incentivized to improve their \\ncredit worthiness for municipal bonds. \\nUrban Infrastructure Development Fund \\n55. Like the RIDF, an Urban Infrastructure Development Fund (UIDF) will \\nbe established through use of priority sector lending shortfall. This will be \\nmanaged by the National Housing Bank, and will be used by public agencies \\nto create urban infrastructure in Tier 2 and Tier 3 cities. States will be \\nencouraged to leverage resources from the grants of the 15th Finance \\nCommission, as well as existing schemes, to adopt appropriate user charges',\n", + " 'encouraged to leverage resources from the grants of the 15th Finance \\nCommission, as well as existing schemes, to adopt appropriate user charges \\nwhile accessing the UIDF. We expect to make \\navailable ` 10,000 crore per annum for this purpose. \\nUrban Sanitation \\n56. All cities and towns will be enabled for 100 per cent mechanical \\ndesludging of septic tanks and sewers to transition from manhole to \\nmachine-hole mode. Enhanced focus will be provided for scientific \\nmanagement of dry and wet waste. \\nPriority 4: Unleashing the Potential \\n57. “Good Governance is the key to a nation’s progress. Our government \\nis committed to providing a transparent and accountable administration \\nwhich works for the betterment and welfare of the common citizen,” said \\nHon’ble Prime Minister. 14',\n", + " 'is committed to providing a transparent and accountable administration \\nwhich works for the betterment and welfare of the common citizen,” said \\nHon’ble Prime Minister. 14 \\n \\n \\n Mission Karmayogi \\n58. Under Mission Karmayogi, Centre, States and Union Territories are \\nmaking and implementing capacity-building plans for civil servants. The \\ngovernment has also launched an integrated online training platform, iGOT \\nKarmayogi , to provide continuous learning opportunities for lakhs of \\ngovernment employees to upgrade their skills and facilitate people-centric \\napproach. \\n59. For enhancing ease of doing business, more than \\n39,000 compliances have been reduced and more than \\n3,400 legal provisions have been decriminalized. For furthering the trust-',\n", + " 'approach. \\n59. For enhancing ease of doing business, more than \\n39,000 compliances have been reduced and more than \\n3,400 legal provisions have been decriminalized. For furthering the trust-\\nbased governance, we have introduced the Jan Vishwas Bill to amend 42 \\nCentral Acts. This Budget proposes a series of measures to unleash the \\npotential of our economy. \\nCentres of Excellence for Artificial Intelligence \\n60. For realizing the vision of “Make AI in India and Make AI work for \\nIndia”, three centres of excellence for Artificial Intelligence will be set-up in \\ntop educational institutions. Leading industry players will partner in \\nconducting interdisciplinary research, develop cutting-edge applications and \\nscalable problem solutions in the areas of agriculture, health, and',\n", + " 'conducting interdisciplinary research, develop cutting-edge applications and \\nscalable problem solutions in the areas of agriculture, health, and \\nsustainable cities. This will galvanize an effective AI ecosystem and nurture \\nquality human resources in the field. \\nNational Data Governance Policy \\n61. To unleash innovation and research by start-ups and academia, a \\nNational Data Governance Policy will be brought out. This will enable access \\nto anonymized data. \\nSimplification of Know Your Customer (KYC) process \\n62. The KYC process will be simplified adopting a ‘risk-based’ instead of \\n‘one size fits all’ approach. The financial sector regulators will also be 15 \\n \\n \\n encouraged to have a KYC system fully amenable to meet the needs of \\nDigital India.',\n", + " '‘one size fits all’ approach. The financial sector regulators will also be 15 \\n \\n \\n encouraged to have a KYC system fully amenable to meet the needs of \\nDigital India. \\nOne stop solution for identity and address updating \\n63. A one stop solution for reconciliation and updating of identity and \\naddress of individuals maintained by various government agencies, \\nregulators and regulated entities will be established using DigiLocker service \\nand Aadhaar as foundational identity. \\nCommon Business Identifier \\n64. For the business establishments required to have a Permanent \\nAccount Number (PAN), the PAN will be used as the common identifier for \\nall digital systems of specified government agencies. This will bring ease of',\n", + " 'Account Number (PAN), the PAN will be used as the common identifier for \\nall digital systems of specified government agencies. This will bring ease of \\ndoing business; and it will be facilitated through a legal mandate. \\nUnified Filing Process \\n65. For obviating the need for separate submission of same information \\nto different government agencies, a system of ‘Unified Filing Process’ will be \\nset-up. Such filing of information or return in simplified forms on a common \\nportal, will be shared with other agencies as per filer’s choice. \\nVivad se Vishwas I – Relief for MSMEs \\n66. In cases of failure by MSMEs to execute contracts during the Covid \\nperiod, 95 per cent of the forfeited amount relating to bid or performance \\nsecurity, will be returned to them by government and government',\n", + " 'period, 95 per cent of the forfeited amount relating to bid or performance \\nsecurity, will be returned to them by government and government \\nundertakings. This will provide relief to MSMEs. \\nVivad se Vishwas II – Settling Contractual Disputes \\n67. To settle contractual disputes of government and government \\nundertakings, wherein arbitral award is under challenge in a court, a \\nvoluntary settlement scheme with standardized terms will be introduced. \\nThis will be done by offering graded settlement terms depending on \\npendency level of the dispute. 16 \\n \\n \\n State Support Mission \\n68. The State Support Mission of NITI Aayog will be continued for three \\nyears for our collective efforts towards national priorities. \\nResult Based Financing',\n", + " 'State Support Mission \\n68. The State Support Mission of NITI Aayog will be continued for three \\nyears for our collective efforts towards national priorities. \\nResult Based Financing \\n69. To better allocate scarce resources for competing development \\nneeds, the financing of select schemes will be changed, on a pilot basis, \\nfrom ‘input-based’ to ‘result-based’. \\nE-Courts \\n70. For efficient administration of justice, Phase-3 of the \\n E-Courts project will be launched with an outlay \\nof ` 7,000 crore. \\nFintech Services \\n71. Fintech services in India have been facilitated by our digital public \\ninfrastructure including Aadhaar, PM Jan Dhan Yojana, Video KYC, India \\nStack and UPI. To enable more Fintech innovative services, the scope of',\n", + " 'infrastructure including Aadhaar, PM Jan Dhan Yojana, Video KYC, India \\nStack and UPI. To enable more Fintech innovative services, the scope of \\ndocuments available in DigiLocker for individuals will be expanded. \\nEntity DigiLocker \\n72. An Entity DigiLocker will be set up for use by MSMEs, large business \\nand charitable trusts. This will be towards storing and sharing documents \\nonline securely, whenever needed, with various authorities, regulators, \\nbanks and other business entities. \\n5G Services \\n73. One hundred labs for developing applications using \\n5G services will be set up in engineering institutions to realise a new range \\nof opportunities, business models, and employment potential. The labs will \\ncover, among others, applications such as smart classrooms, precision',\n", + " 'of opportunities, business models, and employment potential. The labs will \\ncover, among others, applications such as smart classrooms, precision \\nfarming, intelligent transport systems, and health care applications. 17 \\n \\n \\n Lab Grown Diamonds \\n74. Lab Grown Diamonds (LGD) is a technology-and innovation-driven \\nemerging sector with high employment potential. These environment-\\nfriendly diamonds which have optically and chemically the same properties \\nas natural diamonds. To encourage indigenous production of LGD seeds and \\nmachines and to reduce import dependency, a research and development \\ngrant will be provided to one of the IITs for five years. \\n75. To reduce the cost of production, a proposal to review the custom',\n", + " 'grant will be provided to one of the IITs for five years. \\n75. To reduce the cost of production, a proposal to review the custom \\nduty rate on LGD seeds will be indicated in Part B of the speech. \\nPriority 5: Green Growth \\n76. Hon’ble Prime Minister has given a vision for “LiFE”, or Lifestyle for \\nEnvironment, to spur a movement of environmentally conscious lifestyle. \\nIndia is moving forward firmly for the ‘panchamrit’ and net-zero carbon \\nemission by 2070 to usher in green industrial and economic transition. This \\nBudget builds on our focus on green growth. \\nGreen Hydrogen Mission \\n77. The recently launched National Green Hydrogen Mission, with an \\noutlay of ` 19,700 crores, will facilitate transition of the economy to low',\n", + " 'Green Hydrogen Mission \\n77. The recently launched National Green Hydrogen Mission, with an \\noutlay of ` 19,700 crores, will facilitate transition of the economy to low \\ncarbon intensity, reduce dependence on fossil fuel imports, and make the \\ncountry assume technology and market leadership in this sunrise sector. \\nOur target is to reach an annual production of 5 MMT by 2030. \\nEnergy Transition \\n78. This Budget provides ` 35,000 crore for priority capital investments \\ntowards energy transition and net zero objectives, and energy security by \\nMinistry of Petroleum & Natural Gas. \\nEnergy Storage Projects \\n79. To steer the economy on the sustainable development path, Battery \\nEnergy Storage Systems with capacity of 4,000 MWH will be supported with 18',\n", + " 'Energy Storage Projects \\n79. To steer the economy on the sustainable development path, Battery \\nEnergy Storage Systems with capacity of 4,000 MWH will be supported with 18 \\n \\n \\n Viability Gap Funding. A detailed framework for Pumped Storage Projects \\nwill also be formulated. \\nRenewable Energy Evacuation \\n80. The Inter-state transmission system for evacuation and grid \\nintegration of 13 GW renewable energy from Ladakh will be constructed \\nwith investment of ` 20,700 crore including central support of ` 8,300 crore. \\nGreen Credit Programme \\n81. For encouraging behavioural change, a Green Credit Programme will \\nbe notified under the Environment (Protection) Act. This will incentivize \\nenvironmentally sustainable and responsive actions by companies,',\n", + " 'be notified under the Environment (Protection) Act. This will incentivize \\nenvironmentally sustainable and responsive actions by companies, \\nindividuals and local bodies, and help mobilize additional resources for such \\nactivities. \\nPM-PRANAM \\n82. “PM Programme for Restoration, Awareness, Nourishment and \\nAmelioration of Mother Earth” will be launched to incentivize States and \\nUnion Territories to promote alternative fertilizers and balanced use of \\nchemical fertilizers. \\nGOBARdhan scheme \\n83. 500 new ‘waste to wealth’ plants under GOBARdhan (Galvanizing \\nOrganic Bio-Agro Resources Dhan) scheme will be established for promoting \\ncircular economy. These will include 200 compressed biogas (CBG) plants, \\nincluding 75 plants in urban areas, and 300 community or cluster-based']" + ] + }, + "metadata": {}, + "execution_count": 58 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "V1WK54-74Rpt" + }, + "source": [ + "### Load the dataset into the vector store\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GX5BECsdSUUM", + "outputId": "cdff3467-8af3-45cd-f750-f3174bc521fb" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Inserted 50 headlines.\n" + ] + } + ], + "source": [ + "\n", + "astra_vector_store.add_texts(texts[:50])\n", + "\n", + "print(\"Inserted %i headlines.\" % len(texts[:50]))\n", + "\n", + "astra_vector_index = VectorStoreIndexWrapper(vectorstore=astra_vector_store)" + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "KhVf0kir2Uke" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oLJp8yPF4Rpt" + }, + "source": [ + "### Run the QA cycle\n", + "\n", + "Simply run the cells and ask a question -- or `quit` to stop. (you can also stop execution with the \"▪\" button on the top toolbar)\n", + "\n", + "Here are some suggested questions:\n", + "- _What is the current GDP?_\n", + "- _How much the agriculture target will be increased to and what the focus will be_\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "MbJugrh7SX3C", + "outputId": "10e8f954-a113-47a2-a84c-615a9f6e5dc6" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Enter your question (or type 'quit' to exit): How much the agriculture target will be increased to and what the focus will be\n", + "\n", + "QUESTION: \"How much the agriculture target will be increased to and what the focus will be\"\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "WARNING:cassandra.protocol:Server warning: Top-K queries can only be run with consistency level ONE / LOCAL_ONE / NODE_LOCAL. Consistency level LOCAL_QUORUM was requested. Downgrading the consistency level to LOCAL_ONE.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "ANSWER: \"The agriculture credit target will be increased to ` 20 lakh crore with focus on animal husbandry, dairy and fisheries.\"\n", + "\n", + "FIRST DOCUMENTS BY RELEVANCE:\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "WARNING:cassandra.protocol:Server warning: Top-K queries can only be run with consistency level ONE / LOCAL_ONE / NODE_LOCAL. Consistency level LOCAL_QUORUM was requested. Downgrading the consistency level to LOCAL_ONE.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + " [0.9327] \"of Millet Research, Hyderabad will be supported as the Centre of Excellence \n", + "for sh ...\"\n", + " [0.9327] \"of Millet Research, Hyderabad will be supported as the Centre of Excellence \n", + "for sh ...\"\n", + " [0.9207] \"Agriculture Accelerator Fund \n", + "17. An Agriculture Accelerator Fund will be set-up to ...\"\n", + " [0.9207] \"Agriculture Accelerator Fund \n", + "17. An Agriculture Accelerator Fund will be set-up to ...\"\n", + "\n", + "What's your next question (or type 'quit' to exit): What is the current GDP\n", + "\n", + "QUESTION: \"What is the current GDP\"\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "WARNING:cassandra.protocol:Server warning: Top-K queries can only be run with consistency level ONE / LOCAL_ONE / NODE_LOCAL. Consistency level LOCAL_QUORUM was requested. Downgrading the consistency level to LOCAL_ONE.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "ANSWER: \"The current GDP is estimated to be 7 per cent.\"\n", + "\n", + "FIRST DOCUMENTS BY RELEVANCE:\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "WARNING:cassandra.protocol:Server warning: Top-K queries can only be run with consistency level ONE / LOCAL_ONE / NODE_LOCAL. Consistency level LOCAL_QUORUM was requested. Downgrading the consistency level to LOCAL_ONE.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " [0.8920] \"estimated to be at 7 per cent. It is notable that this is the highest among all \n", + "the ...\"\n", + " [0.8920] \"estimated to be at 7 per cent. It is notable that this is the highest among all \n", + "the ...\"\n", + " [0.8915] \"multiplier impact on growth and employment. After the subdued period of \n", + "the pandemi ...\"\n", + " [0.8915] \"multiplier impact on growth and employment. After the subdued period of \n", + "the pandemi ...\"\n", + "\n", + "What's your next question (or type 'quit' to exit): quit\n" + ] + } + ], + "source": [ + "first_question = True\n", + "while True:\n", + " if first_question:\n", + " query_text = input(\"\\nEnter your question (or type 'quit' to exit): \").strip()\n", + " else:\n", + " query_text = input(\"\\nWhat's your next question (or type 'quit' to exit): \").strip()\n", + "\n", + " if query_text.lower() == \"quit\":\n", + " break\n", + "\n", + " if query_text == \"\":\n", + " continue\n", + "\n", + " first_question = False\n", + "\n", + " print(\"\\nQUESTION: \\\"%s\\\"\" % query_text)\n", + " answer = astra_vector_index.query(query_text, llm=llm).strip()\n", + " print(\"ANSWER: \\\"%s\\\"\\n\" % answer)\n", + "\n", + " print(\"FIRST DOCUMENTS BY RELEVANCE:\")\n", + " for doc, score in astra_vector_store.similarity_search_with_score(query_text, k=4):\n", + " print(\" [%0.4f] \\\"%s ...\\\"\" % (score, doc.page_content[:84]))" + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "dSaUPguw389l" + }, + "execution_count": null, + "outputs": [] + } + ], + "metadata": { + "colab": { + "provenance": [], + "include_colab_link": true + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file