Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 126 additions & 0 deletions faker/providers/address/mr_IN/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
from .. import Provider as AddressProvider


class Provider(AddressProvider):
city_formats = ("{{city_name}}",)

street_name_formats = (
"{{first_name}} {{last_name}}",
"{{last_name}}",
)

street_address_formats = ("{{building_number}} {{street_name}}",)

address_formats = (
"{{street_address}}\n{{city}} {{postcode}}",
"{{street_address}}\n{{city}}-{{postcode}}",
)

building_number_formats = (
"####",
"###",
"##",
"#",
"#/#",
"##/##",
"##/###",
"##/####",
)

postcode_formats = ("######",)

# Source references (accessed 2026-04-18):
# - https://en.wikipedia.org/wiki/List_of_cities_in_Maharashtra_by_population (cities)
# - https://www.india.gov.in/my-government/states-uts (states baseline)
# - https://github.com/unicode-org/cldr-json/blob/main/cldr-json/cldr-localenames-full/main/mr/territories.json
# (Marathi territory/country names)
# Data is manually filtered and normalized for Faker synthetic generation.

cities = (
"अहमदनगर",
"अकोला",
"अमरावती",
"औरंगाबाद",
"उस्मानाबाद",
"कोल्हापूर",
"गोंदिया",
"चंद्रपूर",
"जळगाव",
"ठाणे",
"धुळे",
"नवी मुंबई",
"नागपूर",
"नांदेड",
"नाशिक",
"पिंपरी-चिंचवड",
"पुणे",
"परभणी",
"बीड",
"मुंबई",
"मिरज",
"यवतमाळ",
"रत्नागिरी",
"लातूर",
"वसई",
"सांगली",
"सातारा",
"सोलापूर",
"हिंगोली",
)

states = (
"आंध्र प्रदेश",
"अरुणाचल प्रदेश",
"आसाम",
"उत्तर प्रदेश",
"उत्तराखंड",
"ओडिशा",
"कर्नाटक",
"केरळ",
"गोवा",
"गुजरात",
"छत्तीसगड",
"झारखंड",
"तामिळनाडू",
"तेलंगणा",
"त्रिपुरा",
"नागालँड",
"पंजाब",
"पश्चिम बंगाल",
"बिहार",
"मणिपूर",
"मध्य प्रदेश",
"महाराष्ट्र",
"मेघालय",
"मिझोरम",
"राजस्थान",
"सिक्कीम",
"हरियाणा",
"हिमाचल प्रदेश",
)

countries = (
"ऑस्ट्रेलिया",
"कॅनडा",
"जर्मनी",
"जपान",
"नेपाळ",
"पाकिस्तान",
"भारत",
"भूतान",
"बांग्लादेश",
"फ्रान्स",
"युनायटेड किंगडम",
"संयुक्त अरब अमिरात",
"संयुक्त राज्य अमेरिका",
"सिंगापूर",
"श्रीलंका",
)

def city_name(self) -> str:
return self.random_element(self.cities)

def administrative_unit(self) -> str:
return self.random_element(self.states)

state = administrative_unit
40 changes: 40 additions & 0 deletions faker/providers/date_time/mr_IN/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from .. import Provider as DateTimeProvider


class Provider(DateTimeProvider):
# Source references (accessed 2026-04-18):
# - https://mr.wikipedia.org/wiki/वार: (Marathi weekday naming)
# - https://mr.wikipedia.org/wiki/महिने: (Marathi month naming)
# Data is normalized for synthetic locale generation.
DAY_NAMES = {
"0": "रविवार",
"1": "सोमवार",
"2": "मंगळवार",
"3": "बुधवार",
"4": "गुरुवार",
"5": "शुक्रवार",
"6": "शनिवार",
}

MONTH_NAMES = {
"01": "जानेवारी",
"02": "फेब्रुवारी",
"03": "मार्च",
"04": "एप्रिल",
"05": "मे",
"06": "जून",
"07": "जुलै",
"08": "ऑगस्ट",
"09": "सप्टेंबर",
"10": "ऑक्टोबर",
"11": "नोव्हेंबर",
"12": "डिसेंबर",
}

def day_of_week(self) -> str:
day = self.date("%w")
return self.DAY_NAMES[day]

def month_name(self) -> str:
month = self.month()
return self.MONTH_NAMES[month]
160 changes: 160 additions & 0 deletions faker/providers/person/mr_IN/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
from .. import Provider as PersonProvider


class Provider(PersonProvider):

formats_male = (
"{{first_name_male}} {{last_name}}",
"{{prefix_male}} {{first_name_male}} {{last_name}}",
"{{first_name_male}} {{last_name}}{{suffix}}",
)

formats_female = (
"{{first_name_female}} {{last_name}}",
"{{prefix_female}} {{first_name_female}} {{last_name}}",
"{{first_name_female}} {{last_name}}{{suffix}}",
)

formats = (
"{{first_name}} {{last_name}}",
"{{prefix}} {{first_name}} {{last_name}}",
"{{first_name}} {{last_name}}{{suffix}}",
)

# Source references (accessed 2026-04-18):
# - https://www.behindthename.com/names/usage/marathi (given names)
# - https://en.wikipedia.org/wiki/Category:Marathi-language_surnames (surnames)
# Data is manually filtered for synthetic test-data suitability.

first_names_female = (
"अंजली",
"अनिता",
"अनुष्का",
"अपर्णा",
"आकांक्षा",
"आशा",
"इशिता",
"उमा",
"कविता",
"कल्पना",
"कीर्ती",
"कोमल",
"गौरी",
"चेतना",
"ज्योती",
"तन्वी",
"दीपाली",
"नेहा",
"पल्लवी",
"पूजा",
"प्रज्ञा",
"प्रिया",
"माधुरी",
"मानसी",
"मीनल",
"मेघा",
"रेणुका",
"रीमा",
"रोहिणी",
"लता",
"वैशाली",
"शिल्पा",
"श्रुती",
"स्मिता",
"स्वाती",
"स्नेहा",
"हर्षदा",
)

first_names_male = (
"अभिजीत",
"अभिषेक",
"अमित",
"अमोल",
"अनिल",
"अनिरुद्ध",
"अरुण",
"अशोक",
"आदित्य",
"आकाश",
"ईश्वर",
"उमेश",
"किरण",
"कैलास",
"गणेश",
"गौरव",
"चेतन",
"जितेंद्र",
"दत्तात्रेय",
"दीपक",
"धनंजय",
"निखिल",
"निलेश",
"पंकज",
"प्रकाश",
"प्रवीण",
"प्रशांत",
"भूषण",
"मकरंद",
"मंगेश",
"माधव",
"मिलिंद",
"मोहन",
"राहुल",
"रोहित",
"विकास",
"विनायक",
"विवेक",
"सचिन",
"संदीप",
"समीर",
"सुनील",
"सुरेश",
"हर्षद",
)

first_names = first_names_female + first_names_male

last_names = (
"आगरकर",
"अहेर",
"ओक",
"कदम",
"कांबळे",
"कुलकर्णी",
"कोल्हे",
"गवळी",
"गायकवाड",
"चव्हाण",
"चौगुले",
"जगताप",
"जाधव",
"जोशी",
"ठाकूर",
"देशमुख",
"देशपांडे",
"पाटील",
"पवार",
"फडके",
"भोसले",
"महाजन",
"माने",
"मोरे",
"राऊत",
"शिंदे",
"शिरसाट",
"साळुंखे",
"साने",
"सावंत",
)

prefixes_female = (
"श्रीमती",
"कुमारी",
)

prefixes_male = ("श्री",)

prefixes = prefixes_female + prefixes_male

suffixes = ("जी",)
15 changes: 15 additions & 0 deletions faker/providers/phone_number/mr_IN/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from .. import Provider as PhoneNumberProvider


class Provider(PhoneNumberProvider):
# Source references (accessed 2026-04-18):
# - https://dot.gov.in/numbering-resources (India numbering resources)
# - Faker locale patterns in `phone_number/hi_IN` and `phone_number/ta_IN`
# Patterns are intended for structurally valid synthetic Indian numbers.
formats = (
"+91 ##########",
"+91 ### #######",
"0##-########",
"0##########",
"0#### ######",
)
23 changes: 23 additions & 0 deletions tests/providers/test_address.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
from faker.providers.address.ja_JP import Provider as JaJpAddressProvider
from faker.providers.address.ka_GE import Provider as KaGeAddressProvider
from faker.providers.address.ko_KR import Provider as KoKrAddressProvider
from faker.providers.address.mr_IN import Provider as MrInAddressProvider
from faker.providers.address.ne_NP import Provider as NeNpAddressProvider
from faker.providers.address.no_NO import Provider as NoNoAddressProvider
from faker.providers.address.pl_PL import Provider as PlPlAddressProvider
Expand Down Expand Up @@ -1976,6 +1977,28 @@ def test_road_address(self, faker, num_samples):
assert isinstance(road_address, str)


class TestMrIn:
"""Test mr_IN address provider methods"""

def test_city_name(self, faker, num_samples):
for _ in range(num_samples):
city_name = faker.city_name()
assert isinstance(city_name, str)
assert city_name in MrInAddressProvider.cities

def test_state(self, faker, num_samples):
for _ in range(num_samples):
state = faker.state()
assert isinstance(state, str)
assert state in MrInAddressProvider.states

def test_country(self, faker, num_samples):
for _ in range(num_samples):
country = faker.country()
assert isinstance(country, str)
assert country in MrInAddressProvider.countries


class TestNeNp:
"""Test ne_NP address provider methods"""

Expand Down
Loading
Loading