Commit 0d09071f by Alan Mishchenko

Adding new Python API 'is_func_iso2'.

parent b949436f
...@@ -626,7 +626,7 @@ extern ABC_DLL Vec_Ptr_t * Abc_NtkDfsWithBoxes( Abc_Ntk_t * pNtk ); ...@@ -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_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_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 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_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_Ptr_t * Abc_AigDfsMap( Abc_Ntk_t * pNtk );
extern ABC_DLL Vec_Vec_t * Abc_DfsLevelized( Abc_Obj_t * pNode, int fTfi ); extern ABC_DLL Vec_Vec_t * Abc_DfsLevelized( Abc_Obj_t * pNode, int fTfi );
......
...@@ -980,7 +980,7 @@ int Abc_NtkFunctionalIsoGia_rec( Gia_Man_t * pNew, Abc_Obj_t * pNode ) ...@@ -980,7 +980,7 @@ int Abc_NtkFunctionalIsoGia_rec( Gia_Man_t * pNew, Abc_Obj_t * pNode )
iLit1 = Abc_LitNotCond( iLit1, Abc_ObjFaninC1(pNode) ); iLit1 = Abc_LitNotCond( iLit1, Abc_ObjFaninC1(pNode) );
return (pNode->iTemp = Gia_ManHashAnd(pNew, iLit0, iLit1)); 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; Gia_Man_t * pNew = NULL, * pTemp;
Vec_Int_t * vSupp1 = Abc_NtkNodeSupportInt( pNtk, iCo1 ); 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 ) ...@@ -993,6 +993,16 @@ Gia_Man_t * Abc_NtkFunctionalIsoGia( Abc_Ntk_t * pNtk, int iCo1, int iCo2 )
pNew->pName = Abc_UtilStrsav( pNtk->pName ); pNew->pName = Abc_UtilStrsav( pNtk->pName );
pNew->pSpec = Abc_UtilStrsav( pNtk->pSpec ); pNew->pSpec = Abc_UtilStrsav( pNtk->pSpec );
Gia_ManHashStart( pNew ); 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 // primary inputs
Abc_AigConst1(pNtk)->iTemp = 1; Abc_AigConst1(pNtk)->iTemp = 1;
Vec_IntForEachEntry( vSupp1, iCi, i ) Vec_IntForEachEntry( vSupp1, iCi, i )
...@@ -1020,7 +1030,7 @@ Gia_Man_t * Abc_NtkFunctionalIsoGia( Abc_Ntk_t * pNtk, int iCo1, int iCo2 ) ...@@ -1020,7 +1030,7 @@ Gia_Man_t * Abc_NtkFunctionalIsoGia( Abc_Ntk_t * pNtk, int iCo1, int iCo2 )
Vec_IntFree( vSupp2 ); Vec_IntFree( vSupp2 );
return pNew; 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; Gia_Man_t * pGia; int Value;
assert( Abc_NtkIsStrash(pNtk) ); assert( Abc_NtkIsStrash(pNtk) );
...@@ -1028,20 +1038,20 @@ int Abc_NtkFunctionalIsoInt( Abc_Ntk_t * pNtk, int iCo1, int iCo2 ) ...@@ -1028,20 +1038,20 @@ int Abc_NtkFunctionalIsoInt( Abc_Ntk_t * pNtk, int iCo1, int iCo2 )
return 0; return 0;
if ( iCo2 < 0 || iCo2 >= Abc_NtkCoNum(pNtk) ) if ( iCo2 < 0 || iCo2 >= Abc_NtkCoNum(pNtk) )
return 0; return 0;
pGia = Abc_NtkFunctionalIsoGia( pNtk, iCo1, iCo2 ); pGia = Abc_NtkFunctionalIsoGia( pNtk, iCo1, iCo2, fCommon );
if ( pGia == NULL ) if ( pGia == NULL )
return 0; return 0;
Value = Cec_ManVerifySimple( pGia ); Value = Cec_ManVerifySimple( pGia );
Gia_ManStop( pGia ); Gia_ManStop( pGia );
return (int)(Value == 1); 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; Abc_Ntk_t * pNtkNew; int Result;
if ( Abc_NtkIsStrash(pNtk) ) if ( Abc_NtkIsStrash(pNtk) )
return Abc_NtkFunctionalIsoInt( pNtk, iCo1, iCo2 ); return Abc_NtkFunctionalIsoInt( pNtk, iCo1, iCo2, fCommon );
pNtkNew = Abc_NtkStrash( pNtk, 0, 0, 0 ); pNtkNew = Abc_NtkStrash( pNtk, 0, 0, 0 );
Result = Abc_NtkFunctionalIsoInt( pNtkNew, iCo1, iCo2 ); Result = Abc_NtkFunctionalIsoInt( pNtkNew, iCo1, iCo2, fCommon );
Abc_NtkDelete( pNtkNew ); Abc_NtkDelete( pNtkNew );
return Result; return Result;
} }
......
...@@ -99,7 +99,7 @@ void Fxch_ManWriteBlif( char * pFileName, Vec_Wec_t * vCubes, Vec_Wrd_t * vDivs ...@@ -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 ); printf( "Cannot open file \"%s\" for writing.\n", pFileName );
else else
{ {
char * pLits = "-01?"; //char * pLits = "-01?";
Vec_Str_t * vStr; Vec_Str_t * vStr;
Vec_Int_t * vCube; Vec_Int_t * vCube;
int i, k, Lit; int i, k, Lit;
...@@ -617,7 +617,7 @@ void Fxch_ManCreateDivisors( Fxch_Man_t * p ) ...@@ -617,7 +617,7 @@ void Fxch_ManCreateDivisors( Fxch_Man_t * p )
void Fxch_ManUpdate( Fxch_Man_t * p, int iDiv ) void Fxch_ManUpdate( Fxch_Man_t * p, int iDiv )
{ {
Vec_Int_t * vCube1, * vCube2, * vLitP, * vLitN; 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; int i, Lit0, Lit1, hCube1, hCube2, iVarNew;
//float Diff = Vec_FltEntry(&p->vWeights, iDiv) - (float)((int)Vec_FltEntry(&p->vWeights, iDiv)); //float Diff = Vec_FltEntry(&p->vWeights, iDiv) - (float)((int)Vec_FltEntry(&p->vWeights, iDiv));
//assert( Diff > 0.0 && Diff < 1.0 ); //assert( Diff > 0.0 && Diff < 1.0 );
......
...@@ -272,7 +272,7 @@ Vec_Int_t * Pla_ManComputeDistance1Int( Pla_Man_t * p ) ...@@ -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 * vCounts = Vec_IntStart( Vec_WecSize(&p->vCubeLits) );
Vec_Int_t * vEntries = Vec_IntAlloc( p->nIns ); Vec_Int_t * vEntries = Vec_IntAlloc( p->nIns );
int nBits = Abc_Base2Log( Vec_WecSizeSize(&p->vCubeLits) ) + 2; 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; int iCube1, iCube2, iVar1, iVar2;
assert( nBits <= 26 ); assert( nBits <= 26 );
pTab = Tab_ManAlloc( nBits, p ); pTab = Tab_ManAlloc( nBits, p );
......
...@@ -50,7 +50,7 @@ void Pla_ManDumpPla( Pla_Man_t * p, char * pFileName ) ...@@ -50,7 +50,7 @@ void Pla_ManDumpPla( Pla_Man_t * p, char * pFileName )
printf( "Cannot open file \"%s\" for writing.\n", pFileName ); printf( "Cannot open file \"%s\" for writing.\n", pFileName );
else else
{ {
char * pLits = "-01?"; //char * pLits = "-01?";
Vec_Str_t * vStr; Vec_Str_t * vStr;
Vec_Int_t * vCube; Vec_Int_t * vCube;
int i, k, Lit; int i, k, Lit;
...@@ -89,7 +89,7 @@ void Pla_ManDumpBlif( Pla_Man_t * p, char * pFileName ) ...@@ -89,7 +89,7 @@ void Pla_ManDumpBlif( Pla_Man_t * p, char * pFileName )
printf( "Cannot open file \"%s\" for writing.\n", pFileName ); printf( "Cannot open file \"%s\" for writing.\n", pFileName );
else else
{ {
char * pLits = "-01?"; //char * pLits = "-01?";
Vec_Str_t * vStr; Vec_Str_t * vStr;
Vec_Int_t * vCube; Vec_Int_t * vCube;
int i, k, Lit, Div; int i, k, Lit, Div;
......
...@@ -394,7 +394,20 @@ int is_func_iso( int iCo1, int iCo2 ) ...@@ -394,7 +394,20 @@ int is_func_iso( int iCo1, int iCo2 )
return 0; 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() void _pyabc_array_clear()
...@@ -755,6 +768,7 @@ int _cex_get_frame(Abc_Cex_t* pCex); ...@@ -755,6 +768,7 @@ int _cex_get_frame(Abc_Cex_t* pCex);
PyObject* eq_classes(); PyObject* eq_classes();
PyObject* co_supp(int iCo); PyObject* co_supp(int iCo);
int is_func_iso(int iCo1, int iCo2); int is_func_iso(int iCo1, int iCo2);
int is_func_iso2(int iCo1, int iCo2);
void _pyabc_array_clear(); void _pyabc_array_clear();
void _pyabc_array_push(int i); void _pyabc_array_push(int i);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment