summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2015-07-11 19:30:52 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2015-07-11 19:30:52 -0700
commit0d09071f141cf1a7d48493c66e329f00dbfe5e91 (patch)
treed810b02b0dd96e4f180b67044ae68fc397624b3e
parentb949436f4c99157397e16b23c3693fb5a99bd557 (diff)
downloadabc-0d09071f141cf1a7d48493c66e329f00dbfe5e91.tar.gz
abc-0d09071f141cf1a7d48493c66e329f00dbfe5e91.tar.bz2
abc-0d09071f141cf1a7d48493c66e329f00dbfe5e91.zip
Adding new Python API 'is_func_iso2'.
-rw-r--r--src/base/abc/abc.h2
-rw-r--r--src/base/abc/abcDfs.c22
-rw-r--r--src/base/pla/plaFxch.c4
-rw-r--r--src/base/pla/plaHash.c2
-rw-r--r--src/base/pla/plaSimple.c4
-rw-r--r--src/python/pyabc.i16
6 files changed, 37 insertions, 13 deletions
diff --git a/src/base/abc/abc.h b/src/base/abc/abc.h
index ae7c02a5..7f516d79 100644
--- a/src/base/abc/abc.h
+++ b/src/base/abc/abc.h
@@ -626,7 +626,7 @@ extern ABC_DLL Vec_Ptr_t * Abc_NtkDfsWithBoxes( Abc_Ntk_t * pNtk );
extern ABC_DLL Vec_Ptr_t * Abc_NtkSupport( Abc_Ntk_t * pNtk );
extern ABC_DLL Vec_Ptr_t * Abc_NtkNodeSupport( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNodes, int nNodes );
extern ABC_DLL Vec_Int_t * Abc_NtkNodeSupportInt( Abc_Ntk_t * pNtk, int iCo );
-extern ABC_DLL int Abc_NtkFunctionalIso( Abc_Ntk_t * pNtk, int iCo1, int iCo2 );
+extern ABC_DLL int Abc_NtkFunctionalIso( Abc_Ntk_t * pNtk, int iCo1, int iCo2, int fCommon );
extern ABC_DLL Vec_Ptr_t * Abc_AigDfs( Abc_Ntk_t * pNtk, int fCollectAll, int fCollectCos );
extern ABC_DLL Vec_Ptr_t * Abc_AigDfsMap( Abc_Ntk_t * pNtk );
extern ABC_DLL Vec_Vec_t * Abc_DfsLevelized( Abc_Obj_t * pNode, int fTfi );
diff --git a/src/base/abc/abcDfs.c b/src/base/abc/abcDfs.c
index 9bca1e64..bb960ddc 100644
--- a/src/base/abc/abcDfs.c
+++ b/src/base/abc/abcDfs.c
@@ -980,7 +980,7 @@ int Abc_NtkFunctionalIsoGia_rec( Gia_Man_t * pNew, Abc_Obj_t * pNode )
iLit1 = Abc_LitNotCond( iLit1, Abc_ObjFaninC1(pNode) );
return (pNode->iTemp = Gia_ManHashAnd(pNew, iLit0, iLit1));
}
-Gia_Man_t * Abc_NtkFunctionalIsoGia( Abc_Ntk_t * pNtk, int iCo1, int iCo2 )
+Gia_Man_t * Abc_NtkFunctionalIsoGia( Abc_Ntk_t * pNtk, int iCo1, int iCo2, int fCommon )
{
Gia_Man_t * pNew = NULL, * pTemp;
Vec_Int_t * vSupp1 = Abc_NtkNodeSupportInt( pNtk, iCo1 );
@@ -993,6 +993,16 @@ Gia_Man_t * Abc_NtkFunctionalIsoGia( Abc_Ntk_t * pNtk, int iCo1, int iCo2 )
pNew->pName = Abc_UtilStrsav( pNtk->pName );
pNew->pSpec = Abc_UtilStrsav( pNtk->pSpec );
Gia_ManHashStart( pNew );
+ // put commom together
+ if ( fCommon )
+ {
+ Vec_Int_t * vCommon = Vec_IntAlloc( Vec_IntSize(vSupp1) );
+ Vec_IntTwoRemoveCommon( vSupp1, vSupp2, vCommon );
+ Vec_IntAppend( vSupp1, vCommon );
+ Vec_IntAppend( vSupp2, vCommon );
+ Vec_IntFree( vCommon );
+ assert( Vec_IntSize(vSupp1) == Vec_IntSize(vSupp2) );
+ }
// primary inputs
Abc_AigConst1(pNtk)->iTemp = 1;
Vec_IntForEachEntry( vSupp1, iCi, i )
@@ -1020,7 +1030,7 @@ Gia_Man_t * Abc_NtkFunctionalIsoGia( Abc_Ntk_t * pNtk, int iCo1, int iCo2 )
Vec_IntFree( vSupp2 );
return pNew;
}
-int Abc_NtkFunctionalIsoInt( Abc_Ntk_t * pNtk, int iCo1, int iCo2 )
+int Abc_NtkFunctionalIsoInt( Abc_Ntk_t * pNtk, int iCo1, int iCo2, int fCommon )
{
Gia_Man_t * pGia; int Value;
assert( Abc_NtkIsStrash(pNtk) );
@@ -1028,20 +1038,20 @@ int Abc_NtkFunctionalIsoInt( Abc_Ntk_t * pNtk, int iCo1, int iCo2 )
return 0;
if ( iCo2 < 0 || iCo2 >= Abc_NtkCoNum(pNtk) )
return 0;
- pGia = Abc_NtkFunctionalIsoGia( pNtk, iCo1, iCo2 );
+ pGia = Abc_NtkFunctionalIsoGia( pNtk, iCo1, iCo2, fCommon );
if ( pGia == NULL )
return 0;
Value = Cec_ManVerifySimple( pGia );
Gia_ManStop( pGia );
return (int)(Value == 1);
}
-int Abc_NtkFunctionalIso( Abc_Ntk_t * pNtk, int iCo1, int iCo2 )
+int Abc_NtkFunctionalIso( Abc_Ntk_t * pNtk, int iCo1, int iCo2, int fCommon )
{
Abc_Ntk_t * pNtkNew; int Result;
if ( Abc_NtkIsStrash(pNtk) )
- return Abc_NtkFunctionalIsoInt( pNtk, iCo1, iCo2 );
+ return Abc_NtkFunctionalIsoInt( pNtk, iCo1, iCo2, fCommon );
pNtkNew = Abc_NtkStrash( pNtk, 0, 0, 0 );
- Result = Abc_NtkFunctionalIsoInt( pNtkNew, iCo1, iCo2 );
+ Result = Abc_NtkFunctionalIsoInt( pNtkNew, iCo1, iCo2, fCommon );
Abc_NtkDelete( pNtkNew );
return Result;
}
diff --git a/src/base/pla/plaFxch.c b/src/base/pla/plaFxch.c
index fd06b9a5..6534edbb 100644
--- a/src/base/pla/plaFxch.c
+++ b/src/base/pla/plaFxch.c
@@ -99,7 +99,7 @@ void Fxch_ManWriteBlif( char * pFileName, Vec_Wec_t * vCubes, Vec_Wrd_t * vDivs
printf( "Cannot open file \"%s\" for writing.\n", pFileName );
else
{
- char * pLits = "-01?";
+ //char * pLits = "-01?";
Vec_Str_t * vStr;
Vec_Int_t * vCube;
int i, k, Lit;
@@ -617,7 +617,7 @@ void Fxch_ManCreateDivisors( Fxch_Man_t * p )
void Fxch_ManUpdate( Fxch_Man_t * p, int iDiv )
{
Vec_Int_t * vCube1, * vCube2, * vLitP, * vLitN;
- int nLitsNew = p->nLits - (int)Vec_FltEntry(&p->vWeights, iDiv);
+ //int nLitsNew = p->nLits - (int)Vec_FltEntry(&p->vWeights, iDiv);
int i, Lit0, Lit1, hCube1, hCube2, iVarNew;
//float Diff = Vec_FltEntry(&p->vWeights, iDiv) - (float)((int)Vec_FltEntry(&p->vWeights, iDiv));
//assert( Diff > 0.0 && Diff < 1.0 );
diff --git a/src/base/pla/plaHash.c b/src/base/pla/plaHash.c
index b51ba4c1..33f2fba3 100644
--- a/src/base/pla/plaHash.c
+++ b/src/base/pla/plaHash.c
@@ -272,7 +272,7 @@ Vec_Int_t * Pla_ManComputeDistance1Int( Pla_Man_t * p )
Vec_Int_t * vCounts = Vec_IntStart( Vec_WecSize(&p->vCubeLits) );
Vec_Int_t * vEntries = Vec_IntAlloc( p->nIns );
int nBits = Abc_Base2Log( Vec_WecSizeSize(&p->vCubeLits) ) + 2;
- int v, i, k, Count = 0;
+ int v, i, k;//, Count = 0;
int iCube1, iCube2, iVar1, iVar2;
assert( nBits <= 26 );
pTab = Tab_ManAlloc( nBits, p );
diff --git a/src/base/pla/plaSimple.c b/src/base/pla/plaSimple.c
index 8fea5c1f..80254ba1 100644
--- a/src/base/pla/plaSimple.c
+++ b/src/base/pla/plaSimple.c
@@ -50,7 +50,7 @@ void Pla_ManDumpPla( Pla_Man_t * p, char * pFileName )
printf( "Cannot open file \"%s\" for writing.\n", pFileName );
else
{
- char * pLits = "-01?";
+ //char * pLits = "-01?";
Vec_Str_t * vStr;
Vec_Int_t * vCube;
int i, k, Lit;
@@ -89,7 +89,7 @@ void Pla_ManDumpBlif( Pla_Man_t * p, char * pFileName )
printf( "Cannot open file \"%s\" for writing.\n", pFileName );
else
{
- char * pLits = "-01?";
+ //char * pLits = "-01?";
Vec_Str_t * vStr;
Vec_Int_t * vCube;
int i, k, Lit, Div;
diff --git a/src/python/pyabc.i b/src/python/pyabc.i
index e3bad4bc..0e7b9312 100644
--- a/src/python/pyabc.i
+++ b/src/python/pyabc.i
@@ -394,7 +394,20 @@ int is_func_iso( int iCo1, int iCo2 )
return 0;
}
- return Abc_NtkFunctionalIso( pNtk, iCo1, iCo2 );
+ return Abc_NtkFunctionalIso( pNtk, iCo1, iCo2, 0 );
+}
+
+int is_func_iso2( int iCo1, int iCo2 )
+{
+ Abc_Frame_t* pAbc = Abc_FrameGetGlobalFrame();
+ Abc_Ntk_t * pNtk = Abc_FrameReadNtk(pAbc);
+
+ if ( !pNtk )
+ {
+ return 0;
+ }
+
+ return Abc_NtkFunctionalIso( pNtk, iCo1, iCo2, 1 );
}
void _pyabc_array_clear()
@@ -755,6 +768,7 @@ int _cex_get_frame(Abc_Cex_t* pCex);
PyObject* eq_classes();
PyObject* co_supp(int iCo);
int is_func_iso(int iCo1, int iCo2);
+int is_func_iso2(int iCo1, int iCo2);
void _pyabc_array_clear();
void _pyabc_array_push(int i);