Coverage for jstark / grocery / grocery_features.py: 100%
40 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-23 22:34 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-23 22:34 +0000
1from datetime import date
3from jstark.feature_generator import FeaturePeriodsType
4from jstark.features.count import Count
5from jstark.features.net_spend import NetSpend
6from jstark.features.gross_spend import GrossSpend
7from jstark.features.recency_days import RecencyDays
8from jstark.grocery.basket_count import BasketCount
9from jstark.grocery.store_count import StoreCount
10from jstark.features.product_count import ProductCount
11from jstark.features.approx_product_count import ApproxProductCount
12from jstark.features.customer_count import CustomerCount
13from jstark.grocery.channel_count import ChannelCount
14from jstark.features.approx_customer_count import ApproxCustomerCount
15from jstark.grocery.approx_basket_count import ApproxBasketCount
16from jstark.features.discount import Discount
17from jstark.features.min_gross_spend import MinGrossSpend
18from jstark.features.max_gross_spend import MaxGrossSpend
19from jstark.features.min_net_spend import MinNetSpend
20from jstark.features.max_net_spend import MaxNetSpend
21from jstark.grocery.average_gross_spend_per_basket import AvgGrossSpendPerBasket
22from jstark.features.quantity import Quantity
23from jstark.grocery.average_quantity_per_basket import AvgQuantityPerBasket
24from jstark.features.most_recent_purchase_date import MostRecentPurchaseDate
25from jstark.features.min_net_price import MinNetPrice
26from jstark.features.max_net_price import MaxNetPrice
27from jstark.features.min_gross_price import MinGrossPrice
28from jstark.features.max_gross_price import MaxGrossPrice
29from jstark.features.earliest_purchase_date import EarliestPurchaseDate
30from jstark.grocery.average_discount_per_basket import AvgDiscountPerBasket
31from jstark.grocery.average_purchase_cycle import AvgPurchaseCycle
32from jstark.grocery.cycles_since_last_purchase import CyclesSinceLastPurchase
33from jstark.grocery.basket_periods import BasketPeriods
34from jstark.grocery.recency_weighted_basket import (
35 RecencyWeightedBasket99,
36 RecencyWeightedBasket90,
37 RecencyWeightedBasket95,
38 RecencyWeightedApproxBasket90,
39 RecencyWeightedApproxBasket95,
40 RecencyWeightedApproxBasket99,
41)
42from jstark.grocery.average_basket import AvgBasket
43from jstark.features.feature import Feature
44from jstark.feature_generator import FeatureGenerator
47class GroceryFeatures(FeatureGenerator):
48 def __init__(
49 self,
50 as_at: date | None = None,
51 feature_periods: FeaturePeriodsType = None,
52 feature_stems: set[str] | list[str] | None = None,
53 first_day_of_week: str | None = None,
54 use_absolute_periods: bool = False,
55 ) -> None:
56 super().__init__(
57 as_at,
58 feature_periods,
59 feature_stems,
60 first_day_of_week,
61 use_absolute_periods,
62 )
64 FEATURE_CLASSES: set[type[Feature]] = {
65 Count,
66 NetSpend,
67 GrossSpend,
68 RecencyDays,
69 BasketCount,
70 StoreCount,
71 ProductCount,
72 CustomerCount,
73 ChannelCount,
74 ApproxBasketCount,
75 ApproxProductCount,
76 ApproxCustomerCount,
77 Discount,
78 MinGrossSpend,
79 MaxGrossSpend,
80 MinNetSpend,
81 MaxNetSpend,
82 AvgGrossSpendPerBasket,
83 Quantity,
84 AvgQuantityPerBasket,
85 MostRecentPurchaseDate,
86 MinNetPrice,
87 MaxNetPrice,
88 MinGrossPrice,
89 MaxGrossPrice,
90 EarliestPurchaseDate,
91 AvgDiscountPerBasket,
92 AvgPurchaseCycle,
93 CyclesSinceLastPurchase,
94 BasketPeriods,
95 RecencyWeightedBasket95,
96 RecencyWeightedBasket90,
97 RecencyWeightedBasket99,
98 RecencyWeightedApproxBasket95,
99 RecencyWeightedApproxBasket90,
100 RecencyWeightedApproxBasket99,
101 AvgBasket,
102 }