human
2. Define the python wrapper
In this demo, we use the following python wrapper.

Can you provide a the Python code you requested?
assistant
#Here is the Python code you requested.
from typing import List

class MONAAResult:
    def __init__(self, raw_result:List[str]):
      self.lowerConstraint = raw_result[0].replace('t', 't, t')
      self.upperConstraint = raw_result[1].replace("t'", "t', t'")
      self.diffConstraint  = raw_result[2].replace("t' - t", "t'- t, t' - t")
    def __str__(self):
        return f'{self.lowerConstraint}, {self.upperConstraint}, {self.diffConstraint}'
    def __repr__(self):
        """
            This is not good. repr should return a valid python formula
        """
        return self.__str__()

import subprocess

def monaa(word:str = "", wordFile:str="", tre:str="", dot:str=""):
    if tre != "":
      if word != "":
        raw_result = subprocess.run(["monaa", "-e", tre], input=word, encoding='utf-8', stdout=subprocess.PIPE).stdout.strip().split('\n')
      elif wordFile != "":
        raw_result = subprocess.run(["monaa", "-e", tre, "-i", wordFile], encoding='utf-8', stdout=subprocess.PIPE).stdout.strip().split('\n')
      else:
        raise ValueError("Either word or wordFile must be given")
    elif dot != "":
      if word != "":
        raw_result = subprocess.run(["monaa", "-f", dot], input=word, encoding='utf-8', stdout=subprocess.PIPE).stdout.strip().split('\n')
      elif wordFile != "":
        raw_result = subprocess.run(["monaa", "-f", dot, "-i", wordFile], encoding='utf-8', stdout=subprocess.PIPE).stdout.strip().split('\n')
      else:
        raise ValueError("Either word or wordFile must be given")
    else:
      raise ValueError("Either tre or dot must be given")
    result = []
    for i in range(int(len(raw_result) / 4)):
      result.append(MONAAResult(raw_result[i*4:(i+1)*4]))
    return result                                          

import numpy as np
import matplotlib.pyplot as plt
import re

def plotConstr(constr:List[MONAAResult], lower, upper, cmap='Greys'):
    clockConstr = []
    d = np.linspace(lower, upper, 300)
    x,y = np.meshgrid(d,d)
    for singleZone in constr:
      tmpConstr = []
      for constrStr in...