def test_one_period(self):
     self.assertAlmostEqual(consumption([
             _tx('stockonhand', 25, 5),
             _tx('stockonhand', 25, 0),
         ], 60), 0.)
     self.assertAlmostEqual(consumption([
             _tx('stockonhand', 25, 5),
             _tx('receipts', 10, 0),
             _tx('stockonhand', 35, 0),
         ], 60), 0.)
     # 15 / 5 = 3
     self.assertAlmostEqual(consumption([
             _tx('stockonhand', 25, 5),
             _tx('consumption', 15, 0),
             _tx('stockonhand', 10, 0),
         ], 60), 3.)
     # 27 / 5 = 5.4
     self.assertAlmostEqual(consumption([
             _tx('stockonhand', 25, 5),
             _tx('receipts', 12, 3),
             _tx('consumption', 27, 0),
             _tx('stockonhand', 10, 0),
         ], 60), 5.4)
     # (6 + 21) / 5 = 5.4
     self.assertAlmostEqual(consumption([
             _tx('stockonhand', 25, 5),
             _tx('consumption', 6, 3),
             _tx('receipts', 12, 3),
             _tx('consumption', 21, 0),
             _tx('stockonhand', 10, 0),
         ], 60), 5.4)
Exemple #2
0
 def test_prorated_period(self):
     tx_past_window = [
         _tx('stockonhand', 200, 65),
         _tx('consumption', 100, 50),
         _tx('receipts', 50, 50),
         _tx('stockonhand', 150, 50),
         _tx('consumption', 20, 0),
         _tx('receipts', 30, 0),
         _tx('stockonhand', 160, 0),
     ]
     self.assertAlmostEqual(consumption(tx_past_window, 60), 1.44444444)
     self.assertAlmostEqual(consumption(tx_past_window, 55), 0.96969696)
    def test_prorated_period(self):
        tx_past_window = [
            _tx('stockonhand', 200, 65),

            _tx('consumption', 100, 50),
            _tx('receipts', 50, 50),
            _tx('stockonhand', 150, 50),
            
            _tx('consumption', 20, 0),
            _tx('receipts', 30, 0),
            _tx('stockonhand', 160, 0),
        ]
        self.assertAlmostEqual(consumption(tx_past_window, 60), 1.44444444)
        self.assertAlmostEqual(consumption(tx_past_window, 55), 0.96969696)
Exemple #4
0
 def consumption(self, txdata, window, params=None):
     consumption_tx_data = []
     exclude_inferred_receipts = params.get('exclude_invalid_periods', False) if params else False
     for tx in txdata:
         consumption_tx_data.extend(tx.get_consumption_transactions(
             exclude_inferred_receipts)
         )
     return consumption(consumption_tx_data, window, params)
Exemple #5
0
 def test_thresholds(self):
     tx = [
         _tx('stockonhand', 25, 15),
         _tx('consumption', 4, 12),
         _tx('receipts', 12, 12),
         _tx('stockonhand', 33, 12),
         _tx('consumption', 30, 7),
         _tx('receipts', 3, 7),
         _tx('stockonhand', 6, 7),
         _tx('consumption', 10, 0),
         _tx('receipts', 14, 0),
         _tx('stockonhand', 10, 0),
     ]
     self.assertEqual(consumption(tx, 60, {'min_periods': 4}), None)
     self.assertAlmostEqual(consumption(tx, 60, {'min_periods': 3}),
                            44 / 15.)
     self.assertEqual(consumption(tx, 60, {'min_window': 16}), None)
     self.assertAlmostEqual(consumption(tx, 60, {'min_window': 15}),
                            44 / 15.)
    def test_thresholds(self):
        tx = [
            _tx('stockonhand', 25, 15),

            _tx('consumption', 4, 12),
            _tx('receipts', 12, 12),
            _tx('stockonhand', 33, 12),

            _tx('consumption', 30, 7),
            _tx('receipts', 3, 7),
            _tx('stockonhand', 6, 7),

            _tx('consumption', 10, 0),
            _tx('receipts', 14, 0),
            _tx('stockonhand', 10, 0),
        ]
        self.assertEqual(consumption(tx, 60, {'min_periods': 4}), None)
        self.assertAlmostEqual(consumption(tx, 60, {'min_periods': 3}), 44/15.)
        self.assertEqual(consumption(tx, 60, {'min_window': 16}), None)
        self.assertAlmostEqual(consumption(tx, 60, {'min_window': 15}), 44/15.)
Exemple #7
0
 def test_multiple_periods(self):
     self.assertAlmostEqual(
         consumption([
             _tx('stockonhand', 25, 15),
             _tx('consumption', 4, 12),
             _tx('receipts', 12, 12),
             _tx('stockonhand', 33, 12),
             _tx('consumption', 30, 7),
             _tx('receipts', 3, 7),
             _tx('stockonhand', 6, 7),
             _tx('consumption', 10, 0),
             _tx('receipts', 14, 0),
             _tx('stockonhand', 10, 0),
         ], 60), 44 / 15.)
Exemple #8
0
 def test_one_period(self):
     self.assertAlmostEqual(
         consumption([
             _tx('stockonhand', 25, 5),
             _tx('stockonhand', 25, 0),
         ], 60), 0.)
     self.assertAlmostEqual(
         consumption([
             _tx('stockonhand', 25, 5),
             _tx('receipts', 10, 0),
             _tx('stockonhand', 35, 0),
         ], 60), 0.)
     # 15 / 5 = 3
     self.assertAlmostEqual(
         consumption([
             _tx('stockonhand', 25, 5),
             _tx('consumption', 15, 0),
             _tx('stockonhand', 10, 0),
         ], 60), 3.)
     # 27 / 5 = 5.4
     self.assertAlmostEqual(
         consumption([
             _tx('stockonhand', 25, 5),
             _tx('receipts', 12, 3),
             _tx('consumption', 27, 0),
             _tx('stockonhand', 10, 0),
         ], 60), 5.4)
     # (6 + 21) / 5 = 5.4
     self.assertAlmostEqual(
         consumption([
             _tx('stockonhand', 25, 5),
             _tx('consumption', 6, 3),
             _tx('receipts', 12, 3),
             _tx('consumption', 21, 0),
             _tx('stockonhand', 10, 0),
         ], 60), 5.4)
    def test_one_period_with_receipts(self):
        consumption_with_receipts = partial(consumption, params={'exclude_invalid_periods': True})
        self.assertIsNone(
            consumption_with_receipts([
                _tx('stockonhand', 25, 5),
                _tx('receipts', 10, 0),
                _tx('stockonhand', 40, 0)
            ], 60))

        self.assertIsNotNone(
            consumption([
                _tx('stockonhand', 25, 5),
                _tx('receipts', 10, 0),
                _tx('stockonhand', 40, 0)
            ], 60)
        )
Exemple #10
0
    def test_one_period_with_receipts(self):
        consumption_with_receipts = partial(consumption, params={'exclude_invalid_periods': True})
        self.assertIsNone(
            consumption_with_receipts([
                _tx('stockonhand', 25, 5),
                _tx('receipts', 10, 0),
                _tx('stockonhand', 40, 0)
            ], 60))

        self.assertIsNotNone(
            consumption([
                _tx('stockonhand', 25, 5),
                _tx('receipts', 10, 0),
                _tx('stockonhand', 40, 0)
            ], 60)
        )
    def test_multiple_periods(self):
        self.assertAlmostEqual(consumption([
                _tx('stockonhand', 25, 15),

                _tx('consumption', 4, 12),
                _tx('receipts', 12, 12),
                _tx('stockonhand', 33, 12),

                _tx('consumption', 30, 7),
                _tx('receipts', 3, 7),
                _tx('stockonhand', 6, 7),

                _tx('consumption', 10, 0),
                _tx('receipts', 14, 0),
                _tx('stockonhand', 10, 0),
            ], 60), 44/15.)
    def test_excluded_period(self):
        self.assertAlmostEqual(consumption([
                _tx('stockonhand', 25, 15),

                _tx('consumption', 4, 12),
                _tx('receipts', 12, 12),
                _tx('stockonhand', 33, 12),

                _tx('consumption', 36, 7),
                _tx('receipts', 3, 7),
                _tx('stockout', 0, 7), # stockout

                _tx('consumption', 5, 5),
                _tx('receipts', 25, 5), # restock, consumption days 12-5 ignored
                _tx('stockonhand', 20, 5),

                _tx('consumption', 10, 0),
                _tx('receipts', 14, 0),
                _tx('stockonhand', 24, 0),
            ], 60), 1.75)
Exemple #13
0
    def test_excluded_period(self):
        self.assertAlmostEqual(consumption([
                _tx('stockonhand', 25, 15),

                _tx('consumption', 4, 12),
                _tx('receipts', 12, 12),
                _tx('stockonhand', 33, 12),

                _tx('consumption', 36, 7),
                _tx('receipts', 3, 7),
                _tx('stockout', 0, 7), # stockout

                _tx('consumption', 5, 5),
                _tx('receipts', 25, 5), # restock, consumption days 12-5 ignored
                _tx('stockonhand', 20, 5),

                _tx('consumption', 10, 0),
                _tx('receipts', 14, 0),
                _tx('stockonhand', 24, 0),
            ], 60), 1.75)