From 49a543273cbc394ec575089030498a0d0b75454b Mon Sep 17 00:00:00 2001 From: vtexier <vit@free.fr> Date: Wed, 22 Apr 2020 10:15:41 +0200 Subject: [PATCH] [fix] #807 fix zerosum referentials using "last" fields in blockchain --- src/sakia/money/quant_zerosum.py | 11 +++++----- src/sakia/money/relative_zerosum.py | 32 ++++++++++++----------------- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/sakia/money/quant_zerosum.py b/src/sakia/money/quant_zerosum.py index 26cd6bb4..f840c46a 100644 --- a/src/sakia/money/quant_zerosum.py +++ b/src/sakia/money/quant_zerosum.py @@ -11,14 +11,14 @@ class QuantitativeZSum(BaseReferential): _UNITS_STR_ = QT_TRANSLATE_NOOP("QuantitativeZSum", "Q0") _FORMULA_STR_ = QT_TRANSLATE_NOOP( "QuantitativeZSum", - """Q0 = Q - ( M(t-1) / N ) + """Q0 = Q - ( M(t) / N(t) ) <br > <table> <tr><td>Q0</td><td>Quantitative value at zero sum</td></tr> <tr><td>Q</td><td>Quantitative value</td></tr> <tr><td>M</td><td>Monetary mass</td></tr> <tr><td>N</td><td>Members count</td></tr> - <tr><td>t-1</td><td>Previous UD time</td></tr> + <tr><td>t</td><td>Last UD time</td></tr> </table>""", ) _DESCRIPTION_STR_ = QT_TRANSLATE_NOOP( @@ -68,12 +68,11 @@ class QuantitativeZSum(BaseReferential): """ Return quantitative value of amount minus the average value - Z0 = Q - ( M(t-1) / N(t) ) + Z0 = Q - ( M(t) / N(t) ) Z0 = Quantitative value at zero sum Q = Quantitative value t = last UD block time - t-1 = penultimate UD block time M = Monetary mass N = Members count @@ -84,7 +83,7 @@ class QuantitativeZSum(BaseReferential): last_members_count = self._blockchain_processor.last_members_count( self.currency ) - monetary_mass = self._blockchain_processor.current_mass(self.currency) + monetary_mass = self._blockchain_processor.last_mass(self.currency) if last_members_count != 0: average = int(monetary_mass / last_members_count) else: @@ -112,7 +111,7 @@ class QuantitativeZSum(BaseReferential): last_members_count = self._blockchain_processor.last_members_count( self.currency ) - monetary_mass = self._blockchain_processor.current_mass(self.currency) + monetary_mass = self._blockchain_processor.last_mass(self.currency) if last_members_count != 0: average = int(monetary_mass / last_members_count) else: diff --git a/src/sakia/money/relative_zerosum.py b/src/sakia/money/relative_zerosum.py index db171f87..4af325ff 100644 --- a/src/sakia/money/relative_zerosum.py +++ b/src/sakia/money/relative_zerosum.py @@ -11,7 +11,7 @@ class RelativeZSum(BaseReferential): _UNITS_STR_ = QT_TRANSLATE_NOOP("RelativeZSum", "R0 UD") _FORMULA_STR_ = QT_TRANSLATE_NOOP( "RelativeZSum", - """R0 = (Q / UD(t)) - (( M(t-1) / N ) / UD(t)) + """R0 = (Q / UD(t)) - (( M(t) / N(t) ) / UD(t)) <br > <table> <tr><td>R0</td><td>Relative value at zero sum</td></tr> @@ -19,7 +19,6 @@ class RelativeZSum(BaseReferential): <tr><td>M</td><td>Monetary mass</td></tr> <tr><td>N</td><td>Members count</td></tr> <tr><td>t</td><td>Last UD time</td></tr> - <tr><td>t-1</td><td>Penultimate UD time</td></tr> </table>""", ) _DESCRIPTION_STR_ = QT_TRANSLATE_NOOP( @@ -65,24 +64,21 @@ class RelativeZSum(BaseReferential): """ Return relative value of amount minus the average value + zsum value = (value / UD(t)) - (( M(t) / N(t) ) / UD(t)) + t = last UD block - t-1 = penultimate UD block M = Monetary mass N = Members count - zsum value = (value / UD(t)) - (( M(t-1) / N(t) ) / UD(t)) - :param int amount: Value :param sakia.core.community.Community community: Community instance :return: float """ - dividend, base = self._blockchain_processor.previous_ud(self.currency) - previous_monetary_mass = self._blockchain_processor.previous_monetary_mass( - self.currency - ) - members_count = self._blockchain_processor.current_members_count(self.currency) - if previous_monetary_mass and members_count > 0: - median = previous_monetary_mass / members_count + dividend, base = self._blockchain_processor.last_ud(self.currency) + monetary_mass = self._blockchain_processor.last_mass(self.currency) + members_count = self._blockchain_processor.last_members_count(self.currency) + if monetary_mass and members_count > 0: + median = monetary_mass / members_count relative_value = self.amount / float(dividend * 10 ** base) relative_median = median / float(dividend * 10 ** base) else: @@ -100,13 +96,11 @@ class RelativeZSum(BaseReferential): :param value: Value in referential units :return: """ - dividend, base = self._blockchain_processor.previous_ud(self.currency) - previous_monetary_mass = self._blockchain_processor.previous_monetary_mass( - self.currency - ) - members_count = self._blockchain_processor.current_members_count(self.currency) - if previous_monetary_mass and members_count > 0: - median = previous_monetary_mass / members_count + dividend, base = self._blockchain_processor.last_ud(self.currency) + monetary_mass = self._blockchain_processor.last_mass(self.currency) + members_count = self._blockchain_processor.last_members_count(self.currency) + if monetary_mass and members_count > 0: + median = monetary_mass / members_count relative_median = median / float(dividend * 10 ** base) else: relative_median = 0 -- GitLab