From: Han Qi <shm...@gm...> - 2013-09-24 11:06:12
|
Hallo guys, I am using JUNG in a project. I find sometimes g.findEdge throw java.lang.NullPointerException. I find that for some edges I get from g.getIncidentEdges(v), edges.get(edge) returns null. It is a bug? |
From: Joshua O'M. <jos...@gm...> - 2013-09-24 16:22:32
|
Your report is confusing. You start out talking about g.findEdge() and then talk about the return collection you get from g.getIncidentEdges(). Please post a self-contained snippet that has the problem you're describing. On Tue, Sep 24, 2013 at 4:05 AM, Han Qi <shm...@gm...> wrote: > Hallo guys, I am using JUNG in a project. I find sometimes g.findEdge > throw java.lang.NullPointerException. > I find that for some edges I get from g.getIncidentEdges(v), > edges.get(edge) returns null. > It is a bug? > > > ------------------------------------------------------------------------------ > October Webinars: Code for Performance > Free Intel webinars can help you accelerate application performance. > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most > from > the latest Intel processors and coprocessors. See abstracts and register > > http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk > _______________________________________________ > Jung-support mailing list > Jun...@li... > https://lists.sourceforge.net/lists/listinfo/jung-support > > -- jos...@gm.........sites.google.com/site/joshuaomadadhain/ Joshua O'Madadhain: Information Scientist, Musician, Philosopher-At-Tall It's that moment of dawning comprehension that I live for. -- Bill Watterson My opinions are too rational and insightful to be those of any organization. |
From: Han Qi <shm...@gm...> - 2013-09-25 12:41:40
|
Hi, Joshua, thanks for the quick reply. What I mean ist that: I find sometimes g.findEdge throw java.lang. NullPointerException. With I then look at the source code of findEdge, it seems thatI that for some edges it get from g.getIncidentEdges(v), edges.get(edge) returns null. And this happens when the graph type is UndirectedSparseMultigraph, if I change it to UndirectedSparseGraph everything goes fine but the programm becomes much slower. Here is the code I use: the graph is pretty big 512,262 notes. Graph<String, List<Tweet[]>> g = new UndirectedSparseMultigraph<String, List<Tweet[]>>(); // add vertexes Set<String> UIDs = twitterData2.getRawDataUIDMap().keySet(); for (String uid : UIDs) { g.addVertex(uid); } // add edges long count = 0; for (Tweet aTweet : twitterData2.getRawData()) { String thisAuthor = aTweet.getAuthorId(); Collection<Tweet> result = query(thisAuthor) for (Tweet tweet : result) { String thatAuthor = tweet.getAuthorId(); Tweet[] pair = new Tweet[] { aTweet, tweet }; Tweet[] pair1 = new Tweet[] { tweet, aTweet }; if (!thisAuthor.equals(thatAuthor)) { try { List<Tweet[]> anEdge; if ((anEdge = g.findEdge(thisAuthor, thatAuthor)) == null) { // if there is no links between the two, then add a new one anEdge = new ArrayList<Tweet[]>(); g.addEdge(anEdge , thisAuthor, thatAuthor); } if (!(anEdge.contains(pair) || anEdge.contains(pair1))) { anEdge.add(new Tweet[] { aTweet, tweet }); } } catch (Exception e) { // TODO: handle exception count++; // e.printStackTrace(); // if (!g.containsVertex(thisAuthor) || // !g.containsVertex(thatAuthor)) // return null; // for (List<Tweet[]> edge : // g.getIncidentEdges(thisAuthor)) // g.getEdges().contains(edge); // if (g.getOpposite(thisAuthor, // edge).equals(thatAuthor)) // System.out.println(edge.toString()); // throw e; } } } } On Tue, Sep 24, 2013 at 6:22 PM, Joshua O'Madadhain < jos...@gm...> wrote: > Your report is confusing. You start out talking about g.findEdge() and > then talk about the return collection you get from g.getIncidentEdges(). > Please post a self-contained snippet that has the problem you're > describing. > > > On Tue, Sep 24, 2013 at 4:05 AM, Han Qi <shm...@gm...> wrote: > >> Hallo guys, I am using JUNG in a project. I find sometimes g.findEdge >> throw java.lang.NullPointerException. >> I find that for some edges I get from g.getIncidentEdges(v), >> edges.get(edge) returns null. >> It is a bug? >> >> >> ------------------------------------------------------------------------------ >> October Webinars: Code for Performance >> Free Intel webinars can help you accelerate application performance. >> Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most >> from >> the latest Intel processors and coprocessors. See abstracts and register > >> >> http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk >> _______________________________________________ >> Jung-support mailing list >> Jun...@li... >> https://lists.sourceforge.net/lists/listinfo/jung-support >> >> > > > -- > jos...@gm.........sites.google.com/site/joshuaomadadhain/ > Joshua O'Madadhain: Information Scientist, Musician, Philosopher-At-Tall > It's that moment of dawning comprehension that I live for. -- Bill > Watterson > My opinions are too rational and insightful to be those of any > organization. > |
From: Tom N. <tho...@gm...> - 2013-09-25 12:57:36
|
My guess is that your Tweet class does not override equals and hashcode, so the new ones you create are never 'equal' to the ones in your graph. You would have the same error with any Java collection, not just the Jung graphs. Tom Nelson On Wed, Sep 25, 2013 at 8:41 AM, Han Qi <shm...@gm...> wrote: > Hi, Joshua, > > thanks for the quick reply. What I mean ist that: > > I find sometimes g.findEdge throw java.lang. > NullPointerException. With > I then look at the source code of findEdge, it seems thatI that for some > edges it get from g.getIncidentEdges(v), edges.get(edge) returns null. > And this happens when the graph type is UndirectedSparseMultigraph, if I > change it to UndirectedSparseGraph everything goes fine but the programm > becomes much slower. > > Here is the code I use: the graph is pretty big 512,262 notes. > > Graph<String, List<Tweet[]>> g = new > UndirectedSparseMultigraph<String, List<Tweet[]>>(); > > // add vertexes > Set<String> UIDs = twitterData2.getRawDataUIDMap().keySet(); > for (String uid : UIDs) { > g.addVertex(uid); > } > > // add edges > long count = 0; > for (Tweet aTweet : twitterData2.getRawData()) { > String thisAuthor = aTweet.getAuthorId(); > > Collection<Tweet> result = query(thisAuthor) > for (Tweet tweet : result) { > String thatAuthor = tweet.getAuthorId(); > Tweet[] pair = new Tweet[] { aTweet, tweet }; > Tweet[] pair1 = new Tweet[] { tweet, aTweet }; > > if (!thisAuthor.equals(thatAuthor)) { > > try { > List<Tweet[]> anEdge; > if ((anEdge = g.findEdge(thisAuthor, thatAuthor)) > == null) { // if there is no links between the two, then add a new one > anEdge = new ArrayList<Tweet[]>(); > g.addEdge(anEdge , thisAuthor, > thatAuthor); > } > > if (!(anEdge.contains(pair) || > anEdge.contains(pair1))) { > anEdge.add(new Tweet[] { aTweet, tweet }); > } > } catch (Exception e) { > > // TODO: handle exception > count++; > // e.printStackTrace(); > // if (!g.containsVertex(thisAuthor) || > // !g.containsVertex(thatAuthor)) > // return null; > // for (List<Tweet[]> edge : > // g.getIncidentEdges(thisAuthor)) > // g.getEdges().contains(edge); > // if (g.getOpposite(thisAuthor, > // edge).equals(thatAuthor)) > // System.out.println(edge.toString()); > // throw e; > > } > > } > } > } > > > > On Tue, Sep 24, 2013 at 6:22 PM, Joshua O'Madadhain < > jos...@gm...> wrote: > >> Your report is confusing. You start out talking about g.findEdge() and >> then talk about the return collection you get from g.getIncidentEdges(). >> Please post a self-contained snippet that has the problem you're >> describing. >> >> >> On Tue, Sep 24, 2013 at 4:05 AM, Han Qi <shm...@gm...> wrote: >> >>> Hallo guys, I am using JUNG in a project. I find sometimes g.findEdge >>> throw java.lang.NullPointerException. >>> I find that for some edges I get from g.getIncidentEdges(v), >>> edges.get(edge) returns null. >>> It is a bug? >>> >>> >>> ------------------------------------------------------------------------------ >>> October Webinars: Code for Performance >>> Free Intel webinars can help you accelerate application performance. >>> Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most >>> from >>> the latest Intel processors and coprocessors. See abstracts and register >>> > >>> >>> http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk >>> _______________________________________________ >>> Jung-support mailing list >>> Jun...@li... >>> https://lists.sourceforge.net/lists/listinfo/jung-support >>> >>> >> >> >> -- >> jos...@gm.........sites.google.com/site/joshuaomadadhain/ >> Joshua O'Madadhain: Information Scientist, Musician, >> Philosopher-At-Tall >> It's that moment of dawning comprehension that I live for. -- Bill >> Watterson >> My opinions are too rational and insightful to be those of any >> organization. >> > > > > ------------------------------------------------------------------------------ > October Webinars: Code for Performance > Free Intel webinars can help you accelerate application performance. > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most > from > the latest Intel processors and coprocessors. See abstracts and register > > http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk > _______________________________________________ > Jung-support mailing list > Jun...@li... > https://lists.sourceforge.net/lists/listinfo/jung-support > > |
From: Han Qi <shm...@gm...> - 2013-09-25 13:14:41
|
HI Tom, you are right about equals and hashcode. But that still does not explain why g.findedge() throw Nullpoiner execption and for edge in g.getIncidentEdges(v), g.edges.get(edge) returns null. And why change the type of Graph make it ok. Best Qi On Wed, Sep 25, 2013 at 2:57 PM, Tom Nelson <tho...@gm...>wrote: > My guess is that your Tweet class does not override equals and hashcode, > so the new ones you create are never 'equal' to the ones in your graph. You > would have the same error with any Java collection, not just the Jung > graphs. > > Tom Nelson > > > On Wed, Sep 25, 2013 at 8:41 AM, Han Qi <shm...@gm...> wrote: > >> Hi, Joshua, >> >> thanks for the quick reply. What I mean ist that: >> >> I find sometimes g.findEdge throw java.lang. >> NullPointerException. With >> I then look at the source code of findEdge, it seems thatI that for some >> edges it get from g.getIncidentEdges(v), edges.get(edge) returns null. >> And this happens when the graph type is UndirectedSparseMultigraph, if I >> change it to UndirectedSparseGraph everything goes fine but the programm >> becomes much slower. >> >> Here is the code I use: the graph is pretty big 512,262 notes. >> >> Graph<String, List<Tweet[]>> g = new >> UndirectedSparseMultigraph<String, List<Tweet[]>>(); >> >> // add vertexes >> Set<String> UIDs = twitterData2.getRawDataUIDMap().keySet(); >> for (String uid : UIDs) { >> g.addVertex(uid); >> } >> >> // add edges >> long count = 0; >> for (Tweet aTweet : twitterData2.getRawData()) { >> String thisAuthor = aTweet.getAuthorId(); >> >> Collection<Tweet> result = query(thisAuthor) >> for (Tweet tweet : result) { >> String thatAuthor = tweet.getAuthorId(); >> Tweet[] pair = new Tweet[] { aTweet, tweet }; >> Tweet[] pair1 = new Tweet[] { tweet, aTweet }; >> >> if (!thisAuthor.equals(thatAuthor)) { >> >> try { >> List<Tweet[]> anEdge; >> if ((anEdge = g.findEdge(thisAuthor, thatAuthor)) >> == null) { // if there is no links between the two, then add a new one >> anEdge = new ArrayList<Tweet[]>(); >> g.addEdge(anEdge , thisAuthor, >> thatAuthor); >> } >> >> if (!(anEdge.contains(pair) || >> anEdge.contains(pair1))) { >> anEdge.add(new Tweet[] { aTweet, tweet }); >> } >> } catch (Exception e) { >> >> // TODO: handle exception >> count++; >> // e.printStackTrace(); >> // if (!g.containsVertex(thisAuthor) || >> // !g.containsVertex(thatAuthor)) >> // return null; >> // for (List<Tweet[]> edge : >> // g.getIncidentEdges(thisAuthor)) >> // g.getEdges().contains(edge); >> // if (g.getOpposite(thisAuthor, >> // edge).equals(thatAuthor)) >> // System.out.println(edge.toString()); >> // throw e; >> >> } >> >> } >> } >> } >> >> >> >> On Tue, Sep 24, 2013 at 6:22 PM, Joshua O'Madadhain < >> jos...@gm...> wrote: >> >>> Your report is confusing. You start out talking about g.findEdge() and >>> then talk about the return collection you get from g.getIncidentEdges(). >>> Please post a self-contained snippet that has the problem you're >>> describing. >>> >>> >>> On Tue, Sep 24, 2013 at 4:05 AM, Han Qi <shm...@gm...> wrote: >>> >>>> Hallo guys, I am using JUNG in a project. I find sometimes g.findEdge >>>> throw java.lang.NullPointerException. >>>> I find that for some edges I get from g.getIncidentEdges(v), >>>> edges.get(edge) returns null. >>>> It is a bug? >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> October Webinars: Code for Performance >>>> Free Intel webinars can help you accelerate application performance. >>>> Explore tips for MPI, OpenMP, advanced profiling, and more. Get the >>>> most from >>>> the latest Intel processors and coprocessors. See abstracts and >>>> register > >>>> >>>> http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk >>>> _______________________________________________ >>>> Jung-support mailing list >>>> Jun...@li... >>>> https://lists.sourceforge.net/lists/listinfo/jung-support >>>> >>>> >>> >>> >>> -- >>> jos...@gm.........sites.google.com/site/joshuaomadadhain/ >>> Joshua O'Madadhain: Information Scientist, Musician, >>> Philosopher-At-Tall >>> It's that moment of dawning comprehension that I live for. -- Bill >>> Watterson >>> My opinions are too rational and insightful to be those of any >>> organization. >>> >> >> >> >> ------------------------------------------------------------------------------ >> October Webinars: Code for Performance >> Free Intel webinars can help you accelerate application performance. >> Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most >> from >> the latest Intel processors and coprocessors. See abstracts and register > >> >> http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk >> _______________________________________________ >> Jung-support mailing list >> Jun...@li... >> https://lists.sourceforge.net/lists/listinfo/jung-support >> >> > > > ------------------------------------------------------------------------------ > October Webinars: Code for Performance > Free Intel webinars can help you accelerate application performance. > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most > from > the latest Intel processors and coprocessors. See abstracts and register > > http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk > _______________________________________________ > Jung-support mailing list > Jun...@li... > https://lists.sourceforge.net/lists/listinfo/jung-support > > |
From: Joshua O'M. <jos...@gm...> - 2013-09-25 16:46:19
|
Actually, it does explain it. There are lots of articles on what happens if equals() and hashCode() are not consistent; please go take a look. On Wed, Sep 25, 2013 at 6:14 AM, Han Qi <shm...@gm...> wrote: > HI Tom, you are right about equals and hashcode. > But that still does not explain why g.findedge() throw Nullpoiner > execption and for edge in g.getIncidentEdges(v), g.edges.get(edge) returns > null. > And why change the type of Graph make it ok. > > Best > Qi > > > On Wed, Sep 25, 2013 at 2:57 PM, Tom Nelson <tho...@gm...>wrote: > >> My guess is that your Tweet class does not override equals and hashcode, >> so the new ones you create are never 'equal' to the ones in your graph. You >> would have the same error with any Java collection, not just the Jung >> graphs. >> >> Tom Nelson >> >> >> On Wed, Sep 25, 2013 at 8:41 AM, Han Qi <shm...@gm...> wrote: >> >>> Hi, Joshua, >>> >>> thanks for the quick reply. What I mean ist that: >>> >>> I find sometimes g.findEdge throw java.lang. >>> NullPointerException. With >>> I then look at the source code of findEdge, it seems thatI that for some >>> edges it get from g.getIncidentEdges(v), edges.get(edge) returns null. >>> And this happens when the graph type is UndirectedSparseMultigraph, if I >>> change it to UndirectedSparseGraph everything goes fine but the programm >>> becomes much slower. >>> >>> Here is the code I use: the graph is pretty big 512,262 notes. >>> >>> Graph<String, List<Tweet[]>> g = new >>> UndirectedSparseMultigraph<String, List<Tweet[]>>(); >>> >>> // add vertexes >>> Set<String> UIDs = twitterData2.getRawDataUIDMap().keySet(); >>> for (String uid : UIDs) { >>> g.addVertex(uid); >>> } >>> >>> // add edges >>> long count = 0; >>> for (Tweet aTweet : twitterData2.getRawData()) { >>> String thisAuthor = aTweet.getAuthorId(); >>> >>> Collection<Tweet> result = query(thisAuthor) >>> for (Tweet tweet : result) { >>> String thatAuthor = tweet.getAuthorId(); >>> Tweet[] pair = new Tweet[] { aTweet, tweet }; >>> Tweet[] pair1 = new Tweet[] { tweet, aTweet }; >>> >>> if (!thisAuthor.equals(thatAuthor)) { >>> >>> try { >>> List<Tweet[]> anEdge; >>> if ((anEdge = g.findEdge(thisAuthor, >>> thatAuthor)) == null) { // if there is no links between the two, then add a >>> new one >>> anEdge = new ArrayList<Tweet[]>(); >>> g.addEdge(anEdge , thisAuthor, >>> thatAuthor); >>> } >>> >>> if (!(anEdge.contains(pair) || >>> anEdge.contains(pair1))) { >>> anEdge.add(new Tweet[] { aTweet, tweet }); >>> } >>> } catch (Exception e) { >>> >>> // TODO: handle exception >>> count++; >>> // e.printStackTrace(); >>> // if (!g.containsVertex(thisAuthor) || >>> // !g.containsVertex(thatAuthor)) >>> // return null; >>> // for (List<Tweet[]> edge : >>> // g.getIncidentEdges(thisAuthor)) >>> // g.getEdges().contains(edge); >>> // if (g.getOpposite(thisAuthor, >>> // edge).equals(thatAuthor)) >>> // System.out.println(edge.toString()); >>> // throw e; >>> >>> } >>> >>> } >>> } >>> } >>> >>> >>> >>> On Tue, Sep 24, 2013 at 6:22 PM, Joshua O'Madadhain < >>> jos...@gm...> wrote: >>> >>>> Your report is confusing. You start out talking about g.findEdge() and >>>> then talk about the return collection you get from g.getIncidentEdges(). >>>> Please post a self-contained snippet that has the problem you're >>>> describing. >>>> >>>> >>>> On Tue, Sep 24, 2013 at 4:05 AM, Han Qi <shm...@gm...> wrote: >>>> >>>>> Hallo guys, I am using JUNG in a project. I find sometimes g.findEdge >>>>> throw java.lang.NullPointerException. >>>>> I find that for some edges I get from g.getIncidentEdges(v), >>>>> edges.get(edge) returns null. >>>>> It is a bug? >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> October Webinars: Code for Performance >>>>> Free Intel webinars can help you accelerate application performance. >>>>> Explore tips for MPI, OpenMP, advanced profiling, and more. Get the >>>>> most from >>>>> the latest Intel processors and coprocessors. See abstracts and >>>>> register > >>>>> >>>>> http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk >>>>> _______________________________________________ >>>>> Jung-support mailing list >>>>> Jun...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/jung-support >>>>> >>>>> >>>> >>>> >>>> -- >>>> jos...@gm......... >>>> sites.google.com/site/joshuaomadadhain/ >>>> Joshua O'Madadhain: Information Scientist, Musician, >>>> Philosopher-At-Tall >>>> It's that moment of dawning comprehension that I live for. -- Bill >>>> Watterson >>>> My opinions are too rational and insightful to be those of any >>>> organization. >>>> >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> October Webinars: Code for Performance >>> Free Intel webinars can help you accelerate application performance. >>> Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most >>> from >>> the latest Intel processors and coprocessors. See abstracts and register >>> > >>> >>> http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk >>> _______________________________________________ >>> Jung-support mailing list >>> Jun...@li... >>> https://lists.sourceforge.net/lists/listinfo/jung-support >>> >>> >> >> >> ------------------------------------------------------------------------------ >> October Webinars: Code for Performance >> Free Intel webinars can help you accelerate application performance. >> Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most >> from >> the latest Intel processors and coprocessors. See abstracts and register > >> >> http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk >> _______________________________________________ >> Jung-support mailing list >> Jun...@li... >> https://lists.sourceforge.net/lists/listinfo/jung-support >> >> > > > ------------------------------------------------------------------------------ > October Webinars: Code for Performance > Free Intel webinars can help you accelerate application performance. > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most > from > the latest Intel processors and coprocessors. See abstracts and register > > http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk > _______________________________________________ > Jung-support mailing list > Jun...@li... > https://lists.sourceforge.net/lists/listinfo/jung-support > > -- jos...@gm.........sites.google.com/site/joshuaomadadhain/ Joshua O'Madadhain: Information Scientist, Musician, Philosopher-At-Tall It's that moment of dawning comprehension that I live for. -- Bill Watterson My opinions are too rational and insightful to be those of any organization. |
From: Luc H. <Luc...@in...> - 2013-10-28 09:56:43
|
Good morning, I'm interested in performance techniques for graph algorithms. In particular I would like to know what have been made into the Jung library to make it efficient. Regards, Luc. |
From: Joshua O'M. <jos...@gm...> - 2013-10-28 18:04:32
|
Luc: I don't know how to answer this question, because you don't define "efficient", nor "performance techniques". I mean, I can certainly talk about decisions that JUNG has made on several levels in terms of the data structures that it uses, or the algorithmic approaches in various contexts. (And I can talk about approaches that we don't currently use, but should.) But that's potentially a very lengthy discussion/lecture and I don't have the time right now to go into all of that. Some of it, perhaps...if I knew which parts were of interest. Also, of course, I assume you're aware that the code is there for the reading. :) So if you are particularly interested in this topic, please make it more clear what you're interested in. Joshua On Mon, Oct 28, 2013 at 2:56 AM, Luc Hogie <Luc...@in...> wrote: > Good morning, > > I'm interested in performance techniques for graph algorithms. In > particular I would like to know what have been made into the Jung > library to make it efficient. > > Regards, > Luc. > > > > ------------------------------------------------------------------------------ > October Webinars: Code for Performance > Free Intel webinars can help you accelerate application performance. > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most > from > the latest Intel processors and coprocessors. See abstracts and register > > http://pubads.g.doubleclick.net/gampad/clk?id=60135991&iu=/4140/ostg.clktrk > _______________________________________________ > Jung-support mailing list > Jun...@li... > https://lists.sourceforge.net/lists/listinfo/jung-support > -- jos...@gm.........sites.google.com/site/joshuaomadadhain/ Joshua O'Madadhain: Information Scientist, Musician, Philosopher-At-Tall It's that moment of dawning comprehension that I live for. -- Bill Watterson My opinions are too rational and insightful to be those of any organization. |