From ebff226211da8a0f7ff987bc6c7f4c77ae4c701b Mon Sep 17 00:00:00 2001
From: alexC-nonsense4k <81558325+alexC-nonsense4k@users.noreply.github.com>
Date: Sat, 3 Feb 2024 02:46:36 +0800
Subject: [PATCH 1/2] Update mpmatching_utils.py

    2023/02/03

    the key "target" may not be in the predecessor
    check if key in the predecessor or not before the "get" occurs
---
 pytrack/matching/mpmatching_utils.py | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/pytrack/matching/mpmatching_utils.py b/pytrack/matching/mpmatching_utils.py
index 74e8abf..973899f 100644
--- a/pytrack/matching/mpmatching_utils.py
+++ b/pytrack/matching/mpmatching_utils.py
@@ -187,10 +187,22 @@ def get_predecessor(target, predecessor):
     pred_elab: dict
         Dictionary containing the predecessors of the best nodes of a decoded Trellis DAG.
     """
+    
+    """
+    2023/02/03
+    
+    the key "target" may not be in the predecessor
+    check if key in the predecessor or not before the "get" occurs  
+    """
+    
     pred_elab = {}
+    if target not in predecessor:
+        return {}
     pred = predecessor[target]
     while pred != "start":
         pred_elab[target.split("_")[0]] = pred
         target = pred
+        if target not in predecessor:
+            return {}
         pred = predecessor[target]
     return pred_elab

From 54a6df1cced55db48d0fa11af9ae62a57b9b165a Mon Sep 17 00:00:00 2001
From: alexC-nonsense4k <81558325+alexC-nonsense4k@users.noreply.github.com>
Date: Sat, 3 Feb 2024 02:48:09 +0800
Subject: [PATCH 2/2] Update mpmatching.py

Decoupling get_predecessor and viterbi_search
---
 pytrack/matching/mpmatching.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/pytrack/matching/mpmatching.py b/pytrack/matching/mpmatching.py
index 9de529e..d306550 100644
--- a/pytrack/matching/mpmatching.py
+++ b/pytrack/matching/mpmatching.py
@@ -79,6 +79,8 @@ def viterbi_search(G, trellis, start="start", target="target", beta=mpmatching_u
             except Exception as error:
                 print(error)
 
-    predecessor = mpmatching_utils.get_predecessor("target", predecessor)
+    # get_predecessor and viterbi_search should seperate. Decoupling!
+                     
+    #predecessor = mpmatching_utils.get_predecessor("target", predecessor)
 
     return joint_prob[target], predecessor