@@ -27,19 +27,25 @@ def test_basic_electoral_roll_prediction(self):
2727 result = in_rolls_fn_gender (self .df , "name" )
2828
2929 # Check required columns are present
30- expected_cols = ["prop_female" , "prop_male" , "prop_third_gender" ,
31- "n_female" , "n_male" , "n_third_gender" ]
30+ expected_cols = [
31+ "prop_female" ,
32+ "prop_male" ,
33+ "prop_third_gender" ,
34+ "n_female" ,
35+ "n_male" ,
36+ "n_third_gender" ,
37+ ]
3238 for col in expected_cols :
3339 self .assertIn (col , result .columns )
3440
3541 # Validate gender predictions for known names
3642 # yasmin should be predominantly female
37- yasmin_row = result [result [' name' ] == ' yasmin' ].iloc [0 ]
38- self .assertTrue (yasmin_row [' prop_female' ] > 0.9 )
43+ yasmin_row = result [result [" name" ] == " yasmin" ].iloc [0 ]
44+ self .assertTrue (yasmin_row [" prop_female" ] > 0.9 )
3945
4046 # vivek should be predominantly male
41- vivek_row = result [result [' name' ] == ' vivek' ].iloc [0 ]
42- self .assertTrue (vivek_row [' prop_female' ] < 0.1 )
47+ vivek_row = result [result [" name" ] == " vivek" ].iloc [0 ]
48+ self .assertTrue (vivek_row [" prop_female" ] < 0.1 )
4349
4450 def test_state_filtering (self ):
4551 """Test state-specific electoral roll data."""
@@ -49,10 +55,12 @@ def test_state_filtering(self):
4955 self .assertIn ("prop_female" , result .columns )
5056
5157 # Gender predictions should still be reasonable
52- yasmin_row = result [result ['name' ] == 'yasmin' ].iloc [0 ]
53- vivek_row = result [result ['name' ] == 'vivek' ].iloc [0 ]
54- self .assertTrue (yasmin_row ['prop_female' ] > 0.8 ) # Slightly more lenient for state-specific
55- self .assertTrue (vivek_row ['prop_female' ] < 0.2 )
58+ yasmin_row = result [result ["name" ] == "yasmin" ].iloc [0 ]
59+ vivek_row = result [result ["name" ] == "vivek" ].iloc [0 ]
60+ self .assertTrue (
61+ yasmin_row ["prop_female" ] > 0.8
62+ ) # Slightly more lenient for state-specific
63+ self .assertTrue (vivek_row ["prop_female" ] < 0.2 )
5664
5765 def test_year_filtering (self ):
5866 """Test year-specific electoral roll data."""
@@ -62,36 +70,40 @@ def test_year_filtering(self):
6270 self .assertIn ("prop_female" , result .columns )
6371
6472 # Gender predictions should still be reasonable
65- yasmin_row = result [result [' name' ] == ' yasmin' ].iloc [0 ]
66- vivek_row = result [result [' name' ] == ' vivek' ].iloc [0 ]
67- self .assertTrue (yasmin_row [' prop_female' ] > 0.8 )
68- self .assertTrue (vivek_row [' prop_female' ] < 0.2 )
73+ yasmin_row = result [result [" name" ] == " yasmin" ].iloc [0 ]
74+ vivek_row = result [result [" name" ] == " vivek" ].iloc [0 ]
75+ self .assertTrue (yasmin_row [" prop_female" ] > 0.8 )
76+ self .assertTrue (vivek_row [" prop_female" ] < 0.2 )
6977
7078 def test_dataset_v1 (self ):
7179 """Test v1 dataset functionality."""
72- result = in_rolls_fn_gender (self .df , "name" , state = "andhra" , year = 1985 , dataset = "v1" )
80+ result = in_rolls_fn_gender (
81+ self .df , "name" , state = "andhra" , year = 1985 , dataset = "v1"
82+ )
7383
7484 # Should have required columns
7585 self .assertIn ("prop_female" , result .columns )
7686
7787 # Gender predictions should be consistent
78- yasmin_row = result [result [' name' ] == ' yasmin' ].iloc [0 ]
79- vivek_row = result [result [' name' ] == ' vivek' ].iloc [0 ]
80- self .assertTrue (yasmin_row [' prop_female' ] > 0.8 )
81- self .assertTrue (vivek_row [' prop_female' ] < 0.2 )
88+ yasmin_row = result [result [" name" ] == " yasmin" ].iloc [0 ]
89+ vivek_row = result [result [" name" ] == " vivek" ].iloc [0 ]
90+ self .assertTrue (yasmin_row [" prop_female" ] > 0.8 )
91+ self .assertTrue (vivek_row [" prop_female" ] < 0.2 )
8292
8393 def test_dataset_v2 (self ):
8494 """Test v2 dataset functionality."""
85- result = in_rolls_fn_gender (self .df , "name" , state = "andhra" , year = 1985 , dataset = "v2" )
95+ result = in_rolls_fn_gender (
96+ self .df , "name" , state = "andhra" , year = 1985 , dataset = "v2"
97+ )
8698
8799 # Should have required columns
88100 self .assertIn ("prop_female" , result .columns )
89101
90102 # Gender predictions should be consistent
91- yasmin_row = result [result [' name' ] == ' yasmin' ].iloc [0 ]
92- vivek_row = result [result [' name' ] == ' vivek' ].iloc [0 ]
93- self .assertTrue (yasmin_row [' prop_female' ] > 0.8 )
94- self .assertTrue (vivek_row [' prop_female' ] < 0.2 )
103+ yasmin_row = result [result [" name" ] == " yasmin" ].iloc [0 ]
104+ vivek_row = result [result [" name" ] == " vivek" ].iloc [0 ]
105+ self .assertTrue (yasmin_row [" prop_female" ] > 0.8 )
106+ self .assertTrue (vivek_row [" prop_female" ] < 0.2 )
95107
96108 def test_column_types_and_values (self ):
97109 """Test that output columns have correct types and value ranges."""
@@ -115,10 +127,18 @@ def test_proportion_sum_consistency(self):
115127 result = in_rolls_fn_gender (self .df , "name" )
116128
117129 for idx , row in result .iterrows ():
118- if pd .notna (row ['prop_female' ]) and pd .notna (row ['prop_male' ]):
119- prop_sum = row ['prop_female' ] + row ['prop_male' ] + row .get ('prop_third_gender' , 0 )
120- self .assertAlmostEqual (prop_sum , 1.0 , places = 2 ,
121- msg = f"Proportions don't sum to 1 for row { idx } " )
130+ if pd .notna (row ["prop_female" ]) and pd .notna (row ["prop_male" ]):
131+ prop_sum = (
132+ row ["prop_female" ]
133+ + row ["prop_male" ]
134+ + row .get ("prop_third_gender" , 0 )
135+ )
136+ self .assertAlmostEqual (
137+ prop_sum ,
138+ 1.0 ,
139+ places = 2 ,
140+ msg = f"Proportions don't sum to 1 for row { idx } " ,
141+ )
122142
123143 def test_invalid_column_name (self ):
124144 """Test behavior with invalid column name."""
0 commit comments