import os
import argparse
import time
import shutil
import sys
from math import sqrt
sys.path.append('../Clustering/src')
sys.path.append('../Gridding/src')
sys.path.append('../Grouping/src')
sys.path.append('../FormatTranslators/src')


from clustering import Clustering
from gridding import GriddingLefDefInterface
from grouping import Grouping


setup_file = "setup.tcl"
design = "ariane"
macro_lefs = ["./lefs/fakeram45_256x16.lef"]
openroad_exe = "./openroad"  # You need to specify your own openroad exe


##############################################
### Call Gridding Function
##############################################
gridding_src_dir = '../Gridding/src'
tolerance = 0.05
halo_width = 0.05
gridding = GriddingLefDefInterface(gridding_src_dir, design, setup_file, tolerance, halo_width, openroad_exe)
num_rows = gridding.GetNumRows()
num_cols = gridding.GetNumCols()

##############################################
### Call Grouping Function
##############################################
grouping_src_dir = '../Grouping/src'
grouping_rpt_dir = 'grouping_rpt'
K_in = 1
K_out = 1
global_net_threshold = 300
grouping = Grouping(design, num_rows, num_cols, K_in, K_out, setup_file, global_net_threshold, grouping_src_dir, openroad_exe)

# clean the rpt_dir
if not os.path.exists(grouping_rpt_dir):
    os.mkdir(grouping_rpt_dir)

cmd = "mv " + design + ".fix " + grouping_rpt_dir
os.system(cmd)

fixed_file = grouping_rpt_dir + "/" + design + ".fix"

##############################################
### Call Clustering Function
##############################################
clustering_src_dir = '../Clustering/src'
Nparts = 500
clustering = Clustering(design, clustering_src_dir, fixed_file, num_cols,
                        num_rows,  global_net_threshold, Nparts, setup_file, openroad_exe)