コード例 #1
0
ファイル: bowfl.cpp プロジェクト: Accio/snap
void TBowFl::SaveCpdToLnDocTxt(const TStr& InCpdFNm, const TStr& OutLnDocFNm){
  TFOut FOut(OutLnDocFNm); FILE* fOut=FOut.GetFileId();
  PSIn CpDocSIn=TCpDoc::FFirstCpd(InCpdFNm); PCpDoc CpDoc; int Docs=0;
  printf("Saving '%s' to '%s' ...\n", InCpdFNm.CStr(), OutLnDocFNm.CStr());
  while (TCpDoc::FNextCpd(CpDocSIn, CpDoc)){
    Docs++; if (Docs%100==0){printf("%d Docs\r", Docs);}
    // get document-name
    TStr DocNm=CpDoc->GetDocNm();
    DocNm=TStr::GetFNmStr(DocNm);
    DocNm.ChangeChAll(' ', '_');
    // get document-categories
    TStrV CatNmV;
    for (int CatN=0; CatN<CpDoc->GetCats(); CatN++){
      CatNmV.Add(CpDoc->GetCatNm(CatN));}
    // get document-contents
    TChA DocChA=CpDoc->GetTxtStr();
    DocChA.ChangeCh('\r', ' ');
    DocChA.ChangeCh('\n', ' ');
    // save document
    fprintf(fOut, "%s", DocNm.CStr());
    for (int CatN=0; CatN<CatNmV.Len(); CatN++){
      fprintf(fOut, " !%s", CatNmV[CatN].CStr());}
    fprintf(fOut, " %s\n", DocChA.CStr());
  }
  printf("%d Docs\nDone.\n", Docs);
}
コード例 #2
0
ファイル: google.cpp プロジェクト: Accio/snap
void TRSet::SaveXml(const TStr& FNm){
  TFOut FOut(FNm); FILE* fOut=FOut.GetFileId();
  fprintf(fOut, "<RSet>\n");
  // fixed fields
  if (!GetUrlStr().Empty()){
    fprintf(fOut, "  <Url>%s</Url>\n", TXmlLx::GetXmlStrFromPlainStr(GetUrlStr()).CStr());}
  if (!GetNextUrlStr().Empty()){
    fprintf(fOut, "  <NextUrl>%s</NextUrl>\n", TXmlLx::GetXmlStrFromPlainStr(GetNextUrlStr()).CStr());}
  if (!GetQueryStr().Empty()){
    fprintf(fOut, "  <Query>%s</Query>\n", TXmlLx::GetXmlStrFromPlainStr(GetQueryStr()).CStr());}
  if (GetAllHits()!=-1){
    fprintf(fOut, "  <AllHits>%d</AllHits>\n", GetAllHits());}
  // hits
  fprintf(fOut, "  <Hits Size=\"%d\">\n", GetHits());
  for (int HitN=0; HitN<GetHits(); HitN++){
    TStr HitUrlStr; TStr HitTitleStr; TStr HitSrcNm; TStr HitCtxStr;
    GetHit(HitN, HitUrlStr, HitTitleStr, HitSrcNm, HitCtxStr);
    fprintf(fOut, "    <Hit Num=\"%d\">\n", 1+HitN);
    fprintf(fOut, "      <Url>%s</Url>\n", TXmlLx::GetXmlStrFromPlainStr(HitUrlStr).CStr());
    fprintf(fOut, "      <Title>%s</Title>\n", TXmlLx::GetXmlStrFromPlainStr(HitTitleStr).CStr());
    if (!HitSrcNm.Empty()){
      fprintf(fOut, "      <Source>%s</Source>\n", TXmlLx::GetXmlStrFromPlainStr(HitSrcNm).CStr());}
    fprintf(fOut, "      <Snippet>%s</Snippet>\n", TXmlLx::GetXmlStrFromPlainStr(HitCtxStr).CStr());
    fprintf(fOut, "    </Hit>\n");
  }
  fprintf(fOut, "  </Hits>\n");
  fprintf(fOut, "</RSet>");
}
コード例 #3
0
ファイル: cascinf.cpp プロジェクト: blizzardwj/ML_netinf
void TNetInfBs::SaveCascades(const TStr& OutFNm) {
	TFOut FOut(OutFNm);

	// write nodes to file
	for (TNGraph::TNodeI NI = GroundTruth->BegNI(); NI < GroundTruth->EndNI(); NI++) {
		FOut.PutStr(TStr::Fmt("%d,%d\r\n", NI.GetId(), NI.GetId())); // nodes
	}

	FOut.PutStr("\r\n");

	// write cascades to file
	for (int i=0; i<CascV.Len(); i++) {
		TCascade &C = CascV[i];
		int j = 0;
		for (THash<TInt, THitInfo>::TIter NI = C.NIdHitH.BegI(); NI < C.NIdHitH.EndI(); NI++, j++) {
			if (j > 0)
				FOut.PutStr(TStr::Fmt(",%d,%f", NI.GetDat().NId.Val, NI.GetDat().Tm.Val));
			else
				FOut.PutStr(TStr::Fmt("%d,%f", NI.GetDat().NId.Val, NI.GetDat().Tm.Val));
		}

		if (C.Len() >= 1)
			FOut.PutStr(TStr::Fmt("\r\n"));
	}
}
コード例 #4
0
ファイル: phrase.cpp プロジェクト: bergloman/qminer
void TNGramBs::SaveTxt(const TStr& FNm, const bool& SortP) const {
  TFOut FOut(FNm); FILE* fOut=FOut.GetFileId();
  if (SortP){
    int NGrams=GetNGrams(); TStr NGramStr; int NGramFq;
    TIntPrV FqNGramIdPrV(GetNGrams(), 0);
    for (int NGramId=0; NGramId<NGrams; NGramId++){
      GetNGramStrFq(NGramId, NGramStr, NGramFq);
      if (NGramFq!=-1){
        FqNGramIdPrV.Add(TIntPr(NGramFq, NGramId));}
    }
    FqNGramIdPrV.Sort(false);
    for (int NGramN=0; NGramN<FqNGramIdPrV.Len(); NGramN++){
      int NGramFq=FqNGramIdPrV[NGramN].Val1;
      int NGramId=FqNGramIdPrV[NGramN].Val2;
      GetNGramStrFq(NGramId, NGramStr, NGramFq);
      fprintf(fOut, "'%s': %d\n", NGramStr.CStr(), NGramFq);
    }
  } else {
    int NGrams=GetNGrams(); TStr NGramStr; int NGramFq;
    for (int NGramId=0; NGramId<NGrams; NGramId++){
      GetNGramStrFq(NGramId, NGramStr,  NGramFq);
      if (NGramFq!=-1){
        fprintf(fOut, "'%s': %d\n", NGramStr.CStr(), NGramFq);}
    }
  }
}
コード例 #5
0
void TGreedyAlg::saveCascades(const TStr& casacdesFilename) {
    TFOut FOut(casacdesFilename);
    
    // write nodes to file
	for (TKColourNet::TNodeI NI = groundTruthGraph->BegNI(); NI < groundTruthGraph->EndNI(); NI++) {
		FOut.PutStr(TStr::Fmt("%d,%d\r\n", NI.GetId(), NI.GetId()));
	}
    
    FOut.PutStr("\r\n");
    
	// write cascades to file
	for (int i = 0; i < cascadeV.Len(); i++) {
		TCascade &C = cascadeV[i];
		int j = 0;
		for (THash<TInt, THitInfo>::TIter NI = C.NIdHitH.BegI(); NI < C.NIdHitH.EndI(); NI++, j++) {
			if (j > 0)
				FOut.PutStr(TStr::Fmt(";%d,%f", NI.GetDat().NId.Val, NI.GetDat().Tm.Val));
			else
				FOut.PutStr(TStr::Fmt("%d,%f", NI.GetDat().NId.Val, NI.GetDat().Tm.Val));
		}
        
		if (C.Len() >= 1)
			FOut.PutStr(TStr::Fmt("\r\n"));
	}
}
コード例 #6
0
void TGreedyAlg::saveOutputAdjacencyMatrix(const TStr& outputNetworkFilename) {
    TFOut FOut(outputNetworkFilename);
    
    // create adjacency matrix
    const int noNodes = outputGraph->GetNodes();
    
    TFltVV AdjMtx(noNodes, noNodes);
    TIntH NodeIdH;
    for (TKColourNet::TNodeI NI = outputGraph->BegNI(); NI < outputGraph->EndNI(); NI++) {
        NodeIdH.AddKey(NI.GetId());
    }
    for (TKColourNet::TNodeI NI = outputGraph->BegNI(); NI < outputGraph->EndNI(); NI++) {
        const int NodeId = NodeIdH.GetKeyId(NI.GetId());
        for (int e = 0; e < NI.GetOutDeg(); e++) {
            const int DstNId = NodeIdH.GetKeyId(NI.GetOutNId(e));
            // no self edges
            if (NodeId != DstNId) {
                AdjMtx.At(NodeId, DstNId) = 1;
            }
        }
    }
    
    for (int row = 0; row < AdjMtx.GetRows(); row++) {
        for (int col = 0; col < AdjMtx.GetCols(); col++) {
            FOut.PutStr(TStr::Fmt("%d,", (int) AdjMtx.At(row, col)));
        }
        FOut.PutStr("\r\n");
    }
    
    //    printf("Saved Adjacency matrix with : noRows = %d, noCols = %d\n", AdjMtx.GetRows(), AdjMtx.GetCols());
}
コード例 #7
0
void TGreedyAlg::saveGroundTruth(const TStr& networkFilename) {
    TFOut FOut(networkFilename);
    
	// write nodes to file
	for (TKColourNet::TNodeI NI = groundTruthGraph->BegNI(); NI < groundTruthGraph->EndNI(); NI++) {
		FOut.PutStr(TStr::Fmt("%d,%d,", NI.GetId(), NI.GetId()));
        FOut.PutStr(NI.GetDat().getColour());
        FOut.PutStr(TStr::Fmt("\r\n"));
	}
    
	FOut.PutStr("\r\n");
    
	// write edges to file (not allowing self loops in the network)
	for (TKColourNet::TEdgeI EI = groundTruthGraph->BegEI(); EI < groundTruthGraph->EndEI(); EI++) {
		// not allowing self loops
		if (EI.GetSrcNId() != EI.GetDstNId()) {
            FOut.PutStr(TStr::Fmt("%d,%d,", EI.GetSrcNId(), EI.GetDstNId()));
            TKColourNet::TNodeI srcNI = groundTruthGraph->GetNI(EI.GetSrcNId());
            TKColourNet::TNodeI dstNI = groundTruthGraph->GetNI(EI.GetDstNId());
            int srcNodeColourId = srcNI.GetDat().getColourId();
            int dstNodeColourId = dstNI.GetDat().getColourId();
            FOut.PutStr(getEdgeColourTransitionInfo(srcNodeColourId, dstNodeColourId));
            FOut.PutStr(TStr::Fmt("\r\n"));
		}
	}
}
コード例 #8
0
ファイル: node2vec.cpp プロジェクト: arbenson/snap
void WriteOutput(TStr& OutFile, TIntFltVH& EmbeddingsHV, TVVec<TInt, int64>& WalksVV,
 bool& OutputWalks) {
  TFOut FOut(OutFile);
  if (OutputWalks) {
    for (int64 i = 0; i < WalksVV.GetXDim(); i++) {
      for (int64 j = 0; j < WalksVV.GetYDim(); j++) {
        FOut.PutInt(WalksVV(i,j));
	if(j+1==WalksVV.GetYDim()) {
          FOut.PutLn();
	} else {
          FOut.PutCh(' ');
	}
      }
    }
    return;
  }
  bool First = 1;
  for (int i = EmbeddingsHV.FFirstKeyId(); EmbeddingsHV.FNextKeyId(i);) {
    if (First) {
      FOut.PutInt(EmbeddingsHV.Len());
      FOut.PutCh(' ');
      FOut.PutInt(EmbeddingsHV[i].Len());
      FOut.PutLn();
      First = 0;
    }
    FOut.PutInt(EmbeddingsHV.GetKey(i));
    for (int64 j = 0; j < EmbeddingsHV[i].Len(); j++) {
      FOut.PutCh(' ');
      FOut.PutFlt(EmbeddingsHV[i][j]);
    }
    FOut.PutLn();
  }
}
コード例 #9
0
ファイル: test-TCrossNet.cpp プロジェクト: JohnMatta/snap
// Test node, edge creation
TEST(TCrossNet, ManipulateNodesEdges) {
  int NNodes = 1000;
  int NEdges = 100000;
  const char *FName = "test.graph.dat";

  TCrossNet Graph;
  TCrossNet Graph1;
  TCrossNet Graph2;
  int n;
  int NCount;
  int x,y;

  Graph = TCrossNet();
  EXPECT_EQ(0,Graph.GetEdges());
  // create random edges
  NCount = NEdges;
  while (NCount > 0) {
    x = (long) (drand48() * NNodes);
    y = (long) (drand48() * NNodes);
    n = Graph.AddEdge(x, y);
    NCount--;
  }

  EXPECT_EQ(NEdges,Graph.GetEdges());

  // edges iterator
  NCount = 0;
  for (TCrossNet::TCrossEdgeI EI = Graph.BegEdgeI(); EI < Graph.EndEdgeI(); EI++) {
    NCount++;
  }
  EXPECT_EQ(NEdges,NCount);

  // assignment
  Graph1 = Graph;

  EXPECT_EQ(NEdges,Graph1.GetEdges());

  // saving and loading
  {
    TFOut FOut(FName);
    Graph.Save(FOut);
    FOut.Flush();
  }

  {
    TFIn FIn(FName);
    Graph2 = TCrossNet(FIn);
  }

  EXPECT_EQ(NEdges,Graph2.GetEdges());

  /*Graph1.Clr(); //TODO implement

  EXPECT_EQ(0,Graph1.GetNodes());
  EXPECT_EQ(0,Graph1.GetEdges());

  EXPECT_EQ(1,Graph1.IsOk());
  EXPECT_EQ(1,Graph1.Empty());*/
}
コード例 #10
0
ファイル: nytngrams.cpp プロジェクト: Accio/snap
void TNytNGramBs::SaveTxt(const TStr& FNm){
  TFOut FOut(FNm); FILE* fOut=FOut.GetFileId();
  int NGrams=TermStrVH.Len();
  for (int NGramId=0; NGramId<NGrams; NGramId++){
    TStr NGramStr=GetNGramStr(NGramId);
    fprintf(fOut, "%d\t%s\n", NGramId, NGramStr.CStr());
  }
}
コード例 #11
0
ファイル: google.cpp プロジェクト: Accio/snap
void TGgSchBs::SaveXml(const TStr& FNm){
  TFOut FOut(FNm); FILE* fOut=FOut.GetFileId();
  fprintf(fOut, "<GgSchBs>\n");
  for (int RefN=0; RefN<GetRefs(); RefN++){
    PGgSchRef Ref=GetRef(RefN);
    Ref->SaveXml(fOut, 1+RefN);
  }
  fprintf(fOut, "</GgSchBs>");
}
コード例 #12
0
ファイル: google.cpp プロジェクト: Accio/snap
void TRSet::SaveXml(const TStr& FNm, const PRSet& RSet){
  if (RSet.Empty()){
    TFOut FOut(FNm); FILE* fOut=FOut.GetFileId();
    fprintf(fOut, "<RSets>\n");
    fprintf(fOut, "  <Error/>\n");
    fprintf(fOut, "</RSets>");
  } else {
    RSet->SaveXml(FNm);
  }
}
コード例 #13
0
ファイル: google.cpp プロジェクト: Accio/snap
void TGgSchRSet::SaveXml(const TStr& FNm, const PGgSchRSet& GgSchRSet){
  if (GgSchRSet.Empty()){
    TFOut FOut(FNm); FILE* fOut=FOut.GetFileId();
    fprintf(fOut, "<GgSchRSets>\n");
    fprintf(fOut, "  <Error/>\n");
    fprintf(fOut, "</GgSchRSets>");
  } else {
    GgSchRSet->SaveXml(FNm);
  }
}
コード例 #14
0
/////////////////////////////////////////////////
// Translation-Corpus
void TTransCorpus::CleanTmx(const TStr& InTmxFNm, const TStr& OutXmlFNm) {
    TFIn FIn(InTmxFNm); TFOut FOut(OutXmlFNm);
    TStr ChStr; bool InTagP = false;
    while (!FIn.Eof()) {
        ChStr = TStr::GetChStr(FIn.GetCh());
        if (ChStr == "<") { InTagP = true; FOut.PutStr(ChStr); }
        else if (ChStr == ">") { InTagP = false; FOut.PutStr(ChStr); }
        else if (!InTagP && ChStr != "\n" && ChStr != "\r") { 
            FOut.PutStr(TXmlDoc::GetXmlStr(ChStr)); 
        } else { FOut.PutStr(ChStr); }
    }
}
コード例 #15
0
ファイル: prolog.cpp プロジェクト: SherlockYang/Archive
void TPlBs::SaveTxt(const TStr& FNm){
  TFOut FOut(FNm); FILE* fOut=FOut.GetFileId();
  for (int RelId=0; RelId<GetRels(); RelId++){
    for (int TupN=0; TupN<GetRelTups(RelId); TupN++){
      int TupId=GetRelTupId(RelId, TupN);
      PPlTup Tup=GetTup(TupId);
      TStr TupStr=Tup->GetStr(this);
      fprintf(fOut, "%s.\n", TupStr.CStr());
    }
    if (RelId+1<GetRels()){fprintf(fOut, "\n");}
  }
}
コード例 #16
0
ファイル: ontolight.cpp プロジェクト: Accio/snap
/////////////////////////////////////////////////
// Light-Weight-Ontology
void TLwOnto::SaveTxt(const TStr& FNm){
  TFOut FOut(FNm); FILE* fOut=FOut.GetFileId();
  fprintf(fOut, "===LwOnto-Begin======================\n");
  GetLangBs()->SaveTxt(fOut);
  fprintf(fOut, "\n");
  GetTermTypeBs()->SaveTxt(fOut);
  fprintf(fOut, "\n");
  GetLinkTypeBs()->SaveTxt(fOut);
  fprintf(fOut, "\n");
  GetTermBs()->SaveTxt(fOut);
  fprintf(fOut, "===LwOnto-End========================\n");
}
コード例 #17
0
ファイル: cyc.cpp プロジェクト: mkarlovc/gcentralization
void TCycBs::SaveTxt(const TStr& FNm){
  TFOut FOut(FNm); FILE* fOut=FOut.GetFileId();
  for (int VId=0; VId<GetVIds(); VId++){
    TStr VNm=GetVNm(VId);
    TCycVrtx& Vrtx=GetVrtx(VId);
    TStr FlagStr=Vrtx.GetFlagStr();
    fprintf(fOut, "(%d) %s - %s\n", VId, VNm.CStr(), FlagStr.CStr());
    for (int EdgeN=0; EdgeN<Vrtx.GetEdges(); EdgeN++){
      TCycEdge& Edge=Vrtx.GetEdge(EdgeN);
      TStr RelNm=GetVNm(Edge.GetRelId());
      TStr DstVNm=GetVNm(Edge.GetDstVId());
      fprintf(fOut, "     %d. [%s] --> %s\n", 1+EdgeN, RelNm.CStr(), DstVNm.CStr());
    }
  }
}
コード例 #18
0
ファイル: doctest.cpp プロジェクト: snap-stanford/curis-2012
int main(int argc, char *argv[]) {
  TDocBase *DocBase = new TDocBase;
  TChA Url = TChA("http://www.newyorktimes.com/news_story");
  TSecTm Date = TSecTm::GetCurTm();
  TChA Content = TChA("foo bar foo foo");
  TVec<TChA> Links;
  Links.Add(TChA("http://www.google.com"));
  Links.Add(TChA("http://www.yahoo.com"));
  DocBase->AddDoc(Url, Date, Content, Links);

  printf("Number of documents: %d\n", DocBase->Len());
  
  TDoc t;
  DocBase->GetDoc(0, t);
  TStr tUrl;
  t.GetUrl(tUrl);
  printf("URL: %s\n", tUrl.CStr());
  
  TStrV l;
  t.GetLinks(l);
  printf("Link1: %s\n", l[0].CStr());
  printf("Link2: %s\n", l[1].CStr());

  { TFOut FOut("tmp.bin"); DocBase->Save(FOut); }
  printf("Save data successfully\n");

  delete DocBase;

  TFIn FIn("tmp.bin");
  printf("Load data successfully\n");
  TDocBase *DocBase2 = new TDocBase;
  DocBase2->Load(FIn);

  printf("Number of documents: %d\n", DocBase2->Len());

  TDoc t2;
  DocBase2->GetDoc(0, t2);
  TStr t2Url;
  t2.GetUrl(t2Url);
  printf("URL: %s\n", t2Url.CStr());

  t2.GetLinks(l);
  printf("Link1: %s\n", l[0].CStr());
  printf("Link2: %s\n", l[1].CStr());

  delete DocBase2;
  return 0;
}
コード例 #19
0
ファイル: getScc.cpp プロジェクト: IsmaelAli/snap
int main(int argc, char* argv[]) {
  typedef PNGraph PGraph; // directed graph

  printf("Creating graph for wikiTalk\n");

  PGraph graph = TSnap::LoadEdgeList<PGraph>("data/wiki-Talk.txt", 0, 1);
  IAssert(graph->IsOk());
  printf("Graph (%d, %d)\n", graph->GetNodes(), graph->GetEdges());

  printf("Getting max scc\n");
  PGraph maxScc = TSnap::GetMxScc(graph);
  printf("Scc (%d, %d)\n", maxScc->GetNodes(), maxScc->GetEdges());
  TFOut FOut("data/wikiTalk_scc.graph");
  maxScc->Save(FOut);

  return 0;
}
コード例 #20
0
ファイル: ontolight.cpp プロジェクト: Accio/snap
/////////////////////////////////////////////////
// Light-Weight-Ontology-Grounding
void TLwOntoGround::SaveTxt(const TStr& FNm){
  // shortcuts
  PLwTermBs TermBs=LwOnto->GetTermBs();
  // save data
  TFOut FOut(FNm); FILE* fOut=FOut.GetFileId();
  fprintf(fOut, "===LwOnto-Begin======================\n");
  for (int TermN=0; TermN<TermBs->GetTerms(); TermN++){
    int TermId=TermBs->GetTermId(TermN);
    TStr TermNm=TermBs->GetTerm(TermId)->GetTermNm();
    fprintf(fOut, "TermId:%d TermNm:'%s'", TermId, TermNm.CStr());
    if (TermIdToConceptSpVH.IsKey(TermId)){
      PBowSpV ConceptSpV=TermIdToConceptSpVH.GetDat(TermId);
      TStr ConceptSpVStr=ConceptSpV->GetStr(BowDocBs, 15, 0.66);
      fprintf(fOut, " ConceptSpV:%s", ConceptSpVStr.CStr());
    }
    fprintf(fOut, "\n");
  }
}
コード例 #21
0
ファイル: cyc.cpp プロジェクト: mkarlovc/gcentralization
void TCycBs::SaveTaxonomyTxt(const TStr& FNm){
  TFOut FOut(FNm); FILE* fOut=FOut.GetFileId();
  for (int VId=0; VId<GetVIds(); VId++){
    printf("%d/%d (%.1f%%)\r", 1+VId, GetVIds(), 100.0*(1+VId)/GetVIds());
    //if (VId>10){break;}
    // upper taxonomy
    {int Lev=0;
    TIntIntH VIdToLevH; VIdToLevH.AddDat(VId, Lev);
    TIntPrV UpRelIdVIdPrV; UpRelIdVIdPrV.Add(TIntPr(-1, VId));
    _SaveTaxonomyTxt(fOut, Lev+1, UpRelIdVIdPrV, VIdToLevH);}
    // lower taxonomy
    {int Lev=0;
    TIntIntH VIdToLevH; VIdToLevH.AddDat(VId, Lev);
    TIntPrV UpRelIdVIdPrV; UpRelIdVIdPrV.Add(TIntPr(-1, VId));
    _SaveTaxonomyTxt(fOut, Lev-1, UpRelIdVIdPrV, VIdToLevH);}
  }
  printf("\n");
}
コード例 #22
0
ファイル: google.cpp プロジェクト: Accio/snap
void TGgSchRSet::SaveXml(const TStr& FNm){
  TFOut FOut(FNm); FILE* fOut=FOut.GetFileId();
  fprintf(fOut, "<RSet>\n");
  // fixed fields
  if (!GetUrlStr().Empty()){
    fprintf(fOut, "  <Url>%s</Url>\n", TXmlLx::GetXmlStrFromPlainStr(GetUrlStr()).CStr());}
  if (!GetNextUrlStr().Empty()){
    fprintf(fOut, "  <NextUrl>%s</NextUrl>\n", TXmlLx::GetXmlStrFromPlainStr(GetNextUrlStr()).CStr());}
  if (!GetQueryStr().Empty()){
    fprintf(fOut, "  <Query>%s</Query>\n", TXmlLx::GetXmlStrFromPlainStr(GetQueryStr()).CStr());}
  if (GetAllHits()!=-1){
    fprintf(fOut, "  <AllHits>%d</AllHits>\n", GetAllHits());}
  // hits
  fprintf(fOut, "  <Hits Size=\"%d\">\n", GetHits());
  for (int HitN=0; HitN<GetHits(); HitN++){
    PGgSchRef Ref=GetHit(HitN);
    Ref->SaveXml(fOut, 1+HitN);
  }
  fprintf(fOut, "  </Hits>\n");
  fprintf(fOut, "</RSet>");
}
コード例 #23
0
ファイル: cascinf.cpp プロジェクト: blizzardwj/ML_netinf
void TNetInfBs::SaveGroundTruth(const TStr& OutFNm) {
	TFOut FOut(OutFNm);

	// write nodes to file
	for (TNGraph::TNodeI NI = GroundTruth->BegNI(); NI < GroundTruth->EndNI(); NI++) {
		FOut.PutStr(TStr::Fmt("%d,%d\r\n", NI.GetId(), NI.GetId())); // nodes
	}

	FOut.PutStr("\r\n");

	// write edges to file (not allowing self loops in the network)
	for (TNGraph::TEdgeI EI = GroundTruth->BegEI(); EI < GroundTruth->EndEI(); EI++) {
		// not allowing self loops in the Kronecker network
		if (EI.GetSrcNId() != EI.GetDstNId()) {
			if (Alphas.IsKey(TIntPr(EI.GetSrcNId(), EI.GetDstNId())))
				FOut.PutStr(TStr::Fmt("%d,%d,%f\r\n", EI.GetSrcNId(), EI.GetDstNId(), Alphas.GetDat(TIntPr(EI.GetSrcNId(), EI.GetDstNId())).Val));
			else
				FOut.PutStr(TStr::Fmt("%d,%d,1\r\n", EI.GetSrcNId(), EI.GetDstNId()));
		}
	}
}
コード例 #24
0
void TWnBs::SaveTxt(const TStr& FNm){
  TFOut FOut(FNm); FILE* fOut=FOut.GetFileId();
  for (int SynSetP=0; SynSetP<GetSynSets(); SynSetP++){
    fprintf(fOut, "=====================================\n");
    SaveTxtSynSet(SynSetP, fOut);
    SaveTxtRel(wrtHypernym, SynSetP, true, fOut);
    SaveTxtRel(wrtInstance, SynSetP, false, fOut);
    SaveTxtRel(wrtEntailment, SynSetP, false, fOut);
    SaveTxtRel(wrtSimilar, SynSetP, false, fOut);
    SaveTxtRel(wrtMemberMeronym, SynSetP, false, fOut);
    SaveTxtRel(wrtSubstanceMeronym, SynSetP, false, fOut);
    SaveTxtRel(wrtPartMeronym, SynSetP, false, fOut);
    SaveTxtRel(wrtDerivation, SynSetP, false, fOut);
    SaveTxtRel(wrtClass, SynSetP, false, fOut);
    SaveTxtRel(wrtCause, SynSetP, false, fOut);
    SaveTxtRel(wrtVerbGroup, SynSetP, false, fOut);
    SaveTxtRel(wrtAttribute, SynSetP, false, fOut);
    SaveTxtRel(wrtAntonym, SynSetP, false, fOut);
    SaveTxtRel(wrtAdditionalInfo, SynSetP, false, fOut);
    SaveTxtRel(wrtParticiple, SynSetP, false, fOut);
    SaveTxtRel(wrtPosRel, SynSetP, false, fOut);
    fprintf(fOut, "=====================================\n\n");
  }
}
コード例 #25
0
ファイル: webpgfetch.cpp プロジェクト: Zala/qminer
TWebPgFetchPersist::~TWebPgFetchPersist() {
	if (SaveFName != "") {
		TFOut FOut(SaveFName);
		Save(FOut);
	}
}
コード例 #26
0
ファイル: demo-TUNGraph.cpp プロジェクト: Aleyasen/Alaki
// Test node, edge creation
void ManipulateNodesEdges() {
  int NNodes = 10000;
  int NEdges = 100000;
  const char *FName = "test.graph";

  PUNGraph Graph;
  PUNGraph Graph1;
  PUNGraph Graph2;
  int i;
  int n;
  int NCount;
  int ECount1;
  int ECount2;
  int x,y;
  bool t;

  Graph = TUNGraph::New();
  t = Graph->Empty();

  // create the nodes
  for (i = 0; i < NNodes; i++) {
    Graph->AddNode(i);
  }
  t = Graph->Empty();
  n = Graph->GetNodes();

  // create random edges
  NCount = NEdges;
  while (NCount > 0) {
    x = (long) (drand48() * NNodes);
    y = (long) (drand48() * NNodes);
    // Graph->GetEdges() is not correct for the loops (x == y),
    // skip the loops in this test
    if (x != y  &&  !Graph->IsEdge(x,y)) {
      n = Graph->AddEdge(x, y);
      NCount--;
    }
  }
  PrintGStats("ManipulateNodesEdges:Graph",Graph);

  // get all the nodes
  NCount = 0;
  for (TUNGraph::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) {
    NCount++;
  }

  // get all the edges for all the nodes
  ECount1 = 0;
  for (TUNGraph::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) {
    for (int e = 0; e < NI.GetOutDeg(); e++) {
      ECount1++;
    }
  }
  ECount1 /= 2;

  // get all the edges directly
  ECount2 = 0;
  for (TUNGraph::TEdgeI EI = Graph->BegEI(); EI < Graph->EndEI(); EI++) {
    ECount2++;
  }
  printf("graph ManipulateNodesEdges:Graph, nodes %d, edges1 %d, edges2 %d\n",
      NCount, ECount1, ECount2);

  // assignment
  Graph1 = TUNGraph::New();
  *Graph1 = *Graph;
  PrintGStats("ManipulateNodesEdges:Graph1",Graph1);

  // save the graph
  {
    TFOut FOut(FName);
    Graph->Save(FOut);
    FOut.Flush();
  }

  // load the graph
  {
    TFIn FIn(FName);
    Graph2 = TUNGraph::Load(FIn);
  }
  PrintGStats("ManipulateNodesEdges:Graph2",Graph2);

  // remove all the nodes and edges
  for (i = 0; i < NNodes; i++) {
    n = Graph->GetRndNId();
    Graph->DelNode(n);
  }

  PrintGStats("ManipulateNodesEdges:Graph",Graph);

  Graph1->Clr();
  PrintGStats("ManipulateNodesEdges:Graph1",Graph1);
}
コード例 #27
0
ファイル: demo-TNEANet.cpp プロジェクト: hiepbkhn/itce2011
// Test node attribute functionality
void ManipulateNodeEdgeAttributes() {
  int NNodes = 1000;
  int NEdges = 1000;
  const char *FName = "demo.graph.dat";

  PNEANet Graph;
  PNEANet Graph1;
  int i;
  int x, y;
  bool t;

  Graph = TNEANet::New();
  t = Graph->Empty();

  // create the nodes
  for (i = 0; i < NNodes; i++) {
    Graph->AddNode(i);
  }

  // create the edges 
  for (i = 0; i < NEdges; i++) {
    x = rand() % NNodes;
    y = rand() % NNodes;
    Graph->AddEdge(x, y, i);
  }

  // create attributes and fill all nodes
  TStr attr1 = "str";
  TStr attr2 = "int";
  TStr attr3 = "float";
  TStr attr4 = "default";

  // Test vertical int iterator for node 3, 50, 700, 900
  // Check if we can set defaults to 0 for Int data.
  Graph->AddIntAttrN(attr2, 0);
  Graph->AddIntAttrDatN(3, 3*2, attr2);
  Graph->AddIntAttrDatN(50, 50*2, attr2);
  Graph->AddIntAttrDatN(700, 700*2, attr2);
  Graph->AddIntAttrDatN(900, 900*2, attr2);
  int NodeId = 0;
  for (TNEANet::TAIntI NI = Graph->BegNAIntI(attr2);
    NI < Graph->EndNAIntI(attr2); NI++) {
    // Check if defaults are now 0.
    if (NI.GetDat()() != 0) {
      printf("Attribute: %s, Node: %i, Val: %i\n", attr2(), NodeId, NI.GetDat()());
      NodeId++;
    }
  } 

  // Test vertical flt iterator for node 3, 50, 700, 900
  Graph->AddFltAttrDatN(5, 3.41, attr3);
  Graph->AddFltAttrDatN(50, 2.718, attr3);
  Graph->AddFltAttrDatN(300, 150.0, attr3);
  Graph->AddFltAttrDatN(653, 653, attr3);
  NodeId = 0;
  for (TNEANet::TAFltI NI = Graph->BegNAFltI(attr3);
    NI < Graph->EndNAFltI(attr3); NI++) {
    if (NI.GetDat() != TFlt::Mn) {
      printf("Attribute: %s, Node: %i, Val: %f\n", attr3(), NodeId, NI.GetDat()());
      NodeId++;
    } 
  }

  // Test vertical str iterator for node 3, 50, 700, 900
  Graph->AddStrAttrDatN(10, "abc", attr1);
  Graph->AddStrAttrDatN(20, "def", attr1);
  Graph->AddStrAttrDatN(400, "ghi", attr1);
  // this does not show since ""=null
  Graph->AddStrAttrDatN(455, "", attr1);
  NodeId = 0;
  
  for (TNEANet::TAStrI NI = Graph->BegNAStrI(attr1);
    NI < Graph->EndNAStrI(attr1); NI++) {
    if (NI.GetDat() != TStr::GetNullStr()) {
      printf("Attribute: %s, Node: %i, Val: %s\n", attr1(), NodeId, NI.GetDat()());
      NodeId++;
    }
  } 

  // Test vertical iterator over many types (must skip default/deleted attr) 
  int NId = 55;
  Graph->AddStrAttrDatN(NId, "aaa", attr1);
  Graph->AddIntAttrDatN(NId, 3*2, attr2);
  Graph->AddFltAttrDatN(NId, 3.41, attr3);
  Graph->AddStrAttrDatN(80, "dont appear", attr4); // should not show up
  TStrV NIdAttrName;
  Graph->AttrNameNI(NId, NIdAttrName);
  int AttrLen = NIdAttrName.Len();
  for (int i = 0; i < AttrLen; i++) {
    printf("Vertical Node: %i, Attr: %s\n", NId, NIdAttrName[i]());
  } 

  Graph->DelAttrDatN(NId, attr2);
  Graph->AttrNameNI(NId, NIdAttrName);
  AttrLen = NIdAttrName.Len();
  for (int i = 0; i < AttrLen; i++) {
    printf("Vertical Node (no int) : %i, Attr: %s\n", NId, NIdAttrName[i]());
  } 

  Graph->AddIntAttrDatN(NId, 3*2, attr2);
  Graph->DelAttrN(attr1);
  Graph->AttrNameNI(NId, NIdAttrName);
  AttrLen = NIdAttrName.Len();
  for (int i = 0; i < AttrLen; i++) {
    printf("Vertical Node (no str) : %i, Attr: %s\n", NId, NIdAttrName[i]());
  } 

  TStrV NIdAttrValue;
  Graph->AttrValueNI(NId, NIdAttrValue);
  AttrLen = NIdAttrValue.Len();
  for (int i = 0; i < AttrLen; i++) {
    printf("Vertical Node (no str) : %i, Attr_Val: %s\n", NId, NIdAttrValue[i]());
  } 

  for (i = 0; i <NNodes; i++) {
    Graph->AddIntAttrDatN(i, 70, attr2);
  }

  {
    TFOut FOut(FName);
    Graph->Save(FOut);
    FOut.Flush();
  }

  {
    TFIn FIn(FName);
    Graph1 = TNEANet::Load(FIn);
  }

  int total = 0;
  for (TNEANet::TAIntI NI = Graph1->BegNAIntI(attr2);
    NI < Graph1->EndNAIntI(attr2); NI++) {
    total += NI.GetDat();
  }

  printf("Average: %i (should be 70)\n", total/NNodes);

  Graph1->Clr();

  // Test vertical int iterator for edge
  Graph->AddIntAttrDatE(3, 3*2, attr2);
  Graph->AddIntAttrDatE(55, 55*2, attr2);
  Graph->AddIntAttrDatE(705, 705*2, attr2);
  Graph->AddIntAttrDatE(905, 905*2, attr2);
  int EdgeId = 0;
  for (TNEANet::TAIntI EI = Graph->BegEAIntI(attr2);
    EI < Graph->EndEAIntI(attr2); EI++) {
    if (EI.GetDat() != TInt::Mn) {
       printf("E Attribute: %s, Edge: %i, Val: %i\n", attr2(), EdgeId, EI.GetDat()());
       EdgeId++;
    }
  } 
  
  // Test vertical flt iterator for edge
  Graph->AddFltAttrE(attr3, 0.00);
  Graph->AddFltAttrDatE(5, 4.41, attr3);
  Graph->AddFltAttrDatE(50, 3.718, attr3);
  Graph->AddFltAttrDatE(300, 151.0, attr3);
  Graph->AddFltAttrDatE(653, 654, attr3);
  EdgeId = 0;
  for (TNEANet::TAFltI EI = Graph->BegEAFltI(attr3);
    EI < Graph->EndEAFltI(attr3); EI++) {
    // Check if defaults are set to 0.
    if (EI.GetDat() != 0.00) {
      printf("E Attribute: %s, Edge: %i, Val: %f\n", attr3(), EdgeId, EI.GetDat()());
      EdgeId++;
    } 
  }

  // Test vertical str iterator for edge
  Graph->AddStrAttrDatE(10, "abc", attr1);
  Graph->AddStrAttrDatE(20, "def", attr1);
  Graph->AddStrAttrDatE(400, "ghi", attr1);
  // this does not show since ""=null
  Graph->AddStrAttrDatE(455, "", attr1);
  EdgeId = 0;
  for (TNEANet::TAStrI EI = Graph->BegEAStrI(attr1);
    EI < Graph->EndEAStrI(attr1); EI++) {
    if (EI.GetDat() != TStr::GetNullStr()) {
        printf("E Attribute: %s, Edge: %i, Val: %s\n", attr1(), EdgeId, EI.GetDat()());
	EdgeId++;
    }
  } 


  // Test vertical iterator over many types (must skip default/deleted attr) 
  int EId = 55;
  Graph->AddStrAttrDatE(EId, "aaa", attr1);
  Graph->AddIntAttrDatE(EId, 3*2, attr2);
  Graph->AddFltAttrDatE(EId, 3.41, attr3);
  Graph->AddStrAttrDatE(80, "dont appear", attr4); // should not show up
  TStrV EIdAttrName;
  Graph->AttrNameEI(EId, EIdAttrName);
  AttrLen = EIdAttrName.Len();
  for (int i = 0; i < AttrLen; i++) {
    printf("Vertical Edge: %i, Attr: %s\n", EId, EIdAttrName[i]());
  } 

  Graph->DelAttrDatE(EId, attr2);
  Graph->AttrNameEI(EId, EIdAttrName);
  AttrLen = EIdAttrName.Len();
  for (int i = 0; i < AttrLen; i++) {
    printf("Vertical Edge (no int) : %i, Attr: %s\n", EId, EIdAttrName[i]());
  } 

  Graph->AddIntAttrDatE(EId, 3*2, attr2);
  Graph->DelAttrE(attr1);
  Graph->AttrNameEI(EId, EIdAttrName);
  AttrLen = EIdAttrName.Len();
  for (int i = 0; i < AttrLen; i++) {
    printf("Vertical Edge (no str) : %i, Attr: %s\n", EId, EIdAttrName[i]());
  } 

  TStrV EIdAttrValue;
  Graph->AttrValueEI(EId, EIdAttrValue);
  AttrLen = EIdAttrValue.Len();
  for (int i = 0; i < AttrLen; i++) {
    printf("Vertical Edge (no str) : %i, Attr_Val: %s\n", EId, EIdAttrValue[i]());
  } 

  for (i = 0; i <NEdges; i++) {
    Graph->AddIntAttrDatE(i, 70, attr2);
  }

  {
    TFOut FOut(FName);
    Graph->Save(FOut);
    FOut.Flush();
    Graph->Clr();
  }

  {
    TFIn FIn(FName);
    Graph1 = TNEANet::Load(FIn);
  }

  total = 0;
  for (TNEANet::TAIntI EI = Graph1->BegNAIntI(attr2);
    EI < Graph1->EndNAIntI(attr2); EI++) {
    total += EI.GetDat();
  }

  printf("Average: %i (should be 70)\n", total/NEdges);

  //Graph1->Dump();
  Graph1->Clr();
}
コード例 #28
0
ファイル: test-TNodeEdgeNet.cpp プロジェクト: Aleyasen/Alaki
// Test node, edge creation
TEST(TNodeEdgeNet, ManipulateNodesEdges) {
  int NNodes = 10000;
  int NEdges = 100000;
  const char *FName = "test.net";

  TPt <TNodeEdgeNet<TInt, TInt> > Net;
  TPt <TNodeEdgeNet<TInt, TInt> > Net1;
  TPt <TNodeEdgeNet<TInt, TInt> > Net2;
  int i;
  int n;
  int NCount;
  int x,y;
  int Deg, InDeg, OutDeg;

  Net = TNodeEdgeNet<TInt, TInt>::New();
  EXPECT_EQ(1,Net->Empty());

  // create the nodes
  for (i = 0; i < NNodes; i++) {
    Net->AddNode(i);
  }
  EXPECT_EQ(0,Net->Empty());
  EXPECT_EQ(NNodes,Net->GetNodes());

  // create random edges
  NCount = NEdges;
  while (NCount > 0) {
    x = (long) (drand48() * NNodes);
    y = (long) (drand48() * NNodes);
    n = Net->AddEdge(x, y);
    NCount--;
  }

  EXPECT_EQ(NEdges,Net->GetEdges());

  EXPECT_EQ(0,Net->Empty());
  EXPECT_EQ(1,Net->IsOk());

  for (i = 0; i < NNodes; i++) {
    EXPECT_EQ(1,Net->IsNode(i));
  }

  EXPECT_EQ(0,Net->IsNode(NNodes));
  EXPECT_EQ(0,Net->IsNode(NNodes+1));
  EXPECT_EQ(0,Net->IsNode(2*NNodes));

  // nodes iterator
  NCount = 0;
  for (TNodeEdgeNet<TInt, TInt>::TNodeI NI = Net->BegNI(); NI < Net->EndNI(); NI++) {
    NCount++;
  }
  EXPECT_EQ(NNodes,NCount);

  // edges per node iterator
  NCount = 0;
  for (TNodeEdgeNet<TInt, TInt>::TNodeI NI = Net->BegNI(); NI < Net->EndNI(); NI++) {
    for (int e = 0; e < NI.GetOutDeg(); e++) {
      NCount++;
    }
  }
  EXPECT_EQ(NEdges,NCount);

  // edges iterator
  NCount = 0;
  for (TNodeEdgeNet<TInt, TInt>::TEdgeI EI = Net->BegEI(); EI < Net->EndEI(); EI++) {
    NCount++;
  }
  EXPECT_EQ(NEdges,NCount);

  // node degree
  for (TNodeEdgeNet<TInt, TInt>::TNodeI NI = Net->BegNI(); NI < Net->EndNI(); NI++) {
    Deg = NI.GetDeg();
    InDeg = NI.GetInDeg();
    OutDeg = NI.GetOutDeg();

    EXPECT_EQ(Deg,InDeg+OutDeg);
  }

  // assignment
  Net1 = TNodeEdgeNet<TInt, TInt>::New();
  *Net1 = *Net;

  EXPECT_EQ(NNodes,Net1->GetNodes());
  EXPECT_EQ(NEdges,Net1->GetEdges());
  EXPECT_EQ(0,Net1->Empty());
  EXPECT_EQ(1,Net1->IsOk());

  // saving and loading
  {
    TFOut FOut(FName);
    Net->Save(FOut);
    FOut.Flush();
  }

  {
    TFIn FIn(FName);
    Net2 = TNodeEdgeNet<TInt, TInt>::Load(FIn);
  }

  EXPECT_EQ(NNodes,Net2->GetNodes());
  EXPECT_EQ(NEdges,Net2->GetEdges());
  EXPECT_EQ(0,Net2->Empty());
  EXPECT_EQ(1,Net2->IsOk());

  // remove all the nodes and edges
  for (i = 0; i < NNodes; i++) {
    n = Net->GetRndNId();
    Net->DelNode(n);
  }

  EXPECT_EQ(0,Net->GetNodes());
  EXPECT_EQ(0,Net->GetEdges());

  EXPECT_EQ(1,Net->IsOk());
  EXPECT_EQ(1,Net->Empty());

  Net1->Clr();

  EXPECT_EQ(0,Net1->GetNodes());
  EXPECT_EQ(0,Net1->GetEdges());

  EXPECT_EQ(1,Net1->IsOk());
  EXPECT_EQ(1,Net1->Empty());
}
コード例 #29
0
ファイル: demo-TNEANet.cpp プロジェクト: hiepbkhn/itce2011
// Test node, edge creation
void ManipulateNodesEdges() {
  int NNodes = 1000;
  int NEdges = 100000;
  const char *FName = "demo.graph.dat";

  PNEANet Graph;
  PNEANet Graph1;
  PNEANet Graph2;
  int i;
  int n;
  int NCount;
  int ECount1;
  int ECount2;
  int x,y;
  bool t;

  Graph = TNEANet::New();
  t = Graph->Empty();

  // create the nodes
  for (i = 0; i < NNodes; i++) {
    Graph->AddNode(i);
  }
  n = Graph->GetNodes();
  t = Graph->Empty();

  // create random edges
  NCount = NEdges;
  while (NCount > 0) {
    x = rand() % NNodes;
    y = rand() % NNodes;
    n = Graph->AddEdge(x, y);
    NCount--;
  }
  PrintGStats("ManipulateNodesEdges:Graph",Graph);

  // get all the nodes
  NCount = 0;
  for (TNEANet::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) {
    NCount++;
  }

  // get all the edges for all the nodes
  ECount1 = 0;
  for (TNEANet::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) {
    for (int e = 0; e < NI.GetOutDeg(); e++) {
      ECount1++;
    }
  }

  // get all the edges directly
  ECount2 = 0;
  for (TNEANet::TEdgeI EI = Graph->BegEI(); EI < Graph->EndEI(); EI++) {
    ECount2++;
  }
  printf("graph ManipulateNodesEdges:Graph, nodes %d, edges1 %d, edges2 %d\n",
      NCount, ECount1, ECount2);

  // assignment
  Graph1 = TNEANet::New();
  *Graph1 = *Graph;
  PrintGStats("ManipulateNodesEdges:Graph1",Graph1);

  // save the graph
  {
    TFOut FOut(FName);
    Graph->Save(FOut);
    FOut.Flush();
  }

  // load the graph
  {
    TFIn FIn(FName);
    Graph2 = TNEANet::Load(FIn);
  }
  PrintGStats("ManipulateNodesEdges:Graph2",Graph2);

  // remove all the nodes and edges
  for (i = 0; i < NNodes; i++) {
    n = Graph->GetRndNId();
    Graph->DelNode(n);
  }

  PrintGStats("ManipulateNodesEdges:Graph",Graph);

  Graph1->Clr();
  PrintGStats("ManipulateNodesEdges:Graph1",Graph1);
}
コード例 #30
0
ファイル: test-TNGraph.cpp プロジェクト: EDzhangjianyu/snap
// Test node, edge creation
TEST(TNGraph, ManipulateNodesEdges) {
  int NNodes = 10000;
  int NEdges = 100000;
  const char *FName = "test.graph.dat";

  PNGraph Graph;
  PNGraph Graph1;
  PNGraph Graph2;
  int i;
  int n;
  int NCount;
  int x,y;
  int Deg, InDeg, OutDeg;

  Graph = TNGraph::New();
  EXPECT_EQ(1,Graph->Empty());

  // create the nodes
  for (i = 0; i < NNodes; i++) {
    Graph->AddNode(i);
  }
  EXPECT_EQ(0,Graph->Empty());
  EXPECT_EQ(NNodes,Graph->GetNodes());

  // create random edges
  NCount = NEdges;
  while (NCount > 0) {
    x = (long) (drand48() * NNodes);
    y = (long) (drand48() * NNodes);
    // Graph->GetEdges() is not correct for the loops (x == y),
    // skip the loops in this test
    if (x != y  &&  !Graph->IsEdge(x,y)) {
      n = Graph->AddEdge(x, y);
      NCount--;
    }
  }

  EXPECT_EQ(NEdges,Graph->GetEdges());

  EXPECT_EQ(0,Graph->Empty());
  EXPECT_EQ(1,Graph->IsOk());

  for (i = 0; i < NNodes; i++) {
    EXPECT_EQ(1,Graph->IsNode(i));
  }

  EXPECT_EQ(0,Graph->IsNode(NNodes));
  EXPECT_EQ(0,Graph->IsNode(NNodes+1));
  EXPECT_EQ(0,Graph->IsNode(2*NNodes));

  // nodes iterator
  NCount = 0;
  for (TNGraph::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) {
    NCount++;
  }
  EXPECT_EQ(NNodes,NCount);

  // edges per node iterator
  NCount = 0;
  for (TNGraph::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) {
    for (int e = 0; e < NI.GetOutDeg(); e++) {
      NCount++;
    }
  }
  EXPECT_EQ(NEdges,NCount);

  // edges iterator
  NCount = 0;
  for (TNGraph::TEdgeI EI = Graph->BegEI(); EI < Graph->EndEI(); EI++) {
    NCount++;
  }
  EXPECT_EQ(NEdges,NCount);

  // node degree
  for (TNGraph::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) {
    Deg = NI.GetDeg();
    InDeg = NI.GetInDeg();
    OutDeg = NI.GetOutDeg();

    EXPECT_EQ(Deg,InDeg+OutDeg);
  }

  // assignment
  Graph1 = TNGraph::New();
  *Graph1 = *Graph;

  EXPECT_EQ(NNodes,Graph1->GetNodes());
  EXPECT_EQ(NEdges,Graph1->GetEdges());
  EXPECT_EQ(0,Graph1->Empty());
  EXPECT_EQ(1,Graph1->IsOk());

  // saving and loading
  {
    TFOut FOut(FName);
    Graph->Save(FOut);
    FOut.Flush();
  }

  {
    TFIn FIn(FName);
    Graph2 = TNGraph::Load(FIn);
  }

  EXPECT_EQ(NNodes,Graph2->GetNodes());
  EXPECT_EQ(NEdges,Graph2->GetEdges());
  EXPECT_EQ(0,Graph2->Empty());
  EXPECT_EQ(1,Graph2->IsOk());

  // remove all the nodes and edges
  for (i = 0; i < NNodes; i++) {
    n = Graph->GetRndNId();
    Graph->DelNode(n);
  }

  EXPECT_EQ(0,Graph->GetNodes());
  EXPECT_EQ(0,Graph->GetEdges());

  EXPECT_EQ(1,Graph->IsOk());
  EXPECT_EQ(1,Graph->Empty());

  Graph1->Clr();

  EXPECT_EQ(0,Graph1->GetNodes());
  EXPECT_EQ(0,Graph1->GetEdges());

  EXPECT_EQ(1,Graph1->IsOk());
  EXPECT_EQ(1,Graph1->Empty());
}