py4j-users Mailing List for Py4J (Page 4)
Status: Beta
Brought to you by:
barthe
You can subscribe to this list here.
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2010 |
Jan
|
Feb
(1) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(1) |
Nov
|
Dec
|
2011 |
Jan
(6) |
Feb
(1) |
Mar
(8) |
Apr
(6) |
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(4) |
Nov
|
Dec
(4) |
2012 |
Jan
|
Feb
|
Mar
(5) |
Apr
|
May
(7) |
Jun
(9) |
Jul
(10) |
Aug
|
Sep
|
Oct
(6) |
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(2) |
Jul
|
Aug
|
Sep
(3) |
Oct
|
Nov
|
Dec
(1) |
2014 |
Jan
(3) |
Feb
|
Mar
(3) |
Apr
|
May
(5) |
Jun
|
Jul
(2) |
Aug
(3) |
Sep
|
Oct
(1) |
Nov
|
Dec
(21) |
2015 |
Jan
(2) |
Feb
(5) |
Mar
(4) |
Apr
|
May
|
Jun
(5) |
Jul
(12) |
Aug
|
Sep
(1) |
Oct
(3) |
Nov
(1) |
Dec
(1) |
From: Chris A. <chr...@gm...> - 2013-09-07 04:16:25
|
Hi all. I'm trying to implement this code in Python: (from http://www.hypergraphdb.org/learn?page=IntroStoreData&project=hypergraphdbat the bottom, modified so I don't have to implement a class on the Java side) bookHandle = graph.add("asdf") priceHandle = graph.add(9.95) link = new gateway.jvm.org.hypergraphdb.HGValueLink("price", bookHandle, priceHandle) The problem is that in the Python code, the call to graph.add() from the Python side is yielding an object of type WeakHandle that implements HGLiveHandle, and HGValueLink only accepts HGHandle[] in its arguments. The end result is that the java side throws an exception saying that a HGValueLink constructor doesn't exist that takes [String, handle.WeakHandle, handle.WeakHandle]. (Relevant javadocs at http://www.kobrix.com/javadocs/hgcore/org/hypergraphdb/HGValueLink.html, http://www.kobrix.com/javadocs/hgcore/org/hypergraphdb/HyperGraph.html, http://www.kobrix.com/javadocs/hgcore/org/hypergraphdb/handle/HGLiveHandle.html ) In the linked example the two handles are declared as HGHandle when they're instantiated, so there's no problem when the method call does typechecking. It seems to me, then, that the easiest way to rectify this is to use some facility of the Gateway to re-cast the object returned from graph.add() as HGHandle, and then just pass that the the HGValueLink constructor as it wants. Can I do that from the gateway as it exists, or do I have to add a method to my server code to cast it? Am I missing an easier and more obvious solution in my Java inexperience? Thanks, Chris |
From: Alex G. <ale...@ne...> - 2013-06-15 12:32:22
|
15.06.2013 12:46, Barthelemy Dagenais kirjoitti: > After two years, Py4J 0.8 has just been released! > > Although I merged pull requests and fixed bugs during these two years, > my Ph.D., wedding, and new job made it difficult to find the time to > make a proper release. All happy events that made me busy life busier > :-) This release is much appreciated. Working with custom builds hasn't been fun :) > > This release includes the following new features: > > - Major fix to the Java byte[] support. Thanks to @agronholm for > spotting this subtle but major issue and thanks to @fdinto from The > Atlantic for providing a patch! > > - Ability to fail early if the py4j.java_gateway.JavaGateway cannot > connect to the JVM. > > - Added support for long primitives, BigDecimal, enum types, and inner > classes on the Java side. > > - Set saner log levels > > - Many small bug fixes and API enhancements (backward compatible). > > - Wrote a section in the FAQ about security concerns and precautions > with Py4J (http://py4j.sourceforge.net/faq.html#are-there-any-security-concerns-with-py4j). > > - Added support of Travis-CI and cleaned up the test suite to remove > hardcoded paths (https://travis-ci.org/bartdag/py4j). > > The specific issues are discussed on GitHub > (https://github.com/bartdag/py4j/issues?milestone=7&page=1&state=closed). > > Installing Py4J is one pip away: pip install py4j > > Again, feel free to contact me or to write a feature request on GitHub! > > Cheers, > Barthélémy > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by Windows: > > Build for Windows Store. > > http://p.sf.net/sfu/windows-dev2dev > _______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users |
From: Barthelemy D. <bar...@in...> - 2013-06-15 09:47:00
|
After two years, Py4J 0.8 has just been released! Although I merged pull requests and fixed bugs during these two years, my Ph.D., wedding, and new job made it difficult to find the time to make a proper release. All happy events that made me busy life busier :-) This release includes the following new features: - Major fix to the Java byte[] support. Thanks to @agronholm for spotting this subtle but major issue and thanks to @fdinto from The Atlantic for providing a patch! - Ability to fail early if the py4j.java_gateway.JavaGateway cannot connect to the JVM. - Added support for long primitives, BigDecimal, enum types, and inner classes on the Java side. - Set saner log levels - Many small bug fixes and API enhancements (backward compatible). - Wrote a section in the FAQ about security concerns and precautions with Py4J (http://py4j.sourceforge.net/faq.html#are-there-any-security-concerns-with-py4j). - Added support of Travis-CI and cleaned up the test suite to remove hardcoded paths (https://travis-ci.org/bartdag/py4j). The specific issues are discussed on GitHub (https://github.com/bartdag/py4j/issues?milestone=7&page=1&state=closed). Installing Py4J is one pip away: pip install py4j Again, feel free to contact me or to write a feature request on GitHub! Cheers, Barthélémy |
From: <kur...@co...> - 2012-10-14 20:50:52
|
Hi Barthelemy, OK I got your email and d/l and installed the new .jar and python package and it appears to be working! Specifically the output of the .wav files I generate are identical now. Two questions/issues though: 1. I notice 'old' py4j0.7 python package will not work with the new py4j0.7.jar. I didn't debug just an fyi and not an issue, just mentioning. Is there a way I can pip install the version you mentioned? Right now when our developers do pip install py4j it picks up the 'old' 0.7. And they'll have to download it and build/install it themselves. 2. Notice a new exception I need to handle on Python side while waiting for Gateway to start: except (socket.error, Py4JNetworkError): Is that expected? Thanks, Kurt ----- Original Message ----- From: "kurt vogel" <kur...@co...> To: py4...@li... Sent: Sunday, October 14, 2012 12:25:51 PM Subject: Question about Python bytearray and Java byte[] Hello all, First off I want to say thanks to the developers of this project. We are a python shop using py4j to work with a vendor that provides us .class and .so library interfaces. For our Mac and Windows developers we use the py4j package to talk to the .class driver otherwise we use Python's ctypes to interact with their native unix .so library. So my question relates to bytearrays in Python. I have a straightforward Gateway java class attached below that interacts with our vendor's code. In red I've highlighted where my issues are. On the python side I'm doing this: code = gateway.ttsRequestBuffer(self.server_ip, self.server_port, text, self.voice, fmt, bFirst, bAll) buf = self.gw.ttsGetBufferData() if (code == driver_h.TTS_RESULT_SUCCESS) else None buf is a Python bytearray. The Java Gateway is returning byte[] which in this case is the binary of a short .wav clip. Attached are two files, each one is the hexdump of the short .wav file. The unix one is generated by using Python's ctype library and the Java uses py4j to talk to our vendor's library. Java using py4j: 00000000 52 49 46 46 00 1c 02 00 57 41 56 45 66 6d 74 20 |RIFF....WAVEfmt | 00000010 12 00 00 00 01 00 01 00 40 1f 00 00 80 3e 00 00 |........@....>..| Unix using ctypes: 00000000 52 49 46 46 da 1c 02 00 57 41 56 45 66 6d 74 20 |RIFF....WAVEfmt | 00000010 12 00 00 00 01 00 01 00 40 1f 00 00 80 3e 00 00 |........@....>..| These are the first 32 bytes of the files. This occurs throughout and doesn't seem to be random, take a look at the file differences between the two attachments, it's very strange. And I did test writeToTempfile() to verify it wasn't on the Java side. The problem definitely is between returning the byte[] buffer on the Java side and the reading of that bytearray on Python side. We would love to get this working so our Mac and Windows developers can work with our vendor's library. Any ideas would be helpful, Thanks! Kurt ******************************* import java.lang.String; import java.io.IOException; import py4j.GatewayServer; import voiceware.libttsapi; // This is our vendors library class Gateway { private libttsapi m_ttsapi; /* Default c'tor create libttsapi instance used by our gateway to * communicate with our python app */ public Gateway() { m_ttsapi = new libttsapi(); } /* python client will call this and get socket error if gateway not up */ public boolean get_gw_status() { return true ; } /* server status port is default to 7777 */ public int ttsRequestStatus(String ipaddr, int status_port) { int rc; try { rc = m_ttsapi.ttsRequestStatus(ipaddr, status_port); } catch (IOException e) { rc = -9; } return rc; } /* request to generate buffer from tts server */ public int ttsRequestBuffer(String ipaddr, int port, String text, int speakerId, int bufformat, int reqfirst, int oneframe) { int rc; try { rc = m_ttsapi.ttsRequestBuffer(ipaddr, port, text, speakerId, bufformat, reqfirst, oneframe); } catch (IOException e) { rc = -9; } return rc; } /* Typically after if ttsRequestBuffer() successfull to get buffer contents */ public byte [] ttsGetBufferData() { return m_ttsapi.szVoiceData; } /* main entry point for Gateway */ public static void main(String[] args) { GatewayServer gatewayServer = new GatewayServer( new Gateway()); gatewayServer.start(); } } |
From: Alex G. <ale...@ne...> - 2012-10-14 20:46:39
|
14.10.2012 22:25, kur...@co... kirjoitti: > Hello all, > > First off I want to say thanks to the developers of this project. We > are a python shop using py4j to work with a vendor that provides us > .class and .so library interfaces. For our Mac and Windows developers > we use the py4j package to talk to the .class driver otherwise we use > Python's ctypes to interact with their native unix .so library. > > So my question relates to bytearrays in Python. I have a > straightforward Gateway java class attached below that interacts with > our vendor's code. In red I've highlighted where my issues are. On > the python side I'm doing this: > > code = gateway.ttsRequestBuffer(self.server_ip, self.server_port, > text, self.voice, fmt, bFirst, bAll) > > buf = self.gw.ttsGetBufferData() if (code == > driver_h.TTS_RESULT_SUCCESS) else None > > > buf is a Python bytearray. The Java Gateway is returning byte[] which > in this case is the binary of a short .wav clip. Attached are two > files, each one is the hexdump of the short .wav file. The unix one > is generated by using Python's ctype library and the Java uses py4j to > talk to our vendor's library. > > > Java using py4j: > > 00000000 52 49 46 46 00 1c 02 00 57 41 56 45 66 6d 74 20 > |RIFF....WAVEfmt | > > 00000010 12 00 00 00 01 00 01 00 40 1f 00 00 80 3e 00 00 > |........@....>..| > > > Unix using ctypes: > > 00000000 52 49 46 46 da 1c 02 00 57 41 56 45 66 6d 74 20 > |RIFF....WAVEfmt | > > 00000010 12 00 00 00 01 00 01 00 40 1f 00 00 80 3e 00 00 > |........@....>..| > > > These are the first 32 bytes of the files. This occurs throughout and > doesn't seem to be random, take a look at the file differences between > the two attachments, it's very strange. And I did test > writeToTempfile() to verify it wasn't on the Java side. The problem > definitely is between returning the byte[] buffer on the Java side and > the reading of that bytearray on Python side. > > We would love to get this working so our Mac and Windows developers > can work with our vendor's library. > > Any ideas would be helpful, > Thanks! > Kurt > This problem was caused by the unicode-based serialization of bytes in the latest release and has been fixed in development. See here: https://github.com/bartdag/py4j/issues/91 > > ******************************* > > > import java.lang.String; > > import java.io.IOException; > > > import py4j.GatewayServer; > > import voiceware.libttsapi; // This is our vendors library > > > class Gateway > > { > > private libttsapi m_ttsapi; > > > /* Default c'tor create libttsapi instance used by our gateway to > > * communicate with our python app */ > > public Gateway() > > { > > m_ttsapi = new libttsapi(); > > } > > /* python client will call this and get socket error if gateway not up */ > > public boolean get_gw_status() > > { > > return true; > > } > > > /* server status port is default to 7777 */ > > public int ttsRequestStatus(String ipaddr, int status_port) > > { > > int rc; > > try > > { > > rc = m_ttsapi.ttsRequestStatus(ipaddr, status_port); > > } > > catch (IOException e) > > { > > rc = -9; > > } > > return rc; > > } > > > /* request to generate buffer from tts server */ > > public int ttsRequestBuffer(String ipaddr, int port, String text, int > speakerId, > > int bufformat, int reqfirst, int oneframe) > > { > > int rc; > > try > > { > > rc = m_ttsapi.ttsRequestBuffer(ipaddr, port, text, speakerId, > > bufformat, reqfirst, oneframe); > > } > > catch (IOException e) > > { > > rc = -9; > > } > > return rc; > > } > > > /* Typically after if ttsRequestBuffer() successfull to get buffer > contents */ > > public byte[] ttsGetBufferData() > > { > > return m_ttsapi.szVoiceData; > > } > > > /* main entry point for Gateway */ > > public static void main(String[] args) > > { > > GatewayServer gatewayServer = new GatewayServer(new Gateway()); > > gatewayServer.start(); > > } > > } > > > > > ------------------------------------------------------------------------------ > Don't let slow site performance ruin your business. Deploy New Relic APM > Deploy New Relic app performance management and know exactly > what is happening inside your Ruby, Python, PHP, Java, and .NET app > Try New Relic at no cost today and get our sweet Data Nerd shirt too! > http://p.sf.net/sfu/newrelic-dev2dev > > > _______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users |
From: <kur...@co...> - 2012-10-14 20:15:20
|
Yes, forgot versions.. I'm using Python 2.7.3 and py4j 0.7. But I'll try your new 0.7 release. ----- Original Message ----- From: "Barthelemy Dagenais" <ba...@cs...> To: "Support and Comments about Py4J" <py4...@li...> Sent: Sunday, October 14, 2012 12:54:23 PM Subject: Re: [Py4j-users] Question about Python bytearray and Java byte[] Hi Kurt, Quick question before I start looking into this in more details: which version of Py4J are you using and which version of Python? There has been **a lot** of work after the latest official release on getting bytearray work correctly. The previous implementation (0.7) was buggy and did not handle bytes that looked like surrogates. You can try the latest version by using the jar file and the tar.gz package found here: https://github.com/bartdag/py4j/tree/master/current-release Although you will see 0.7 in the version, it contains all the bugfixes pushed after the 0.7 release. Thanks, Barthelemy On Sun, Oct 14, 2012 at 3:25 PM, <kur...@co...> wrote: > Hello all, > > First off I want to say thanks to the developers of this project. We are a > python shop using py4j to work with a vendor that provides us .class and .so > library interfaces. For our Mac and Windows developers we use the py4j > package to talk to the .class driver otherwise we use Python's ctypes to > interact with their native unix .so library. > > So my question relates to bytearrays in Python. I have a straightforward > Gateway java class attached below that interacts with our vendor's code. In > red I've highlighted where my issues are. On the python side I'm doing > this: > > code = gateway.ttsRequestBuffer(self.server_ip, self.server_port, text, > self.voice, fmt, bFirst, bAll) > > buf = self.gw.ttsGetBufferData() if (code == > driver_h.TTS_RESULT_SUCCESS) else None > > > buf is a Python bytearray. The Java Gateway is returning byte[] which in > this case is the binary of a short .wav clip. Attached are two files, each > one is the hexdump of the short .wav file. The unix one is generated by > using Python's ctype library and the Java uses py4j to talk to our vendor's > library. > > > Java using py4j: > > 00000000 52 49 46 46 00 1c 02 00 57 41 56 45 66 6d 74 20 |RIFF....WAVEfmt > | > > 00000010 12 00 00 00 01 00 01 00 40 1f 00 00 80 3e 00 00 > |........@....>..| > > > Unix using ctypes: > > 00000000 52 49 46 46 da 1c 02 00 57 41 56 45 66 6d 74 20 |RIFF....WAVEfmt > | > > 00000010 12 00 00 00 01 00 01 00 40 1f 00 00 80 3e 00 00 > |........@....>..| > > > These are the first 32 bytes of the files. This occurs throughout and > doesn't seem to be random, take a look at the file differences between the > two attachments, it's very strange. And I did test writeToTempfile() to > verify it wasn't on the Java side. The problem definitely is between > returning the byte[] buffer on the Java side and the reading of that > bytearray on Python side. > > We would love to get this working so our Mac and Windows developers can work > with our vendor's library. > > Any ideas would be helpful, > Thanks! > Kurt > > > ******************************* > > > import java.lang.String; > > import java.io.IOException; > > > import py4j.GatewayServer; > > import voiceware.libttsapi; // This is our vendors library > > > class Gateway > > { > > private libttsapi m_ttsapi; > > > /* Default c'tor create libttsapi instance used by our gateway to > > * communicate with our python app */ > > public Gateway() > > { > > m_ttsapi = new libttsapi(); > > } > > > > /* python client will call this and get socket error if gateway not up > */ > > public boolean get_gw_status() > > { > > return true; > > } > > > /* server status port is default to 7777 */ > > public int ttsRequestStatus(String ipaddr, int status_port) > > { > > int rc; > > try > > { > > rc = m_ttsapi.ttsRequestStatus(ipaddr, status_port); > > } > > catch (IOException e) > > { > > rc = -9; > > } > > return rc; > > } > > > /* request to generate buffer from tts server */ > > public int ttsRequestBuffer(String ipaddr, int port, String text, int > speakerId, > > int bufformat, int reqfirst, int oneframe) > > { > > int rc; > > try > > { > > rc = m_ttsapi.ttsRequestBuffer(ipaddr, port, text, speakerId, > > bufformat, reqfirst, oneframe); > > } > > catch (IOException e) > > { > > rc = -9; > > } > > return rc; > > } > > > /* Typically after if ttsRequestBuffer() successfull to get buffer > contents */ > > public byte[] ttsGetBufferData() > > { > > return m_ttsapi.szVoiceData; > > } > > > /* main entry point for Gateway */ > > public static void main(String[] args) > > { > > GatewayServer gatewayServer = new GatewayServer(new Gateway()); > > gatewayServer.start(); > > } > > } > > > > ------------------------------------------------------------------------------ > Don't let slow site performance ruin your business. Deploy New Relic APM > Deploy New Relic app performance management and know exactly > what is happening inside your Ruby, Python, PHP, Java, and .NET app > Try New Relic at no cost today and get our sweet Data Nerd shirt too! > http://p.sf.net/sfu/newrelic-dev2dev > _______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users > ------------------------------------------------------------------------------ Don't let slow site performance ruin your business. Deploy New Relic APM Deploy New Relic app performance management and know exactly what is happening inside your Ruby, Python, PHP, Java, and .NET app Try New Relic at no cost today and get our sweet Data Nerd shirt too! http://p.sf.net/sfu/newrelic-dev2dev _______________________________________________ Py4j-users mailing list Py4...@li... https://lists.sourceforge.net/lists/listinfo/py4j-users |
From: <kur...@co...> - 2012-10-14 20:13:37
|
Hi Bartelemy, Ok I'll check it out, thanks! ----- Original Message ----- From: "Barthelemy Dagenais" <ba...@cs...> To: "Support and Comments about Py4J" <py4...@li...> Sent: Sunday, October 14, 2012 12:54:23 PM Subject: Re: [Py4j-users] Question about Python bytearray and Java byte[] Hi Kurt, Quick question before I start looking into this in more details: which version of Py4J are you using and which version of Python? There has been **a lot** of work after the latest official release on getting bytearray work correctly. The previous implementation (0.7) was buggy and did not handle bytes that looked like surrogates. You can try the latest version by using the jar file and the tar.gz package found here: https://github.com/bartdag/py4j/tree/master/current-release Although you will see 0.7 in the version, it contains all the bugfixes pushed after the 0.7 release. Thanks, Barthelemy On Sun, Oct 14, 2012 at 3:25 PM, <kur...@co...> wrote: > Hello all, > > First off I want to say thanks to the developers of this project. We are a > python shop using py4j to work with a vendor that provides us .class and .so > library interfaces. For our Mac and Windows developers we use the py4j > package to talk to the .class driver otherwise we use Python's ctypes to > interact with their native unix .so library. > > So my question relates to bytearrays in Python. I have a straightforward > Gateway java class attached below that interacts with our vendor's code. In > red I've highlighted where my issues are. On the python side I'm doing > this: > > code = gateway.ttsRequestBuffer(self.server_ip, self.server_port, text, > self.voice, fmt, bFirst, bAll) > > buf = self.gw.ttsGetBufferData() if (code == > driver_h.TTS_RESULT_SUCCESS) else None > > > buf is a Python bytearray. The Java Gateway is returning byte[] which in > this case is the binary of a short .wav clip. Attached are two files, each > one is the hexdump of the short .wav file. The unix one is generated by > using Python's ctype library and the Java uses py4j to talk to our vendor's > library. > > > Java using py4j: > > 00000000 52 49 46 46 00 1c 02 00 57 41 56 45 66 6d 74 20 |RIFF....WAVEfmt > | > > 00000010 12 00 00 00 01 00 01 00 40 1f 00 00 80 3e 00 00 > |........@....>..| > > > Unix using ctypes: > > 00000000 52 49 46 46 da 1c 02 00 57 41 56 45 66 6d 74 20 |RIFF....WAVEfmt > | > > 00000010 12 00 00 00 01 00 01 00 40 1f 00 00 80 3e 00 00 > |........@....>..| > > > These are the first 32 bytes of the files. This occurs throughout and > doesn't seem to be random, take a look at the file differences between the > two attachments, it's very strange. And I did test writeToTempfile() to > verify it wasn't on the Java side. The problem definitely is between > returning the byte[] buffer on the Java side and the reading of that > bytearray on Python side. > > We would love to get this working so our Mac and Windows developers can work > with our vendor's library. > > Any ideas would be helpful, > Thanks! > Kurt > > > ******************************* > > > import java.lang.String; > > import java.io.IOException; > > > import py4j.GatewayServer; > > import voiceware.libttsapi; // This is our vendors library > > > class Gateway > > { > > private libttsapi m_ttsapi; > > > /* Default c'tor create libttsapi instance used by our gateway to > > * communicate with our python app */ > > public Gateway() > > { > > m_ttsapi = new libttsapi(); > > } > > > > /* python client will call this and get socket error if gateway not up > */ > > public boolean get_gw_status() > > { > > return true; > > } > > > /* server status port is default to 7777 */ > > public int ttsRequestStatus(String ipaddr, int status_port) > > { > > int rc; > > try > > { > > rc = m_ttsapi.ttsRequestStatus(ipaddr, status_port); > > } > > catch (IOException e) > > { > > rc = -9; > > } > > return rc; > > } > > > /* request to generate buffer from tts server */ > > public int ttsRequestBuffer(String ipaddr, int port, String text, int > speakerId, > > int bufformat, int reqfirst, int oneframe) > > { > > int rc; > > try > > { > > rc = m_ttsapi.ttsRequestBuffer(ipaddr, port, text, speakerId, > > bufformat, reqfirst, oneframe); > > } > > catch (IOException e) > > { > > rc = -9; > > } > > return rc; > > } > > > /* Typically after if ttsRequestBuffer() successfull to get buffer > contents */ > > public byte[] ttsGetBufferData() > > { > > return m_ttsapi.szVoiceData; > > } > > > /* main entry point for Gateway */ > > public static void main(String[] args) > > { > > GatewayServer gatewayServer = new GatewayServer(new Gateway()); > > gatewayServer.start(); > > } > > } > > > > ------------------------------------------------------------------------------ > Don't let slow site performance ruin your business. Deploy New Relic APM > Deploy New Relic app performance management and know exactly > what is happening inside your Ruby, Python, PHP, Java, and .NET app > Try New Relic at no cost today and get our sweet Data Nerd shirt too! > http://p.sf.net/sfu/newrelic-dev2dev > _______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users > ------------------------------------------------------------------------------ Don't let slow site performance ruin your business. Deploy New Relic APM Deploy New Relic app performance management and know exactly what is happening inside your Ruby, Python, PHP, Java, and .NET app Try New Relic at no cost today and get our sweet Data Nerd shirt too! http://p.sf.net/sfu/newrelic-dev2dev _______________________________________________ Py4j-users mailing list Py4...@li... https://lists.sourceforge.net/lists/listinfo/py4j-users |
From: Barthelemy D. <ba...@cs...> - 2012-10-14 19:54:31
|
Hi Kurt, Quick question before I start looking into this in more details: which version of Py4J are you using and which version of Python? There has been **a lot** of work after the latest official release on getting bytearray work correctly. The previous implementation (0.7) was buggy and did not handle bytes that looked like surrogates. You can try the latest version by using the jar file and the tar.gz package found here: https://github.com/bartdag/py4j/tree/master/current-release Although you will see 0.7 in the version, it contains all the bugfixes pushed after the 0.7 release. Thanks, Barthelemy On Sun, Oct 14, 2012 at 3:25 PM, <kur...@co...> wrote: > Hello all, > > First off I want to say thanks to the developers of this project. We are a > python shop using py4j to work with a vendor that provides us .class and .so > library interfaces. For our Mac and Windows developers we use the py4j > package to talk to the .class driver otherwise we use Python's ctypes to > interact with their native unix .so library. > > So my question relates to bytearrays in Python. I have a straightforward > Gateway java class attached below that interacts with our vendor's code. In > red I've highlighted where my issues are. On the python side I'm doing > this: > > code = gateway.ttsRequestBuffer(self.server_ip, self.server_port, text, > self.voice, fmt, bFirst, bAll) > > buf = self.gw.ttsGetBufferData() if (code == > driver_h.TTS_RESULT_SUCCESS) else None > > > buf is a Python bytearray. The Java Gateway is returning byte[] which in > this case is the binary of a short .wav clip. Attached are two files, each > one is the hexdump of the short .wav file. The unix one is generated by > using Python's ctype library and the Java uses py4j to talk to our vendor's > library. > > > Java using py4j: > > 00000000 52 49 46 46 00 1c 02 00 57 41 56 45 66 6d 74 20 |RIFF....WAVEfmt > | > > 00000010 12 00 00 00 01 00 01 00 40 1f 00 00 80 3e 00 00 > |........@....>..| > > > Unix using ctypes: > > 00000000 52 49 46 46 da 1c 02 00 57 41 56 45 66 6d 74 20 |RIFF....WAVEfmt > | > > 00000010 12 00 00 00 01 00 01 00 40 1f 00 00 80 3e 00 00 > |........@....>..| > > > These are the first 32 bytes of the files. This occurs throughout and > doesn't seem to be random, take a look at the file differences between the > two attachments, it's very strange. And I did test writeToTempfile() to > verify it wasn't on the Java side. The problem definitely is between > returning the byte[] buffer on the Java side and the reading of that > bytearray on Python side. > > We would love to get this working so our Mac and Windows developers can work > with our vendor's library. > > Any ideas would be helpful, > Thanks! > Kurt > > > ******************************* > > > import java.lang.String; > > import java.io.IOException; > > > import py4j.GatewayServer; > > import voiceware.libttsapi; // This is our vendors library > > > class Gateway > > { > > private libttsapi m_ttsapi; > > > /* Default c'tor create libttsapi instance used by our gateway to > > * communicate with our python app */ > > public Gateway() > > { > > m_ttsapi = new libttsapi(); > > } > > > > /* python client will call this and get socket error if gateway not up > */ > > public boolean get_gw_status() > > { > > return true; > > } > > > /* server status port is default to 7777 */ > > public int ttsRequestStatus(String ipaddr, int status_port) > > { > > int rc; > > try > > { > > rc = m_ttsapi.ttsRequestStatus(ipaddr, status_port); > > } > > catch (IOException e) > > { > > rc = -9; > > } > > return rc; > > } > > > /* request to generate buffer from tts server */ > > public int ttsRequestBuffer(String ipaddr, int port, String text, int > speakerId, > > int bufformat, int reqfirst, int oneframe) > > { > > int rc; > > try > > { > > rc = m_ttsapi.ttsRequestBuffer(ipaddr, port, text, speakerId, > > bufformat, reqfirst, oneframe); > > } > > catch (IOException e) > > { > > rc = -9; > > } > > return rc; > > } > > > /* Typically after if ttsRequestBuffer() successfull to get buffer > contents */ > > public byte[] ttsGetBufferData() > > { > > return m_ttsapi.szVoiceData; > > } > > > /* main entry point for Gateway */ > > public static void main(String[] args) > > { > > GatewayServer gatewayServer = new GatewayServer(new Gateway()); > > gatewayServer.start(); > > } > > } > > > > ------------------------------------------------------------------------------ > Don't let slow site performance ruin your business. Deploy New Relic APM > Deploy New Relic app performance management and know exactly > what is happening inside your Ruby, Python, PHP, Java, and .NET app > Try New Relic at no cost today and get our sweet Data Nerd shirt too! > http://p.sf.net/sfu/newrelic-dev2dev > _______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users > |
From: <kur...@co...> - 2012-10-14 19:26:07
|
00000000 52 49 46 46 00 1c 02 00 57 41 56 45 66 6d 74 20 |RIFF....WAVEfmt | 00000010 12 00 00 00 01 00 01 00 40 1f 00 00 80 3e 00 00 |........@....>..| 00000020 02 00 10 00 e0 c7 66 61 63 74 04 00 00 00 00 00 |......fact......| 00000030 00 00 64 61 74 61 a8 1c 02 00 00 00 00 00 00 00 |..data..........| 00000040 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 |................| 00000050 00 00 00 00 06 00 00 00 00 00 08 00 00 00 00 00 |................| 00000060 00 00 00 00 00 00 00 00 00 00 f2 ff e3 ff 00 00 |................| 00000070 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000080 10 00 10 00 00 00 f0 ff 10 00 00 00 00 00 f0 ff |................| 00000090 f0 ff 00 00 00 00 f0 ff f0 ff 10 00 00 00 00 00 |................| 000000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f0 ff |................| 000000b0 f0 ff 00 00 f0 ff f0 ff 00 00 e0 ff f0 ff 00 00 |................| 000000c0 10 00 10 00 00 00 f0 ff 00 00 00 00 f0 ff 00 00 |................| 000000d0 f0 ff 00 00 10 00 10 00 10 00 10 00 00 00 00 00 |................| 000000e0 f0 ff f0 ff f0 ff 00 00 00 00 00 00 f0 ff 10 00 |................| 000000f0 20 00 10 00 00 00 10 00 10 00 10 00 10 00 10 00 | ...............| 00000100 00 00 00 00 00 00 00 00 00 00 f0 ff 00 00 00 00 |................| 00000110 20 00 20 00 20 00 20 00 10 00 20 00 10 00 00 00 | . . . ... .....| 00000120 10 00 10 00 00 00 e0 ff e0 ff 00 00 00 00 f0 ff |................| 00000130 e0 ff 00 00 00 00 10 00 10 00 00 00 00 00 10 00 |................| 00000140 20 00 10 00 00 00 00 00 00 00 00 00 f0 ff f0 ff | ...............| 00000150 00 00 f0 ff d0 ff 00 00 f0 ff f0 ff 00 00 00 00 |................| 00000160 f0 ff f0 ff 00 00 00 00 00 00 00 00 f0 ff 00 00 |................| 00000170 f0 ff e0 ff e0 ff e0 ff f0 ff 00 00 00 00 00 00 |................| 00000180 10 00 00 00 f0 ff f0 ff f0 ff 00 00 10 00 10 00 |................| 00000190 10 00 10 00 10 00 00 00 00 00 f0 ff 10 00 00 00 |................| 000001a0 f0 ff 00 00 00 00 00 00 f0 ff 00 00 10 00 10 00 |................| 000001b0 00 00 00 00 10 00 10 00 f0 ff f0 ff f0 ff 00 00 |................| 000001c0 00 00 10 00 10 00 10 00 10 00 10 00 10 00 20 00 |.............. .| 000001d0 10 00 20 00 20 00 10 00 10 00 00 00 00 00 e0 ff |.. . ...........| 000001e0 d0 ff c0 ff d0 ff d0 ff e0 ff e0 ff 00 00 10 00 |................| 000001f0 00 00 30 00 20 00 10 00 10 00 20 00 10 00 00 00 |..0. ..... .....| 00000200 f0 ff 20 00 f0 ff 10 00 00 00 30 00 20 00 20 00 |.. .......0. . .| 00000210 d0 ff 80 00 70 00 f0 02 00 05 50 fd 60 fc b0 fe |....p.....P.`...| 00000220 c0 fe f0 ff 00 00 10 ff 20 fe b0 fe b0 ff b0 00 |........ .......| 00000230 d0 00 90 00 f0 00 40 01 70 02 80 03 00 07 80 03 |......@.p.......| 00000240 80 fa 00 fc 00 fd 00 fe 00 ff 00 fe 00 fc 80 fd |................| 00000250 00 02 80 01 00 00 80 fe 00 00 80 02 00 04 80 06 |................| 00000260 00 08 00 05 80 fc 00 f9 00 fb 80 fe 80 00 00 00 |................| 00000270 80 fc 80 f9 80 fb 80 fd 00 ff 00 01 00 02 00 04 |................| 00000280 80 05 00 05 80 01 80 01 80 00 00 01 80 00 00 00 |................| 00000290 00 03 00 ff 80 fa 00 fb 00 fd 00 ff 00 01 80 ff |................| 000002a0 80 fe 80 ff 00 00 80 02 80 03 80 01 80 ff 00 fe |................| 000002b0 80 ff 00 01 00 01 00 01 00 02 80 ff 00 fe 80 fe |................| 000002c0 80 ff 00 02 80 03 00 01 80 fe 00 ff 80 00 80 00 |................| 000002d0 80 ff 80 ff 00 00 00 00 80 00 00 ff 80 ff 00 ff |................| 000002e0 00 00 00 01 80 01 00 01 00 ff 80 ff 00 ff 80 ff |................| 000002f0 00 02 00 01 00 fe 00 fe 80 fe 00 00 80 02 00 02 |................| 00000300 00 ff 00 fd 00 ff 00 01 00 02 00 02 80 01 80 00 |................| 00000310 00 fe 00 fe 00 00 80 01 80 ff 80 ff 00 00 00 fe |................| 00000320 80 fd 00 01 80 03 00 03 80 00 80 fd 80 fd 80 00 |................| 00000330 80 01 00 02 00 00 80 ff 80 fe 00 ff 00 fd 80 00 |................| 00000340 80 01 00 02 80 02 80 ff 80 fe 00 ff 80 00 00 04 |................| 00000350 00 02 80 ff 80 fb 80 fd 00 ff 00 02 80 03 80 01 |................| 00000360 80 fe 00 fb 80 fd 00 00 00 03 80 03 80 00 80 fe |................| 00000370 00 fd 00 00 80 03 00 03 00 00 00 fd 00 fd 80 00 |................| 00000380 80 00 00 01 00 00 80 ff 80 fe 80 00 00 ff 00 00 |................| 00000390 80 02 00 02 80 ff 80 fd 80 ff 00 01 00 02 80 01 |................| 000003a0 00 00 80 fe 00 fe 80 fe 00 ff 00 01 80 00 80 ff |................| 000003b0 80 ff 00 ff 80 ff 00 00 00 01 00 02 00 01 00 ff |................| 000003c0 80 ff 80 01 80 01 00 00 00 fe 00 fe 80 ff 00 01 |................| 000003d0 80 ff 80 ff 00 fe 00 ff 80 ff 80 03 00 03 80 01 |................| 000003e0 80 fd 80 fc 00 01 00 04 00 02 80 00 00 fb 80 fb |................| 000003f0 80 00 00 05 80 03 00 ff 00 fb 00 fd 00 01 80 04 |................| 00000400 00 04 80 ff 80 fa 00 fc 80 01 80 03 00 01 80 ff |................| 00000410 80 ff 80 fe 00 00 00 02 80 01 80 ff 00 00 80 ff |................| 00000420 00 ff 80 fe 80 00 00 00 80 ff 80 fe 00 fe 00 ff |................| 00000430 80 02 00 02 00 03 00 00 00 00 80 ff 00 01 80 01 |................| 00000440 00 00 80 fe 00 fe 80 fe 00 00 80 00 00 00 80 ff |................| 00000450 80 ff 00 fe 80 00 00 02 00 02 80 00 00 00 80 ff |................| 00000460 80 ff 00 00 80 ff 80 fd 80 fe 80 01 00 03 80 01 |................| 00000470 80 00 00 fe 80 ff 00 00 80 01 00 00 00 00 00 ff |................| 00000480 80 00 00 00 00 01 00 00 80 ff 80 00 80 00 00 fe |................| 00000490 00 fe 80 ff 00 02 00 02 00 fe 80 fa 80 fe 80 04 |................| 000004a0 80 05 80 01 00 fd 00 fc 00 01 00 05 00 03 80 fd |................| 000004b0 00 fa 80 fd 00 02 00 04 00 01 80 fc 80 fa 80 ff |................| 000004c0 00 04 80 05 80 00 80 fd 00 fb 00 00 80 03 80 04 |................| 000004d0 80 ff 80 fc 80 fc 00 01 80 02 80 01 00 fe 80 fe |................| 000004e0 00 00 00 02 00 02 80 ff 80 fd 80 ff 00 01 00 03 |................| 000004f0 00 01 80 fd 00 fc 00 fe 80 01 80 02 00 01 00 ff |................| 00000500 00 00 80 01 00 01 80 00 80 ff 80 fe 00 fe 80 fe |................| 00000510 00 02 00 01 80 fe 80 fd 80 01 80 03 80 00 00 fd |................| 00000520 00 fe 80 02 00 05 00 02 00 ff 80 fd 00 fe 00 00 |................| 00000530 80 00 00 00 00 fe 00 fd 80 fe 80 01 fe 01 fd 00 |................| 00000540 7c ff 0a ff 15 00 93 00 54 01 80 01 39 01 fd fd ||.......T...9...| 00000550 8c fe 35 ff 16 01 31 01 00 00 80 ff 73 00 33 00 |..5...1.....s.3.| 00000560 88 00 27 00 09 01 77 00 8c ff ac fe 65 00 95 01 |..'...w.....e...| 00000570 7f 01 f2 ff 46 fe 36 fe 00 00 00 00 ea 01 f2 01 |....F.6.........| 00000580 00 00 04 fe 01 fe 00 00 00 00 00 00 00 00 00 00 |................| 00000590 00 00 00 02 00 02 00 00 00 fe 00 fe 00 00 00 02 |................| 000005a0 00 02 00 00 00 00 00 00 00 02 00 02 00 02 00 00 |................| 000005b0 00 00 00 00 00 00 00 02 00 00 00 fc 00 fc 00 00 |................| 000005c0 00 04 00 02 00 00 00 fe 00 fe 00 fe 00 fe 00 fe |................| 000005d0 00 fc 00 fc 00 fc 00 fe 00 fe 00 fe 00 fc 00 fe |................| 000005e0 00 02 00 00 00 00 00 00 00 04 00 04 00 04 00 04 |................| 000005f0 00 06 00 08 00 08 00 06 00 06 00 04 00 02 00 00 |................| 00000600 00 fe 00 00 00 fe 00 00 00 00 00 00 00 fe 00 fe |................| 00000610 00 fc 00 fc 00 f8 00 f8 00 fa 00 fa 00 fa 00 f8 |................| 00000620 00 f8 00 f8 00 f8 00 f8 00 f8 00 f8 00 fa 00 04 |................| 00000630 00 10 00 16 00 12 00 0c 00 0e 00 10 00 0c 00 06 |................| 00000640 00 04 00 00 00 fe 00 00 00 02 00 02 00 fe 00 fe |................| 00000650 00 02 00 04 00 00 00 fc 00 fc 00 fc 00 f8 00 f6 |................| 00000660 00 f4 00 f2 00 f0 00 f4 00 f8 00 f8 00 f2 00 ee |................| 00000670 00 f0 00 f4 00 02 00 14 00 1c 00 16 00 12 00 16 |................| 00000680 00 18 00 0e 00 fe 00 f8 00 fe 00 08 00 08 00 02 |................| 00000690 00 fe 00 04 00 08 00 08 00 00 00 fa 00 fe 00 02 |................| 000006a0 00 00 00 f6 00 f2 00 f2 00 f6 00 f6 00 f2 00 ee |................| 000006b0 00 f0 00 f6 00 fa 00 f4 00 e8 00 e6 00 fe 00 1e |................| 000006c0 00 2c 00 1a 00 0c 00 10 00 1c 00 14 00 00 00 ee |.,..............| 000006d0 00 f2 00 06 00 12 00 0c 00 fc 00 fe 00 0a 00 10 |................| 000006e0 00 04 00 f8 00 f6 00 00 00 00 00 fa 00 f0 00 ee |................| 000006f0 00 f2 00 fa 00 f8 00 f0 00 ee 00 f4 00 f8 00 f2 |................| 00000700 00 e6 00 e6 00 04 00 28 00 30 00 1a 00 0c 00 10 |.......(.0......| 00000710 00 1a 00 0c 00 f6 00 ea 00 f0 00 08 00 18 00 10 |................| 00000720 00 00 00 fe 00 0e 00 10 00 02 00 f2 00 f4 00 fe |................| 00000730 00 fe 00 f8 00 f2 00 f0 00 f8 00 fc 00 fc 00 f4 |................| 00000740 00 f4 00 f8 00 f8 00 f0 00 e8 00 e8 00 00 00 24 |...............$| 00000750 00 30 00 18 00 08 00 0c 00 14 00 08 00 f4 00 e8 |.0..............| 00000760 00 f0 00 00 00 14 00 18 00 08 00 00 00 08 00 10 |................| 00000770 00 04 00 f4 00 f0 00 f8 00 fc 00 f8 00 f4 00 f4 |................| 00000780 00 f8 00 00 00 00 00 f8 00 f4 00 f4 00 f4 00 f0 |................| 00000790 00 e8 00 e8 00 f4 ff 1f ff 33 ff 27 ff 07 ff 07 |.........3.'....| 000007a0 ff 0f ff 0b 01 f4 01 e8 01 e8 01 f8 ff 0b ff 17 |................| 000007b0 ff 13 ff 07 ff 07 ff 0b ff 07 00 f8 01 f0 01 f4 |................| 000007c0 01 f8 01 f8 01 f8 01 f4 01 f8 00 00 ff 03 00 00 |................| 000007d0 01 f8 01 f8 01 f4 01 f0 01 e8 01 ec 01 e4 ff 03 |................| 000007e0 00 30 00 38 00 1c 00 04 00 10 00 10 00 04 00 ec |.0.8............| 000007f0 00 e4 00 e8 00 00 00 14 00 14 00 10 00 14 00 14 |................| 00000800 00 08 00 fc 00 f4 00 ec 00 f0 00 f4 00 f8 00 f8 |................| 00000810 00 fc 00 00 00 00 00 00 00 00 00 fc 00 f4 00 f0 |................| 00000820 00 ec 00 e8 00 ec 00 e4 00 00 00 34 00 3c 00 20 |...........4.<. | 00000830 00 04 00 10 00 10 00 08 00 ec 00 00 00 e0 00 00 |................| 00000840 00 18 00 14 00 0c 00 18 00 1c 00 0c 00 f8 00 ec |................| 00000850 00 ec 00 f0 00 f8 00 f4 00 f4 00 fc 00 08 00 04 |................| 00000860 00 00 00 fc 00 00 00 f8 00 f4 00 ec 00 ec 00 e8 |................| 00000870 00 f0 00 ec 00 18 00 3c 00 34 00 10 00 04 00 10 |.......<.4......| 00000880 00 08 00 fc 00 e0 00 00 00 ec 00 10 00 18 00 10 |................| 00000890 00 0c 00 1c 00 1c 00 08 00 ec 00 e4 00 ec 00 f8 |................| 000008a0 00 f8 00 f4 00 f8 00 04 00 0c 00 04 00 fc 00 fc |................| 000008b0 00 fc 00 f8 00 f4 00 e8 00 e8 00 ec 00 f4 00 ec |................| 000008c0 00 10 00 3c 00 30 00 18 00 08 00 0c 00 00 00 fc |...<.0..........| 000008d0 00 e4 00 00 00 ec 00 0c 00 14 00 14 00 10 00 18 |................| 000008e0 00 18 00 0c 00 f0 00 e4 00 e8 00 f8 00 f8 00 f8 |................| 000008f0 00 fc 00 04 00 08 00 08 00 fc 00 fc 00 fc 00 fc |................| 00000900 00 f4 00 ec 00 e8 00 ec 00 f0 00 f0 00 fc 00 34 |...............4| 00000910 00 38 00 24 00 08 00 08 00 04 00 00 00 ec 00 00 |.8.$............| 00000920 00 e4 00 04 00 18 00 18 00 10 00 10 00 18 00 14 |................| 00000930 00 f8 00 e4 00 e8 00 f4 00 fc 00 f8 00 f8 00 00 |................| 00000940 00 08 00 0c 00 00 00 fc 00 fc 00 fc 00 f4 00 ec |................| 00000950 00 e4 00 e8 00 ec 00 f4 00 f0 00 24 00 40 00 2c |...........$.@.,| 00000960 00 10 00 04 00 04 00 00 00 f8 00 00 00 00 00 f8 |................| 00000970 00 14 00 18 00 14 00 0c 00 14 00 1c 00 04 00 e8 |................| 00000980 00 e4 00 ec 00 f8 00 fc 00 f8 00 f8 00 0c 00 10 |................| 00000990 00 08 00 fc 00 fc 00 fc 00 f8 00 f0 00 e4 00 e4 |................| 000009a0 00 ec 00 f4 00 f0 00 0c 00 3c 00 34 00 20 00 08 |.........<.4. ..| 000009b0 00 04 00 00 00 00 00 e0 00 00 00 ec 00 0c 00 18 |................| 000009c0 00 1c 00 10 00 14 00 1c 00 10 00 f0 00 e0 00 e4 |................| 000009d0 00 f0 00 fc 00 fc 00 f8 00 08 00 14 00 0c 00 00 |................| 000009e0 00 fc 00 f8 00 f8 00 f0 00 e4 00 e0 00 e8 00 f0 |................| 000009f0 00 f4 00 f8 00 30 00 3c 00 28 00 10 00 04 00 00 |.....0.<.(......| 00000a00 00 04 00 f0 00 00 00 e4 00 00 00 14 00 1c 00 14 |................| 00000a10 00 10 00 18 00 1c 00 fc 00 e4 00 e0 00 ec 00 f8 |................| 00000a20 00 00 00 f8 00 00 00 10 00 10 00 04 00 fc 00 f4 |................| 00000a30 00 f8 00 f4 00 e8 00 e0 00 e8 00 ec 00 f8 00 f4 |................| 00000a40 00 18 00 38 00 30 00 1c 00 08 00 00 00 04 00 fc |...8.0..........| 00000a50 00 e0 00 00 00 f4 00 0c 00 18 00 18 00 10 00 14 |................| 00000a60 00 20 00 08 00 ec 00 e0 00 e8 00 f4 00 fc 00 f8 |. ..............| 00000a70 00 fc 00 0c 00 10 00 08 00 fc 00 f8 00 f4 00 f4 |................| 00000a80 00 ec 00 e4 00 e8 00 ec 00 f4 00 f4 00 04 00 34 |...............4| 00000a90 00 34 00 24 00 0c 00 04 00 08 00 04 00 e8 00 00 |.4.$............| 00000aa0 00 e8 00 04 00 14 00 18 00 0c 00 18 00 20 00 10 |............. ..| 00000ab0 00 f4 00 e8 00 e4 00 f0 00 f8 00 f4 00 f8 00 08 |................| 00000ac0 00 0c 00 0c 00 00 00 fc 00 f8 00 f4 00 f0 00 e8 |................| 00000ad0 00 e8 00 e8 00 f0 00 f0 00 00 00 2c 00 34 00 28 |...........,.4.(| 00000ae0 00 14 00 08 00 0c 00 08 00 ec 00 00 00 e4 00 f8 |................| 00000af0 00 0c 00 14 00 0c 00 18 00 24 00 18 00 00 00 ec |.........$......| 00000b00 00 e8 00 f0 00 f0 00 f0 00 f4 00 00 00 0c 00 0c |................| 00000b10 00 04 00 00 00 fc 00 f8 00 f0 00 e4 00 e4 00 e4 |................| 00000b20 00 e8 00 e8 00 00 00 30 00 38 00 30 00 1c 00 10 |.......0.8.0....| 00000b30 00 14 00 0c 00 e8 00 00 00 00 00 f4 00 08 00 0c |................| 00000b40 00 10 00 20 00 24 00 1c 00 04 00 f0 00 e8 00 ec |... .$..........| 00000b50 00 e8 00 ec 00 f4 00 fc 00 08 00 0c 00 08 00 04 |................| 00000b60 00 00 00 f8 00 ec 00 e8 00 e4 00 e4 00 e0 00 e4 |................| 00000b70 00 0c 00 30 00 34 00 2c 00 1c 00 18 00 1c 00 04 |...0.4.,........| 00000b80 00 e8 00 00 00 e0 00 f4 00 00 00 04 00 14 00 1c |................| 00000b90 00 24 00 18 00 06 00 f8 00 ee 00 e9 00 e5 00 e7 |.$..............| 00000ba0 00 f0 00 fb 00 02 00 08 00 08 00 06 00 00 00 f7 |................| 00000bb0 00 ef 00 ec 00 e5 00 e2 00 00 00 f7 00 1a 00 29 |...............)| 00000bc0 00 2c 00 21 00 1e 00 24 00 16 00 fb 00 e6 00 e1 |.,.!...$........| 00000bd0 00 ed 00 f5 00 fe 00 04 00 0e 00 1b 00 1c 00 12 |................| 00000be0 00 07 00 f9 00 f3 00 ed 00 e8 00 e8 00 ef 00 f6 |................| 00000bf0 00 ff 00 03 00 03 00 02 00 fd 00 f8 00 f4 00 ec |................| 00000c00 00 e8 00 e2 00 f6 00 0d 00 19 00 20 00 1c 00 1f |........... ....| 00000c10 00 25 00 19 00 08 00 f6 00 ed 00 f5 00 f8 00 f7 |.%..............| 00000c20 00 f9 00 01 00 0d 00 14 00 0d 00 07 00 02 00 fe |................| 00000c30 00 f9 00 ef 00 ea 00 ed 00 f2 00 f7 00 f9 00 f9 |................| 00000c40 00 fc 00 fc 00 fb 00 f6 00 f2 00 ed 00 f6 00 05 |................| 00000c50 00 0f 00 14 00 13 00 17 00 1d 00 1b 00 10 00 03 |................| 00000c60 00 fb 00 00 00 00 00 fa 00 f8 00 f9 00 02 00 08 |................| 00000c70 00 05 00 03 00 02 00 03 00 02 00 f9 00 f3 00 f0 |................| 00000c80 00 f1 00 f1 00 ef 00 f0 00 f4 00 f7 00 f7 00 f6 |................| 00000c90 00 f3 00 fc 00 08 00 10 00 13 00 11 00 12 00 16 |................| 00000ca0 00 15 00 10 00 06 00 01 00 04 00 02 00 ff 00 fc |................| 00000cb0 00 fb 00 01 00 03 00 02 00 01 00 00 00 02 00 02 |................| 00000cc0 00 fd 00 f9 00 f5 00 f3 00 f1 00 ec 00 ea 00 ed |................| 00000cd0 00 f1 00 f6 00 f5 00 f7 00 01 00 0b 00 13 00 14 |................| 00000ce0 00 0f 00 12 00 14 00 13 00 0d 00 05 00 05 00 05 |................| 00000cf0 00 02 00 00 00 fc 00 fe 00 01 00 00 00 00 00 00 |................| 00000d00 00 01 00 03 00 ff 00 fb 00 f9 00 f7 00 f5 00 f0 |................| 00000d10 00 ed 00 ee 00 ef 00 f0 00 ef 00 f1 00 fa 00 05 |................| 00000d20 00 0c 00 10 00 11 00 13 00 17 00 15 00 10 00 0b |................| 00000d30 00 07 00 06 00 04 00 01 00 ff 00 fe 00 ff 00 00 |................| 00000d40 00 ff 00 ff 00 00 00 00 00 00 00 fe 00 fc 00 fa |................| 00000d50 00 f6 00 f4 00 f3 00 f3 00 f3 00 f3 00 f3 00 f5 |................| 00000d60 00 f7 00 fb 00 ff 00 03 00 08 00 0b 00 0e 00 10 |................| 00000d70 00 0f 00 0f 00 0e 00 0a 00 08 00 05 00 04 00 05 |................| 00000d80 00 03 00 02 00 01 00 00 00 00 00 ff 00 fd 00 fc |................| 00000d90 00 fb 00 fb 80 f9 40 f9 00 f9 80 f8 40 f8 80 f8 |......@.....@...| 00000da0 80 f8 c0 f8 80 f9 40 f9 00 fa 80 fb c0 fd 80 ff |......@.........| 00000db0 80 01 40 03 00 06 80 08 c0 09 40 09 40 08 80 08 |..@.......@.@...| 00000dc0 40 08 40 07 40 06 00 04 c0 04 80 05 40 03 40 02 |@.@.@.......@.@.| 00000dd0 00 01 00 00 c0 ff c0 fd 00 fb 80 f9 40 f9 00 f9 |............@...| 00000de0 40 fa 00 fa 40 fb 00 fb 40 fb c0 fa 40 fb c0 fc |@...@...@...@...| 00000df0 c0 fd c0 fd 00 fe 02 fe fe ff 2f 01 69 01 23 02 |........../.i.#.| 00000e00 9e 02 1c 04 1c 05 0a 05 67 05 73 05 ea 05 18 06 |........g.s.....| 00000e10 65 05 ee 04 c2 04 9b 04 20 04 d7 02 d0 01 43 01 |e....... .....C.| 00000e20 bb ff 11 ff 75 fd 40 fc 61 fb 00 f9 8f f8 7a f8 |....u.@.a.....z.| 00000e30 53 f8 f4 f8 1d f9 4c fa 43 fc 81 fd c0 fe 40 ff |S.....L.C.....@.| 00000e40 80 ff 00 00 80 00 00 00 40 ff c0 ff c0 00 c0 02 |........@.......| 00000e50 80 04 c0 05 c0 05 80 06 80 06 00 06 c0 04 40 04 |..............@.| 00000e60 c0 02 c0 01 c0 00 40 00 c0 ff 00 00 00 ff 40 fe |......@.......@.| 00000e70 00 fd 00 fc c0 fa 80 fa 80 fa 80 fa 40 fb 00 fd |............@...| 00000e80 c0 fd 00 ff 80 ff 80 00 c0 00 40 01 80 00 40 00 |..........@...@.| 00000e90 80 ff 80 ff 00 00 00 01 80 01 40 03 80 03 c0 05 |..........@.....| 00000ea0 40 06 80 04 80 03 40 02 c0 01 80 00 c0 fe 00 fe |@.....@.........| 00000eb0 40 fd 40 fd c0 fd 00 fe 40 fe 80 fd c0 fd 00 fe |@.@.....@.......| 00000ec0 c0 fd 40 fd 40 fe 80 fd 80 fe 80 ff 00 00 40 01 |..@.@.........@.| 00000ed0 40 02 40 02 00 02 00 01 40 01 00 01 80 00 c0 00 |@.@.....@.......| 00000ee0 c0 00 80 00 80 01 80 02 00 03 c0 02 00 03 40 02 |..............@.| 00000ef0 c0 00 00 ff 80 fe c0 fc c0 fc 00 fc 80 fc 00 fd |................| 00000f00 00 fe c0 fe 00 00 00 00 40 00 80 ff 40 ff 80 ff |........@...@...| 00000f10 80 ff 40 ff 80 00 80 00 80 01 c0 01 40 02 40 02 |..@.........@.@.| 00000f20 40 02 c0 01 c0 01 00 01 c0 00 c0 00 40 00 00 01 |@...........@...| 00000f30 00 01 00 01 00 01 80 00 00 00 00 ff 40 fd 40 fd |............@.@.| 00000f40 c0 fc 00 fc c0 fc 40 fd 40 fe 40 ff 00 ff c0 00 |......@.@.@.....| 00000f50 40 00 40 01 00 01 80 00 40 01 00 01 80 00 c0 00 |@.@.....@.......| 00000f60 00 01 00 01 40 01 40 01 80 02 c0 01 80 01 80 01 |....@.@.........| 00000f70 40 01 80 00 80 00 40 00 40 00 c0 ff 80 ff 40 ff |@.....@.@.....@.| 00000f80 c0 fe 80 fe 80 fe 40 fe 40 fd 40 fd 40 fd c0 fd |......@.@.@.@...| 00000f90 00 fe c0 fe c0 ff 40 00 00 01 c0 00 40 01 40 01 |......@.....@.@.| 00000fa0 80 01 00 01 40 01 00 01 40 01 80 01 00 01 40 01 |....@...@.....@.| 00000fb0 80 01 80 01 80 01 00 01 80 01 c0 00 80 00 40 00 |..............@.| 00000fc0 80 ff 40 ff c0 fe 00 ff 80 fe 80 fe 00 fe c0 fd |..@.............| 00000fd0 00 fe 00 fe 80 fd c0 fd c0 fe 40 ff 00 00 80 00 |..........@.....| 00000fe0 80 00 c0 01 c0 01 80 01 c0 00 c0 00 80 01 c0 00 |................| 00000ff0 40 01 c0 00 40 01 40 01 80 01 40 01 40 01 00 01 |@...@.@...@.@...| 00001000 40 01 40 00 00 00 40 00 40 ff 80 ff c0 fe 00 ff |@.@...@.@.......| 00001010 40 fe 80 fe 00 fe 40 fe c0 fd 40 fe 81 fe 84 fe |@.....@...@.....| 00001020 44 ff ff ff 3a 00 b1 00 1d 01 4d 01 74 01 cf 00 |D...:.....M.t...| 00001030 c5 00 5c 00 95 00 67 00 5a 00 22 00 73 00 7b 00 |..\...g.Z.".s.{.| 00001040 77 00 7b 00 39 00 46 00 37 00 23 00 2f 00 f0 ff |w.{.9.F.7.#./...| 00001050 f3 ff f2 ff e9 ff 05 00 be ff c3 ff 97 ff e2 ff |................| 00001060 93 ff b2 ff 91 ff b1 ff 90 ff c0 ff f0 ff 00 00 |................| 00001070 00 00 50 00 30 00 50 00 10 00 70 00 50 00 60 00 |..P.0.P...p.P.`.| 00001080 80 00 20 00 a0 00 30 00 70 00 20 00 40 00 f0 ff |.. ...0.p. .@...| 00001090 10 00 c0 ff d0 ff a0 ff f0 ff 40 ff a0 ff 70 ff |..........@...p.| 000010a0 a0 ff 80 ff c0 ff b0 ff e0 ff e0 ff 30 00 10 00 |............0...| 000010b0 30 00 20 00 60 00 00 00 a0 00 00 00 80 00 00 00 |0. .`...........| 000010c0 90 00 40 00 40 00 50 00 00 00 30 00 f0 ff e0 ff |..@.@.P...0.....| 000010d0 e0 ff c0 ff d0 ff e0 ff a0 ff b0 ff 80 ff c0 ff |................| 000010e0 e0 ff 00 00 d0 ff 10 00 e0 ff 20 00 e0 ff 40 00 |.......... ...@.| 000010f0 00 00 40 00 00 00 30 00 30 00 30 00 10 00 30 00 |..@...0.0.0...0.| 00001100 50 00 f0 ff 40 00 d0 ff 10 00 f0 ff f0 ff f0 ff |P...@...........| 00001110 f0 ff e0 ff f0 ff e0 ff 30 00 d0 ff 20 00 e0 ff |........0... ...| 00001120 30 00 b0 ff 10 00 e0 ff 10 00 e0 ff 00 00 c0 ff |0...............| 00001130 20 00 30 00 e0 ff 00 00 c0 ff 30 00 c0 ff 60 00 | .0.......0...`.| 00001140 a0 ff 50 00 e0 ff 20 00 20 00 00 00 20 00 e0 ff |..P... . ... ...| 00001150 50 00 10 00 20 00 10 00 40 00 d0 ff 30 00 00 00 |P... ...@...0...| 00001160 40 00 c0 ff 40 00 00 00 00 00 c0 ff c0 ff c0 ff |@...@...........| 00001170 00 00 c0 ff 00 00 80 ff 40 00 40 ff 80 00 80 ff |........@.@.....| 00001180 80 00 80 ff 40 00 c0 ff 40 00 00 00 40 00 c0 ff |....@...@...@...| 00001190 40 00 00 00 00 00 00 00 00 00 40 00 40 00 00 00 |@.........@.@...| 000011a0 40 00 00 00 40 00 00 00 c0 ff 00 00 c0 ff 00 00 |@...@...........| 000011b0 80 ff 00 00 80 ff 00 00 c0 ff 40 00 c0 ff 40 00 |..........@...@.| 000011c0 c0 ff 40 00 c0 ff 00 00 80 ff 40 00 00 00 40 00 |..@.......@...@.| 000011d0 00 00 00 00 00 00 00 00 40 00 00 00 40 00 00 00 |........@...@...| 000011e0 40 00 00 00 40 00 c0 ff 00 00 40 00 c0 ff 40 00 |@...@.....@...@.| 000011f0 00 00 c0 ff 00 00 00 00 00 00 c0 ff c0 ff 40 00 |..............@.| 00001200 80 ff 40 00 80 ff 40 00 c0 ff 00 00 00 00 40 00 |..@...@.......@.| 00001210 00 00 40 00 c0 ff c0 00 40 ff c0 00 00 ff 00 01 |..@.....@.......| 00001220 00 ff 00 01 40 ff c0 00 40 ff c0 00 c0 ff 40 00 |....@...@.....@.| 00001230 00 00 c0 ff 00 00 80 ff 40 00 80 ff 80 00 80 ff |........@.......| 00001240 80 00 40 ff c0 00 80 ff 00 01 40 ff c0 00 00 00 |..@.......@.....| 00001250 00 00 00 00 40 00 00 00 c0 ff c0 ff 80 00 00 00 |....@...........| 00001260 c0 ff 00 00 c0 ff 40 00 c0 ff c0 00 80 ff 40 00 |......@.......@.| 00001270 80 ff 80 00 c0 ff 00 00 40 ff 40 00 80 ff 80 00 |........@.@.....| 00001280 80 ff 40 00 80 ff 80 00 c0 ff 80 00 80 ff 40 00 |..@...........@.| 00001290 c0 ff c0 00 c0 ff 80 00 40 ff 80 00 c0 ff c0 00 |........@.......| 000012a0 80 ff 40 00 80 ff 40 00 80 ff 40 00 40 ff 80 00 |..@...@...@.@...| 000012b0 40 ff c0 00 40 ff 40 01 c0 fe 00 02 40 fe 00 02 |@...@.@.....@...| 000012c0 40 fe 80 01 80 fe 40 01 80 fe 80 01 40 fe 40 01 |@.....@.....@.@.| 000012d0 80 fe 40 01 00 ff c0 00 c0 ff c0 00 c0 ff 80 00 |..@.............| 000012e0 00 00 80 ff 40 00 40 ff 00 01 80 fe 80 01 40 fe |....@.@.......@.| 000012f0 80 01 80 fe 40 01 00 ff 00 01 00 ff 00 01 80 ff |....@...........| 00001300 c0 00 00 ff c0 00 40 ff 40 01 40 ff 40 00 80 00 |......@.@.@.@...| 00001310 c0 ff 80 01 80 ff 00 00 40 00 40 ff c0 00 40 fe |........@.@...@.| 00001320 40 01 40 fe 40 01 40 fe c0 00 40 ff c0 00 00 00 |@.@.@.@...@.....| 00001330 c0 ff 40 00 40 ff 00 01 40 ff 80 00 c0 ff 80 ff |..@.@...@.......| 00001340 00 01 c0 fe 80 02 00 fe 00 02 c0 fe c0 ff 80 01 |................| 00001350 80 fd c0 02 00 fe 40 00 c0 ff 00 ff 00 02 00 fe |......@.........| 00001360 40 02 c0 fe c0 00 00 02 40 fe 40 02 80 fd c0 01 |@.......@.@.....| 00001370 80 fe 80 00 80 ff 80 ff 40 00 c0 fe 00 01 c0 fe |........@.......| 00001380 40 01 c0 ff 00 00 00 01 40 fe 40 03 c0 fd 80 01 |@.......@.@.....| 00001390 80 ff 80 ff 80 01 40 fd 00 01 80 ff 40 ff 40 01 |......@.....@.@.| 000013a0 80 fd 80 01 00 ff 80 01 40 00 40 ff 40 ff 80 ff |........@.@.@...| 000013b0 c0 01 c0 00 c0 00 c0 ff c0 fe 40 00 c0 00 40 01 |..........@...@.| 000013c0 00 00 00 ff 40 fe 00 00 40 01 00 00 80 00 40 fd |....@...@.....@.| 000013d0 80 00 40 00 00 00 00 02 40 ff 00 00 c0 ff 00 00 |..@.....@.......| 000013e0 00 01 00 00 00 01 40 fd 80 00 40 00 80 00 80 01 |......@...@.....| 000013f0 00 ff c0 ff 80 ff c0 00 00 01 c0 ff c0 00 00 fe |................| 00001400 c0 01 80 fe 40 00 00 01 40 fd c0 01 40 fe 40 00 |....@...@...@.@.| 00001410 80 01 00 fe 40 00 80 fe 40 00 40 01 00 00 c0 00 |....@...@.@.....| 00001420 40 ff 40 00 00 00 81 ff 7f 00 3f 00 00 00 bf 00 |@.@.......?.....| 00001430 c1 fe bf 00 7f 00 00 00 7f 01 81 ff 81 ff 00 00 |................| 00001440 00 00 3f 00 c1 ff c1 ff 41 ff bf 00 01 ff 3f 00 |..?.....A.....?.| 00001450 7f 00 3f 00 3f 01 01 ff c1 ff 00 00 3f 00 3f 00 |..?.?.......?.?.| 00001460 c1 fe 80 00 00 ff 00 00 80 ff 00 ff 40 00 00 00 |............@...| 00001470 c0 ff 00 00 00 00 c0 00 40 00 40 00 80 ff 00 00 |........@.@.....| 00001480 00 00 00 00 c0 ff c0 ff 40 01 80 01 40 02 00 02 |........@...@...| 00001490 c0 01 00 00 c0 fe c0 fe c0 fe 40 ff c0 ff 40 00 |..........@...@.| 000014a0 00 00 c0 fe 40 ff 00 00 40 00 c0 00 80 ff 00 ff |....@...@.......| 000014b0 c0 fe c0 fe c0 ff 40 ff 40 ff 80 ff 80 ff c0 ff |......@.@.......| 000014c0 40 ff 00 00 80 00 00 01 80 01 80 01 c0 01 80 01 |@...............| 000014d0 00 01 00 01 c0 00 c0 00 80 00 40 00 80 ff 80 ff |..........@.....| 000014e0 c0 ff 00 00 c0 ff 80 ff 40 ff 00 ff 80 ff 80 ff |........@.......| 000014f0 00 00 c0 ff c0 ff c0 ff 40 ff c0 ff 40 ff c0 ff |........@...@...| 00001500 c0 ff 40 00 80 00 40 00 c0 00 80 00 c0 00 80 00 |..@...@.........| 00001510 40 00 40 00 40 00 80 00 40 00 00 00 00 00 c0 ff |@.@.@...@.......| 00001520 80 ff c0 ff 80 ff 80 ff 80 ff 40 ff 80 ff c0 ff |..........@.....| 00001530 c0 ff 00 00 00 00 40 00 40 00 c0 00 80 01 c0 01 |......@.@.......| 00001540 c0 01 40 01 c0 00 80 00 80 00 80 00 00 00 c0 ff |..@.............| 00001550 80 ff 40 ff 40 ff 40 ff c0 fe 80 fe 40 fe 00 fe |..@.@.@.....@...| 00001560 80 fe 80 fe 80 fe 40 fe 80 fe 80 fe c0 fe 40 ff |......@.......@.| 00001570 80 ff 00 00 80 00 00 01 80 01 40 02 00 03 80 03 |..........@.....| 00001580 00 04 c0 03 00 04 00 04 c0 03 c0 03 00 03 80 02 |................| 00001590 c0 01 c0 00 00 00 00 ff 00 fe c0 fc 40 fb 80 f9 |............@...| 000015a0 00 f8 00 f7 80 f6 40 f6 40 f6 c0 f6 40 f7 c0 f8 |......@.@...@...| 000015b0 00 fb 00 fe 40 01 40 05 40 0a 80 0e 00 12 40 14 |....@.@.@.....@.| 000015c0 80 14 c0 12 40 10 00 0c 00 08 00 04 80 00 00 fe |....@...........| 000015d0 c0 fb 80 f9 80 f6 80 f3 c0 f0 00 ef 00 ee 80 ed |................| 000015e0 40 ed 80 ec 80 ed 80 f0 00 f5 40 fb 40 02 40 08 |@.........@.@.@.| 000015f0 80 0c 40 10 c0 12 40 15 80 17 80 17 00 16 40 13 |..@...@.......@.| 00001600 c0 0f c0 0b c0 08 80 04 80 00 40 fc 00 f9 40 f6 |..........@...@.| 00001610 80 f4 80 f3 00 f2 00 f0 00 ed 00 ea 40 e6 40 e4 |............@.@.| 00001620 40 e6 80 eb 00 f4 00 fe 00 09 00 0f 00 13 00 15 |@...............| 00001630 00 16 00 17 00 17 00 16 00 14 00 12 00 0f 00 0b |................| 00001640 00 08 00 03 00 ff 00 fb 00 f8 00 f6 00 f5 00 f4 |................| 00001650 00 f2 00 f0 00 ec 00 e7 00 e1 00 e1 00 e5 00 ee |................| 00001660 00 fb 00 08 00 11 00 16 00 16 00 16 00 15 00 15 |................| 00001670 00 14 00 11 00 10 00 0e 00 0b 00 08 00 05 00 00 |................| 00001680 00 fd 00 fa 00 f9 00 f8 00 f8 00 f6 00 f3 00 ee |................| 00001690 00 e8 00 e1 00 00 00 00 00 e7 00 f5 00 04 00 12 |................| 000016a0 00 18 00 1b 00 19 00 18 00 15 00 13 00 11 00 0f |................| 000016b0 00 0d 00 0b 00 08 00 04 00 00 00 fc 00 f9 00 f8 |................| 000016c0 00 f8 00 f8 00 f8 00 f5 00 f1 00 eb 00 e4 00 00 |................| 000016d0 00 00 00 e2 00 ef 00 00 00 11 00 1a 00 1f 00 1e |................| 000016e0 00 1b 00 16 00 13 00 10 00 0d 00 0c 00 0a 00 08 |................| 000016f0 00 04 00 01 00 fc 00 fa 00 f9 00 f9 00 fa 00 fa |................| 00001700 00 f9 00 f6 00 f1 00 eb 00 e4 00 e0 00 e3 00 ed |................| 00001710 00 fa 00 09 00 15 00 1b 00 1c 00 19 00 14 00 0f |................| 00001720 00 0d 00 0a 00 08 00 08 00 07 00 05 00 02 00 ff |................| 00001730 00 fc 00 fa 00 fa 00 fa 00 fb 00 fb 00 f8 00 f4 |................| 00001740 00 ed 00 e5 00 00 00 00 00 e6 00 f5 00 05 00 15 |................| 00001750 00 1d 00 1f 00 1d 00 18 00 11 00 0b 00 09 00 06 |................| 00001760 00 08 00 07 00 07 00 03 00 01 00 fc 00 fa 00 f9 |................| 00001770 00 fa 00 fb 00 fc 00 fb 00 f7 00 f0 00 e8 00 00 |................| 00001780 00 d7 00 00 00 ec 00 00 00 12 00 20 00 22 00 21 |........... .".!| 00001790 00 19 00 11 00 09 00 06 00 05 00 07 00 0a 00 0a |................| 000017a0 00 08 00 03 00 ff 00 f9 00 f8 00 f8 00 fc 00 fe |................| 000017b0 00 00 00 fb 00 f5 00 e9 00 00 00 d2 00 d5 00 e4 |................| 000017c0 00 fb 00 11 00 22 00 27 00 22 00 1a 00 0e 00 06 |.....".'."......| 000017d0 00 01 00 04 00 06 00 0c 00 0d 00 0c 00 05 00 ff |................| 000017e0 00 f9 00 f7 00 fa 00 fe 00 03 00 04 00 01 00 f7 |................| 000017f0 00 eb 00 00 00 d3 00 cd 00 00 00 f2 00 0d 00 1f |................| 00001800 00 29 00 23 00 1a 00 0f 00 07 00 03 00 03 00 08 |.).#............| 00001810 00 0a 00 0e 00 0a 00 06 00 fd 00 fa 00 f9 00 fe |................| 00001820 00 03 00 07 00 06 00 00 00 f6 00 ea 00 e0 00 00 |................| 00001830 00 d6 00 00 00 ea 00 fe 00 14 00 20 00 26 00 1e |........... .&..| 00001840 00 18 00 0e 00 08 00 02 00 02 00 06 00 06 00 0a |................| 00001850 00 06 00 04 00 fe 00 fe 00 00 00 04 00 06 00 06 |................| 00001860 00 00 00 fa 00 f0 00 e6 00 e0 00 00 00 00 00 00 |................| 00001870 00 ec 00 fe 00 18 00 24 00 2a 00 20 00 18 00 0a |.......$.*. ....| 00001880 00 04 00 fe 00 00 00 04 00 08 00 0a 00 06 00 04 |................| 00001890 00 fe 00 00 00 02 00 08 00 06 00 04 00 fc 00 f4 |................| 000018a0 00 ec 00 e6 00 e4 00 e0 00 00 00 00 00 e8 00 fc |................| 000018b0 00 18 00 28 00 30 00 26 00 16 00 06 00 fc 00 fa |...(.0.&........| 000018c0 00 fc 00 08 00 0a 00 0c 00 06 00 02 00 fe 00 02 |................| 000018d0 00 08 00 0c 00 08 00 00 00 f6 00 ee 00 ec 00 ea |................| 000018e0 00 ec 00 e4 00 e0 00 d6 00 00 00 f6 00 14 00 30 |...............0| 000018f0 00 34 00 2c 00 10 00 00 00 f4 00 fc 00 fe 00 0c |.4.,............| 00001900 00 0a 00 08 00 02 00 02 00 06 00 0a 00 0e 00 0a |................| 00001910 00 00 00 f8 00 f2 00 f2 00 f6 00 f4 00 ee 00 e4 |................| 00001920 00 00 00 d6 00 d6 01 f4 f2 11 15 2e 00 31 ff 27 |.............1.'| 00001930 ff 0f 00 00 6b fa 80 01 ff 03 b0 02 35 01 1c fd |....k.......5...| 00001940 00 04 ff 0b 35 13 b0 10 67 0b 00 00 6b f8 ac f7 |....5...g...k...| 00001950 01 fc d0 ff 01 fc eb f3 01 e8 01 e0 ff 00 00 e0 |................| 00001960 00 e0 00 e4 00 00 00 14 00 2c 00 2c 00 24 00 0c |.........,.,.$..| 00001970 00 00 00 f8 00 00 00 fc 00 04 00 04 00 08 00 0c |................| 00001980 00 10 00 0c 00 08 00 00 00 00 00 fc 00 fc 00 fc |................| 00001990 00 f8 00 f4 00 f0 00 e8 00 e8 00 e4 00 e4 00 00 |................| 000019a0 00 e8 00 08 00 20 00 34 00 28 00 18 00 fc 00 f8 |..... .4.(......| 000019b0 00 fc 00 08 00 00 00 00 00 00 00 08 00 10 00 14 |................| 000019c0 00 0c 00 04 00 fc 00 fc 00 fc 00 00 00 fc 00 f8 |................| 000019d0 00 f0 00 f0 00 ec 00 ec 00 e8 00 e0 00 00 00 ec |................| 000019e0 00 10 00 2c 00 34 00 1c 00 08 00 f8 00 fc 00 08 |...,.4..........| 000019f0 00 08 00 fc 00 f8 00 fc 00 10 00 18 00 18 00 04 |................| 00001a00 00 fc 00 f8 00 04 00 04 00 04 00 f8 00 f4 00 f0 |................| 00001a10 00 f4 00 f0 00 ec 00 e0 00 00 00 00 00 fc 00 1c |................| 00001a20 00 2c 00 28 00 10 00 04 00 00 00 08 00 08 00 00 |.,.(............| 00001a30 00 f0 00 fc 00 08 00 1c 00 18 00 0c 00 fc 00 00 |................| 00001a40 00 00 00 08 00 00 00 f8 00 f4 00 f8 00 f8 00 f8 |................| 00001a50 00 e8 00 e4 00 e0 00 e4 00 e0 00 fc 00 18 00 28 |...............(| 00001a60 00 24 00 14 00 08 00 00 00 04 00 04 00 fc 00 f4 |.$..............| 00001a70 00 00 00 0c 00 14 00 10 00 08 00 00 00 04 00 04 |................| 00001a80 00 04 00 f8 00 f8 00 f8 00 fc 00 f8 00 f0 00 e8 |................| 00001a90 00 e8 00 e4 00 e8 00 e0 00 f8 00 18 00 28 00 24 |.............(.$| 00001aa0 00 10 00 04 00 04 00 08 00 04 00 fc 00 f0 00 00 |................| 00001ab0 00 0c 00 18 00 10 00 04 00 00 00 04 00 04 00 00 |................| 00001ac0 00 f8 00 f8 00 fc 00 00 00 f4 00 f0 00 e4 00 ec |................| 00001ad0 00 e4 00 e8 00 00 00 f8 00 18 00 28 00 20 00 10 |...........(. ..| 00001ae0 00 04 00 08 00 0c 00 04 00 f8 00 f4 00 04 00 10 |................| 00001af0 00 14 00 0c 00 04 00 04 00 08 00 00 00 00 00 f8 |................| 00001b00 00 fc 00 00 00 fc 00 f0 00 ec 00 e4 00 e8 00 00 |................| 00001b10 00 e0 00 d4 00 f4 00 20 00 28 00 20 00 10 00 10 |....... .(. ....| 00001b20 00 10 00 10 00 00 00 fa 00 f4 00 0e 00 14 00 10 |................| 00001b30 00 08 00 08 00 0a 00 0a 00 fc 00 fc 00 fa 00 02 |................| 00001b40 00 00 00 f6 00 ec 00 ec 00 e6 00 e8 00 00 00 00 |................| 00001b50 00 00 00 f8 00 1c 00 22 00 1e 00 14 00 14 00 14 |......."........| 00001b60 00 0a 00 fe 00 fe 00 fc 00 10 00 0e 00 0a 00 0a |................| 00001b70 00 0c 00 0a 00 04 00 fa 00 00 00 fe 00 02 00 fa |................| 00001b80 00 f4 00 ee 00 ee 00 e6 00 e2 00 00 00 00 00 00 |................| 00001b90 00 00 00 1a 00 1e 00 1c 00 14 00 18 00 14 00 08 |................| 00001ba0 00 00 00 00 00 00 00 10 00 08 00 0a 00 0a 00 0a |................| 00001bb0 00 08 00 00 00 fc 00 02 00 fe 00 00 00 fa 00 f4 |................| 00001bc0 00 f0 00 ee 00 e4 00 e2 00 00 00 00 00 00 00 04 |................| 00001bd0 00 14 00 1c 00 18 00 16 00 18 00 14 00 0a 00 06 |................| 00001be0 00 02 00 06 00 10 00 06 00 08 00 08 00 08 00 06 |................| 00001bf0 00 fe 00 fe 00 02 00 00 00 00 00 f8 00 f4 00 f2 |................| 00001c00 00 ec 00 e6 00 e0 00 00 00 00 00 e6 00 06 00 10 |................| 00001c10 00 16 00 12 00 12 00 14 00 12 00 10 00 0a 00 06 |................| 00001c20 00 0c 00 0e 00 0a 00 08 00 04 00 02 00 02 00 fe |................| 00001c30 00 fe 00 fe 00 02 00 02 00 00 00 fa 00 f6 00 f4 |................| 00001c40 00 f0 00 ea 00 e4 00 00 00 e6 00 f6 00 fe 00 fe |................| 00001c50 00 fe 00 00 00 06 00 10 00 14 00 14 00 14 00 1a |................| 00001c60 00 1a 00 18 00 14 00 0e 00 0a 00 06 00 02 00 fc |................| 00001c70 00 fa 00 fa 00 fc 00 fa 00 f4 00 f0 00 ee 00 ea |................| 00001c80 00 e6 00 00 00 e0 00 ec 00 f4 00 fa 00 fe 00 00 |................| 00001c90 00 04 00 0a 00 12 00 16 00 16 00 18 00 1c 00 1c |................| 00001ca0 00 1a 00 16 00 0e 00 0a 00 06 00 00 00 fc 00 fa |................| 00001cb0 00 fa 00 fa 00 f6 00 f2 00 f0 00 ee 00 e8 00 e2 |................| 00001cc0 00 00 00 e2 00 ec 00 f4 00 fa 00 fe 00 00 00 08 |................| 00001cd0 00 0e 00 14 00 18 00 18 00 1c 00 1e 00 1a 00 18 |................| 00001ce0 00 14 00 0e 00 0a 00 04 00 fc 00 fa 00 fa 00 fa |................| 00001cf0 00 f8 00 f4 00 f2 00 f0 00 ec 00 e6 00 e2 00 00 |................| 00001d00 00 e4 fd ef f3 f5 07 fa 59 fe cc 02 f3 0a 20 10 |........Y..... .| 00001d10 01 13 c3 14 bf 14 5d 16 c8 15 3f 13 c2 15 80 11 |......]...?.....| 00001d20 ff 0d 3e 10 cf 0c f5 09 3f 07 f1 02 ad 00 01 f6 |..>.....?.......| 00001d30 32 f0 46 ec 4f e6 33 e0 12 00 05 00 00 e1 00 ed |2.F.O.3.........| 00001d40 00 f2 00 fe 00 06 00 0f 00 11 00 0d 00 0f 00 10 |................| 00001d50 00 0a 00 0c 00 0b 00 12 00 12 00 0d 00 11 00 13 |................| 00001d60 00 0f 00 0d 00 07 00 05 00 fd 00 f4 00 f1 00 eb |................| 00001d70 00 e6 00 e2 00 00 00 00 00 e7 00 ec 00 f4 00 fd |................| 00001d80 00 05 00 0b 00 0c 00 0c 00 10 00 0e 00 0d 00 0e |................| 00001d90 00 10 00 14 00 11 00 0f 00 12 00 10 00 0e 00 0b |................| 00001da0 00 06 00 03 00 fc 00 f5 00 f1 00 ec 00 e7 00 e4 |................| 00001db0 00 00 00 e3 00 e8 00 ec 00 f3 00 fa 00 01 00 06 |................| 00001dc0 00 08 00 0b 00 0e 00 0e 00 10 00 11 00 13 00 15 |................| 00001dd0 00 12 00 11 00 12 00 10 00 0d 00 09 00 06 00 02 |................| 00001de0 00 fc 00 f7 00 f3 00 ee 00 ea 00 e5 00 e2 00 e4 |................| 00001df0 00 e7 00 ea 00 f0 00 f6 00 fb 00 01 00 05 00 09 |................| 00001e00 00 0d 00 0f 00 12 00 14 00 16 00 17 00 15 00 15 |................| 00001e10 00 14 00 11 00 0e 00 0a 00 06 00 02 00 fc 00 f7 |................| 00001e20 00 f2 00 ed 00 e8 00 e4 00 e1 00 e3 00 e5 00 e8 |................| 00001e30 00 ef 00 f4 00 fa 00 01 00 05 00 0b 00 0e 00 11 |................| 00001e40 00 15 00 16 00 17 00 18 00 16 00 16 00 15 00 11 |................| 00001e50 00 0e 00 09 00 05 00 01 00 fb 00 f6 00 f1 00 eb |................| 00001e60 00 e6 00 e2 00 e0 00 e2 00 e5 00 e9 00 f0 00 f5 |................| 00001e70 00 fc 00 02 00 07 00 0c 00 0f 00 12 00 15 00 16 |................| 00001e80 00 18 00 18 00 16 00 16 00 13 00 10 00 0d 00 08 |................| 00001e90 00 04 00 ff 00 fa 00 f5 00 ef 00 ea 00 e5 00 e0 |................| 00001ea0 00 e1 00 e3 00 e6 00 eb 00 f1 00 f7 00 fe 00 03 |................| 00001eb0 00 08 00 0d 00 0f 00 13 00 15 00 16 00 18 00 17 |................| 00001ec0 00 16 00 15 00 12 00 0f 00 0b 00 06 00 03 00 fe |................| 00001ed0 00 f9 00 f4 00 ee 00 e9 00 e4 00 e1 00 e2 00 e4 |................| 00001ee0 00 e7 00 ed 00 f2 00 f8 00 ff 00 04 00 09 00 0d |................| 00001ef0 00 10 00 14 00 16 00 17 00 18 00 17 00 16 00 15 |................| 00001f00 00 11 00 0e 00 0a 80 05 00 02 00 fd 80 f7 00 f3 |................| 00001f10 00 ed 00 e8 00 e3 80 e0 80 e2 80 e4 00 e8 80 ee |................| 00001f20 00 f3 00 fa 80 00 00 05 80 0a 00 0e 00 11 00 15 |................| 00001f30 00 16 80 17 80 18 80 16 00 16 00 14 80 10 00 0d |................| 00001f40 80 08 80 04 00 01 80 fb 80 f6 80 f1 80 eb 80 e6 |................| 00001f50 00 e2 00 e1 00 e3 00 e5 00 ea 00 f0 00 f5 80 fc |................| 00001f60 00 02 80 06 00 0c 00 0f 00 12 80 15 00 16 00 18 |................| 00001f70 80 17 00 16 80 15 80 12 00 0f 00 0c 00 07 80 03 |................| 00001f80 80 ff 00 fa 00 f5 80 ef 00 ea 00 e5 00 e1 00 e2 |................| 00001f90 00 e4 80 e6 00 ed 80 f1 80 f7 00 ff 80 03 80 08 |................| 00001fa0 00 0d 00 10 80 13 80 15 00 16 80 17 80 16 00 15 |................| 00001fb0 00 14 00 11 80 0d 00 0a 80 05 00 02 80 fd 00 f8 |................| 00001fc0 00 f3 80 ed 80 e8 80 e3 80 e1 00 e3 00 e5 00 e9 |................| 00001fd0 00 ef 00 f4 80 fa 80 00 00 05 00 0a 00 0e 00 11 |................| 00001fe0 80 14 80 15 80 16 00 17 80 15 80 14 00 13 00 10 |................| 00001ff0 80 0c 80 08 80 04 80 00 80 fb 80 f6 00 f1 80 eb |................| 00002000 80 e6 80 e2 00 e2 00 e4 00 e6 80 eb 00 f1 80 f6 |................| 00002010 00 fd 00 02 00 07 80 0b 80 0e 00 12 80 14 80 15 |................| 00002020 80 16 80 16 00 15 80 13 80 11 80 0e 00 0b 00 07 |................| 00002030 80 03 00 ff 00 fa 00 f5 00 ef 00 ea 80 e5 80 e2 |................| 00002040 80 e3 00 e5 80 e8 00 ee 00 f3 00 f9 00 ff 80 03 |................| 00002050 80 08 00 0c 80 0f 80 12 80 14 80 15 80 16 80 15 |................| 00002060 80 14 00 13 00 10 00 0d 80 09 80 05 00 02 00 fd |................| 00002070 00 f8 80 f2 00 ed 80 e8 80 e4 80 e3 00 e5 00 e7 |................| 00002080 80 eb 00 f1 00 f6 00 fc 80 01 80 05 80 0a 00 0d |................| 00002090 00 10 00 13 00 14 00 15 00 15 00 14 80 13 00 11 |................| 000020a0 80 0e 80 0b 80 07 00 04 00 00 80 fa 00 f6 80 f0 |................| 000020b0 80 eb 00 e7 00 e4 80 e4 80 e6 00 e9 80 ee 80 f3 |................| 000020c0 00 f9 00 ff 00 03 00 08 80 0b 00 0e 00 11 00 13 |................| 000020d0 80 13 00 14 80 13 00 13 00 12 80 0f 00 0d 00 0a |................| 000020e0 00 06 00 03 80 fe 80 f9 80 f4 00 ef 80 ea 00 e6 |................| 000020f0 80 e4 00 e6 80 e7 80 eb 00 f1 80 f5 80 fb 80 00 |................| 00002100 80 04 00 09 00 0c 40 0e 00 11 00 12 80 12 c0 12 |......@.........| 00002110 40 12 c0 11 c0 10 80 0e 00 0c 00 09 c0 05 00 02 |@...............| 00002120 80 fd 00 f9 00 f4 00 ef 80 ea 80 e6 80 e5 c0 e6 |................| 00002130 80 e8 80 ec c0 f1 80 f6 40 fc 40 01 40 05 40 09 |........@.@.@.@.| 00002140 00 0c 40 0e 80 10 80 11 00 12 00 12 80 11 00 11 |..@.............| 00002150 00 10 00 0e c0 0b 00 09 c0 05 00 02 c0 fd 40 f9 |..............@.| 00002160 00 f5 00 f0 c0 eb 80 e7 00 e6 00 e7 c0 e8 40 ec |..............@.| 00002170 80 f1 40 f6 c0 fb 00 01 c0 04 c0 08 80 0b 80 0d |..@.............| 00002180 80 0f c0 10 00 11 c0 10 80 10 c0 10 80 0f 40 0e |..............@.| 00002190 40 0c 80 09 00 07 80 03 80 ff c0 fb 00 f7 80 f2 |@...............| 000021a0 80 ee 40 ea 40 e7 00 e7 40 e8 00 eb 80 ef 40 f4 |..@.@...@.....@.| 000021b0 40 f9 80 fe 00 03 c0 06 c0 09 40 0c 40 0e c0 0f |@.........@.@...| 000021c0 40 10 40 10 80 0f 00 0f 40 0f 00 0e 80 0c 00 0b |@.@.....@.......| 000021d0 40 08 c0 05 c0 02 00 ff 80 fb 80 f7 40 f3 80 ef |@...........@...| 000021e0 80 eb 40 e8 80 e7 00 e9 c0 eb c0 ef c0 f4 80 f9 |..@.............| 000021f0 40 fe c0 02 40 06 40 09 80 0b 40 0d c0 0e c0 0f |@...@.@...@.....| 00002200 80 0f c0 0e 00 0e 40 0d c0 0c 80 0b 00 0a 80 08 |......@.........| 00002210 40 06 80 03 00 01 00 fe c0 f9 40 f6 00 f2 80 ee |@.........@.....| 00002220 00 eb 80 e8 40 e9 c0 eb 00 ef c0 f3 40 f8 80 fc |....@.......@...| 00002230 00 01 40 04 40 07 00 0a 80 0b 00 0d 40 0e 40 0e |..@.@.......@.@.| 00002240 80 0d 00 0c 00 0b c0 0a 00 0a c0 09 c0 08 40 07 |..............@.| 00002250 00 06 80 03 c0 00 00 fe 00 fb 80 f7 40 f4 c0 f0 |............@...| 00002260 40 ee c0 eb c0 ea 80 ed 40 f0 80 f3 40 f8 40 fc |@.......@...@.@.| 00002270 40 00 c0 03 c0 05 c0 08 80 0a 40 0b 40 0c 40 0c |@.........@.@.@.| 00002280 c0 0b 40 0a 00 08 c0 07 80 07 40 07 40 07 40 07 |..@.......@.@.@.| 00002290 80 07 80 06 00 04 c0 01 40 ff 40 fc 40 f9 40 f6 |........@.@.@.@.| 000022a0 00 f4 80 f1 00 ef 40 ed 00 ed 80 f0 c0 f3 80 f6 |......@.........| 000022b0 80 fb 40 00 c0 03 80 06 00 08 00 0a c0 0a c0 09 |..@.............| 000022c0 40 09 00 09 00 08 40 06 00 04 40 04 40 05 00 06 |@.....@...@.@...| 000022d0 00 07 40 07 c0 07 40 07 80 04 00 03 00 01 40 fe |..@...@.......@.| 000022e0 40 fb 00 f8 80 f5 00 f3 80 ef 00 ee 80 ed 80 ee |@...............| 000022f0 40 f3 c0 f6 80 fa 00 00 c0 03 80 06 00 08 80 08 |@...............| 00002300 80 09 80 08 80 07 80 07 80 06 80 05 00 04 80 03 |................| 00002310 00 05 80 05 00 06 00 08 80 08 80 08 80 07 00 06 |................| 00002320 80 04 00 01 00 fe 00 fb 00 f8 00 f5 00 f2 80 f0 |................| 00002330 00 f0 80 ef 80 ef 80 f0 00 f6 80 fa 80 fd 80 01 |................| 00002340 80 05 80 07 00 08 80 07 80 08 00 08 00 06 80 05 |................| 00002350 00 06 80 05 00 05 00 04 00 06 00 08 80 08 80 08 |................| 00002360 00 08 80 07 00 06 00 03 80 01 00 00 80 fc 80 f9 |................| 00002370 00 f7 00 f5 80 f3 00 f2 80 f2 80 f3 80 f3 80 f4 |................| 00002380 00 f5 00 f7 80 fc 00 fe 00 01 80 05 80 07 80 08 |................| 00002390 00 08 80 07 00 09 00 07 00 06 00 07 80 06 80 06 |................| 000023a0 80 05 80 05 00 08 80 07 00 07 00 07 00 06 80 04 |................| 000023b0 00 00 80 fe 80 fd 00 fa 00 f8 80 f6 80 f5 80 f5 |................| 000023c0 80 f3 00 f4 80 f5 00 f6 80 f6 00 f7 00 f8 80 fd |................| 000023d0 00 ff 00 01 00 05 80 07 80 08 00 08 00 08 00 09 |................| 000023e0 00 07 80 05 80 06 80 06 00 06 80 04 80 04 80 06 |................| 000023f0 80 05 80 04 80 04 80 03 80 01 80 fe 80 fd 80 fb |................| 00002400 80 f9 00 f8 80 f7 00 f8 00 f8 00 f9 00 fa 00 fb |................| 00002410 00 fb 80 fb 80 fb 00 fb 80 fa 00 fb 80 fb 00 fe |................| 00002420 00 02 80 02 80 05 00 08 00 09 80 09 80 08 80 08 |................| 00002430 80 08 80 05 80 05 00 05 80 03 00 02 00 01 80 01 |................| 00002440 80 01 00 00 80 00 00 00 80 fe 80 fd 80 fc 00 fc |................| 00002450 80 fa 80 f8 80 f8 00 f7 80 f6 00 f5 00 f6 00 f6 |................| 00002460 80 f8 80 ff 00 00 80 03 80 07 00 08 80 09 80 07 |................| 00002470 00 08 00 08 80 03 00 04 00 04 00 03 80 03 80 01 |................| 00002480 80 04 80 05 00 03 80 04 00 03 00 01 00 ff 80 fb |................| 00002490 00 fc 80 f9 80 f7 00 f9 80 f8 00 f9 00 f9 00 fa |................| 000024a0 80 fc 00 fc 00 fd 80 fe 80 fe 80 ff 80 ff 80 01 |................| 000024b0 80 03 00 03 00 05 00 06 00 06 00 06 80 05 00 06 |................| 000024c0 00 05 00 04 80 03 80 02 80 01 80 00 00 00 80 ff |................| 000024d0 80 fd 00 fd 00 fc 80 fa 80 f9 00 f8 00 f8 00 f8 |................| 000024e0 00 fa 80 fb 00 fd 00 00 80 01 80 02 80 03 00 04 |................| 000024f0 80 04 80 03 00 03 80 03 00 03 00 03 80 03 00 05 |................| 00002500 40 05 80 05 40 05 60 03 40 02 c0 00 60 ff 00 fe |@...@.`.@...`...| 00002510 e0 fc 80 fc 00 fc a0 fb a0 fb 80 fb 80 fb 40 fb |..............@.| 00002520 00 fb 80 fb 80 fb 40 fb 00 fc 40 fc a0 fd 20 ff |......@...@... .| 00002530 20 01 e0 02 00 04 20 05 20 06 00 06 e0 05 e0 05 | ..... . .......| 00002540 80 05 c0 04 e0 03 60 03 a0 02 a0 01 60 01 40 01 |......`.....`.@.| 00002550 a0 00 00 00 20 ff c0 fd 00 fc e0 f9 e0 f8 a0 f7 |.... ...........| 00002560 a0 f6 a0 f9 00 fa e0 fb a0 fe 40 00 00 02 20 02 |..........@... .| 00002570 e0 02 a0 03 c0 01 c0 01 80 01 40 01 40 01 20 01 |..........@.@. .| 00002580 e0 02 e0 03 00 04 c0 05 40 06 00 06 e0 04 80 03 |........@.......| 00002590 80 02 e0 ff c0 fd e0 fc 80 fb a0 fa 40 fa 20 fb |............@. .| 000025a0 00 fc 20 fc 60 fd 80 fe e0 fe c0 fe a0 fe 00 ff |.. .`...........| 000025b0 a0 fe 00 fe a0 fe 20 ff c0 ff 20 00 40 01 c0 02 |...... ... .@...| 000025c0 c0 02 40 03 c0 03 80 03 20 03 40 02 00 02 80 01 |..@..... .@.....| 000025d0 80 00 c0 00 c0 00 a0 00 80 00 80 00 e0 00 20 00 |.............. .| 000025e0 60 ff 00 ff 00 fe 40 fd a0 fc 80 fc a0 fc 80 fc |`.....@.........| 000025f0 60 fd 80 fe 40 ff e0 ff 80 00 20 01 00 01 00 01 |`...@..... .....| 00002600 40 01 40 01 00 01 c0 00 00 01 40 01 40 01 80 01 |@.@.......@.@...| 00002610 c0 01 a0 01 60 01 60 01 60 01 c0 00 40 00 00 00 |....`.`.`...@...| 00002620 c0 ff 60 ff 00 ff 00 ff e0 fe e0 fe c0 fe 00 ff |..`.............| 00002630 00 ff e0 fe c0 fe a0 fe c0 fe a0 fe a0 fe e0 fe |................| 00002640 60 ff c0 ff 20 00 80 00 00 01 40 01 60 01 60 01 |`... .....@.`.`.| 00002650 80 01 80 01 40 01 20 01 00 01 e0 00 00 01 00 01 |....@. .........| 00002660 e0 00 a0 00 60 00 40 00 e0 ff c0 ff 40 ff 00 ff |....`.@.....@...| 00002670 00 ff c0 fe e0 fe c0 fe a0 fe c0 fe c0 fe e0 fe |................| 00002680 00 ff 40 ff 80 ff 80 ff a0 ff 20 00 40 00 80 00 |..@....... .@...| 00002690 c0 00 00 01 20 01 40 01 60 01 60 01 00 01 00 01 |.... .@.`.`.....| 000026a0 c0 00 a0 00 a0 00 40 00 60 00 40 00 20 00 e0 ff |......@.`.@. ...| 000026b0 a0 ff 80 ff 40 ff 00 ff 00 ff e0 fe c0 fe c0 fe |....@...........| 000026c0 00 ff 20 ff 60 ff 60 ff c0 ff c0 ff 20 00 20 00 |.. .`.`..... . .| 000026d0 40 00 60 00 a0 00 c0 00 00 01 00 01 40 01 40 01 |@.`.........@.@.| 000026e0 40 01 40 01 00 01 e0 00 a0 00 60 00 20 00 e0 ff |@.@.......`. ...| 000026f0 c0 ff c0 ff a0 ff 80 ff 40 ff 20 ff 00 ff 00 ff |........@. .....| 00002700 d0 fe d0 fe e0 fe f0 fe 10 ff 50 ff 61 ff b1 ff |..........P.a...| 00002710 d0 ff 1f 00 2f 00 4e 00 4d 00 8d 00 8c 00 8c 00 |..../.N.M.......| 00002720 b2 00 e7 00 f3 00 ff 00 f5 00 c9 00 bf 00 78 00 |..............x.| 00002730 46 00 38 00 0b 00 fb ff c1 ff c5 ff bd ff bb ff |F.8.............| 00002740 81 ff 82 ff 82 ff 42 ff 41 ff 40 ff 41 ff 01 ff |......B.A.@.A...| 00002750 01 ff 40 ff 80 ff c0 ff 00 00 40 00 80 00 80 00 |..@.......@.....| 00002760 80 00 c0 00 c0 00 c0 00 c0 00 c0 00 80 00 80 00 |................| 00002770 80 00 80 00 80 00 40 00 00 00 00 00 c0 ff c0 ff |......@.........| 00002780 c0 ff 80 ff 40 ff 80 ff 40 ff 80 ff 40 ff 80 ff |....@...@...@...| 00002790 40 ff 80 ff 40 ff c0 ff 40 ff 00 00 80 ff c0 00 |@...@...@.......| 000027a0 40 01 c0 ff c0 01 00 01 c0 00 00 01 80 00 40 01 |@.............@.| 000027b0 00 00 c0 ff c0 00 80 ff c0 ff 80 ff c0 ff 00 00 |................| 000027c0 00 ff 80 ff 00 00 c0 fe 40 ff 40 ff 00 ff 40 ff |........@.@...@.| 000027d0 00 ff c0 ff c0 ff 80 ff 80 00 80 00 80 00 80 00 |................| 000027e0 c0 00 40 01 c0 00 c0 00 40 01 c0 00 c0 00 c0 00 |..@.....@.......| 000027f0 c0 00 c0 00 40 00 40 00 40 00 c0 ff 00 00 c0 ff |....@.@.@.......| 00002800 c0 ff 80 ff 00 ff 00 ff c0 fe 80 fe 80 fe 80 fe |................| 00002810 c0 fe 00 ff 80 ff 80 00 80 00 00 01 80 01 40 01 |..............@.| 00002820 80 01 80 01 80 01 80 01 80 01 80 01 80 01 00 01 |................| 00002830 40 01 00 01 c0 00 c0 00 80 00 40 00 40 00 c0 ff |@.........@.@...| 00002840 80 ff c0 fe 40 fe 40 fd 40 fc c0 fa 80 f9 00 f8 |....@.@.@.......| 00002850 80 f7 c0 f5 00 03 40 ff 40 00 c0 09 00 08 40 08 |......@.@.....@.| 00002860 40 06 c0 04 00 07 80 fc 80 fc 40 00 c0 fb 40 fc |@.........@...@.| 00002870 40 fe c0 01 40 05 00 02 00 07 80 09 c0 03 80 02 |@...@...........| 00002880 40 01 80 fe c0 fa c0 f6 80 fa 00 fa c0 f7 40 fc |@.............@.| 00002890 40 ff 80 00 00 01 80 02 40 05 00 02 40 ff 80 00 |@.......@...@...| 000028a0 80 fe 40 fc c0 fb 80 fd c0 ff 80 fe 00 01 c0 04 |..@.............| 000028b0 80 04 c0 03 40 04 40 04 00 02 40 ff 00 ff 00 ff |....@.@...@.....| 000028c0 c0 fc 80 fc 40 fe 40 ff 40 ff 00 00 c0 01 00 02 |....@.@.@.......| 000028d0 80 00 40 00 80 00 00 ff 00 fd 40 fd 00 fe c0 fd |..@.......@.....| 000028e0 80 fd 00 00 40 01 40 01 00 02 40 03 c0 02 c0 01 |....@.@...@.....| 000028f0 80 00 40 01 00 00 00 ff 00 ff 00 00 40 ff 40 00 |..@.........@.@.| 00002900 c0 ff 00 06 c0 02 40 01 80 06 00 02 00 00 00 00 |......@.........| 00002910 00 fd 00 ff 00 fa 00 fb 00 fe 00 fb 00 fd 00 ff |................| 00002920 00 ff 00 01 00 ff 00 00 00 01 00 fd 00 fe 00 fe |................| 00002930 00 fd 00 fd 00 fd 00 ff 00 00 00 ff 00 01 00 02 |................| 00002940 00 01 00 01 00 01 00 01 00 01 00 02 00 04 00 03 |................| 00002950 00 04 00 04 00 05 00 04 00 04 00 03 00 03 00 01 |................| 00002960 00 01 00 00 00 01 00 01 00 01 00 01 00 03 00 00 |................| 00002970 00 01 00 00 00 ff 00 fd 00 fd 00 fb 00 fb 00 f7 |................| 00002980 00 f7 00 f4 00 f5 00 f0 00 f2 00 ea 00 f8 00 11 |................| 00002990 00 fc 00 0d 00 1a 00 13 00 12 00 0b 00 0c 00 0c |................| 000029a0 00 f1 00 f9 00 ff 00 f4 00 f6 00 fd 00 04 00 0d |................| 000029b0 00 02 00 10 00 15 00 05 00 03 00 02 00 f9 00 f4 |................| 000029c0 00 ea 00 f4 00 f6 00 ef 00 f9 00 04 00 03 00 06 |................| 000029d0 00 07 00 0d 00 08 00 fe 00 00 00 00 00 f7 00 f7 |................| 000029e0 00 fc 00 fe 00 00 00 01 00 0c 00 0e 00 06 00 0c |................| 000029f0 00 09 00 03 00 ff 00 fc 00 fd 00 fa 00 f5 00 fc |................| 00002a00 00 fb 00 f9 00 fb 00 fd 00 fd 00 fb 00 f5 00 f8 |................| 00002a10 00 f2 00 ee 00 ef 00 ef 00 fe 00 09 00 08 00 15 |................| 00002a20 00 1d 00 19 00 17 00 11 00 0e 00 06 00 f9 00 f9 |................| 00002a30 00 fa 00 f4 00 f7 00 fd 00 05 00 09 00 0a 00 0f |................| 00002a40 00 11 00 07 00 03 00 00 00 f7 00 f3 00 ef 00 f1 |................| 00002a50 00 f5 00 f4 00 fa 00 02 00 04 00 03 00 06 00 06 |................| 00002a60 00 03 00 fd 00 fc 00 f9 00 f5 00 f3 00 f4 00 f3 |................| 00002a70 00 f3 00 f5 00 f8 00 f7 00 01 00 0f 00 06 00 12 |................| 00002a80 00 17 00 13 00 13 00 0e 00 09 00 0a 00 fc 00 fb |................| 00002a90 00 fd 00 f7 00 f7 00 fc 00 fd 00 05 00 03 00 07 |................| 00002aa0 00 0d 00 08 00 06 00 07 00 00 00 fe 00 fa 00 f8 |................| 00002ab0 00 f9 00 f6 00 f6 00 fb 00 fc 00 fd 00 00 00 00 |................| 00002ac0 00 01 00 fd 00 fb 00 fa 00 f4 00 f4 00 f2 00 f3 |................| 00002ad0 00 f6 00 f0 00 f9 00 04 00 03 00 0b 00 13 00 13 |................| 00002ae0 00 15 00 12 00 10 00 10 00 07 00 03 00 04 00 ff |................| 00002af0 00 fd 00 fd 00 fe 00 01 00 00 00 01 00 05 00 06 |................| 00002b00 00 03 00 03 00 02 00 ff 00 fc 00 fa 80 f9 00 f9 |................| 00002b10 80 f6 80 f7 80 fa 00 fa 80 f9 00 fb 00 fc 80 f9 |................| 00002b20 00 f8 00 f8 00 f8 80 f5 00 f5 80 f6 80 f6 80 f5 |................| 00002b30 80 fe 80 02 80 06 00 0b 80 10 00 13 80 14 00 11 |................| 00002b40 00 11 80 0f 00 0b 80 06 80 05 80 02 00 00 80 fd |................| 00002b50 00 ff 80 fe 00 ff 00 ff 00 00 80 00 00 00 00 ff |................| 00002b60 80 fe 80 fc 00 fb 00 fa 80 f8 80 f8 80 f8 80 f8 |................| 00002b70 80 f9 80 fa 00 fb 80 fc 80 fb 80 fb 00 fc 00 fb |................| 00002b80 00 f9 00 fb 80 fa 80 fa 80 fa 80 fa 00 ff 80 02 |................| 00002b90 80 02 00 06 80 0a 00 0c 80 0b 80 0c 80 0d 80 0c |................| 00002ba0 00 0b 80 08 80 07 00 07 00 04 80 01 80 02 00 00 |................| 00002bb0 00 ff 80 fe 00 fd 80 fd 80 fe 80 fc 00 fd 80 fd |................| 00002bc0 80 fd 00 fd 80 fc 80 fb 00 fb 00 fa 80 f9 00 fa |................| 00002bd0 80 fa 80 fa 80 fa 00 fc 00 fc 00 fd 80 fc 80 fc |................| 00002be0 80 fd 00 fe 01 fd 81 fd 81 fd 82 fd ff fe 7f 00 |................| 00002bf0 fc 00 83 03 84 03 79 05 f7 06 88 07 74 07 0b 09 |......y.....t...| 00002c00 ff 08 f0 08 ff 07 ec 07 7f 06 68 05 ff 03 ff 02 |..........h.....| 00002c10 7f 01 60 00 a2 fe 01 ff 81 fe 81 fd ab fd 56 fd |..`...........V.| 00002c20 01 fd 30 fd 01 fd 33 fc 35 fc 81 fb 4a fb 01 fb |..0...3.5...J...| 00002c30 01 fb 81 fa 01 fb c4 fa 3f fb 81 fb 40 fc 81 fc |........?...@...| 00002c40 c1 fd 81 fe 40 ff c0 ff 80 00 00 01 40 01 40 01 |....@.......@.@.| 00002c50 40 01 80 01 c0 01 40 02 80 02 40 03 c0 03 80 04 |@.....@...@.....| 00002c60 00 05 80 05 00 05 00 05 80 04 00 04 40 03 80 02 |............@...| 00002c70 c0 01 c0 01 40 01 00 01 40 00 00 00 80 ff 00 ff |....@...@.......| 00002c80 c0 fe c0 fe 00 fe 80 fd 00 fd 40 fd 80 fd 80 fd |..........@.....| 00002c90 00 fd 80 fd 40 fd 80 fc 00 fd 00 fd 80 fd c0 fd |....@...........| 00002ca0 80 fd c0 fe 40 ff c0 fe 80 00 c0 00 c0 00 80 00 |....@...........| 00002cb0 80 00 80 00 40 00 40 00 40 00 00 00 00 00 00 01 |....@.@.@.......| 00002cc0 c0 00 00 01 c0 01 c0 01 00 02 00 02 00 02 00 02 |................| 00002cd0 00 02 00 02 40 02 c0 01 40 02 80 01 c0 01 40 01 |....@...@.....@.| 00002ce0 00 01 40 00 c0 00 80 ff 00 00 c0 ff 80 ff 80 ff |..@.............| 00002cf0 40 ff 40 ff 40 ff 00 ff c0 fe 00 fe 40 fe 40 fe |@.@.@.......@.@.| 00002d00 00 fe 00 fe 40 fd 00 ff 40 fe 00 fe c0 fe 00 ff |....@...@.......| 00002d10 40 ff c0 ff c0 ff 80 ff c0 00 40 00 40 ff c0 00 |@.........@.@...| 00002d20 c0 ff 00 01 80 00 80 00 40 01 00 01 c0 01 80 01 |........@.......| 00002d30 40 01 80 02 80 01 80 00 00 02 40 00 00 01 80 00 |@.........@.....| 00002d40 40 ff 40 00 c0 ff 80 fe c0 00 c0 fe 80 ff 00 00 |@.@.............| 00002d50 80 ff 00 00 c0 ff 40 00 80 00 80 ff 00 00 c0 ff |......@.........| 00002d60 40 00 80 ff 00 00 80 ff c0 ff 40 00 80 ff 80 ff |@.........@.....| 00002d70 40 ff 40 00 80 ff 80 ff 80 ff 40 00 c0 ff c0 ff |@.@.......@.....| 00002d80 00 00 80 ff c0 ff c0 00 80 ff 00 00 40 00 00 00 |............@...| 00002d90 40 00 c0 ff c0 ff 00 01 40 00 00 00 c0 00 80 00 |@.......@.......| 00002da0 00 00 00 ff 80 00 40 ff 00 00 40 00 c0 ff 00 01 |......@...@.....| 00002db0 80 00 c0 00 00 02 00 00 40 ff c0 00 40 00 00 fe |........@...@...| 00002dc0 80 00 40 ff 00 00 40 00 40 fe 40 00 40 00 c0 fe |..@...@.@.@.@...| 00002dd0 40 00 00 00 80 00 40 ff 00 00 80 00 00 00 80 ff |@.....@.........| 00002de0 40 00 80 00 80 ff a0 00 40 00 a0 ff 00 00 60 00 |@.......@.....`.| 00002df0 20 00 a0 00 40 00 40 00 80 00 60 ff e0 ff 40 00 | ...@.@...`...@.| 00002e00 20 ff c0 ff a0 00 a0 ff 40 ff 60 00 40 ff 60 00 | .......@.`.@.`.| 00002e10 40 00 40 ff 80 00 20 00 60 ff 60 00 60 00 a0 ff |@.@... .`.`.`...| 00002e20 40 00 20 00 00 00 00 00 a0 ff e0 ff 60 00 e0 ff |@. .........`...| 00002e30 e0 ff a0 ff 40 00 80 00 c0 ff c0 ff 60 00 c0 ff |....@.......`...| 00002e40 e0 ff c0 ff e0 ff c0 ff a0 00 20 ff e0 00 40 00 |.......... ...@.| 00002e50 e0 ff c0 00 e0 ff a0 00 c0 ff 20 00 00 00 40 ff |.......... ...@.| 00002e60 60 00 00 00 80 ff 40 00 00 00 00 00 e0 00 a0 ff |`.....@.........| 00002e70 40 00 40 00 20 00 e0 ff a0 ff 00 00 c0 ff 80 ff |@.@. ...........| 00002e80 a0 ff e0 ff 40 00 a0 ff 60 00 e0 ff 20 00 20 00 |....@...`... . .| 00002e90 00 00 40 00 a0 ff 40 00 80 00 80 ff c0 ff 00 00 |..@...@.........| 00002ea0 e0 ff 80 ff e0 ff 40 ff c0 ff 60 00 a0 ff 00 00 |......@...`.....| 00002eb0 40 00 c0 00 e0 ff 40 00 00 00 60 00 80 00 e0 ff |@.....@...`.....| 00002ec0 00 00 20 00 00 00 a0 ff 80 00 00 00 e0 ff 60 01 |.. ...........`.| 00002ed0 40 ff a0 00 40 00 c0 ff 60 00 c0 ff 20 00 c0 ff |@...@...`... ...| 00002ee0 a0 ff c0 ff c0 ff a0 ff 00 00 00 00 00 00 20 00 |.............. .| 00002ef0 80 00 e0 ff 60 00 00 00 40 00 20 00 c0 ff e0 ff |....`...@. .....| 00002f00 00 00 c0 ff e0 ff e0 ff a0 ff 20 00 c0 ff a0 ff |.......... .....| 00002f10 20 00 a0 ff e0 ff 00 00 00 00 20 00 c0 ff 00 00 | ......... .....| 00002f20 e0 ff e0 ff 00 00 20 00 e0 ff 60 00 00 00 20 00 |...... ...`... .| 00002f30 c0 ff 40 00 80 00 40 00 60 00 20 00 60 00 20 00 |..@...@.`. .`. .| 00002f40 00 00 60 00 c0 ff 00 00 20 00 a0 ff 00 00 e0 ff |..`..... .......| 00002f50 e0 ff 20 00 20 00 20 00 e0 ff 20 00 20 00 e0 ff |.. . . ... . ...| 00002f60 e0 ff e0 ff 00 00 20 00 80 ff e0 ff 60 00 a0 ff |...... .....`...| 00002f70 c0 ff e0 ff e0 ff 00 00 00 ff 40 00 20 00 e0 ff |..........@. ...| 00002f80 20 00 80 00 20 00 60 00 00 00 e0 ff 60 00 00 00 | ... .`.....`...| 00002f90 a0 ff 40 00 c0 ff 00 00 c0 ff a0 ff e0 ff 20 00 |..@........... .| 00002fa0 00 00 e0 ff 20 00 00 00 60 00 e0 ff c0 ff e0 00 |.... ...`.......| 00002fb0 c0 ff 20 00 80 00 00 00 e0 ff 20 00 60 00 00 00 |.. ....... .`...| 00002fc0 60 ff 80 00 40 00 c0 ff 40 00 40 00 c0 ff 20 00 |`...@...@.@... .| 00002fd0 60 00 80 ff 00 00 20 00 e0 ff 40 00 60 ff e0 ff |`..... ...@.`...| 00002fe0 80 00 80 ff c0 ff 40 00 c0 ff 20 00 c0 ff e0 ff |......@... .....| 00002ff0 e0 ff 20 00 e0 ff e0 ff e0 ff 00 00 40 00 80 ff |.. .........@...| 00003000 40 00 a0 ff 00 00 20 00 e0 ff 40 00 e... [truncated message content] |
From: Jason Ni <jas...@gm...> - 2012-07-23 10:02:55
|
Got it. Thank you. 在 2012-7-23 下午5:14,"Barthelemy Dagenais" <ba...@cs...>写道: > Hi, > > The version number is still 0.7 because this is just a temporary build and > it is only available through github (but it's the same kind of file that is > available on sourceforge and you can download it by clicking on the "raw" > button). The final release will be 0.8 and will be available on pypi and > sourceforge. > > Barthélémy > > On 2012-07-23, at 3:27 AM, Jason Ni wrote: > > > Great job! Thanks a lot! > > What's the version number of this release? Will this release replace the > 0.7 package in the sourceforge download page? > > > > 2012/7/22 Barthelemy Dagenais <ba...@cs...> > > Hi, > > > > I just built a new release of py4j that includes a few fixes: > > > > 1. long types are now correctly converted (issue #99). Please note that > > Python 3 merged int and long. This means that Py4J has to do all the > > inference work on the Java side for Python 3. In some corner cases, Py4J > > might not be able to call the method you want (e.g., you have > > method1(int) and method1(long) and you are calling from python 3 > > method1(123). method1(int) will be called even though you may want > > method1(long) to be called. The only workaround I can think of is to > > create an adapter in Java and call this adapter). > > > > 2. decimals are now supported and correctly converted (issue #101) > > > > 3. plugged memory leak in GatewayServer when multiple python clients > > were connecting and disconnecting (java side, discussed on this mailing > > list last week) > > > > 4. gateway.close() (python side) now correctly sends a close signal to > > the java side (discovered while testing fix for #3) > > > > 5. by default, the python and java sides now try to connect to 127.0.0.1 > > instead of localhost. It is always possible to specify an address when > > instantiating a JavaGateway and a GatewayServer. > > > > The release is available in the current-release directory: > > https://github.com/bartdag/py4j/tree/master/current-release > > > > It has been tested on python 2.7 and 3.2 and on Java 1.6. The full 0.8 > > release will be tested on python 2.6, 2.7, 3.1, and 3.2. > > > > Barthélémy > > > > > ------------------------------------------------------------------------------ > > Live Security Virtual Conference > > Exclusive live event will cover all the ways today's security and > > threat landscape has changed and how IT managers can respond. Discussions > > will include endpoint security, mobile security and the latest in malware > > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > > _______________________________________________ > > Py4j-users mailing list > > Py4...@li... > > https://lists.sourceforge.net/lists/listinfo/py4j-users > > > > > ------------------------------------------------------------------------------ > > Live Security Virtual Conference > > Exclusive live event will cover all the ways today's security and > > threat landscape has changed and how IT managers can respond. Discussions > > will include endpoint security, mobile security and the latest in malware > > threats. > http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/_______________________________________________ > > Py4j-users mailing list > > Py4...@li... > > https://lists.sourceforge.net/lists/listinfo/py4j-users > > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users > |
From: Barthelemy D. <ba...@cs...> - 2012-07-23 09:14:05
|
Hi, The version number is still 0.7 because this is just a temporary build and it is only available through github (but it's the same kind of file that is available on sourceforge and you can download it by clicking on the "raw" button). The final release will be 0.8 and will be available on pypi and sourceforge. Barthélémy On 2012-07-23, at 3:27 AM, Jason Ni wrote: > Great job! Thanks a lot! > What's the version number of this release? Will this release replace the 0.7 package in the sourceforge download page? > > 2012/7/22 Barthelemy Dagenais <ba...@cs...> > Hi, > > I just built a new release of py4j that includes a few fixes: > > 1. long types are now correctly converted (issue #99). Please note that > Python 3 merged int and long. This means that Py4J has to do all the > inference work on the Java side for Python 3. In some corner cases, Py4J > might not be able to call the method you want (e.g., you have > method1(int) and method1(long) and you are calling from python 3 > method1(123). method1(int) will be called even though you may want > method1(long) to be called. The only workaround I can think of is to > create an adapter in Java and call this adapter). > > 2. decimals are now supported and correctly converted (issue #101) > > 3. plugged memory leak in GatewayServer when multiple python clients > were connecting and disconnecting (java side, discussed on this mailing > list last week) > > 4. gateway.close() (python side) now correctly sends a close signal to > the java side (discovered while testing fix for #3) > > 5. by default, the python and java sides now try to connect to 127.0.0.1 > instead of localhost. It is always possible to specify an address when > instantiating a JavaGateway and a GatewayServer. > > The release is available in the current-release directory: > https://github.com/bartdag/py4j/tree/master/current-release > > It has been tested on python 2.7 and 3.2 and on Java 1.6. The full 0.8 > release will be tested on python 2.6, 2.7, 3.1, and 3.2. > > Barthélémy > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/_______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users |
From: Jason Ni <jas...@gm...> - 2012-07-23 07:27:38
|
Great job! Thanks a lot! What's the version number of this release? Will this release replace the 0.7 package in the sourceforge download page? 2012/7/22 Barthelemy Dagenais <ba...@cs...> > Hi, > > I just built a new release of py4j that includes a few fixes: > > 1. long types are now correctly converted (issue #99). Please note that > Python 3 merged int and long. This means that Py4J has to do all the > inference work on the Java side for Python 3. In some corner cases, Py4J > might not be able to call the method you want (e.g., you have > method1(int) and method1(long) and you are calling from python 3 > method1(123). method1(int) will be called even though you may want > method1(long) to be called. The only workaround I can think of is to > create an adapter in Java and call this adapter). > > 2. decimals are now supported and correctly converted (issue #101) > > 3. plugged memory leak in GatewayServer when multiple python clients > were connecting and disconnecting (java side, discussed on this mailing > list last week) > > 4. gateway.close() (python side) now correctly sends a close signal to > the java side (discovered while testing fix for #3) > > 5. by default, the python and java sides now try to connect to 127.0.0.1 > instead of localhost. It is always possible to specify an address when > instantiating a JavaGateway and a GatewayServer. > > The release is available in the current-release directory: > https://github.com/bartdag/py4j/tree/master/current-release > > It has been tested on python 2.7 and 3.2 and on Java 1.6. The full 0.8 > release will be tested on python 2.6, 2.7, 3.1, and 3.2. > > Barthélémy > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users > |
From: Alex G. <ale...@ne...> - 2012-07-22 09:50:58
|
22.07.2012 01:48, Barthelemy Dagenais kirjoitti: > Hi, > > I just built a new release of py4j that includes a few fixes: > > 1. long types are now correctly converted (issue #99). Please note that > Python 3 merged int and long. This means that Py4J has to do all the > inference work on the Java side for Python 3. In some corner cases, Py4J > might not be able to call the method you want (e.g., you have > method1(int) and method1(long) and you are calling from python 3 > method1(123). method1(int) will be called even though you may want > method1(long) to be called. The only workaround I can think of is to > create an adapter in Java and call this adapter). > > 2. decimals are now supported and correctly converted (issue #101) > > 3. plugged memory leak in GatewayServer when multiple python clients > were connecting and disconnecting (java side, discussed on this mailing > list last week) > > 4. gateway.close() (python side) now correctly sends a close signal to > the java side (discovered while testing fix for #3) > > 5. by default, the python and java sides now try to connect to 127.0.0.1 > instead of localhost. It is always possible to specify an address when > instantiating a JavaGateway and a GatewayServer. > > The release is available in the current-release directory: > https://github.com/bartdag/py4j/tree/master/current-release > > It has been tested on python 2.7 and 3.2 and on Java 1.6. The full 0.8 > release will be tested on python 2.6, 2.7, 3.1, and 3.2. > > Barthélémy > Thanks! I'll switch to this for testing now. |
From: Barthelemy D. <ba...@cs...> - 2012-07-21 22:48:21
|
Hi, I just built a new release of py4j that includes a few fixes: 1. long types are now correctly converted (issue #99). Please note that Python 3 merged int and long. This means that Py4J has to do all the inference work on the Java side for Python 3. In some corner cases, Py4J might not be able to call the method you want (e.g., you have method1(int) and method1(long) and you are calling from python 3 method1(123). method1(int) will be called even though you may want method1(long) to be called. The only workaround I can think of is to create an adapter in Java and call this adapter). 2. decimals are now supported and correctly converted (issue #101) 3. plugged memory leak in GatewayServer when multiple python clients were connecting and disconnecting (java side, discussed on this mailing list last week) 4. gateway.close() (python side) now correctly sends a close signal to the java side (discovered while testing fix for #3) 5. by default, the python and java sides now try to connect to 127.0.0.1 instead of localhost. It is always possible to specify an address when instantiating a JavaGateway and a GatewayServer. The release is available in the current-release directory: https://github.com/bartdag/py4j/tree/master/current-release It has been tested on python 2.7 and 3.2 and on Java 1.6. The full 0.8 release will be tested on python 2.6, 2.7, 3.1, and 3.2. Barthélémy |
From: Jason Ni <jas...@gm...> - 2012-07-16 10:01:29
|
It's great! Thank you very much. 在 2012-7-16 下午4:46,"Barthelemy Dagenais" <ba...@cs...>写道: > I plan to work on Py4J next weekend and I already created an issue on > GitHub for this bug. If I manage to fix a few bugs, I'll make a temporary > release in the current-release directory: > https://github.com/bartdag/py4j/tree/master/current-release > > Barthélémy > > On Sun, July 15, 2012 9:45 pm, Jason Ni wrote: > > Hi Barthélémy , > > > > > > Thank you. Yes I was speaking of GatewayServer on the Java side. Do you > > have a plan to fix it soon? > > > > - Jason > > > > > > 2012/7/14 Barthelemy Dagenais <ba...@cs...> > > > > > >> Hi Jason, > >> > >> > >> If you are speaking of GatewayServer on the Java side, it is a bug. > >> Sockets in the connections list should be removed once a > >> GatewayConnection > >> is closed. This will require a small refactoring because the gateway > >> connection is closed in one thread and the shutdown method on the > >> gatewayserver can be called in another thread. > >> > >> Thanks for reporting this bug, > >> Barthélémy > >> > >> > >> > >> On 2012-07-14, at 10:42 AM, Jason Ni wrote: > >> > >> > >>> Hello, > >>> > >>> > >>> There is a List member "connections" in GatewayServer object. It > >>> holds > >> every socket object until the GatewayServer is shutdown. This may be > >> not good for this use case: the GatewayServer is providing a kind of > >> service. Python clients connect to the GatewayServer, do some > >> communication, close the connect and end the Python process, but not > >> shutdown the server. After many times of this kind of connections, I see > >> those socket objects are held in the "connections" list and not garbage > >> collected. > >>> Is this working as design or I did something wrong? > >>> > >>> > >>> Thanks, > >>> > >>> > >>> - Jason > >>> > >>> > >> ----------------------------------------------------------------------- > >> ------- > >> > >>> Live Security Virtual Conference > >>> Exclusive live event will cover all the ways today's security and > >>> threat landscape has changed and how IT managers can respond. > >>> Discussions > >>> will include endpoint security, mobile security and the latest in > >>> malware threats. > >> http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/______________ > >> _________________________________ > >> > >>> Py4j-users mailing list > >>> Py4...@li... > >>> https://lists.sourceforge.net/lists/listinfo/py4j-users > >>> > >> > >> > >> > >> ----------------------------------------------------------------------- > >> ------- > >> Live Security Virtual Conference > >> Exclusive live event will cover all the ways today's security and > >> threat landscape has changed and how IT managers can respond. > >> Discussions > >> will include endpoint security, mobile security and the latest in > >> malware threats. > >> http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > >> _______________________________________________ > >> Py4j-users mailing list > >> Py4...@li... > >> https://lists.sourceforge.net/lists/listinfo/py4j-users > >> > >> > > ------------------------------------------------------------------------- > > ----- > > Live Security Virtual Conference > > Exclusive live event will cover all the ways today's security and > > threat landscape has changed and how IT managers can respond. Discussions > > will include endpoint security, mobile security and the latest in malware > > threats. > > > http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/________________ > > _______________________________ > > Py4j-users mailing list > > Py4...@li... > > https://lists.sourceforge.net/lists/listinfo/py4j-users > > > > > > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users > |
From: Barthelemy D. <ba...@cs...> - 2012-07-16 08:46:25
|
I plan to work on Py4J next weekend and I already created an issue on GitHub for this bug. If I manage to fix a few bugs, I'll make a temporary release in the current-release directory: https://github.com/bartdag/py4j/tree/master/current-release Barthélémy On Sun, July 15, 2012 9:45 pm, Jason Ni wrote: > Hi Barthélémy , > > > Thank you. Yes I was speaking of GatewayServer on the Java side. Do you > have a plan to fix it soon? > > - Jason > > > 2012/7/14 Barthelemy Dagenais <ba...@cs...> > > >> Hi Jason, >> >> >> If you are speaking of GatewayServer on the Java side, it is a bug. >> Sockets in the connections list should be removed once a >> GatewayConnection >> is closed. This will require a small refactoring because the gateway >> connection is closed in one thread and the shutdown method on the >> gatewayserver can be called in another thread. >> >> Thanks for reporting this bug, >> Barthélémy >> >> >> >> On 2012-07-14, at 10:42 AM, Jason Ni wrote: >> >> >>> Hello, >>> >>> >>> There is a List member "connections" in GatewayServer object. It >>> holds >> every socket object until the GatewayServer is shutdown. This may be >> not good for this use case: the GatewayServer is providing a kind of >> service. Python clients connect to the GatewayServer, do some >> communication, close the connect and end the Python process, but not >> shutdown the server. After many times of this kind of connections, I see >> those socket objects are held in the "connections" list and not garbage >> collected. >>> Is this working as design or I did something wrong? >>> >>> >>> Thanks, >>> >>> >>> - Jason >>> >>> >> ----------------------------------------------------------------------- >> ------- >> >>> Live Security Virtual Conference >>> Exclusive live event will cover all the ways today's security and >>> threat landscape has changed and how IT managers can respond. >>> Discussions >>> will include endpoint security, mobile security and the latest in >>> malware threats. >> http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/______________ >> _________________________________ >> >>> Py4j-users mailing list >>> Py4...@li... >>> https://lists.sourceforge.net/lists/listinfo/py4j-users >>> >> >> >> >> ----------------------------------------------------------------------- >> ------- >> Live Security Virtual Conference >> Exclusive live event will cover all the ways today's security and >> threat landscape has changed and how IT managers can respond. >> Discussions >> will include endpoint security, mobile security and the latest in >> malware threats. >> http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >> _______________________________________________ >> Py4j-users mailing list >> Py4...@li... >> https://lists.sourceforge.net/lists/listinfo/py4j-users >> >> > ------------------------------------------------------------------------- > ----- > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. > http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/________________ > _______________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users > > |
From: Jason Ni <jas...@gm...> - 2012-07-16 01:45:55
|
Hi Barthélémy , Thank you. Yes I was speaking of GatewayServer on the Java side. Do you have a plan to fix it soon? - Jason 2012/7/14 Barthelemy Dagenais <ba...@cs...> > Hi Jason, > > If you are speaking of GatewayServer on the Java side, it is a bug. > Sockets in the connections list should be removed once a GatewayConnection > is closed. This will require a small refactoring because the gateway > connection is closed in one thread and the shutdown method on the > gatewayserver can be called in another thread. > > Thanks for reporting this bug, > Barthélémy > > > On 2012-07-14, at 10:42 AM, Jason Ni wrote: > > > Hello, > > > > There is a List member "connections" in GatewayServer object. It holds > every socket object until the GatewayServer is shutdown. This may be not > good for this use case: the GatewayServer is providing a kind of service. > Python clients connect to the GatewayServer, do some communication, close > the connect and end the Python process, but not shutdown the server. After > many times of this kind of connections, I see those socket objects are held > in the "connections" list and not garbage collected. > > Is this working as design or I did something wrong? > > > > Thanks, > > > > - Jason > > > ------------------------------------------------------------------------------ > > Live Security Virtual Conference > > Exclusive live event will cover all the ways today's security and > > threat landscape has changed and how IT managers can respond. Discussions > > will include endpoint security, mobile security and the latest in malware > > threats. > http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/_______________________________________________ > > Py4j-users mailing list > > Py4...@li... > > https://lists.sourceforge.net/lists/listinfo/py4j-users > > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users > |
From: Barthelemy D. <ba...@cs...> - 2012-07-14 15:24:16
|
Hi Jason, If you are speaking of GatewayServer on the Java side, it is a bug. Sockets in the connections list should be removed once a GatewayConnection is closed. This will require a small refactoring because the gateway connection is closed in one thread and the shutdown method on the gatewayserver can be called in another thread. Thanks for reporting this bug, Barthélémy On 2012-07-14, at 10:42 AM, Jason Ni wrote: > Hello, > > There is a List member "connections" in GatewayServer object. It holds every socket object until the GatewayServer is shutdown. This may be not good for this use case: the GatewayServer is providing a kind of service. Python clients connect to the GatewayServer, do some communication, close the connect and end the Python process, but not shutdown the server. After many times of this kind of connections, I see those socket objects are held in the "connections" list and not garbage collected. > Is this working as design or I did something wrong? > > Thanks, > > - Jason > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/_______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users |
From: Jason Ni <jas...@gm...> - 2012-07-14 14:43:04
|
Hello, There is a List member "connections" in GatewayServer object. It holds every socket object until the GatewayServer is shutdown. This may be not good for this use case: the GatewayServer is providing a kind of service. Python clients connect to the GatewayServer, do some communication, close the connect and end the Python process, but not shutdown the server. After many times of this kind of connections, I see those socket objects are held in the "connections" list and not garbage collected. Is this working as design or I did something wrong? Thanks, - Jason |
From: Barthelemy D. <ba...@cs...> - 2012-06-22 22:47:02
|
Hi, I'm a bit puzzled. This error, py4j.Py4JException: Method __getnewargs__([]) does not exist, means that something is trying to pickle a JavaObject instance. This typically happens if you try to share an object with multiprocessing. Here are a couple of debug statements I would add: 1. Try to place the import statements in singlethread(…). I just want to make sure that Py4J is not initializing some global states that are shared between multiprocessing (I don't think so because I used multiprocessing with Py4J in the past, but this is just to eliminate a possibility). 2. print the id the objects you create, e.g., print(config._target_id). The error message contains an object id that we can use to track down which object is supposed to have this __getnewargs__ method. 3. debug or print a message between each line after the java_import statements, to know exactly when the error occurs. Thanks, Barthélémy On 2012-06-22, at 10:52 AM, Eleftherios Avramidis wrote: > Hi, > > I am sorry, I missed two lines: > > > from py4j.java_gateway import JavaGateway, GatewayClient, java_import > > import multiprocessing, time, random > > def singlethread(socket_no): > print "Thread starting" > > gatewayclient = GatewayClient('localhost', socket_no) > gateway = JavaGateway(gatewayclient, auto_convert=True, auto_field=True) > #create a new view for the jvm > meteor_view = gateway.new_jvm_view() > #import required packages > java_import(meteor_view, 'edu.cmu.meteor.scorer.*') > #initialize the java object > java_import(meteor_view, 'edu.cmu.meteor.util.*') > #pass the language setting into the meteor configuration object > config = meteor_view.MeteorConfiguration(); > config.setLanguage("en"); > scorer = meteor_view.MeteorScorer(config) > print "object initialized" > #run object function > stats = scorer.getMeteorStats("Test sentence", "Test sentence !"); > print stats.score > return 1 > > > if __name__ == '__main__': > socket_no = 25336 > print "Gclient started" > > p = multiprocessing.Pool(3) > print "Multipool initialized" > p.map(singlethread, [socket_no, socket_no,socket_no]) > > > > > On 22/06/12 16:50, Eleftherios Avramidis wrote: >> Hi Barthélémy, >> >> I just tried rewriting the code as following. Two threads printed out their result successfully, the third pool worker gave a similar error. (I am running this in a 2-core machine) >> >> >> from py4j.java_gateway import JavaGateway, GatewayClient, java_import >> >> import multiprocessing, time, random >> >> def singlethread(socket_no): >> print "Thread starting" >> gatewayclient = GatewayClient('localhost', socket_no) >> gateway = JavaGateway(gatewayclient, auto_convert=True, auto_field=True) >> #create a new view for the jvm >> meteor_view = gateway.new_jvm_view() >> #import required packages >> java_import(meteor_view, 'edu.cmu.meteor.scorer.*') >> #initialize the java object >> java_import(meteor_view, 'edu.cmu.meteor.util.*') >> #pass the language setting into the meteor configuration object >> config = meteor_view.MeteorConfiguration(); >> config.setLanguage("en"); >> scorer = meteor_view.MeteorScorer(config) >> print "object initialized" >> #run object function >> stats = scorer.getMeteorStats("Test sentence", "Test sentence !"); >> print stats.score >> return 1 >> >> >> if __name__ == '__main__': >> socket_no = 25336 >> # gatewayclient = GatewayClient('localhost', socket_no) >> print "Gclient started" >> >> >> >> output: >> >> Gclient started >> Multipool initialized >> Thread starting >> Thread starting >> Thread starting >> Process PoolWorker-3: >> Traceback (most recent call last): >> File "/usr/local/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap >> self.run() >> File "/usr/local/lib/python2.7/multiprocessing/process.py", line 114, in run >> self._target(*self._args, **self._kwargs) >> File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 99, in worker >> put((job, i, result)) >> File "/usr/local/lib/python2.7/multiprocessing/queues.py", line 392, in put >> return send(obj) >> File "/usr/local/lib/python2.7/site-packages/py4j/java_gateway.py", line 432, in __call__ >> self.target_id, self.name) >> File "/usr/local/lib/python2.7/site-packages/py4j/protocol.py", line 271, in get_return_value >> raise Py4JError('An error occurred while calling %s%s%s. Trace:\n%s\n' % (target_id, '.', name, value)) >> Py4JError: An error occurred while calling o6.__getnewargs__. Trace: >> py4j.Py4JException: Method __getnewargs__([]) does not exist >> at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:346) >> at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:355) >> at py4j.Gateway.invoke(Gateway.java:247) >> at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:124) >> at py4j.commands.CallCommand.execute(CallCommand.java:81) >> at py4j.GatewayConnection.run(GatewayConnection.java:175) >> at java.lang.Thread.run(Thread.java:636) >> >> >> object initialized >> 0.335206780367 >> object initialized >> 0.335206780367 >> >> >> Any suggestions welcome, >> >> Lefteris >> >> >> On 22/06/12 16:25, Barthelemy Dagenais wrote: >>> Hi Eleftherios, >>> >>> in this code: >>> >>> if __name__ == '__main__': >>> socket_no = 25336 >>> gatewayclient = GatewayClient('localhost', socket_no) >>> print "Gclient started" >>> gateway = JavaGateway(gatewayclient, auto_convert=True, >>> auto_field=True) >>> print "Gateway started" >>> >>> p = multiprocessing.Pool(2) >>> print "Multipool initialized" >>> p.map(singlethread, [gateway, gateway, gateway]) >>> >>> You are creating only one instance of JavaGateway and this instance is passed to each worker (the list [gateway, gateway, gateway] is in fact a list of three pointers pointing to the same instance). I usually recommend to create one JavaGateway instance per worker. >>> >>> Unless this was not the code that caused the problem, I would start by creating a JavaGateway in each worker and then, if you still encounter the problem, we can start looking at other possibilities. >>> >>> Thanks, >>> Barthélémy >>> >>> >>> On 2012-06-22, at 10:20 AM, Eleftherios Avramidis wrote: >>> >>>> Hi Barthélémy, >>>> >>>> thanks for your quick response. I am trying to understand your suggestion: >>>> - On the Java side I have initialized GatewayServer on socket 25336 >>>> - On the Python side I initialized one GatewayClient per thread, >>>> connecting to socket 25336. >>>> >>>> Is this the right solution so that the sockets are not being shared? >>>> >>>> best >>>> Eleftherios >>>> >>>> >>>> >>>> >>>> >>>> On 22/06/12 15:55, Barthelemy Dagenais wrote: >>>>> Hi, >>>>> >>>>> Please try to initialize the gateway in the thread/process and not outside. I believe you may be sharing sockets across threads/processes, which would explain the weird behavior you are observing. >>>>> >>>>> Barthélémy >>>>> >>>>> On 2012-06-22, at 9:08 AM, Eleftherios Avramidis wrote: >>>>> >>>>>> Dear all, >>>>>> >>>>>> I would like your help with a particular issue which occurs when I am >>>>>> trying to use python multiprocessing, along with Py4j Java objects. >>>>>> >>>>>> >>>>>> def singlethread(gateway): >>>>>> print "Thread starting" >>>>>> >>>>>> #create a new view for the jvm >>>>>> meteor_view = gateway.new_jvm_view() >>>>>> #import required packages >>>>>> java_import(meteor_view, 'edu.cmu.meteor.scorer.*') >>>>>> #initialize the java object >>>>>> scorer = meteor_view.MeteorScorer() >>>>>> print "object initialized" >>>>>> #run object function >>>>>> stats = scorer.getMeteorStats("Test sentence", "Test sentence !"); >>>>>> print stats.score >>>>>> >>>>>> if __name__ == '__main__': >>>>>> socket_no = 25336 >>>>>> gatewayclient = GatewayClient('localhost', socket_no) >>>>>> print "Gclient started" >>>>>> gateway = JavaGateway(gatewayclient, auto_convert=True, >>>>>> auto_field=True) >>>>>> print "Gateway started" >>>>>> >>>>>> p = multiprocessing.Pool(2) >>>>>> print "Multipool initialized" >>>>>> p.map(singlethread, [gateway, gateway, gateway]) >>>>>> >>>>>> >>>>>> >>>>>> output: >>>>>> >>>>>> Gclient started >>>>>> Gateway started >>>>>> Multipool initialized >>>>>> Exception in thread Thread-2: >>>>>> Traceback (most recent call last): >>>>>> File "/usr/local/lib/python2.7/threading.py", line 552, in >>>>>> __bootstrap_inner >>>>>> self.run() >>>>>> File "/usr/local/lib/python2.7/threading.py", line 505, in run >>>>>> self.__target(*self.__args, **self.__kwargs) >>>>>> File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 313, in >>>>>> _handle_tasks >>>>>> put(task) >>>>>> File "/usr/local/lib/python2.7/site-packages/py4j/java_gateway.py", >>>>>> line 432, in __call__ >>>>>> self.target_id, self.name) >>>>>> File "/usr/local/lib/python2.7/site-packages/py4j/protocol.py", line >>>>>> 271, in get_return_value >>>>>> raise Py4JError('An error occurred while calling %s%s%s. >>>>>> Trace:\n%s\n' % (target_id, '.', name, value)) >>>>>> Py4JError: An error occurred while calling t.__getnewargs__. Trace: >>>>>> java.lang.StringIndexOutOfBoundsException: String index out of range: -1 >>>>>> at java.lang.String.substring(String.java:1949) >>>>>> at java.lang.String.substring(String.java:1916) >>>>>> at py4j.Gateway.invoke(Gateway.java:250) >>>>>> at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:124) >>>>>> at py4j.commands.CallCommand.execute(CallCommand.java:81) >>>>>> at py4j.GatewayConnection.run(GatewayConnection.java:175) >>>>>> at java.lang.Thread.run(Thread.java:636) >>>>>> >>>>>> >>>>>> I would be happy if somebody can help me find out what exactly the error >>>>>> may be, or if you can indicate where I should look for the problem. >>>>>> >>>>>> Interestingly enough, this problem doesn't occur when running without >>>>>> multiprocessing. It also runs fine with other Java programs. But how can >>>>>> I specify which aspect of the Java program causes the error? >>>>>> >>>>>> best >>>>>> Eleftherios >>>>>> >>>>>> -- >>>>>> MSc. Inf. Eleftherios Avramidis >>>>>> DFKI GmbH, Alt-Moabit 91c, 10559 Berlin >>>>>> Tel. +49-30 238 95-1806 >>>>>> >>>>>> Fax. +49-30 238 95-1810 >>>>>> >>>>>> ------------------------------------------------------------------------------------------- >>>>>> Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH >>>>>> Firmensitz: Trippstadter Strasse 122, D-67663 Kaiserslautern >>>>>> >>>>>> Geschaeftsfuehrung: >>>>>> Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) >>>>>> Dr. Walter Olthoff >>>>>> >>>>>> Vorsitzender des Aufsichtsrats: >>>>>> Prof. Dr. h.c. Hans A. Aukes >>>>>> >>>>>> Amtsgericht Kaiserslautern, HRB 2313 >>>>>> ------------------------------------------------------------------------------------------- >>>>>> >>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> Live Security Virtual Conference >>>>>> Exclusive live event will cover all the ways today's security and >>>>>> threat landscape has changed and how IT managers can respond. Discussions >>>>>> will include endpoint security, mobile security and the latest in malware >>>>>> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >>>>>> _______________________________________________ >>>>>> Py4j-users mailing list >>>>>> Py4...@li... >>>>>> https://lists.sourceforge.net/lists/listinfo/py4j-users >>>> >>>> -- >>>> MSc. Inf. Eleftherios Avramidis >>>> DFKI GmbH, Alt-Moabit 91c, 10559 Berlin >>>> Tel. +49-30 238 95-1806 >>>> >>>> Fax. +49-30 238 95-1810 >>>> >>>> ------------------------------------------------------------------------------------------- >>>> Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH >>>> Firmensitz: Trippstadter Strasse 122, D-67663 Kaiserslautern >>>> >>>> Geschaeftsfuehrung: >>>> Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) >>>> Dr. Walter Olthoff >>>> >>>> Vorsitzender des Aufsichtsrats: >>>> Prof. Dr. h.c. Hans A. Aukes >>>> >>>> Amtsgericht Kaiserslautern, HRB 2313 >>>> ------------------------------------------------------------------------------------------- >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Live Security Virtual Conference >>>> Exclusive live event will cover all the ways today's security and >>>> threat landscape has changed and how IT managers can respond. Discussions >>>> will include endpoint security, mobile security and the latest in malware >>>> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >>>> _______________________________________________ >>>> Py4j-users mailing list >>>> Py4...@li... >>>> https://lists.sourceforge.net/lists/listinfo/py4j-users >> >> > > > -- > MSc. Inf. Eleftherios Avramidis > DFKI GmbH, Alt-Moabit 91c, 10559 Berlin > Tel. +49-30 238 95-1806 > > Fax. +49-30 238 95-1810 > > ------------------------------------------------------------------------------------------- > Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH > Firmensitz: Trippstadter Strasse 122, D-67663 Kaiserslautern > > Geschaeftsfuehrung: > Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) > Dr. Walter Olthoff > > Vorsitzender des Aufsichtsrats: > Prof. Dr. h.c. Hans A. Aukes > > Amtsgericht Kaiserslautern, HRB 2313 > ------------------------------------------------------------------------------------------- > |
From: Eleftherios A. <ele...@df...> - 2012-06-22 14:52:35
|
Hi, I am sorry, I missed two lines: from py4j.java_gateway import JavaGateway, GatewayClient, java_import import multiprocessing, time, random def singlethread(socket_no): print "Thread starting" gatewayclient = GatewayClient('localhost', socket_no) gateway = JavaGateway(gatewayclient, auto_convert=True, auto_field=True) #create a new view for the jvm meteor_view = gateway.new_jvm_view() #import required packages java_import(meteor_view, 'edu.cmu.meteor.scorer.*') #initialize the java object java_import(meteor_view, 'edu.cmu.meteor.util.*') #pass the language setting into the meteor configuration object config = meteor_view.MeteorConfiguration(); config.setLanguage("en"); scorer = meteor_view.MeteorScorer(config) print "object initialized" #run object function stats = scorer.getMeteorStats("Test sentence", "Test sentence !"); print stats.score return 1 if __name__ == '__main__': socket_no = 25336 print "Gclient started" p = multiprocessing.Pool(3) print "Multipool initialized" p.map(singlethread, [socket_no, socket_no,socket_no]) On 22/06/12 16:50, Eleftherios Avramidis wrote: > Hi Barthélémy, > > I just tried rewriting the code as following. Two threads printed out > their result successfully, the third pool worker gave a similar error. > (I am running this in a 2-core machine) > > > from py4j.java_gateway import JavaGateway, GatewayClient, java_import > > import multiprocessing, time, random > > def singlethread(socket_no): > print "Thread starting" > gatewayclient = GatewayClient('localhost', socket_no) > gateway = JavaGateway(gatewayclient, auto_convert=True, > auto_field=True) > #create a new view for the jvm > meteor_view = gateway.new_jvm_view() > #import required packages > java_import(meteor_view, 'edu.cmu.meteor.scorer.*') > #initialize the java object > java_import(meteor_view, 'edu.cmu.meteor.util.*') > #pass the language setting into the meteor configuration object > config = meteor_view.MeteorConfiguration(); > config.setLanguage("en"); > scorer = meteor_view.MeteorScorer(config) > print "object initialized" > #run object function > stats = scorer.getMeteorStats("Test sentence", "Test sentence !"); > print stats.score > return 1 > > > if __name__ == '__main__': > socket_no = 25336 > # gatewayclient = GatewayClient('localhost', socket_no) > print "Gclient started" > > > > output: > > Gclient started > Multipool initialized > Thread starting > Thread starting > Thread starting > Process PoolWorker-3: > Traceback (most recent call last): > File "/usr/local/lib/python2.7/multiprocessing/process.py", line > 258, in _bootstrap > self.run() > File "/usr/local/lib/python2.7/multiprocessing/process.py", line > 114, in run > self._target(*self._args, **self._kwargs) > File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 99, in > worker > put((job, i, result)) > File "/usr/local/lib/python2.7/multiprocessing/queues.py", line 392, > in put > return send(obj) > File "/usr/local/lib/python2.7/site-packages/py4j/java_gateway.py", > line 432, in __call__ > self.target_id, self.name) > File "/usr/local/lib/python2.7/site-packages/py4j/protocol.py", line > 271, in get_return_value > raise Py4JError('An error occurred while calling %s%s%s. > Trace:\n%s\n' % (target_id, '.', name, value)) > Py4JError: An error occurred while calling o6.__getnewargs__. Trace: > py4j.Py4JException: Method __getnewargs__([]) does not exist > at > py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:346) > at > py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:355) > at py4j.Gateway.invoke(Gateway.java:247) > at > py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:124) > at py4j.commands.CallCommand.execute(CallCommand.java:81) > at py4j.GatewayConnection.run(GatewayConnection.java:175) > at java.lang.Thread.run(Thread.java:636) > > > object initialized > 0.335206780367 > object initialized > 0.335206780367 > > > Any suggestions welcome, > > Lefteris > > > On 22/06/12 16:25, Barthelemy Dagenais wrote: >> Hi Eleftherios, >> >> in this code: >> >> if __name__ == '__main__': >> socket_no = 25336 >> gatewayclient = GatewayClient('localhost', socket_no) >> print "Gclient started" >> gateway = JavaGateway(gatewayclient, auto_convert=True, >> auto_field=True) >> print "Gateway started" >> >> p = multiprocessing.Pool(2) >> print "Multipool initialized" >> p.map(singlethread, [gateway, gateway, gateway]) >> >> You are creating only one instance of JavaGateway and this instance >> is passed to each worker (the list [gateway, gateway, gateway] is in >> fact a list of three pointers pointing to the same instance). I >> usually recommend to create one JavaGateway instance per worker. >> >> Unless this was not the code that caused the problem, I would start >> by creating a JavaGateway in each worker and then, if you still >> encounter the problem, we can start looking at other possibilities. >> >> Thanks, >> Barthélémy >> >> >> On 2012-06-22, at 10:20 AM, Eleftherios Avramidis wrote: >> >>> Hi Barthélémy, >>> >>> thanks for your quick response. I am trying to understand your >>> suggestion: >>> - On the Java side I have initialized GatewayServer on socket 25336 >>> - On the Python side I initialized one GatewayClient per thread, >>> connecting to socket 25336. >>> >>> Is this the right solution so that the sockets are not being shared? >>> >>> best >>> Eleftherios >>> >>> >>> >>> >>> >>> On 22/06/12 15:55, Barthelemy Dagenais wrote: >>>> Hi, >>>> >>>> Please try to initialize the gateway in the thread/process and not >>>> outside. I believe you may be sharing sockets across >>>> threads/processes, which would explain the weird behavior you are >>>> observing. >>>> >>>> Barthélémy >>>> >>>> On 2012-06-22, at 9:08 AM, Eleftherios Avramidis wrote: >>>> >>>>> Dear all, >>>>> >>>>> I would like your help with a particular issue which occurs when I am >>>>> trying to use python multiprocessing, along with Py4j Java objects. >>>>> >>>>> >>>>> def singlethread(gateway): >>>>> print "Thread starting" >>>>> >>>>> #create a new view for the jvm >>>>> meteor_view = gateway.new_jvm_view() >>>>> #import required packages >>>>> java_import(meteor_view, 'edu.cmu.meteor.scorer.*') >>>>> #initialize the java object >>>>> scorer = meteor_view.MeteorScorer() >>>>> print "object initialized" >>>>> #run object function >>>>> stats = scorer.getMeteorStats("Test sentence", "Test sentence >>>>> !"); >>>>> print stats.score >>>>> >>>>> if __name__ == '__main__': >>>>> socket_no = 25336 >>>>> gatewayclient = GatewayClient('localhost', socket_no) >>>>> print "Gclient started" >>>>> gateway = JavaGateway(gatewayclient, auto_convert=True, >>>>> auto_field=True) >>>>> print "Gateway started" >>>>> >>>>> p = multiprocessing.Pool(2) >>>>> print "Multipool initialized" >>>>> p.map(singlethread, [gateway, gateway, gateway]) >>>>> >>>>> >>>>> >>>>> output: >>>>> >>>>> Gclient started >>>>> Gateway started >>>>> Multipool initialized >>>>> Exception in thread Thread-2: >>>>> Traceback (most recent call last): >>>>> File "/usr/local/lib/python2.7/threading.py", line 552, in >>>>> __bootstrap_inner >>>>> self.run() >>>>> File "/usr/local/lib/python2.7/threading.py", line 505, in run >>>>> self.__target(*self.__args, **self.__kwargs) >>>>> File "/usr/local/lib/python2.7/multiprocessing/pool.py", line >>>>> 313, in >>>>> _handle_tasks >>>>> put(task) >>>>> File >>>>> "/usr/local/lib/python2.7/site-packages/py4j/java_gateway.py", >>>>> line 432, in __call__ >>>>> self.target_id, self.name) >>>>> File "/usr/local/lib/python2.7/site-packages/py4j/protocol.py", >>>>> line >>>>> 271, in get_return_value >>>>> raise Py4JError('An error occurred while calling %s%s%s. >>>>> Trace:\n%s\n' % (target_id, '.', name, value)) >>>>> Py4JError: An error occurred while calling t.__getnewargs__. Trace: >>>>> java.lang.StringIndexOutOfBoundsException: String index out of >>>>> range: -1 >>>>> at java.lang.String.substring(String.java:1949) >>>>> at java.lang.String.substring(String.java:1916) >>>>> at py4j.Gateway.invoke(Gateway.java:250) >>>>> at >>>>> py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:124) >>>>> at py4j.commands.CallCommand.execute(CallCommand.java:81) >>>>> at py4j.GatewayConnection.run(GatewayConnection.java:175) >>>>> at java.lang.Thread.run(Thread.java:636) >>>>> >>>>> >>>>> I would be happy if somebody can help me find out what exactly the >>>>> error >>>>> may be, or if you can indicate where I should look for the problem. >>>>> >>>>> Interestingly enough, this problem doesn't occur when running without >>>>> multiprocessing. It also runs fine with other Java programs. But >>>>> how can >>>>> I specify which aspect of the Java program causes the error? >>>>> >>>>> best >>>>> Eleftherios >>>>> >>>>> -- >>>>> MSc. Inf. Eleftherios Avramidis >>>>> DFKI GmbH, Alt-Moabit 91c, 10559 Berlin >>>>> Tel. +49-30 238 95-1806 >>>>> >>>>> Fax. +49-30 238 95-1810 >>>>> >>>>> ------------------------------------------------------------------------------------------- >>>>> >>>>> Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH >>>>> Firmensitz: Trippstadter Strasse 122, D-67663 Kaiserslautern >>>>> >>>>> Geschaeftsfuehrung: >>>>> Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) >>>>> Dr. Walter Olthoff >>>>> >>>>> Vorsitzender des Aufsichtsrats: >>>>> Prof. Dr. h.c. Hans A. Aukes >>>>> >>>>> Amtsgericht Kaiserslautern, HRB 2313 >>>>> ------------------------------------------------------------------------------------------- >>>>> >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> >>>>> Live Security Virtual Conference >>>>> Exclusive live event will cover all the ways today's security and >>>>> threat landscape has changed and how IT managers can respond. >>>>> Discussions >>>>> will include endpoint security, mobile security and the latest in >>>>> malware >>>>> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >>>>> _______________________________________________ >>>>> Py4j-users mailing list >>>>> Py4...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/py4j-users >>> >>> -- >>> MSc. Inf. Eleftherios Avramidis >>> DFKI GmbH, Alt-Moabit 91c, 10559 Berlin >>> Tel. +49-30 238 95-1806 >>> >>> Fax. +49-30 238 95-1810 >>> >>> ------------------------------------------------------------------------------------------- >>> >>> Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH >>> Firmensitz: Trippstadter Strasse 122, D-67663 Kaiserslautern >>> >>> Geschaeftsfuehrung: >>> Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) >>> Dr. Walter Olthoff >>> >>> Vorsitzender des Aufsichtsrats: >>> Prof. Dr. h.c. Hans A. Aukes >>> >>> Amtsgericht Kaiserslautern, HRB 2313 >>> ------------------------------------------------------------------------------------------- >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> >>> Live Security Virtual Conference >>> Exclusive live event will cover all the ways today's security and >>> threat landscape has changed and how IT managers can respond. >>> Discussions >>> will include endpoint security, mobile security and the latest in >>> malware >>> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >>> _______________________________________________ >>> Py4j-users mailing list >>> Py4...@li... >>> https://lists.sourceforge.net/lists/listinfo/py4j-users > > -- MSc. Inf. Eleftherios Avramidis DFKI GmbH, Alt-Moabit 91c, 10559 Berlin Tel. +49-30 238 95-1806 Fax. +49-30 238 95-1810 ------------------------------------------------------------------------------------------- Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH Firmensitz: Trippstadter Strasse 122, D-67663 Kaiserslautern Geschaeftsfuehrung: Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) Dr. Walter Olthoff Vorsitzender des Aufsichtsrats: Prof. Dr. h.c. Hans A. Aukes Amtsgericht Kaiserslautern, HRB 2313 ------------------------------------------------------------------------------------------- |
From: Eleftherios A. <ele...@df...> - 2012-06-22 14:51:17
|
Hi Barthélémy, I just tried rewriting the code as following. Two threads printed out their result successfully, the third pool worker gave a similar error. (I am running this in a 2-core machine) from py4j.java_gateway import JavaGateway, GatewayClient, java_import import multiprocessing, time, random def singlethread(socket_no): print "Thread starting" gatewayclient = GatewayClient('localhost', socket_no) gateway = JavaGateway(gatewayclient, auto_convert=True, auto_field=True) #create a new view for the jvm meteor_view = gateway.new_jvm_view() #import required packages java_import(meteor_view, 'edu.cmu.meteor.scorer.*') #initialize the java object java_import(meteor_view, 'edu.cmu.meteor.util.*') #pass the language setting into the meteor configuration object config = meteor_view.MeteorConfiguration(); config.setLanguage("en"); scorer = meteor_view.MeteorScorer(config) print "object initialized" #run object function stats = scorer.getMeteorStats("Test sentence", "Test sentence !"); print stats.score return 1 if __name__ == '__main__': socket_no = 25336 # gatewayclient = GatewayClient('localhost', socket_no) print "Gclient started" output: Gclient started Multipool initialized Thread starting Thread starting Thread starting Process PoolWorker-3: Traceback (most recent call last): File "/usr/local/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap self.run() File "/usr/local/lib/python2.7/multiprocessing/process.py", line 114, in run self._target(*self._args, **self._kwargs) File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 99, in worker put((job, i, result)) File "/usr/local/lib/python2.7/multiprocessing/queues.py", line 392, in put return send(obj) File "/usr/local/lib/python2.7/site-packages/py4j/java_gateway.py", line 432, in __call__ self.target_id, self.name) File "/usr/local/lib/python2.7/site-packages/py4j/protocol.py", line 271, in get_return_value raise Py4JError('An error occurred while calling %s%s%s. Trace:\n%s\n' % (target_id, '.', name, value)) Py4JError: An error occurred while calling o6.__getnewargs__. Trace: py4j.Py4JException: Method __getnewargs__([]) does not exist at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:346) at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:355) at py4j.Gateway.invoke(Gateway.java:247) at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:124) at py4j.commands.CallCommand.execute(CallCommand.java:81) at py4j.GatewayConnection.run(GatewayConnection.java:175) at java.lang.Thread.run(Thread.java:636) object initialized 0.335206780367 object initialized 0.335206780367 Any suggestions welcome, Lefteris On 22/06/12 16:25, Barthelemy Dagenais wrote: > Hi Eleftherios, > > in this code: > > if __name__ == '__main__': > socket_no = 25336 > gatewayclient = GatewayClient('localhost', socket_no) > print "Gclient started" > gateway = JavaGateway(gatewayclient, auto_convert=True, > auto_field=True) > print "Gateway started" > > p = multiprocessing.Pool(2) > print "Multipool initialized" > p.map(singlethread, [gateway, gateway, gateway]) > > You are creating only one instance of JavaGateway and this instance is passed to each worker (the list [gateway, gateway, gateway] is in fact a list of three pointers pointing to the same instance). I usually recommend to create one JavaGateway instance per worker. > > Unless this was not the code that caused the problem, I would start by creating a JavaGateway in each worker and then, if you still encounter the problem, we can start looking at other possibilities. > > Thanks, > Barthélémy > > > On 2012-06-22, at 10:20 AM, Eleftherios Avramidis wrote: > >> Hi Barthélémy, >> >> thanks for your quick response. I am trying to understand your suggestion: >> - On the Java side I have initialized GatewayServer on socket 25336 >> - On the Python side I initialized one GatewayClient per thread, >> connecting to socket 25336. >> >> Is this the right solution so that the sockets are not being shared? >> >> best >> Eleftherios >> >> >> >> >> >> On 22/06/12 15:55, Barthelemy Dagenais wrote: >>> Hi, >>> >>> Please try to initialize the gateway in the thread/process and not outside. I believe you may be sharing sockets across threads/processes, which would explain the weird behavior you are observing. >>> >>> Barthélémy >>> >>> On 2012-06-22, at 9:08 AM, Eleftherios Avramidis wrote: >>> >>>> Dear all, >>>> >>>> I would like your help with a particular issue which occurs when I am >>>> trying to use python multiprocessing, along with Py4j Java objects. >>>> >>>> >>>> def singlethread(gateway): >>>> print "Thread starting" >>>> >>>> #create a new view for the jvm >>>> meteor_view = gateway.new_jvm_view() >>>> #import required packages >>>> java_import(meteor_view, 'edu.cmu.meteor.scorer.*') >>>> #initialize the java object >>>> scorer = meteor_view.MeteorScorer() >>>> print "object initialized" >>>> #run object function >>>> stats = scorer.getMeteorStats("Test sentence", "Test sentence !"); >>>> print stats.score >>>> >>>> if __name__ == '__main__': >>>> socket_no = 25336 >>>> gatewayclient = GatewayClient('localhost', socket_no) >>>> print "Gclient started" >>>> gateway = JavaGateway(gatewayclient, auto_convert=True, >>>> auto_field=True) >>>> print "Gateway started" >>>> >>>> p = multiprocessing.Pool(2) >>>> print "Multipool initialized" >>>> p.map(singlethread, [gateway, gateway, gateway]) >>>> >>>> >>>> >>>> output: >>>> >>>> Gclient started >>>> Gateway started >>>> Multipool initialized >>>> Exception in thread Thread-2: >>>> Traceback (most recent call last): >>>> File "/usr/local/lib/python2.7/threading.py", line 552, in >>>> __bootstrap_inner >>>> self.run() >>>> File "/usr/local/lib/python2.7/threading.py", line 505, in run >>>> self.__target(*self.__args, **self.__kwargs) >>>> File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 313, in >>>> _handle_tasks >>>> put(task) >>>> File "/usr/local/lib/python2.7/site-packages/py4j/java_gateway.py", >>>> line 432, in __call__ >>>> self.target_id, self.name) >>>> File "/usr/local/lib/python2.7/site-packages/py4j/protocol.py", line >>>> 271, in get_return_value >>>> raise Py4JError('An error occurred while calling %s%s%s. >>>> Trace:\n%s\n' % (target_id, '.', name, value)) >>>> Py4JError: An error occurred while calling t.__getnewargs__. Trace: >>>> java.lang.StringIndexOutOfBoundsException: String index out of range: -1 >>>> at java.lang.String.substring(String.java:1949) >>>> at java.lang.String.substring(String.java:1916) >>>> at py4j.Gateway.invoke(Gateway.java:250) >>>> at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:124) >>>> at py4j.commands.CallCommand.execute(CallCommand.java:81) >>>> at py4j.GatewayConnection.run(GatewayConnection.java:175) >>>> at java.lang.Thread.run(Thread.java:636) >>>> >>>> >>>> I would be happy if somebody can help me find out what exactly the error >>>> may be, or if you can indicate where I should look for the problem. >>>> >>>> Interestingly enough, this problem doesn't occur when running without >>>> multiprocessing. It also runs fine with other Java programs. But how can >>>> I specify which aspect of the Java program causes the error? >>>> >>>> best >>>> Eleftherios >>>> >>>> -- >>>> MSc. Inf. Eleftherios Avramidis >>>> DFKI GmbH, Alt-Moabit 91c, 10559 Berlin >>>> Tel. +49-30 238 95-1806 >>>> >>>> Fax. +49-30 238 95-1810 >>>> >>>> ------------------------------------------------------------------------------------------- >>>> Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH >>>> Firmensitz: Trippstadter Strasse 122, D-67663 Kaiserslautern >>>> >>>> Geschaeftsfuehrung: >>>> Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) >>>> Dr. Walter Olthoff >>>> >>>> Vorsitzender des Aufsichtsrats: >>>> Prof. Dr. h.c. Hans A. Aukes >>>> >>>> Amtsgericht Kaiserslautern, HRB 2313 >>>> ------------------------------------------------------------------------------------------- >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Live Security Virtual Conference >>>> Exclusive live event will cover all the ways today's security and >>>> threat landscape has changed and how IT managers can respond. Discussions >>>> will include endpoint security, mobile security and the latest in malware >>>> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >>>> _______________________________________________ >>>> Py4j-users mailing list >>>> Py4...@li... >>>> https://lists.sourceforge.net/lists/listinfo/py4j-users >> >> -- >> MSc. Inf. Eleftherios Avramidis >> DFKI GmbH, Alt-Moabit 91c, 10559 Berlin >> Tel. +49-30 238 95-1806 >> >> Fax. +49-30 238 95-1810 >> >> ------------------------------------------------------------------------------------------- >> Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH >> Firmensitz: Trippstadter Strasse 122, D-67663 Kaiserslautern >> >> Geschaeftsfuehrung: >> Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) >> Dr. Walter Olthoff >> >> Vorsitzender des Aufsichtsrats: >> Prof. Dr. h.c. Hans A. Aukes >> >> Amtsgericht Kaiserslautern, HRB 2313 >> ------------------------------------------------------------------------------------------- >> >> >> ------------------------------------------------------------------------------ >> Live Security Virtual Conference >> Exclusive live event will cover all the ways today's security and >> threat landscape has changed and how IT managers can respond. Discussions >> will include endpoint security, mobile security and the latest in malware >> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >> _______________________________________________ >> Py4j-users mailing list >> Py4...@li... >> https://lists.sourceforge.net/lists/listinfo/py4j-users -- MSc. Inf. Eleftherios Avramidis DFKI GmbH, Alt-Moabit 91c, 10559 Berlin Tel. +49-30 238 95-1806 Fax. +49-30 238 95-1810 ------------------------------------------------------------------------------------------- Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH Firmensitz: Trippstadter Strasse 122, D-67663 Kaiserslautern Geschaeftsfuehrung: Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) Dr. Walter Olthoff Vorsitzender des Aufsichtsrats: Prof. Dr. h.c. Hans A. Aukes Amtsgericht Kaiserslautern, HRB 2313 ------------------------------------------------------------------------------------------- |
From: Barthelemy D. <ba...@cs...> - 2012-06-22 14:25:16
|
Hi Eleftherios, in this code: if __name__ == '__main__': socket_no = 25336 gatewayclient = GatewayClient('localhost', socket_no) print "Gclient started" gateway = JavaGateway(gatewayclient, auto_convert=True, auto_field=True) print "Gateway started" p = multiprocessing.Pool(2) print "Multipool initialized" p.map(singlethread, [gateway, gateway, gateway]) You are creating only one instance of JavaGateway and this instance is passed to each worker (the list [gateway, gateway, gateway] is in fact a list of three pointers pointing to the same instance). I usually recommend to create one JavaGateway instance per worker. Unless this was not the code that caused the problem, I would start by creating a JavaGateway in each worker and then, if you still encounter the problem, we can start looking at other possibilities. Thanks, Barthélémy On 2012-06-22, at 10:20 AM, Eleftherios Avramidis wrote: > Hi Barthélémy, > > thanks for your quick response. I am trying to understand your suggestion: > - On the Java side I have initialized GatewayServer on socket 25336 > - On the Python side I initialized one GatewayClient per thread, > connecting to socket 25336. > > Is this the right solution so that the sockets are not being shared? > > best > Eleftherios > > > > > > On 22/06/12 15:55, Barthelemy Dagenais wrote: >> Hi, >> >> Please try to initialize the gateway in the thread/process and not outside. I believe you may be sharing sockets across threads/processes, which would explain the weird behavior you are observing. >> >> Barthélémy >> >> On 2012-06-22, at 9:08 AM, Eleftherios Avramidis wrote: >> >>> Dear all, >>> >>> I would like your help with a particular issue which occurs when I am >>> trying to use python multiprocessing, along with Py4j Java objects. >>> >>> >>> def singlethread(gateway): >>> print "Thread starting" >>> >>> #create a new view for the jvm >>> meteor_view = gateway.new_jvm_view() >>> #import required packages >>> java_import(meteor_view, 'edu.cmu.meteor.scorer.*') >>> #initialize the java object >>> scorer = meteor_view.MeteorScorer() >>> print "object initialized" >>> #run object function >>> stats = scorer.getMeteorStats("Test sentence", "Test sentence !"); >>> print stats.score >>> >>> if __name__ == '__main__': >>> socket_no = 25336 >>> gatewayclient = GatewayClient('localhost', socket_no) >>> print "Gclient started" >>> gateway = JavaGateway(gatewayclient, auto_convert=True, >>> auto_field=True) >>> print "Gateway started" >>> >>> p = multiprocessing.Pool(2) >>> print "Multipool initialized" >>> p.map(singlethread, [gateway, gateway, gateway]) >>> >>> >>> >>> output: >>> >>> Gclient started >>> Gateway started >>> Multipool initialized >>> Exception in thread Thread-2: >>> Traceback (most recent call last): >>> File "/usr/local/lib/python2.7/threading.py", line 552, in >>> __bootstrap_inner >>> self.run() >>> File "/usr/local/lib/python2.7/threading.py", line 505, in run >>> self.__target(*self.__args, **self.__kwargs) >>> File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 313, in >>> _handle_tasks >>> put(task) >>> File "/usr/local/lib/python2.7/site-packages/py4j/java_gateway.py", >>> line 432, in __call__ >>> self.target_id, self.name) >>> File "/usr/local/lib/python2.7/site-packages/py4j/protocol.py", line >>> 271, in get_return_value >>> raise Py4JError('An error occurred while calling %s%s%s. >>> Trace:\n%s\n' % (target_id, '.', name, value)) >>> Py4JError: An error occurred while calling t.__getnewargs__. Trace: >>> java.lang.StringIndexOutOfBoundsException: String index out of range: -1 >>> at java.lang.String.substring(String.java:1949) >>> at java.lang.String.substring(String.java:1916) >>> at py4j.Gateway.invoke(Gateway.java:250) >>> at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:124) >>> at py4j.commands.CallCommand.execute(CallCommand.java:81) >>> at py4j.GatewayConnection.run(GatewayConnection.java:175) >>> at java.lang.Thread.run(Thread.java:636) >>> >>> >>> I would be happy if somebody can help me find out what exactly the error >>> may be, or if you can indicate where I should look for the problem. >>> >>> Interestingly enough, this problem doesn't occur when running without >>> multiprocessing. It also runs fine with other Java programs. But how can >>> I specify which aspect of the Java program causes the error? >>> >>> best >>> Eleftherios >>> >>> -- >>> MSc. Inf. Eleftherios Avramidis >>> DFKI GmbH, Alt-Moabit 91c, 10559 Berlin >>> Tel. +49-30 238 95-1806 >>> >>> Fax. +49-30 238 95-1810 >>> >>> ------------------------------------------------------------------------------------------- >>> Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH >>> Firmensitz: Trippstadter Strasse 122, D-67663 Kaiserslautern >>> >>> Geschaeftsfuehrung: >>> Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) >>> Dr. Walter Olthoff >>> >>> Vorsitzender des Aufsichtsrats: >>> Prof. Dr. h.c. Hans A. Aukes >>> >>> Amtsgericht Kaiserslautern, HRB 2313 >>> ------------------------------------------------------------------------------------------- >>> >>> >>> ------------------------------------------------------------------------------ >>> Live Security Virtual Conference >>> Exclusive live event will cover all the ways today's security and >>> threat landscape has changed and how IT managers can respond. Discussions >>> will include endpoint security, mobile security and the latest in malware >>> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >>> _______________________________________________ >>> Py4j-users mailing list >>> Py4...@li... >>> https://lists.sourceforge.net/lists/listinfo/py4j-users > > > -- > MSc. Inf. Eleftherios Avramidis > DFKI GmbH, Alt-Moabit 91c, 10559 Berlin > Tel. +49-30 238 95-1806 > > Fax. +49-30 238 95-1810 > > ------------------------------------------------------------------------------------------- > Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH > Firmensitz: Trippstadter Strasse 122, D-67663 Kaiserslautern > > Geschaeftsfuehrung: > Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) > Dr. Walter Olthoff > > Vorsitzender des Aufsichtsrats: > Prof. Dr. h.c. Hans A. Aukes > > Amtsgericht Kaiserslautern, HRB 2313 > ------------------------------------------------------------------------------------------- > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users |
From: Eleftherios A. <ele...@df...> - 2012-06-22 14:21:12
|
Hi Barthélémy, thanks for your quick response. I am trying to understand your suggestion: - On the Java side I have initialized GatewayServer on socket 25336 - On the Python side I initialized one GatewayClient per thread, connecting to socket 25336. Is this the right solution so that the sockets are not being shared? best Eleftherios On 22/06/12 15:55, Barthelemy Dagenais wrote: > Hi, > > Please try to initialize the gateway in the thread/process and not outside. I believe you may be sharing sockets across threads/processes, which would explain the weird behavior you are observing. > > Barthélémy > > On 2012-06-22, at 9:08 AM, Eleftherios Avramidis wrote: > >> Dear all, >> >> I would like your help with a particular issue which occurs when I am >> trying to use python multiprocessing, along with Py4j Java objects. >> >> >> def singlethread(gateway): >> print "Thread starting" >> >> #create a new view for the jvm >> meteor_view = gateway.new_jvm_view() >> #import required packages >> java_import(meteor_view, 'edu.cmu.meteor.scorer.*') >> #initialize the java object >> scorer = meteor_view.MeteorScorer() >> print "object initialized" >> #run object function >> stats = scorer.getMeteorStats("Test sentence", "Test sentence !"); >> print stats.score >> >> if __name__ == '__main__': >> socket_no = 25336 >> gatewayclient = GatewayClient('localhost', socket_no) >> print "Gclient started" >> gateway = JavaGateway(gatewayclient, auto_convert=True, >> auto_field=True) >> print "Gateway started" >> >> p = multiprocessing.Pool(2) >> print "Multipool initialized" >> p.map(singlethread, [gateway, gateway, gateway]) >> >> >> >> output: >> >> Gclient started >> Gateway started >> Multipool initialized >> Exception in thread Thread-2: >> Traceback (most recent call last): >> File "/usr/local/lib/python2.7/threading.py", line 552, in >> __bootstrap_inner >> self.run() >> File "/usr/local/lib/python2.7/threading.py", line 505, in run >> self.__target(*self.__args, **self.__kwargs) >> File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 313, in >> _handle_tasks >> put(task) >> File "/usr/local/lib/python2.7/site-packages/py4j/java_gateway.py", >> line 432, in __call__ >> self.target_id, self.name) >> File "/usr/local/lib/python2.7/site-packages/py4j/protocol.py", line >> 271, in get_return_value >> raise Py4JError('An error occurred while calling %s%s%s. >> Trace:\n%s\n' % (target_id, '.', name, value)) >> Py4JError: An error occurred while calling t.__getnewargs__. Trace: >> java.lang.StringIndexOutOfBoundsException: String index out of range: -1 >> at java.lang.String.substring(String.java:1949) >> at java.lang.String.substring(String.java:1916) >> at py4j.Gateway.invoke(Gateway.java:250) >> at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:124) >> at py4j.commands.CallCommand.execute(CallCommand.java:81) >> at py4j.GatewayConnection.run(GatewayConnection.java:175) >> at java.lang.Thread.run(Thread.java:636) >> >> >> I would be happy if somebody can help me find out what exactly the error >> may be, or if you can indicate where I should look for the problem. >> >> Interestingly enough, this problem doesn't occur when running without >> multiprocessing. It also runs fine with other Java programs. But how can >> I specify which aspect of the Java program causes the error? >> >> best >> Eleftherios >> >> -- >> MSc. Inf. Eleftherios Avramidis >> DFKI GmbH, Alt-Moabit 91c, 10559 Berlin >> Tel. +49-30 238 95-1806 >> >> Fax. +49-30 238 95-1810 >> >> ------------------------------------------------------------------------------------------- >> Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH >> Firmensitz: Trippstadter Strasse 122, D-67663 Kaiserslautern >> >> Geschaeftsfuehrung: >> Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) >> Dr. Walter Olthoff >> >> Vorsitzender des Aufsichtsrats: >> Prof. Dr. h.c. Hans A. Aukes >> >> Amtsgericht Kaiserslautern, HRB 2313 >> ------------------------------------------------------------------------------------------- >> >> >> ------------------------------------------------------------------------------ >> Live Security Virtual Conference >> Exclusive live event will cover all the ways today's security and >> threat landscape has changed and how IT managers can respond. Discussions >> will include endpoint security, mobile security and the latest in malware >> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >> _______________________________________________ >> Py4j-users mailing list >> Py4...@li... >> https://lists.sourceforge.net/lists/listinfo/py4j-users -- MSc. Inf. Eleftherios Avramidis DFKI GmbH, Alt-Moabit 91c, 10559 Berlin Tel. +49-30 238 95-1806 Fax. +49-30 238 95-1810 ------------------------------------------------------------------------------------------- Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH Firmensitz: Trippstadter Strasse 122, D-67663 Kaiserslautern Geschaeftsfuehrung: Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) Dr. Walter Olthoff Vorsitzender des Aufsichtsrats: Prof. Dr. h.c. Hans A. Aukes Amtsgericht Kaiserslautern, HRB 2313 ------------------------------------------------------------------------------------------- |
From: Barthelemy D. <ba...@cs...> - 2012-06-22 13:55:59
|
Hi, Please try to initialize the gateway in the thread/process and not outside. I believe you may be sharing sockets across threads/processes, which would explain the weird behavior you are observing. Barthélémy On 2012-06-22, at 9:08 AM, Eleftherios Avramidis wrote: > Dear all, > > I would like your help with a particular issue which occurs when I am > trying to use python multiprocessing, along with Py4j Java objects. > > > def singlethread(gateway): > print "Thread starting" > > #create a new view for the jvm > meteor_view = gateway.new_jvm_view() > #import required packages > java_import(meteor_view, 'edu.cmu.meteor.scorer.*') > #initialize the java object > scorer = meteor_view.MeteorScorer() > print "object initialized" > #run object function > stats = scorer.getMeteorStats("Test sentence", "Test sentence !"); > print stats.score > > if __name__ == '__main__': > socket_no = 25336 > gatewayclient = GatewayClient('localhost', socket_no) > print "Gclient started" > gateway = JavaGateway(gatewayclient, auto_convert=True, > auto_field=True) > print "Gateway started" > > p = multiprocessing.Pool(2) > print "Multipool initialized" > p.map(singlethread, [gateway, gateway, gateway]) > > > > output: > > Gclient started > Gateway started > Multipool initialized > Exception in thread Thread-2: > Traceback (most recent call last): > File "/usr/local/lib/python2.7/threading.py", line 552, in > __bootstrap_inner > self.run() > File "/usr/local/lib/python2.7/threading.py", line 505, in run > self.__target(*self.__args, **self.__kwargs) > File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 313, in > _handle_tasks > put(task) > File "/usr/local/lib/python2.7/site-packages/py4j/java_gateway.py", > line 432, in __call__ > self.target_id, self.name) > File "/usr/local/lib/python2.7/site-packages/py4j/protocol.py", line > 271, in get_return_value > raise Py4JError('An error occurred while calling %s%s%s. > Trace:\n%s\n' % (target_id, '.', name, value)) > Py4JError: An error occurred while calling t.__getnewargs__. Trace: > java.lang.StringIndexOutOfBoundsException: String index out of range: -1 > at java.lang.String.substring(String.java:1949) > at java.lang.String.substring(String.java:1916) > at py4j.Gateway.invoke(Gateway.java:250) > at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:124) > at py4j.commands.CallCommand.execute(CallCommand.java:81) > at py4j.GatewayConnection.run(GatewayConnection.java:175) > at java.lang.Thread.run(Thread.java:636) > > > I would be happy if somebody can help me find out what exactly the error > may be, or if you can indicate where I should look for the problem. > > Interestingly enough, this problem doesn't occur when running without > multiprocessing. It also runs fine with other Java programs. But how can > I specify which aspect of the Java program causes the error? > > best > Eleftherios > > -- > MSc. Inf. Eleftherios Avramidis > DFKI GmbH, Alt-Moabit 91c, 10559 Berlin > Tel. +49-30 238 95-1806 > > Fax. +49-30 238 95-1810 > > ------------------------------------------------------------------------------------------- > Deutsches Forschungszentrum fuer Kuenstliche Intelligenz GmbH > Firmensitz: Trippstadter Strasse 122, D-67663 Kaiserslautern > > Geschaeftsfuehrung: > Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) > Dr. Walter Olthoff > > Vorsitzender des Aufsichtsrats: > Prof. Dr. h.c. Hans A. Aukes > > Amtsgericht Kaiserslautern, HRB 2313 > ------------------------------------------------------------------------------------------- > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Py4j-users mailing list > Py4...@li... > https://lists.sourceforge.net/lists/listinfo/py4j-users |