Changeset 3606:3c5bf26b7a4f in orange


Ignore:
Timestamp:
04/28/07 18:47:17 (7 years ago)
Author:
miha <miha.stajdohar@…>
Branch:
default
Convert:
321bdd7fce310f8e9db4bcc28ec8b579623d8735
Message:

reading graph

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Prototypes/OWGraphDrawerCanvas.py

    r3550 r3606  
    472472         
    473473        #dodajanje vozlisc 
     474        print "OWGraphDrawerCanvas/addVisualizer: adding vertices..." 
     475        self.vertices = {} 
    474476        for v in range(0, self.nVertices): 
    475477            self.vertices[v] = None 
    476              
     478        print "done." 
     479         
    477480        #dodajanje povezav 
    478          
    479         for i in range(0, self.nVertices): 
    480             for j in range(0, self.nVertices): 
    481                 try:  
    482                     if visualizer.graph[i,j] > 0: 
    483                         if not self.edgesContainsEdge(i,j): 
    484                             self.edges[self.nEdges] = (None,i,j) 
    485                             self.nEdges += 1 
    486                 except TypeError: 
    487                     pass # `visualizer.graph[i,j]' does not exist 
    488                 else: 
    489                     pass # `visualizer.graph[i,j]' exists              
    490      
     481        print "OWGraphDrawerCanvas/addVisualizer: adding edges..." 
     482        self.edges = {} 
     483        self.nEdges = 0 
     484         
     485        for (i,j) in visualizer.graph.getEdges(): 
     486            self.edges[self.nEdges] = (None,i,j) 
     487            self.nEdges += 1 
     488         
     489        print "done." 
     490         
    491491    def resetValues(self): 
    492492        self.vertices={} 
  • orange/OrangeWidgets/Prototypes/OWNetwork.py

    r3546 r3606  
    171171     
    172172    def setGraph(self, graph): 
     173        print "OWNetwork/setGraph: new visualizer..." 
    173174        self.visualize = NetworkVisualizer(graph, self) 
    174          
     175        print "done." 
    175176        self.colorCombo.clear() 
    176177        self.attListBox.clear() 
     
    183184            self.tooltipListBox.insertItem(unicode(var.name)) 
    184185 
     186        print "OWNetwork/setGraph: add visualizer..." 
    185187        self.graph.addVisualizer(self.visualize) 
    186         self.displayRandom(firstTime = True) 
     188        print "done." 
     189        print "OWNetwork/setGraph: display random..." 
     190        self.random() 
     191        print "done." 
    187192         
    188193    def random(self): 
    189         self.displayRandom(firstTime=False);  
    190          
    191     def ff(self): 
     194        print "OWNetwork/random.." 
    192195        if self.visualize == None:   #grafa se ni 
    193196            return 
     197         
     198        self.visualize.random() 
     199         
     200        print "OWNetwork/random: updating canvas..." 
     201        self.updateCanvas(); 
     202        print "done." 
     203         
     204         
     205    def ff(self): 
     206        print "OWNetwork/ff..." 
     207        if self.visualize == None:   #grafa se ni 
     208            return 
    194209 
    195210        #najprej nakljucne koordinate za vsa vozlisca 
    196         refreshRate = 10 
     211        refreshRate = 20 #- self.visualize.nVertices() / 50 + 100 
     212        #if refreshRate < 5: 
     213        #    refreshRate = 5; 
     214         
    197215        tolerance = 5 
    198216        initTemp = 100 
    199217 
    200218        while True: 
     219            print initTemp 
    201220            initTemp = self.visualize.fruchtermanReingold(refreshRate, initTemp) 
    202221             
     
    218237        self.graph.enableGridY(self.graphShowGrid) 
    219238        self.graph.enableGridX(self.graphShowGrid) 
    220              
    221     def displayRandom(self, firstTime=False): 
    222         if self.visualize == None:   #grafa se ni 
    223             return 
    224  
    225         #najprej nakljucne koordinate za vsa vozlisca 
    226         self.visualize.random() 
    227  
    228         #ko graf preberemo iz datoteke, upostevamo podane koordinate 
    229 #        if firstTime == True:  
    230 #            for i in range(0, self.visualize.nVertices()): 
    231 #                if self.verticesDescriptions[i].inFileDefinedCoors[0] != None: 
    232 #                    self.visualize.xCoors[i] = self.verticesDescriptions[i].inFileDefinedCoors[0] 
    233 #                     
    234 #                if self.verticesDescriptions[i].inFileDefinedCoors[1] != None: 
    235 #                    self.visualize.yCoors[i] = self.verticesDescriptions[i].inFileDefinedCoors[1]         
    236         self.updateCanvas();  
    237239                     
    238240    def updateCanvas(self): 
  • orange/OrangeWidgets/Prototypes/OWSimilarityNetwork.py

    r3514 r3606  
    5555         
    5656        maxValue = max([max(r) for r in data]) 
    57         print maxValue 
     57        #print maxValue 
    5858        #self.spinLower.setMaxValue(maxValue) 
    5959        #self.spinUpper.setMaxValue(maxValue) 
     
    7070            return 
    7171 
    72         nedges = []  
    73         print self.data.dim 
    74         for i in range(self.data.dim): 
    75            n = 0 
    76            for j in range(self.data.dim): 
    77               if i == j: continue 
    78               if self.spinLowerThreshold < self.data[i][j] and self.data[i][j] < self.spinUpperThreshold: 
    79                  n += 1 
    80            nedges.append(n) 
    81         n = 0; idid = [] 
    82         for i in range(self.data.dim): 
    83            idid.append(n) 
    84            if nedges[i]: 
    85               n += 1 
    86  
    87         self.infoa.setText("%d vertices, " % self.data.dim + "%d (%3.2f) not connected" % (nedges.count(0), nedges.count(0)/float(self.data.dim))) 
    88  
    8972        graph = orange.GraphAsList(self.data.dim, 0) 
    9073        graph.setattr("items", self.data.items) 
    91          
     74             
    9275        # set the threshold 
    9376        # set edges where distance is lower than threshold 
    9477        n = 0 
    95         print self.spinLowerThreshold 
    96         print self.spinUpperThreshold 
     78        nedges = 0 
     79        #print self.spinLowerThreshold 
     80        #print self.spinUpperThreshold 
    9781        for i in range(self.data.dim): 
    98            for j in range(i): 
    99               if i == j:  
    100                   continue 
    101               if self.spinLowerThreshold < self.data[i][j] and self.data[i][j] < self.spinUpperThreshold: 
    102                   n += 1 
    103                   graph[i,j] = 1 
     82            oldn = n 
     83            for j in range(i): 
     84                if self.spinLowerThreshold < self.data[i][j] and self.data[i][j] < self.spinUpperThreshold: 
     85                    n += 1 
     86                    graph[i,j] = 1 
     87            if n > oldn: 
     88                nedges += 1 
    10489           
    10590        self.graph = graph 
     91        self.infoa.setText("%d vertices, " % self.data.dim + "%d (%3.2f) not connected" % (nedges, nedges/float(self.data.dim))) 
    10692        self.infob.setText("%d edges (%d average)" % (n, n/float(self.data.dim))) 
    10793        self.send("Graph with ExampleTable", graph) 
  • orange/orngNetwork.py

    r3543 r3606  
    99    def __init__(self, graph, parent = None, name = "None"): 
    1010         
     11        print "orngNetwork/init: setGraph..." 
    1112        self.setGraph(graph) 
     13        print "orngNetwork/init: getCoors..." 
    1214        self.coors = self.getCoors() 
    1315        self.graph = graph 
  • source/orangeom/networkoptimization.cpp

    r3541 r3606  
    7272double TNetworkOptimization::cool(double t) 
    7373{ 
    74     return t * 0.98; 
     74    return t * 0.96; 
    7575} 
    7676 
     
    280280void TNetworkOptimization::setGraph(TGraphAsList *graph) 
    281281{ 
     282    cout << "1" << endl;  
    282283    int v, l; 
    283284    for (l = 0; l < nLinks; l++) 
     
    285286        free(links[l]); 
    286287    } 
    287  
     288    cout << "2" << endl;  
    288289    free(links); 
     290    cout << "3" << endl;  
    289291    free_Carrayptrs(pos); 
    290  
     292    cout << "4" << endl;  
    291293    nVertices = graph->nVertices; 
    292294    int dims[2]; 
    293295    dims[0] = nVertices; 
    294296    dims[1] = 2; 
    295      
     297    cout << "5" << endl;  
    296298    coors = (PyArrayObject *) PyArray_FromDims(2, dims, NPY_DOUBLE); 
    297299    pos = pymatrix_to_Carrayptrs(coors); 
     
    302304    links = NULL; 
    303305    nLinks = 0; 
    304  
     306    cout << "6" << endl;  
    305307    for (v = 0; v < graph->nVertices; v++) 
    306308    { 
     
    361363} 
    362364 
     365int getWords(string const& s, vector<string> &container) 
     366{ 
     367    int n = 0; 
     368    bool quotation = false; 
     369    string::const_iterator it = s.begin(), end = s.end(), first; 
     370    for (first = it; it != end; ++it) 
     371    { 
     372        // Examine each character and if it matches the delimiter 
     373        if (((!quotation) && ((' ' == *it) || ('\t' == *it) || ('\r' == *it) || ('\f' == *it) || ('\v' == *it))) || ('\n' == *it)) 
     374        { 
     375            if (first != it) 
     376            { 
     377                // extract the current field from the string and 
     378                // append the current field to the given container 
     379                container.push_back(string(first, it)); 
     380                ++n; 
     381                 
     382                // skip the delimiter 
     383                first = it + 1; 
     384            } 
     385            else 
     386            { 
     387                ++first; 
     388            } 
     389        } 
     390        else if (('\"' == *it) || ('\'' == *it)) 
     391        { 
     392            if (quotation) 
     393            { 
     394                quotation = false; 
     395 
     396                // extract the current field from the string and 
     397                // append the current field to the given container 
     398                container.push_back(string(first, it)); 
     399                ++n; 
     400                 
     401                // skip the delimiter 
     402                first = it + 1; 
     403            } 
     404            else 
     405            { 
     406                quotation = true; 
     407 
     408                // skip the quotation 
     409                first = it + 1; 
     410            } 
     411        } 
     412    } 
     413    if (first != it) 
     414    { 
     415        // extract the last field from the string and 
     416        // append the last field to the given container 
     417        container.push_back(string(first, it)); 
     418        ++n; 
     419    } 
     420    return n; 
     421} 
     422 
    363423PyObject *NetworkOptimization_setGraph(PyObject *self, PyObject *args) PYARGS(METH_VARARGS, "(Graph) -> None") 
    364424{ 
     
    371431 
    372432    CAST_TO(TNetworkOptimization, graphOpt); 
     433    cout << "networkoptimization.cpp/setGraph: setting graph..." << endl; 
    373434    graphOpt->setGraph(graph); 
    374  
     435    cout << "done." << endl; 
    375436    RETURN_NONE; 
    376437} 
     
    407468} 
    408469 
     470void temp(TGraph &graph) 
     471{ 
     472    graph = TGraphAsList(5, 0, false); 
     473} 
     474 
     475WRAPPER(ExampleTable) 
     476 
     477PyObject *readNetwork(PyObject *, PyObject *args) PYARGS(METH_VARARGS, "(fn) -> Graph") 
     478{ 
     479    TGraph *graph; 
     480    TDomain *domain = new TDomain(); 
     481    TExampleTable *table; 
     482 
     483    //cout << "readNetwork" << endl; 
     484    char *fn; 
     485 
     486    if (!PyArg_ParseTuple(args, "s", &fn)) 
     487        return NULL; 
     488 
     489    //cout << "File: " << fn << endl; 
     490 
     491    string line; 
     492    ifstream file(fn); 
     493    string graphName = ""; 
     494    int nVertices = 0; 
     495 
     496    if (file.is_open()) 
     497    { 
     498        // read head 
     499        while (!file.eof()) 
     500        { 
     501            getline (file, line); 
     502            vector<string> words; 
     503            int n = getWords(line, words); 
     504            //cout << line << "  -  " << n << endl; 
     505            if (n > 0) 
     506            { 
     507                if (strcmpi(words[0].c_str(), "*network") == 0) 
     508                { 
     509                    //cout << "Network" << endl; 
     510                    if (n > 1) 
     511                    { 
     512                        graphName = words[1]; 
     513                        //cout << "Graph name: " << graphName << endl; 
     514                    } 
     515                    else 
     516                        return NULL; 
     517                } 
     518                else if (strcmpi(words[0].c_str(), "*vertices") == 0) 
     519                { 
     520                    //cout << "Vertices" << endl; 
     521                    if (n > 1) 
     522                    { 
     523                        istringstream strVertices(words[1]); 
     524                        strVertices >> nVertices; 
     525                        if (nVertices == 0) 
     526                            return NULL; 
     527 
     528                        //cout << "nVertices: " << nVertices << endl; 
     529                    } 
     530                    else 
     531                        return NULL; 
     532 
     533                    break; 
     534                } 
     535            } 
     536        } 
     537        graph = new TGraphAsList(nVertices, 0, false); 
     538        domain->addVariable(new TIntVariable("index")); 
     539        domain->addVariable(new TStringVariable("label")); 
     540        domain->addVariable(new TFloatVariable("x")); 
     541        domain->addVariable(new TFloatVariable("y")); 
     542        domain->addVariable(new TFloatVariable("z")); 
     543        domain->addVariable(new TStringVariable("ic")); 
     544        domain->addVariable(new TStringVariable("bc")); 
     545        domain->addVariable(new TStringVariable("bw")); 
     546        table = new TExampleTable(domain); 
     547 
     548        // read vertex descriptions 
     549        while (!file.eof()) 
     550        { 
     551            getline (file, line); 
     552            vector<string> words; 
     553            int n = getWords(line, words); 
     554            //cout << line << "  -  " << n << endl; 
     555            if (n > 0) 
     556            { 
     557                TExample *example = new TExample(domain); 
     558 
     559                if ((strcmpi(words[0].c_str(), "*arcs") == 0) || (strcmpi(words[0].c_str(), "*edges") == 0)) 
     560                    break; 
     561 
     562                int index = -1; 
     563                istringstream strIndex(words[0]); 
     564                strIndex >> index; 
     565                if ((index <= 0) || (index > nVertices)) 
     566                    return NULL; 
     567 
     568                //cout << "index: " << index << " n: " << n << endl; 
     569                (*example)[0] = TValue(index); 
     570 
     571                if (n > 1) 
     572                { 
     573                    string label = words[1]; 
     574                    //cout << "label: " << label << endl; 
     575                    (*example)[1] = TValue((PSomeValue)TStringValue(label), STRINGVAR); 
     576 
     577                    int i = 2; 
     578                    char *xyz = "  xyz"; 
     579                    // read coordinates 
     580                    while ((i <= 4) && (i < n)) 
     581                    { 
     582                        float coor = -1;     
     583                        istringstream strCoor(words[i]); 
     584                        strCoor >> coor; 
     585                         
     586                        if ((coor < 0) || (coor > 1)) 
     587                            break; 
     588                         
     589                        //cout << xyz[i] << ": " << coor * 1000 << endl; 
     590                        (*example)[i] = TValue(coor); 
     591                        i++; 
     592                    } 
     593                    // read attributes 
     594                    while (i < n) 
     595                    { 
     596                        if (strcmpi(words[i].c_str(), "ic") == 0) 
     597                        { 
     598                            if (i + 1 < n) i++; else return NULL; 
     599 
     600                            //cout << "ic: " << words[i] << endl; 
     601                            (*example)[5] = TValue((PSomeValue)TStringValue(words[i]), STRINGVAR); 
     602                        } 
     603                        else if (strcmpi(words[i].c_str(), "bc") == 0) 
     604                        { 
     605                            if (i + 1 < n) i++; else return NULL; 
     606 
     607                            //cout << "bc: " << words[i] << endl; 
     608                            (*example)[6] = TValue((PSomeValue)TStringValue(words[i]), STRINGVAR); 
     609                        } 
     610                        else if (strcmpi(words[i].c_str(), "bw") == 0) 
     611                        { 
     612                            if (i + 1 < n) i++; else return NULL; 
     613 
     614                            //cout << "bw: " << words[i] << endl; 
     615                            (*example)[7] = TValue((PSomeValue)TStringValue(words[i]), STRINGVAR); 
     616                        } 
     617                        i++; 
     618                    } 
     619                    table->push_back(example); 
     620                } 
     621            } 
     622        } 
     623        // read arcs 
     624        vector<string> words; 
     625        int n = getWords(line, words); 
     626        if (n > 0) 
     627        { 
     628            if (strcmpi(words[0].c_str(), "*arcs") == 0) 
     629            { 
     630                while (!file.eof()) 
     631                { 
     632                    getline (file, line); 
     633                    vector<string> words; 
     634                    int n = getWords(line, words); 
     635                    //cout << line << "  -  " << n << endl; 
     636                    if (n > 0) 
     637                    { 
     638                        if (strcmpi(words[0].c_str(), "*edges") == 0) 
     639                            break; 
     640 
     641                        if (n > 1) 
     642                        { 
     643                            int i1 = -1; 
     644                            int i2 = -1; 
     645                            istringstream strI1(words[0]); 
     646                            istringstream strI2(words[1]); 
     647 
     648                            strI1 >> i1; 
     649                            strI2 >> i2; 
     650 
     651                            if ((i1 <= 0) || (i1 > nVertices) || (i2 <= 0) || (i2 > nVertices))  
     652                                return NULL; 
     653 
     654                            if (i1 == i2) 
     655                                continue; 
     656                             
     657                            //cout << "i1: " << i1 << " i2: " << i2 << endl; 
     658                            *graph->getOrCreateEdge(i1 - 1, i2 - 1) = 1; 
     659                        } 
     660                    } 
     661                } 
     662            } 
     663        } 
     664        // read edges 
     665        n = getWords(line, words); 
     666        if (n > 0) 
     667        { 
     668            if (strcmpi(words[0].c_str(), "*edges") == 0) 
     669            { 
     670                while (!file.eof()) 
     671                { 
     672                    getline (file, line); 
     673                    vector<string> words; 
     674                    int n = getWords(line, words); 
     675                    //cout << line << "  -  " << n << endl; 
     676                    if (n > 1) 
     677                    { 
     678                        int i1 = -1; 
     679                        int i2 = -1; 
     680                        istringstream strI1(words[0]); 
     681                        istringstream strI2(words[1]); 
     682 
     683                        strI1 >> i1; 
     684                        strI2 >> i2; 
     685 
     686                        if ((i1 <= 0) || (i1 > nVertices) || (i2 <= 0) || (i2 > nVertices))  
     687                            return NULL; 
     688 
     689                        if (i1 == i2) 
     690                            continue; 
     691 
     692                        *graph->getOrCreateEdge(i1 - 1, i2 - 1) = 1; 
     693                        *graph->getOrCreateEdge(i2 - 1, i1 - 1) = 1; 
     694                    } 
     695                } 
     696            } 
     697        } 
     698 
     699        file.close(); 
     700    } 
     701    else  
     702        cout << "Unable to open file.";  
     703     
     704    PExampleTable wtable = table; 
     705    PGraph wgraph = graph; 
     706    //graph->setProperty("items", wtable); 
     707 
     708    return Py_BuildValue("OO", WrapOrange(wgraph), WrapOrange(wtable)); 
     709} 
     710 
    409711#include "networkoptimization.px" 
  • source/orangeom/networkoptimization.hpp

    r3541 r3606  
    3535#include <stdio.h> 
    3636#include <stdlib.h> 
     37#include <iostream> 
     38#include <sstream> 
     39#include <fstream> 
     40#include <string> 
    3741#include <time.h> 
    38 #include <iostream> 
    3942#include "px/orangeom_globals.hpp" 
    4043#include "root.hpp" 
    4144#include "numeric_interface.hpp" 
    4245#include "graph.hpp" 
     46#include "stringvars.hpp" 
    4347 
    4448using namespace std; 
Note: See TracChangeset for help on using the changeset viewer.