# -*- Mode:Python -*-

import Hurricane
from   Hurricane import DbU
from   Hurricane import Layer
from   Hurricane import BasicLayer
import CRL
from   CRL       import Environment
from   CRL       import AllianceFramework
from   CRL       import RoutingGauge
from   CRL       import RoutingLayerGauge
from   CRL       import CellGauge


def Alliance ( db ):
    print '\n'
    print '==========================================================='
    print 'Checking DbU.'

    print 'DbU.fromLamdba(5)   :', DbU.fromLambda(5)
    print 'DbU.toLamdba(12000) :', DbU.toLambda(12000)

    print '==========================================================='
    print 'Checking LayerMask.'

    mask0 = Layer.Mask(0b000101)
    mask1 = Layer.Mask(0b001110)
    mask3 = mask0 & mask1
    mask4 = mask0 | mask1
    print 'mask0                 :', mask0
    print 'mask1                 :', mask1
    print 'mask0 & mask1         :', mask3
    print 'mask0 | mask1         :', mask4
    print 'mask0.containts(mask1):', mask0.contains(mask1)

    print '==========================================================='
    print 'Checking DataBase.'

    db2 = db.getTechnology().getDataBase()
    if db == db2: print "OK DataBase is unique."
    else:         print "KO DATABASE IS DUPLICATED!"

    print '==========================================================='
    print "Checking layers."

    technology = db.getTechnology()
    rlayer     = technology.getLayer('METAL2')
    print "METAL2"
    print "    Minimal size    :", DbU.toLambda(rlayer.getMinimalSize())
    print "    Minimal spacing :", DbU.toLambda(rlayer.getMinimalSpacing())
    print "    Pitch           :", DbU.toLambda(rlayer.getPitch())
    print "    Cut above       :", rlayer.getCutAbove()
    print "    isSymbolic      :", rlayer.isSymbolic()

    dlayer = technology.getLayer('NDIF')
    print 'NDIF', dlayer.getMask()
    for blayer in dlayer.getBasicLayers():
       print '   ', blayer
    
    tlayer = technology.getLayer('NTRANS')
    print 'NTRANS', tlayer.getMask()
    for blayer in tlayer.getBasicLayers():
       print '   ', blayer
    
    clayer = technology.getLayer('CONT_DIF_N')
    print 'CONT_DIF_N', clayer.getMask()
    for blayer in clayer.getBasicLayers():
       print '   ', blayer

    print '==========================================================='
    print 'Checking RoutingGauge.'

    layer = technology.getLayer('METAL3')
    rg = AllianceFramework.get().getRoutingGauge()
    print 'rg.getName()             :', rg.getName()
    print 'rg.getDepth()            :', rg.getDepth()
    print 'rg.getLayerDepth(METAL3) :', rg.getLayerDepth(layer)
    print 'rg.getLayerGauge(METAL3) :', rg.getLayerGauge(layer)
    print 'rg.getLayerDirection(2)  :', rg.getLayerDirection(2)
    print 'rg.getRoutingLayer(2)    :', rg.getRoutingLayer(2)
    rlg = rg.getLayerGauge(2)
    print 'rlg.getLayer()           :', rlg.getLayer()
    print 'rlg.getBlockageLayer()   :', rlg.getBlockageLayer()
    print 'rlg.getDensity()         :', rlg.getDensity()
    print 'rlg.getType()            :', rlg.getType()
    print 'rlg.getPitch()           :', DbU.toLambda(rlg.getPitch())
    for rlg in rg.getLayerGauges():
        print 'rlg.getLayer()           : ', rlg.getLayer()
    
    #print technology.getName()
    #for layer in technology.getLayers():
    #   print 'TECHNO:', layer

    print '==========================================================='
    print '\n'

    return