From 51634c6d5433023c3d4b5bc2316dd760303723fb Mon Sep 17 00:00:00 2001
From: David Schaefer <david.schaefer@ufz.de>
Date: Wed, 25 Nov 2020 23:10:07 +0100
Subject: [PATCH] flagger: translation scheme positional->dmp

---
 saqc/flagger/dmpflagger.py        |  4 ++++
 saqc/flagger/positionalflagger.py | 20 +++++++++++++++++++-
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/saqc/flagger/dmpflagger.py b/saqc/flagger/dmpflagger.py
index 10c83de4a..884679e7d 100644
--- a/saqc/flagger/dmpflagger.py
+++ b/saqc/flagger/dmpflagger.py
@@ -245,3 +245,7 @@ class DmpFlagger(CategoricalFlagger):
         new._causes = causes
         new._comments = comments
         return new
+
+    @property
+    def SUSPICIOUS(self):
+        return FLAGS[-2]
diff --git a/saqc/flagger/positionalflagger.py b/saqc/flagger/positionalflagger.py
index c3a72c708..aa730dfb4 100644
--- a/saqc/flagger/positionalflagger.py
+++ b/saqc/flagger/positionalflagger.py
@@ -1,13 +1,15 @@
 #! /usr/bin/env python
 # -*- coding: utf-8 -*-
 
+import json
 from copy import deepcopy
 
 import pandas as pd
 
 from dios import DictOfSeries
 from saqc.flagger.baseflagger import BaseFlagger, COMPARATOR_MAP
-from saqc.lib.tools import assertScalar, toSequence
+from saqc.flagger.dmpflagger import DmpFlagger
+from saqc.lib.tools import toSequence
 
 
 FLAGS = ("-1", "0", "1", "2")
@@ -105,6 +107,22 @@ class PositionalFlagger(BaseFlagger):
             data[col_name] = col
         return DictOfSeries(data)
 
+    def toDmpFlagger(self):
+        self = PositionalFlagger().initFlags(flags=self._flags)
+        dmp_flagger = DmpFlagger().initFlags(data=self._flags)
+        flag_map = {
+            self.BAD: dmp_flagger.BAD,
+            self.SUSPICIOUS: dmp_flagger.SUSPICIOUS,
+            self.GOOD: dmp_flagger.GOOD,
+        }
+        for pos_flag, dmp_flag in flag_map.items():
+            loc = self.isFlagged(flag=pos_flag, comparator="==")
+            dmp_flagger._flags.aloc[loc] = dmp_flag
+
+        dmp_flagger._comments.loc[:] = self._flags.to_df().applymap(lambda v: json.dumps({"flag": v}))
+        dmp_flagger._causes.loc[:] = "OTHER"
+        return dmp_flagger
+
     @property
     def UNFLAGGED(self):
         return FLAGS[0]
-- 
GitLab