Coverage report: 99%

Files Functions Classes

coverage.py v7.13.4, created at 2026-03-23 22:34 +0000

      Statements   Branches   Total
File class   coverage statements missing excluded   coverage branches partial   coverage
jstark / __init__.py (no class)   100% 0 0 0   100% 0 0   100%
jstark / exceptions.py FeaturePeriodMnemonicIsInvalid   100% 1 0 0   100% 0 0   100%
jstark / exceptions.py FeaturePeriodEndGreaterThanStartError   100% 4 0 0   100% 0 0   100%
jstark / exceptions.py AsAtIsNotADate   100% 1 0 0   100% 0 0   100%
jstark / exceptions.py (no class)   100% 8 0 0   100% 0 0   100%
jstark / feature_generator.py FeatureGenerator   90% 62 6 0   100% 18 0   92%
jstark / feature_generator.py (no class)   100% 38 0 0   100% 0 0   100%
jstark / feature_period.py FeaturePeriod   100% 19 0 0   100% 6 0   100%
jstark / feature_period.py (no class)   88% 51 6 0   17% 6 1   81%
jstark / features / __init__.py (no class)   100% 19 0 0   100% 0 0   100%
jstark / features / approx_customer_count.py ApproxCustomerCount   100% 3 0 0   100% 0 0   100%
jstark / features / approx_customer_count.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / features / approx_product_count.py ApproxProductCount   100% 3 0 0   100% 0 0   100%
jstark / features / approx_product_count.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / features / approxdistinctcount_feature.py ApproxDistinctCount   100% 2 0 0   100% 0 0   100%
jstark / features / approxdistinctcount_feature.py (no class)   100% 8 0 0   100% 0 0   100%
jstark / features / collect_set_feature.py CollectSet   100% 2 0 0   100% 0 0   100%
jstark / features / collect_set_feature.py (no class)   100% 8 0 0   100% 0 0   100%
jstark / features / count.py Count   100% 4 0 0   100% 0 0   100%
jstark / features / count.py (no class)   100% 10 0 0   100% 0 0   100%
jstark / features / count_if.py CountIf   67% 3 1 0   100% 0 0   67%
jstark / features / count_if.py (no class)   100% 8 0 0   100% 0 0   100%
jstark / features / customer_count.py CustomerCount   100% 3 0 0   100% 0 0   100%
jstark / features / customer_count.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / features / discount.py Discount   100% 3 0 0   100% 0 0   100%
jstark / features / discount.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / features / distinctcount_feature.py DistinctCount   100% 2 0 0   100% 0 0   100%
jstark / features / distinctcount_feature.py (no class)   100% 8 0 0   100% 0 0   100%
jstark / features / earliest_purchase_date.py EarliestPurchaseDate   100% 4 0 0   100% 0 0   100%
jstark / features / earliest_purchase_date.py (no class)   100% 10 0 0   100% 0 0   100%
jstark / features / feature.py Feature   100% 87 0 0   100% 30 0   100%
jstark / features / feature.py DerivedFeature   100% 1 0 0   100% 0 0   100%
jstark / features / feature.py BaseFeature   100% 9 0 0   100% 0 0   100%
jstark / features / feature.py (no class)   100% 56 0 0   100% 0 0   100%
jstark / features / first_and_last_date_of_period.py FirstAndLastDateOfPeriod   100% 34 0 0   100% 16 0   100%
jstark / features / first_and_last_date_of_period.py (no class)   100% 20 0 0   100% 0 0   100%
jstark / features / gross_spend.py GrossSpend   100% 3 0 0   100% 0 0   100%
jstark / features / gross_spend.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / features / max_feature.py Max   100% 2 0 0   100% 0 0   100%
jstark / features / max_feature.py (no class)   100% 8 0 0   100% 0 0   100%
jstark / features / max_gross_price.py MaxGrossPrice   100% 3 0 0   100% 0 0   100%
jstark / features / max_gross_price.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / features / max_gross_spend.py MaxGrossSpend   100% 2 0 0   100% 0 0   100%
jstark / features / max_gross_spend.py (no class)   100% 7 0 0   100% 0 0   100%
jstark / features / max_net_price.py MaxNetPrice   100% 3 0 0   100% 0 0   100%
jstark / features / max_net_price.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / features / max_net_spend.py MaxNetSpend   100% 2 0 0   100% 0 0   100%
jstark / features / max_net_spend.py (no class)   100% 7 0 0   100% 0 0   100%
jstark / features / min_feature.py Min   100% 2 0 0   100% 0 0   100%
jstark / features / min_feature.py (no class)   100% 8 0 0   100% 0 0   100%
jstark / features / min_gross_price.py MinGrossPrice   100% 3 0 0   100% 0 0   100%
jstark / features / min_gross_price.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / features / min_gross_spend.py MinGrossSpend   100% 2 0 0   100% 0 0   100%
jstark / features / min_gross_spend.py (no class)   100% 7 0 0   100% 0 0   100%
jstark / features / min_net_price.py MinNetPrice   100% 3 0 0   100% 0 0   100%
jstark / features / min_net_price.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / features / min_net_spend.py MinNetSpend   100% 2 0 0   100% 0 0   100%
jstark / features / min_net_spend.py (no class)   100% 7 0 0   100% 0 0   100%
jstark / features / most_recent_purchase_date.py MostRecentPurchaseDate   100% 4 0 0   100% 0 0   100%
jstark / features / most_recent_purchase_date.py (no class)   100% 10 0 0   100% 0 0   100%
jstark / features / net_spend.py NetSpend   100% 3 0 0   100% 0 0   100%
jstark / features / net_spend.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / features / product_count.py ProductCount   100% 3 0 0   100% 0 0   100%
jstark / features / product_count.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / features / quantity.py Quantity   100% 3 0 0   100% 0 0   100%
jstark / features / quantity.py (no class)   100% 8 0 0   100% 0 0   100%
jstark / features / recency_days.py RecencyDays   100% 4 0 0   100% 0 0   100%
jstark / features / recency_days.py (no class)   100% 10 0 0   100% 0 0   100%
jstark / features / sum_feature.py Sum   100% 2 0 0   100% 0 0   100%
jstark / features / sum_feature.py (no class)   100% 8 0 0   100% 0 0   100%
jstark / grocery / __init__.py (no class)   100% 31 0 0   100% 0 0   100%
jstark / grocery / approx_basket_count.py ApproxBasketCount   100% 3 0 0   100% 0 0   100%
jstark / grocery / approx_basket_count.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / grocery / average_basket.py AvgBasket   100% 4 0 0   100% 0 0   100%
jstark / grocery / average_basket.py (no class)   100% 12 0 0   100% 0 0   100%
jstark / grocery / average_discount_per_basket.py AvgDiscountPerBasket   100% 4 0 0   100% 0 0   100%
jstark / grocery / average_discount_per_basket.py (no class)   100% 12 0 0   100% 0 0   100%
jstark / grocery / average_gross_spend_per_basket.py AvgGrossSpendPerBasket   100% 4 0 0   100% 0 0   100%
jstark / grocery / average_gross_spend_per_basket.py (no class)   100% 12 0 0   100% 0 0   100%
jstark / grocery / average_purchase_cycle.py AvgPurchaseCycle   100% 4 0 0   100% 0 0   100%
jstark / grocery / average_purchase_cycle.py (no class)   100% 13 0 0   100% 0 0   100%
jstark / grocery / average_quantity_per_basket.py AvgQuantityPerBasket   100% 4 0 0   100% 0 0   100%
jstark / grocery / average_quantity_per_basket.py (no class)   100% 12 0 0   100% 0 0   100%
jstark / grocery / basket_count.py BasketCount   100% 3 0 0   100% 0 0   100%
jstark / grocery / basket_count.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / grocery / basket_periods.py BasketPeriods   100% 8 0 0   100% 2 0   100%
jstark / grocery / basket_periods.py (no class)   100% 16 0 0   100% 0 0   100%
jstark / grocery / channel_count.py ChannelCount   100% 3 0 0   100% 0 0   100%
jstark / grocery / channel_count.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / grocery / cycles_since_last_purchase.py CyclesSinceLastPurchase   100% 4 0 0   100% 0 0   100%
jstark / grocery / cycles_since_last_purchase.py (no class)   100% 12 0 0   100% 0 0   100%
jstark / grocery / grocery_features.py GroceryFeatures   100% 1 0 0   100% 0 0   100%
jstark / grocery / grocery_features.py (no class)   100% 39 0 0   100% 0 0   100%
jstark / grocery / recency_weighted_basket.py RecencyWeightedApproxBasket   100% 12 0 0   100% 2 0   100%
jstark / grocery / recency_weighted_basket.py RecencyWeightedBasket   100% 8 0 0   100% 2 0   100%
jstark / grocery / recency_weighted_basket.py RecencyWeightedBasket90   100% 1 0 0   100% 0 0   100%
jstark / grocery / recency_weighted_basket.py RecencyWeightedBasket95   100% 1 0 0   100% 0 0   100%
jstark / grocery / recency_weighted_basket.py RecencyWeightedBasket99   100% 1 0 0   100% 0 0   100%
jstark / grocery / recency_weighted_basket.py RecencyWeightedApproxBasket90   100% 1 0 0   100% 0 0   100%
jstark / grocery / recency_weighted_basket.py RecencyWeightedApproxBasket95   100% 1 0 0   100% 0 0   100%
jstark / grocery / recency_weighted_basket.py RecencyWeightedApproxBasket99   100% 1 0 0   100% 0 0   100%
jstark / grocery / recency_weighted_basket.py (no class)   100% 41 0 0   100% 0 0   100%
jstark / grocery / store_count.py StoreCount   100% 3 0 0   100% 0 0   100%
jstark / grocery / store_count.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / mealkit / __init__.py (no class)   100% 2 0 0   100% 0 0   100%
jstark / mealkit / approx_order_count.py ApproxOrderCount   100% 3 0 0   100% 0 0   100%
jstark / mealkit / approx_order_count.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / mealkit / approx_recipe_count.py ApproxRecipeCount   100% 3 0 0   100% 0 0   100%
jstark / mealkit / approx_recipe_count.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / mealkit / average_order.py AvgOrder   100% 4 0 0   100% 0 0   100%
jstark / mealkit / average_order.py (no class)   100% 12 0 0   100% 0 0   100%
jstark / mealkit / average_purchase_cycle.py AvgPurchaseCycle   100% 4 0 0   100% 0 0   100%
jstark / mealkit / average_purchase_cycle.py (no class)   100% 13 0 0   100% 0 0   100%
jstark / mealkit / average_quantity_per_order.py AvgQuantityPerOrder   100% 4 0 0   100% 0 0   100%
jstark / mealkit / average_quantity_per_order.py (no class)   100% 12 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py CuisineCount   100% 3 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py CuisineCountIf   100% 4 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py ItalianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py FrenchCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SpanishCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SrilankanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py LebaneseCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py GreekCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py VietnameseCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py DanishCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py WesternEuropeCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py FusionCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py DutchCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py KoreanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SouthEastAsianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py MalaysianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py AmericanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py AsianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py IndianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py GermanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py CentralAmericaCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py ArgentinianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py NorthAmericanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py NewZealandCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py CanadianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SwedishCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py EgyptianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py NorthernEuropeanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py CajunCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py AustrianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py MexicanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py MediterraneanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py ThaiCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py ChineseCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py LatinAmericanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SouthAsiaCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py MiddleEasternCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py TraditionalCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SteakhouseCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py PacificislandsCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py EastAsiaCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py BritishCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py CaribbeanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py FilipinoCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py TurkishCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py BelgianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SouthAmericanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py NorthAfricanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SouthAfricanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py WestAfricanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py EastAfricanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py WesternEuropeanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py PortugueseCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py PeruvianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py JapaneseCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py PacificIslandsCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SouthernEuropeCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py AfricanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py CentralAsiaCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py NorthamericaCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py EuropeanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py MoroccanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py AustralianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py HungarianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py IranianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SoutheastAsiaCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py HawaiianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py ScandinavianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py BrazilianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py IndonesianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py MongolianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py RussianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SouthAsianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py BulgarianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py FusionCuisineCusiineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py IrishCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py GeorgianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SouthwestCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py CambodianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py LatinCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py CubanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SoutheastCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SouthHyphenAfricanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py JamaicanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py IsrealiCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py EasteuropeanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py SingaporeanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py NordicCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py WestHyphenAfricanCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py NortheastCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py TonganCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py WestafricaCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py ZanzibarianCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py MidwestCuisineCount   100% 0 0 0   100% 0 0   100%
jstark / mealkit / cuisine_count.py (no class)   100% 201 0 0   100% 0 0   100%
jstark / mealkit / cuisines.py Cuisines   100% 3 0 0   100% 0 0   100%
jstark / mealkit / cuisines.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / mealkit / cycles_since_last_order.py CyclesSinceLastOrder   100% 4 0 0   100% 0 0   100%
jstark / mealkit / cycles_since_last_order.py (no class)   100% 12 0 0   100% 0 0   100%
jstark / mealkit / mealkit_features.py MealkitFeatures   100% 1 0 0   100% 0 0   100%
jstark / mealkit / mealkit_features.py (no class)   100% 29 0 0   100% 0 0   100%
jstark / mealkit / order_count.py OrderCount   100% 3 0 0   100% 0 0   100%
jstark / mealkit / order_count.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / mealkit / order_periods.py OrderPeriods   100% 8 0 0   100% 2 0   100%
jstark / mealkit / order_periods.py (no class)   100% 16 0 0   100% 0 0   100%
jstark / mealkit / recipe_count.py RecipeCount   100% 3 0 0   100% 0 0   100%
jstark / mealkit / recipe_count.py (no class)   100% 9 0 0   100% 0 0   100%
jstark / period_unit_of_measure.py PeriodUnitOfMeasure   100% 0 0 0   100% 0 0   100%
jstark / period_unit_of_measure.py (no class)   100% 7 0 0   100% 0 0   100%
jstark / sample / __init__.py (no class)   100% 0 0 0   100% 0 0   100%
jstark / sample / mealkit_orders.py FakeMealkitOrders   100% 33 0 0   75% 8 2   95%
jstark / sample / mealkit_orders.py (no class)   100% 18 0 0   100% 0 0   100%
jstark / sample / transactions.py FakeGroceryTransactions   100% 35 0 0   100% 10 0   100%
jstark / sample / transactions.py (no class)   100% 18 0 0   100% 0 0   100%
Total     99% 1523 13 0   93% 102 3   99%

No items found using the specified filter.