Commit da3981df authored by Klaus Wölfel's avatar Klaus Wölfel Committed by Levin Zimmermann

Add conversion numpy <-> wendelin format

parent 10dab323
import binascii
import numpy as np
import struct
from cStringIO import StringIO
MAGIC_HEADER = b'\x92WEN\x00\x01'
io = StringIO()
np.save(io, array)
io.seek(0)
npy_data = io.read()
io.close()
crc = struct.pack('<i', binascii.crc32(npy_data))
return b''.join([MAGIC_HEADER, crc, npy_data])
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>array</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Base_numpyToWendelinData</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
import binascii
import struct
import numpy as np
from cStringIO import StringIO
MAGIC_PREFIX = b'\x92WEN'
MAGIC_LEN = len(MAGIC_PREFIX) +2
CR32_LEN = 4
HEADER_LEN = MAGIC_LEN + CR32_LEN
# check that it is wendelin data
magic_str = data[0:MAGIC_LEN]
assert magic_str[:-2] == MAGIC_PREFIX
major, minor = map(ord, magic_str[-2:]) #python2
#major, minor = magic_str[-2:] #python 3
assert major == 0 and minor == 1
# verify crc32 checksum
checksum = struct.unpack('<i', data[MAGIC_LEN:HEADER_LEN])[0]
assert checksum == binascii.crc32(data[HEADER_LEN:])
io = StringIO()
io.write(data[HEADER_LEN:])
io.seek(0)
array = np.load(io)
io.close()
return array
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>data</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Base_wendelinDataToNumpy</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
import base64
return context.Base_wendelinDataToNumpy(base64.b64decode(text))
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>text</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Base_wendelinTextToNumpy</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment