Coverage for jstark / mealkit / cuisine_count.py: 100%

208 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-03-23 22:34 +0000

1"""CuisineCount feature""" 

2 

3import pyspark.sql.functions as f 

4from pyspark.sql import Column 

5 

6from jstark.features.distinctcount_feature import DistinctCount 

7from jstark.features.count_if import CountIf 

8 

9 

10class CuisineCount(DistinctCount): 

11 def column_expression(self) -> Column: 

12 return f.col("Cuisine") 

13 

14 @property 

15 def description_subject(self) -> str: 

16 return "Distinct count of Cuisines" 

17 

18 @property 

19 def commentary(self) -> str: 

20 return ( 

21 "The number of cuisines. Typically the dataframe supplied " 

22 + "to this feature will have many recipes for the same cuisine, " 

23 + "this feature allows you to determine how many distinct cuisines " 

24 + "have been ordered." 

25 ) 

26 

27 

28class CuisineCountIf(CountIf): 

29 CUISINE_NAME: str = "" 

30 

31 def column_expression(self) -> Column: 

32 # Compare lowercase cuisine to class's CUISINE_NAME (also lowercase) 

33 return f.lower(f.col("Cuisine")) == self.CUISINE_NAME.lower() 

34 

35 @property 

36 def description_subject(self) -> str: 

37 return f"Count of {self.CUISINE_NAME.capitalize()} recipes" 

38 

39 @property 

40 def commentary(self) -> str: 

41 name = self.CUISINE_NAME.capitalize() 

42 return ( 

43 f"The number of {name} recipes. Typically the " 

44 + "dataframe supplied to this feature will have " 

45 + "many recipes for the same cuisine, this feature " 

46 + f"allows you to determine how many {name} " 

47 + "recipes have been ordered." 

48 ) 

49 

50 

51# This list of classes was based upon all the observed cuisines in 

52# all recipes from a well-known mealkit provider in 2025 

53class ItalianCuisineCount(CuisineCountIf): 

54 CUISINE_NAME = "italian" 

55 

56 

57class FrenchCuisineCount(CuisineCountIf): 

58 CUISINE_NAME = "french" 

59 

60 

61class SpanishCuisineCount(CuisineCountIf): 

62 CUISINE_NAME = "spanish" 

63 

64 

65class SrilankanCuisineCount(CuisineCountIf): 

66 CUISINE_NAME = "srilankan" 

67 

68 

69class LebaneseCuisineCount(CuisineCountIf): 

70 CUISINE_NAME = "lebanese" 

71 

72 

73class GreekCuisineCount(CuisineCountIf): 

74 CUISINE_NAME = "greek" 

75 

76 

77class VietnameseCuisineCount(CuisineCountIf): 

78 CUISINE_NAME = "vietnamese" 

79 

80 

81class DanishCuisineCount(CuisineCountIf): 

82 CUISINE_NAME = "danish" 

83 

84 

85class WesternEuropeCuisineCount(CuisineCountIf): 

86 CUISINE_NAME = "westerneurope" 

87 

88 

89class FusionCuisineCount(CuisineCountIf): 

90 CUISINE_NAME = "fusion" 

91 

92 

93class DutchCuisineCount(CuisineCountIf): 

94 CUISINE_NAME = "dutch" 

95 

96 

97class KoreanCuisineCount(CuisineCountIf): 

98 CUISINE_NAME = "korean" 

99 

100 

101class SouthEastAsianCuisineCount(CuisineCountIf): 

102 CUISINE_NAME = "southeast-asian" 

103 

104 

105class MalaysianCuisineCount(CuisineCountIf): 

106 CUISINE_NAME = "malay" 

107 

108 

109class AmericanCuisineCount(CuisineCountIf): 

110 CUISINE_NAME = "american" 

111 

112 

113class AsianCuisineCount(CuisineCountIf): 

114 CUISINE_NAME = "asian" 

115 

116 

117class IndianCuisineCount(CuisineCountIf): 

118 CUISINE_NAME = "indian" 

119 

120 

121class GermanCuisineCount(CuisineCountIf): 

122 CUISINE_NAME = "german" 

123 

124 

125class CentralAmericaCuisineCount(CuisineCountIf): 

126 CUISINE_NAME = "central america" 

127 

128 

129class ArgentinianCuisineCount(CuisineCountIf): 

130 CUISINE_NAME = "argentinian" 

131 

132 

133class NorthAmericanCuisineCount(CuisineCountIf): 

134 CUISINE_NAME = "north american" 

135 

136 

137class NewZealandCuisineCount(CuisineCountIf): 

138 CUISINE_NAME = "new zealand" 

139 

140 

141class CanadianCuisineCount(CuisineCountIf): 

142 CUISINE_NAME = "canadian" 

143 

144 

145class SwedishCuisineCount(CuisineCountIf): 

146 CUISINE_NAME = "swedish" 

147 

148 

149class EgyptianCuisineCount(CuisineCountIf): 

150 CUISINE_NAME = "egyptian" 

151 

152 

153class NorthernEuropeanCuisineCount(CuisineCountIf): 

154 CUISINE_NAME = "northern europe" 

155 

156 

157class CajunCuisineCount(CuisineCountIf): 

158 CUISINE_NAME = "cajun" 

159 

160 

161class AustrianCuisineCount(CuisineCountIf): 

162 CUISINE_NAME = "austrian" 

163 

164 

165class MexicanCuisineCount(CuisineCountIf): 

166 CUISINE_NAME = "mexican" 

167 

168 

169class MediterraneanCuisineCount(CuisineCountIf): 

170 CUISINE_NAME = "mediterranean" 

171 

172 

173class ThaiCuisineCount(CuisineCountIf): 

174 CUISINE_NAME = "thai" 

175 

176 

177class ChineseCuisineCount(CuisineCountIf): 

178 CUISINE_NAME = "chinese" 

179 

180 

181class LatinAmericanCuisineCount(CuisineCountIf): 

182 CUISINE_NAME = "latin american" 

183 

184 

185class SouthAsiaCuisineCount(CuisineCountIf): 

186 CUISINE_NAME = "south asia" 

187 

188 

189class MiddleEasternCuisineCount(CuisineCountIf): 

190 CUISINE_NAME = "middleeastern" 

191 

192 

193class TraditionalCuisineCount(CuisineCountIf): 

194 CUISINE_NAME = "traditional" 

195 

196 

197class SteakhouseCuisineCount(CuisineCountIf): 

198 CUISINE_NAME = "steakhouse" 

199 

200 

201class PacificislandsCuisineCount(CuisineCountIf): 

202 CUISINE_NAME = "pacificislands" 

203 

204 

205class EastAsiaCuisineCount(CuisineCountIf): 

206 CUISINE_NAME = "east asia" 

207 

208 

209class BritishCuisineCount(CuisineCountIf): 

210 CUISINE_NAME = "british" 

211 

212 

213class CaribbeanCuisineCount(CuisineCountIf): 

214 CUISINE_NAME = "caribbean" 

215 

216 

217class FilipinoCuisineCount(CuisineCountIf): 

218 CUISINE_NAME = "filipino" 

219 

220 

221class TurkishCuisineCount(CuisineCountIf): 

222 CUISINE_NAME = "turkish" 

223 

224 

225class BelgianCuisineCount(CuisineCountIf): 

226 CUISINE_NAME = "belgian" 

227 

228 

229class SouthAmericanCuisineCount(CuisineCountIf): 

230 CUISINE_NAME = "south american" 

231 

232 

233class NorthAfricanCuisineCount(CuisineCountIf): 

234 CUISINE_NAME = "north african" 

235 

236 

237class SouthAfricanCuisineCount(CuisineCountIf): 

238 CUISINE_NAME = "south african" 

239 

240 

241class WestAfricanCuisineCount(CuisineCountIf): 

242 CUISINE_NAME = "west african" 

243 

244 

245class EastAfricanCuisineCount(CuisineCountIf): 

246 CUISINE_NAME = "east african" 

247 

248 

249class WesternEuropeanCuisineCount(CuisineCountIf): 

250 CUISINE_NAME = "western-european" 

251 

252 

253class PortugueseCuisineCount(CuisineCountIf): 

254 CUISINE_NAME = "portuguese" 

255 

256 

257class PeruvianCuisineCount(CuisineCountIf): 

258 CUISINE_NAME = "peruvian" 

259 

260 

261class JapaneseCuisineCount(CuisineCountIf): 

262 CUISINE_NAME = "japanese" 

263 

264 

265class PacificIslandsCuisineCount(CuisineCountIf): 

266 CUISINE_NAME = "pacific-islands" 

267 

268 

269class SouthernEuropeCuisineCount(CuisineCountIf): 

270 CUISINE_NAME = "southern europe" 

271 

272 

273class AfricanCuisineCount(CuisineCountIf): 

274 CUISINE_NAME = "african" 

275 

276 

277class CentralAsiaCuisineCount(CuisineCountIf): 

278 CUISINE_NAME = "centralasia" 

279 

280 

281class NorthamericaCuisineCount(CuisineCountIf): 

282 CUISINE_NAME = "northamerica" 

283 

284 

285class EuropeanCuisineCount(CuisineCountIf): 

286 CUISINE_NAME = "european" 

287 

288 

289class MoroccanCuisineCount(CuisineCountIf): 

290 CUISINE_NAME = "moroccan" 

291 

292 

293class AustralianCuisineCount(CuisineCountIf): 

294 CUISINE_NAME = "australian" 

295 

296 

297class HungarianCuisineCount(CuisineCountIf): 

298 CUISINE_NAME = "hungarian" 

299 

300 

301class IranianCuisineCount(CuisineCountIf): 

302 CUISINE_NAME = "iranian" 

303 

304 

305class SoutheastAsiaCuisineCount(CuisineCountIf): 

306 CUISINE_NAME = "southeast asia" 

307 

308 

309class HawaiianCuisineCount(CuisineCountIf): 

310 CUISINE_NAME = "hawaiian" 

311 

312 

313class ScandinavianCuisineCount(CuisineCountIf): 

314 CUISINE_NAME = "scandinavian" 

315 

316 

317class BrazilianCuisineCount(CuisineCountIf): 

318 CUISINE_NAME = "brazilian" 

319 

320 

321class IndonesianCuisineCount(CuisineCountIf): 

322 CUISINE_NAME = "indonesian" 

323 

324 

325class MongolianCuisineCount(CuisineCountIf): 

326 CUISINE_NAME = "mongolian" 

327 

328 

329class RussianCuisineCount(CuisineCountIf): 

330 CUISINE_NAME = "russian" 

331 

332 

333class SouthAsianCuisineCount(CuisineCountIf): 

334 CUISINE_NAME = "south-asian" 

335 

336 

337class BulgarianCuisineCount(CuisineCountIf): 

338 CUISINE_NAME = "bulgarian" 

339 

340 

341class FusionCuisineCusiineCount(CuisineCountIf): 

342 CUISINE_NAME = "fusion-cuisine" 

343 

344 

345class IrishCuisineCount(CuisineCountIf): 

346 CUISINE_NAME = "irish" 

347 

348 

349class GeorgianCuisineCount(CuisineCountIf): 

350 CUISINE_NAME = "georgian" 

351 

352 

353class SouthwestCuisineCount(CuisineCountIf): 

354 CUISINE_NAME = "southwest" 

355 

356 

357class CambodianCuisineCount(CuisineCountIf): 

358 CUISINE_NAME = "cambodian" 

359 

360 

361class LatinCuisineCount(CuisineCountIf): 

362 CUISINE_NAME = "latin" 

363 

364 

365class CubanCuisineCount(CuisineCountIf): 

366 CUISINE_NAME = "cuban" 

367 

368 

369class SoutheastCuisineCount(CuisineCountIf): 

370 CUISINE_NAME = "southeast" 

371 

372 

373class SouthHyphenAfricanCuisineCount(CuisineCountIf): 

374 CUISINE_NAME = "south-african" 

375 

376 

377class JamaicanCuisineCount(CuisineCountIf): 

378 CUISINE_NAME = "jamaican" 

379 

380 

381class IsrealiCuisineCount(CuisineCountIf): 

382 CUISINE_NAME = "israeli" 

383 

384 

385class EasteuropeanCuisineCount(CuisineCountIf): 

386 CUISINE_NAME = "easteuropean" 

387 

388 

389class SingaporeanCuisineCount(CuisineCountIf): 

390 CUISINE_NAME = "singaporean" 

391 

392 

393class NordicCuisineCount(CuisineCountIf): 

394 CUISINE_NAME = "nordic" 

395 

396 

397class WestHyphenAfricanCuisineCount(CuisineCountIf): 

398 CUISINE_NAME = "west-african" 

399 

400 

401class NortheastCuisineCount(CuisineCountIf): 

402 CUISINE_NAME = "northeast" 

403 

404 

405class TonganCuisineCount(CuisineCountIf): 

406 CUISINE_NAME = "tongan" 

407 

408 

409class WestafricaCuisineCount(CuisineCountIf): 

410 CUISINE_NAME = "westafrica" 

411 

412 

413class ZanzibarianCuisineCount(CuisineCountIf): 

414 CUISINE_NAME = "zanzibarian" 

415 

416 

417class MidwestCuisineCount(CuisineCountIf): 

418 CUISINE_NAME = "midwest"