Add test-igorpy.py for testing igor.igorpy.
authorW. Trevor King <wking@tremily.us>
Fri, 20 Jul 2012 20:05:18 +0000 (16:05 -0400)
committerW. Trevor King <wking@tremily.us>
Fri, 20 Jul 2012 20:05:18 +0000 (16:05 -0400)
igor/igorpy.py
test/test-igorpy.py [new file with mode: 0644]

index f68c7fc9e2bf2a91a795df71277a12a5acfab5ad..ad4a09afce2561f6098cf7dcd794d54c1ceb1339 100644 (file)
@@ -1,6 +1,5 @@
 # This program is in the public domain
-"""
-IGOR file reader.
+"""`igor.py` compatibility layer on top of the `igor` package.
 
 igor.load('filename') or igor.loads('data') loads the content of an igore file
 into memory as a folder structure.
@@ -14,7 +13,9 @@ To see the whole tree, use: print folder.format()
 The usual igor folder types are given in the technical reports
 PTN003.ifn and TN003.ifn.
 """
-__version__="0.9"
+from __future__ import absolute_import
+
+__version__='1.0'
 
 import struct
 import numpy
diff --git a/test/test-igorpy.py b/test/test-igorpy.py
new file mode 100644 (file)
index 0000000..ab9e9a8
--- /dev/null
@@ -0,0 +1,184 @@
+# Copyright
+
+r"""Test the igor.igorpy compatibility layer by loading sample files.
+
+>>> from pprint import pprint
+>>> import igor.igorpy as igor
+
+Load a packed experiment:
+
+>>> path = data_path('polar-graphs-demo.pxp')
+>>> d = igor.load(path)
+>>> print(d)
+<igor.Folder root>
+>>> dir(d)  # doctest: +ELLIPSIS
+['Packages', 'W_plrX5', 'W_plrX6', ..., 'radiusData', 'radiusQ1']
+
+
+Navigation:
+
+>>> print(d.Packages)
+<igor.Folder root/Packages>
+>>> print(d[0])  # doctest: +ELLIPSIS
+<igor.igorpy.Variables object at 0x...>
+
+
+Variables:
+
+>>> v = d[0]
+>>> dir(v)  # doctest: +ELLIPSIS
+['__class__', ..., 'depstr', 'depvar', 'format', 'sysvar', 'userstr', 'uservar']
+>>> v.depstr
+{}
+>>> v.depvar
+{}
+>>> v.format()
+'<Variables: system 21, user 0, dependent 0>'
+>>> pprint(v.sysvar)  # doctest: +REPORT_UDIFF
+{'K0': 0.0,
+ 'K1': 0.0,
+ 'K10': 0.0,
+ 'K11': 0.0,
+ 'K12': 0.0,
+ 'K13': 0.0,
+ 'K14': 0.0,
+ 'K15': 0.0,
+ 'K16': 0.0,
+ 'K17': 0.0,
+ 'K18': 0.0,
+ 'K19': 0.0,
+ 'K2': 0.0,
+ 'K20': 128.0,
+ 'K3': 0.0,
+ 'K4': 0.0,
+ 'K5': 0.0,
+ 'K6': 0.0,
+ 'K7': 0.0,
+ 'K8': 0.0,
+ 'K9': 0.0}
+>>> v.userstr
+{}
+>>> v.uservar
+{}
+
+
+Waves:
+
+>>> d.W_plrX5
+<igor.Wave W_plrX5 data (128)>
+>>> dir(d.W_plrX5)  # doctest: +ELLIPSIS
+['__array__', ..., 'axis', 'axis_units', 'data', ..., 'name', 'notes']
+>>> d.W_plrX5.axis  # doctest: +ELLIPSIS
+[array([ 0.04908739,  0.04870087,  0.04831436,  0.04792784,  0.04754133,
+        0.04715481,  0.0467683 ,  0.04638178,  0.04599527,  0.04560875,
+        ...
+        0.00077303,  0.00038651,  0.        ]), array([], dtype=float64), array([], dtype=float64), array([], dtype=float64)]
+>>> d.W_plrX5.axis_units
+('', '', '', '')
+>>> d.W_plrX5.data  # doctest: +ELLIPSIS
+array([  1.83690956e-17,   2.69450769e-02,   7.65399113e-02,
+         1.44305170e-01,   2.23293692e-01,   3.04783821e-01,
+         ...
+        -2.72719120e-03,   5.24539061e-08], dtype=float32)
+
+
+Dump the whole thing:
+
+>>> print(d.format())
+root
+  <Variables: system 21, user 0, dependent 0>
+  <History>
+  radiusData data (128)
+  angleData data (128)
+  W_plrX5 data (128)
+  W_plrY5 data (128)
+  angleQ1 data (64)
+  radiusQ1 data (64)
+  W_plrX6 data (64)
+  W_plrY6 data (64)
+  Packages
+    WMDataBase
+      <Variables: system 21, user 6, dependent 0>
+    PolarGraphs
+      <Variables: system 21, user 38, dependent 0>
+  <Recreation>
+  <GetHistory>
+  <Procedure>
+
+
+Load a packed experiment without ignoring unknown records:
+
+>>> d = igor.load(path, ignore_unknown=False)
+>>> print(d.format())
+root
+  <Unknown type 11>
+  <Unknown type 12>
+  <Unknown type 13>
+  <Unknown type 13>
+  <Unknown type 13>
+  <Unknown type 13>
+  <Unknown type 13>
+  <Unknown type 13>
+  <Unknown type 13>
+  <Unknown type 14>
+  <Unknown type 15>
+  <Unknown type 16>
+  <Unknown type 16>
+  <Unknown type 17>
+  <Unknown type 17>
+  <Unknown type 17>
+  <Unknown type 17>
+  <Unknown type 17>
+  <Unknown type 17>
+  <Unknown type 16>
+  <Unknown type 17>
+  <Unknown type 17>
+  <Unknown type 17>
+  <Unknown type 17>
+  <Unknown type 17>
+  <Unknown type 17>
+  <Unknown type 18>
+  <Unknown type 11>
+  <Unknown type 26>
+  <Unknown type 26>
+  <Variables: system 21, user 0, dependent 0>
+  <History>
+  radiusData data (128)
+  angleData data (128)
+  W_plrX5 data (128)
+  W_plrY5 data (128)
+  angleQ1 data (64)
+  radiusQ1 data (64)
+  W_plrX6 data (64)
+  W_plrY6 data (64)
+  Packages
+    WMDataBase
+      <Variables: system 21, user 6, dependent 0>
+    PolarGraphs
+      <Variables: system 21, user 38, dependent 0>
+  <Recreation>
+  <GetHistory>
+  <Procedure>
+
+
+Try to load a binary wave:
+
+>>> path = data_path('mac-double.ibw')
+>>> d = igor.load(path)
+Traceback (most recent call last):
+   ...
+IOError: final record too long; bad pxp file?
+"""
+
+import os.path
+
+from igor import LOG
+
+
+_this_dir = os.path.dirname(__file__)
+_data_dir = os.path.join(_this_dir, 'data')
+
+def data_path(filename):
+    LOG.info('Testing igorpy compatibility {}\n'.format(filename))
+    path = os.path.join(_data_dir, filename)
+    return path