Hi Ed !
In fact, I thought about this but wasn't sure...
Here is the patch without the modification to the code where it should end in
'\
', thus without any modification to those files :
maths_fns/mf.py
maths_fns/jw_mf.py
maths_fns/jw_mf_comps.py
maths_fns/chi2.py
minimise/levenberg_marquardt.py
minimise/line_search/test_functions.py
Ciao !
Séb
Selon Edward d'Auvergne <edward.dauvergne@xxxxxxxxx>, 10.07.2007:
Sorry, I didn't realise to warn you that the trailing single space in
the equation lines which terminate in '\' are important. This
character, if not followed by a space, will cause the newline to be
removed from the docstring in the python help system. For example if
you type
relax> from maths_fns import jw_mf
relax> help(jw_mf.calc_S2f_S2s_ts_d2jw_dS2fdS2s)
with the patch applied, you can see the issue - the middle line gets
appended to the top line. A similar issue occurs in the OpenDX input
files that are created by relax. All these special single trailing
whitespaces are important. I'm really sorry for not having realised
earlier, it's been a long time since I worked on that code.
Regards,
Edward
On 7/10/07, Sébastien Morin <sebastien.morin.1@xxxxxxxxx> wrote:
Hi,
Here is a patch for trailing whitespaces in the code for the 1.3 line
(revision
3338).
This should fix all formating issues of this kind for the entire code...
Ciao
Séb :)
Selon Edward d'Auvergne <edward.dauvergne@xxxxxxxxx>, 09.07.2007:
Thanks. Please try to keep different types of changes separate
though. All the changes so far are whitespace related so I can commit
the patch as fixing whitespace formatting in the 1.3 line. If there
are other changes, these should go as separate commits into the relax
repository. That way I can decide if the whitespace commit will be
back ported to the 1.2 line (which isn't really necessary) or if other
changes in individual commits should be back ported (some probably
will while others may not).
Cheers,
Edward
On 7/9/07, Sebastien Morin <sebastien.morin.1@xxxxxxxxx> wrote:
Hi Ed !
I will send a single large patch tomorrow when I have corrected more
code...
Bye
Séb
Edward d'Auvergne wrote:
Hi,
These minor formatting changes do need to made to the repository.
Would you still have all the changes in your checked out copy Séb?
If
you could send a single patch of all the changes, it will be much
easier for me to apply. That would be much appreciated.
Thanks,
Edward
On 7/9/07, Sébastien Morin <sebastien.morin.1@xxxxxxxxx> wrote:
Hi all,
Here are a few patches solving fomating issues in the 1.3 line
(revision 3324).
patch_sample_scripts_palmer ->
sample_scripts/palmer.py
patch_test_suite_runner ->
sample_scripts/relax_curve_diff.py
patch_sample_scripts_relax_curve_diff ->
sample_scripts/remap.py
patch_test_suite_system_tests_jw_mapping ->
test_suite/formatting.py
patch_sample_scripts_remap -> test_suite/runner.py
patch_test_suite_system_tests_main ->
test_suite/system_tests/jw_mapping.py
patch_test_suite_formatting ->
test_suite/system_tests/main.py
patch_test_suite_system_tests_model_free ->
test_suite/system_tests/model_free.py
These are low importance changes but nevertheless the work needs to
be done.
Cheers.
Séb :)
_______________________________________________
relax (http://nmr-relax.com)
This is the relax-devel mailing list
relax-devel@xxxxxxx
To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-devel
--
______________________________________
_______________________________________________
| |
|| Sebastien Morin ||
||| Etudiant au PhD en biochimie |||
|||| Laboratoire de resonance magnetique nucleaire ||||
||||| Dr Stephane Gagne |||||
|||| CREFSIP (Universite Laval, Quebec, CANADA) ||||
||| 1-418-656-2131 #4530 |||
|| ||
|_______________________________________________|
______________________________________
------------------------
Sébastien Morin
Étudiant M.Sc. Biochimie
Laboratoire S. Gagné
3252 Pav. Marchand (Université Laval)
Tél : (418) 656-2131 #4530
Fax : (418) 656-7176
e-mail : sebastien.morin.1@xxxxxxxxx
------------------------
Sébastien Morin
Étudiant M.Sc. Biochimie
Laboratoire S. Gagné
3252 Pav. Marchand (Université Laval)
Tél : (418) 656-2131 #4530
Fax : (418) 656-7176
e-mail : sebastien.morin.1@xxxxxxxxx
Index: prompt/structure.py
===================================================================
--- prompt/structure.py (revision 3338)
+++ prompt/structure.py (working copy)
@@ -64,7 +64,7 @@
tensor is represented by an ellipsoidal, spheroidal, or spherical
geometric object with its
origin located at the centre of mass (of the selected residues).
This diffusion tensor PDB
file can subsequently read into any molecular viewer.
-
+
There are four different types of residue within the PDB. The
centre of mass of the
selected residues is represented as a single carbon atom of the
residue 'COM'. The
ellipsoidal geometric shape consists of numerous H atoms of the
residue 'TNS'. The axes
@@ -111,7 +111,7 @@
| 30 | 5.56e6 | 10 |
|___________|_______________|___________________|
-
+
The scaling value has been fixed to facilitate comparisons within or
between publications,
but can be changed to vary the size of the tensor geometric object
if necessary. Reporting
the rotational diffusion rate per Angstrom within figure legends
would be useful.
Index: prompt/select.py
===================================================================
--- prompt/select.py (revision 3338)
+++ prompt/select.py (working copy)
@@ -155,7 +155,7 @@
relax> select.read(run='noe', file='isolated_peaks')
To select the residues in the second column of the relaxation data
file 'r1.600' while
- deselecting all other residues, type one of:
+ deselecting all other residues, type one of:
relax> select.read('test', 'r1.600', change_all=1, column=1)
relax> select.read(run='test', file='r1.600', change_all=1, column=1)
Index: prompt/reset.py
===================================================================
--- prompt/reset.py (revision 3338)
+++ prompt/reset.py (working copy)
@@ -36,7 +36,7 @@
def reset(self):
"""Reset relax.
-
+
All of the data of the relax data storage object will be erased and
hence relax will return
to its initial state.
"""
Index: prompt/thread.py
===================================================================
--- prompt/thread.py (revision 3338)
+++ prompt/thread.py (working copy)
@@ -154,7 +154,7 @@
$ ssh zucchini "chmod 644 ~/.ssh/*.pub"
Finally, if all else fails, make sure the three lines
-
+
-----
RSAAuthentication yes
PubkeyAuthentication yes
Index: prompt/unselect.py
===================================================================
--- prompt/unselect.py (revision 3338)
+++ prompt/unselect.py (working copy)
@@ -118,7 +118,7 @@
relax> unselect.read(run='noe', file='unresolved')
To unselect the residues in the second column of the relaxation data
file 'r1.600' while
- selecting all other residues, type one of:
+ selecting all other residues, type one of:
relax> unselect.read('test', 'r1.600', change_all=1, column=1)
relax> unselect.read(run='test', file='r1.600', change_all=1,
column=1)
Index: generic_fns/monte_carlo.py
===================================================================
--- generic_fns/monte_carlo.py (revision 3338)
+++ generic_fns/monte_carlo.py (working copy)
@@ -345,7 +345,7 @@
def setup(self, run=None, number=None, all_select_sim=None):
"""Function for setting up Monte Carlo simulations.
-
+
@param run: The name of the run.
@type run: str
@param number: The number of Monte Carlo simulations to set
up.
Index: generic_fns/selection.py
===================================================================
--- generic_fns/selection.py (revision 3338)
+++ generic_fns/selection.py (working copy)
@@ -54,13 +54,13 @@
for line in split('\n', id_string_doc):
string = string + fill(line, width=100, initial_indent=8*' ',
subsequent_indent=8*' ') + '\n'
id_string_doc = string
-
+
class Selection(object):
"""An object containing mol-res-spin selections.
-
- A Selection object represents either a set of selected
+
+ A Selection object represents either a set of selected
molecules, residues and spins, or the union or intersection
of two other Selection objects."""
@@ -79,12 +79,12 @@
if not select_string:
return
-
+
# Read boolean symbols from right to left:
and_index = select_string.rfind('&')
or_index = select_string.rfind('|')
-
- if and_index > or_index:
+
+ if and_index > or_index:
sel0 = Selection(select_string[:and_index].strip())
sel1 = Selection(select_string[and_index+1:].strip())
self.intersection(sel0, sel1)
@@ -126,16 +126,16 @@
def intersection(self, select_obj0, select_obj1):
"""Make a Selection object the intersection of two Selection objects
-
+
@type select_obj0: Instance of class Selection
@param select_obj0: First Selection object in intersection
@type select_obj1: Instance of class Selection
@param select_obj1: First Selection object in intersection"""
-
+
if self._union or self._intersect or self.molecules or self.residues
or self.spins:
raise RelaxError, "Cannot define multiple Boolean relationships
between Selection objects"
self._intersect = (select_obj0, select_obj1)
-
+
def union(self, select_obj0, select_obj1):
"""Make a Selection object the union of two Selection objects
@@ -411,7 +411,7 @@
# Parse the selection string.
select_obj = Selection(selection)
-
+
# Disallowed selections.
if select_obj.spins:
raise RelaxSpinSelectDisallowError
Index: scons/manuals.py
===================================================================
--- scons/manuals.py (revision 3338)
+++ scons/manuals.py (working copy)
@@ -213,7 +213,7 @@
####################################
# Program name, output, target, docformat, css, name, and url.
- epydoc_cmd = 'epydoc' + ' --' + output + ' -o ' + target + ' --docformat
' + docformat + ' --css ' + css + ' --name ' + name + ' --url ' + url
+ epydoc_cmd = 'epydoc' + ' --' + output + ' -o ' + target + ' --docformat
' + docformat + ' --css ' + css + ' --name ' + name + ' --url ' + url
# Frames.
if frames:
Index: test_suite/unit_tests/generic_fns/test_selection.py
===================================================================
--- test_suite/unit_tests/generic_fns/test_selection.py (revision 3338)
+++ test_suite/unit_tests/generic_fns/test_selection.py (working copy)
@@ -106,12 +106,12 @@
# Increment i.
i = i + 1
-
+
# Test loop length.
self.assertEqual(len(list(selection.molecule_loop())), 2)
-
+
def test_parse_token_single_element_num(self):
"""Test the generic_fns.selection.parse_token() function on the
string '1'."""
@@ -275,11 +275,11 @@
for res in selection.residue_loop('#Ap4Aase:Glu'):
# Test the selection.
self.assertEqual(res.num, 2)
-
+
# Test loop length.
self.assertEqual(len(list(selection.residue_loop('#Ap4Aase:Glu'))),
1)
-
+
def test_residue_loop_no_selection(self):
"""Test the proper operation of the residue loop when no selection
is present.
@@ -304,7 +304,7 @@
# Test loop length.
self.assertEqual(i, 5)
-
+
def test_reverse(self):
"""Test spin system selection reversal.
@@ -347,12 +347,12 @@
# Increment i.
i = i + 1
-
+
# Test loop length.
self.assertEqual(i, 2)
-
+
def test_spin_loop_no_selection(self):
"""Test the proper operation of the spin loop when no selection is
present.
@@ -374,11 +374,11 @@
# Increment i.
i = i + 1
-
+
# Test loop length.
self.assertEqual(i, 7)
-
+
def test_tokenise1(self):
"""Test the generic_fns.selection.tokenise() function on the string
'@1'."""
@@ -671,29 +671,29 @@
# Tokenise an invalid string.
self.assertRaises(RelaxError, selection.tokenise, '')
-
-
+
+
def test_boolean_or_selection(self):
"""Test boolean or in mol-res-spin selections."""
self.assert_(list(selection.spin_loop("#Ap4Aase | #RNA@N5")) ==
list(selection.spin_loop()))
-
-
+
+
def test_boolean_and_selection(self):
"""Test boolean and in mol-res-spin selections."""
-
+
# The selection loop:
sel = list(selection.residue_loop("#Ap4Aase:4 & :Pro"))
-
+
# Test:
self.assertEqual(len(sel), 1)
for res in sel:
self.assert_(res.name == "Pro" and res.num == 4)
-
-
+
+
def test_boolean_complex_selection(self):
"""Test complex boolean mol-res-spin selections."""
-
+
# The selection loop:
sel = list(selection.residue_loop("#Ap4Aase:4 & :Pro | #RNA"))
@@ -701,8 +701,8 @@
self.assertEqual(len(sel), 3)
for res in sel:
self.assert_(res.num in [-5,-4,4])
-
+
def test_boolean_parenthesis_selection(self):
"""Test complex boolean mol-res-spin selections with parenthesis."""
@@ -713,4 +713,4 @@
self.assertEqual(len(sel), 2)
for res in sel:
self.assert_(res.num in [-4,4])
-
+
Index: test_suite/unit_tests/test_float.py
===================================================================
--- test_suite/unit_tests/test_float.py (revision 3338)
+++ test_suite/unit_tests/test_float.py (working copy)
@@ -35,15 +35,15 @@
result ={}
for element in elements:
result[id(element)]=element
-
+
return result
def winnowDictToListById(dict,elements):
resultDict = copy(dict)
-
+
for element in elements:
del(resultDict[id(element)])
-
+
return resultDict.values()
class Test_float(unittest.TestCase):
@@ -51,10 +51,10 @@
tests = makeDictById([pos_inf, neg_inf, FLOAT_NORMAL,
NEG_FLOAT_NORMAL, FLOAT_EPSILON,
NEG_FLOAT_EPSILON, nan, ZERO, NEG_ZERO])
-
-
+
+
def test_getFloatClass(self):
-
+
tests = ( CLASS_POS_INF, pos_inf,
CLASS_NEG_INF, neg_inf,
CLASS_POS_NORMAL, FLOAT_NORMAL,
@@ -69,24 +69,24 @@
i=iter(tests)
for (fpClass, value) in zip(i,i):
self.assertEqual(fpClass, getFloatClass(value))
-
+
def test_isZero(self):
positives = (ZERO,NEG_ZERO)
negatives= winnowDictToListById(self.tests,positives)
-
+
self.doTestSets(isZero,positives=positives, negatives=negatives)
-
+
def test_isPositive(self):
negatives = (neg_inf, NEG_FLOAT_NORMAL,NEG_FLOAT_EPSILON, NEG_ZERO)
positives= winnowDictToListById(self.tests,negatives)
-
+
self.doTestSets(isPositive,positives=positives, negatives=negatives)
-
+
#todo add reporting of failed number class...
def doTestSets(self,function,positives=[],negatives=[]):
for positive in positives:
self.assertEqual(function(positive),True)
-
+
for negative in negatives:
self.assertEqual(function(negative),False)
Index: test_suite/formatting.py
===================================================================
--- test_suite/formatting.py (revision 3338)
+++ test_suite/formatting.py (working copy)
@@ -25,7 +25,7 @@
def heading(text):
"""Function for printing the headings.
-
+
@param text: The text of the heading to be printed.
@type text: str
"""
@@ -49,7 +49,7 @@
def summary_line(name, passed):
"""Print a summary line.
-
+
@param name: The name of the test, test category, etc.
@type name: str
@param passed: An argment which if True causes '[ OK ]' to be printed
and if False causes
Index: test_suite/system_tests/jw_mapping.py
===================================================================
--- test_suite/system_tests/jw_mapping.py (revision 3338)
+++ test_suite/system_tests/jw_mapping.py (working copy)
@@ -40,7 +40,7 @@
# Results reading test.
if test_name == 'set':
-
+
# The name of the test.
self.name = "The user function value.set()"
@@ -49,7 +49,7 @@
# Spectral density calculation test.
if test_name == 'calc':
-
+
# The name of the test.
self.name = "Spectral density calculation"
@@ -65,16 +65,16 @@
# Setup.
self.calc_setup()
-
+
# Try the reduced spectral density mapping.
self.relax.interpreter._Minimisation.calc(self.run)
-
+
# Success.
return self.calc_integrity()
-
+
def calc_integrity(self):
-
+
# Correct jw values:
j0 = [4.0958793960056238e-09, 3.7976266046729745e-09]
jwx = [1.85720953886864e-10, 1.6450121628270092e-10]
@@ -120,7 +120,7 @@
dataTypes = [('NOE', '600', 600.0e6),
('R1', '600', 600.0e6),
('R2', '600', 600.0e6)]
-
+
# Create the run.
self.relax.generic.runs.create(self.run, 'jw')
Index: sample_scripts/full_analysis.py
===================================================================
--- sample_scripts/full_analysis.py (revision 3338)
+++ sample_scripts/full_analysis.py (working copy)
@@ -278,7 +278,7 @@
# Determine which was the last round of optimisation for
each of the models.
self.round = self.determine_rnd(model=model) - 1
- # If no directories begining with 'round_' exist, the script
has not been properly utilised!
+ # If no directories begining with 'round_' exist, the script
has not been properly utilised!
if self.round < 1:
# Construct the name of the diffusion tensor.
name = model
Index: specific_fns/model_free/model_free.py
===================================================================
--- specific_fns/model_free/model_free.py (revision 3338)
+++ specific_fns/model_free/model_free.py (working copy)
@@ -33,7 +33,7 @@
# relax module imports.
from data import Data as relax_data_store
from specific_fns.base_class import Common_functions
-from float import isNaN,isInf
+from float import isNaN,isInf
from maths_fns.mf import Mf
from minimise.generic import generic_minimise
from relax_errors import RelaxError, RelaxFuncSetupError, RelaxInfError,
RelaxInvalidDataError, RelaxLenError, RelaxNaNError, RelaxNoModelError,
RelaxNoPdbError, RelaxNoResError, RelaxNoRunError, RelaxNoSequenceError,
RelaxNoTensorError, RelaxNoValueError, RelaxNoVectorsError,
RelaxNucleusError, RelaxStyleError, RelaxTensorError,
RelaxUnknownDataTypeError
Index: specific_fns/jw_mapping.py
===================================================================
--- specific_fns/jw_mapping.py (revision 3338)
+++ specific_fns/jw_mapping.py (working copy)
@@ -253,7 +253,7 @@
# Loop over residue data:
for residue in relax_data_store.res[run]:
-
+
# Check for sufficient data
if not hasattr(residue, 'relax_data'):
residue.select = 0
Index: specific_fns/specific_setup.py
===================================================================
--- specific_fns/specific_setup.py (revision 3338)
+++ specific_fns/specific_setup.py (working copy)
@@ -463,7 +463,7 @@
# Set function.
if self.eqi == 'set':
return self.relax.specific.relax_fit.set
-
+
# Set error function.
if self.eqi == 'set_error':
return self.relax.specific.relax_fit.set_error
Index: float.py
===================================================================
--- float.py (revision 3338)
+++ float.py (working copy)
@@ -23,70 +23,70 @@
''' ieeefloat a set of functions for dealing with ieee-754 float objects
- On most platforms Python uses ieee-754 double objects of length 64 bits
to
- represent floats (some architectures such as older crays and vaxes
don't).
+ On most platforms Python uses ieee-754 double objects of length 64 bits
to
+ represent floats (some architectures such as older crays and vaxes
don't).
Thus an ieee-754 double is the implementation of a python float object on
most platforms.
-
- ieee-74 uses special bit patterns to represent the following states or
classes
+
+ ieee-74 uses special bit patterns to represent the following states or
classes
of ieee floating point numbers (ieee-class)
+-nan - not a number (e.g. 0.0/0.0)
inf - positive or negative infinity (1.0/0.0)
+-zero - zero maybe positive or negative under ieee-754
-
- this module provides functions for working with python floats and their
+
+ this module provides functions for working with python floats and their
special values, if they contain ieee-754 formatted values. Specifically
- - pack and unpack a list of bytes representing an ieee-754 double to
a python
+ - pack and unpack a list of bytes representing an ieee-754 double to
a python
float (takes care of little endian/big endian issues)
- get the sign bit of a python float
- - check the ordering of python floats allowing for nans (nans cannot
normally
+ - check the ordering of python floats allowing for nans (nans cannot
normally
be compared)
- check if a value is finite (as opposed to nan or inf)
- - copy the sign of one float to another irrespective of if it's
ieee-class
+ - copy the sign of one float to another irrespective of if it's
ieee-class
- check if a float is denormalised (and might be about to underflow)
- - check the ieee-class of a python float (nan, pos-inf,
neg-inf,pos-zero,
+ - check the ieee-class of a python float (nan, pos-inf,
neg-inf,pos-zero,
neg-zero,...)
- check that the current python float implmentations uses ieee-754
doubles
-
- It also provides constants containg specific bit patterns for nan and
+-inf as
- these values cannot be generated from strings via the constructor
float(x)
+
+ It also provides constants containg specific bit patterns for nan and
+-inf as
+ these values cannot be generated from strings via the constructor
float(x)
with some compiler implementations (typically older microsoft windows
compilers)
-
- As a convenience the names of functions and constants conform to those
defined
+
+ As a convenience the names of functions and constants conform to those
defined
in the draft python PEP 754 'IEEE 754 Floating Point Special Values'
-
+
notes:
1. binary data is docuemented as binary strings e.g. 0xF0 =
0b11110000
- 2. the module doesn't support all the functions recommened by
ieee-754,
+ 2. the module doesn't support all the functions recommened by
ieee-754,
the following features are missing
a. control of exception and rounding modes
b. scalb (y, N)
c. logb (x)
d. nextafter(x,y)
e. next towards
- 3. division by zero currently (python 2.5) raises excaption and the
+ 3. division by zero currently (python 2.5) raises excaption and the
resulting inf/nan cannot be propogated
- 4. a second module ieeefloatcapabilities (currently incomplete)
+ 4. a second module ieeefloatcapabilities (currently incomplete)
provides tests of the capabilites of a floating point
implementation
- on a specific python platform
+ on a specific python platform
5. development and conventions on byte order come from a little
endian
(intel) platform
- 6. to reduce overheads all functions that take python float
arguments do
+ 6. to reduce overheads all functions that take python float
arguments do
_no type_ conversion thus if other numeric types are passed the
functions
will raise exceptions, (I am not sure this is the best behaviour
however,
as python functions should be polymorphic...)
7. in most cases conversion to c code for performance reasons would
be trivial
-
+
ieee-754 double format:
63 sign bit
62-52 exponent (offset by 1023 value - field-1023
51-0 mantissa each bit n counts as 1/2^n, running from 1/2 which is
the
- most significant bit to 1/2^51, The 1/0 bit is defined by
the
- exponent field if it has any bits set if it has bits set
then
- precede the mantissa with a 1 (normalised otherwise procede
it by
+ most significant bit to 1/2^51, The 1/0 bit is defined by the
+ exponent field if it has any bits set if it has bits set then
+ precede the mantissa with a 1 (normalised otherwise procede
it by
a 0 (denormalised)
-
-
+
+
todo:
unit test suite
test under windows
@@ -98,16 +98,16 @@
import sys
-SIGNBIT = 0x80
+SIGNBIT = 0x80
''' bit pattern for the sign bit in byte 8 0b00000001 of a ieee-754 double'''
-EXPONENT_ALL_ONES_BYTE_1 = 0x7F
-''' value of the first byte (byte 8) in the mantisaa of a ieee-754 double
that
+EXPONENT_ALL_ONES_BYTE_1 = 0x7F
+''' value of the first byte (byte 8) in the mantisaa of a ieee-754 double
that
is all ones (0b11111110) '''
-EXPONENT_ALL_ONES_BYTE_0 = 0xF << 4
-''' value of the second byte (byte 7) in the mantisaa of a ieee-754 double
that
+EXPONENT_ALL_ONES_BYTE_0 = 0xF << 4
+''' value of the second byte (byte 7) in the mantisaa of a ieee-754 double
that
is all ones (0b00001111) '''
@@ -120,8 +120,8 @@
which is part of the exponent (0b11110000)'''
-EXPONENT_SIGN_MASK= 0x7F
-'''' mask to select only bits from byte 8 of an ieee-754 double that are
+EXPONENT_SIGN_MASK= 0x7F
+'''' mask to select only bits from byte 8 of an ieee-754 double that are
not part of the sign bit (0b11111110)'''
''' classes of floating point numbers'''
@@ -137,20 +137,20 @@
CLASS_NEG_ZERO = 512
def isZero(float):
- return isMantissaAllZeros(float) and isExpAllZeros(float)
-
+ return isMantissaAllZeros(float) and isExpAllZeros(float)
+
def getFloatClass(float):
''' get the ieee-class (nan,inf etc) of apython float
-
+
float - python float object
-
+
result - a ieee class value
throws - an exception if float is not a python float object
'''
-
+
result = None
-
- # check finite
+
+ # check finite
if isFinite(float):
# check and store is positive
positive = isPositive(float)
@@ -169,7 +169,7 @@
result = CLASS_POS_NORMAL
else:
result = CLASS_NEG_NORMAL
- else:
+ else:
if isNaN(float):
# we don't currently test the type of nan signalling vs quiet
# so we always assume a quiet nan
@@ -179,30 +179,30 @@
elif isNegInf(float):
result = CLASS_NEG_INF
return result
-
+
def packBytesAsPyFloat(bytes):
- ''' pack 8 bytes into a python float
-
- the function is endian aware and the data should be input in little
- endian format. Thus byte 8 contains the most significant bit of the
+ ''' pack 8 bytes into a python float
+
+ the function is endian aware and the data should be input in little
+ endian format. Thus byte 8 contains the most significant bit of the
exponent and the sign bit
-
+
bytes -- 8 bytes to pack into a python (ieee 754 double) float
-
+
returns -- a python float
-
+
throws -- an Exception if bytes contains < 8 bytes
type of exception not determined
'''
- # pack bytes into binary string
+ # pack bytes into binary string
doubleString=pack('8B',*bytes)
-
+
#change byte order to little endian by reversing string
if sys.byteorder == 'big':
doubleString = doubleString[::-1]
-
- # unpack binary string to a python float
+
+ # unpack binary string to a python float
return unpack('d',doubleString)[0]
@@ -232,209 +232,209 @@
def floatToBinaryString(obj):
''' pack a python float into a binary string.
-
- This function assumes that the python type float it represents a
- 64bit double of 8 bytes. This function reverses the resulting string
if
+
+ This function assumes that the python type float it represents a
+ 64bit double of 8 bytes. This function reverses the resulting string
if
the current architecture is big endian.
-
+
obj -- a python float to pack
-
+
returns -- a string of 8 bytes
-
+
throws -- throws a TypeError if the the input object isn't a python
float
-
+
'''
if not isinstance(obj,float):
raise TypeError('the object recieved wasn\'t a float, type was: %s'
% type(obj))
-
+
# pack float into binary string
packed =pack('d',obj)
-
+
#change byte order to little endian by reversing string
if sys.byteorder == 'big':
packed = packed[::-1]
-
+
return packed
-
+
def floatAsByteArray(obj):
''' unpack a python float as a list of 8 bytes
-
- This function assumes that the python type float it represents a
+
+ This function assumes that the python type float it represents a
64bit double of 8 bytes
-
+
obj -- a python float to unpack
-
+
returns -- a list of 8 bytes
-
+
throws -- throws an exception if obj is not composed of 8 bytes
-
+
'''
#unpack bytes to a binary string (takes care of byte order)
binaryString = floatToBinaryString(obj)
-
+
# convert the binary string to an array of 8 bytes
bytes = unpack('8B',binaryString)
-
+
#convert bytes to a list for ease of editing
return list(bytes)
-
-
+
+
def getSignBit(obj):
''' get the sign bit from a python float
-
+
obj -- a python float object
-
- returns -- the floats sign bit, this has the value 1 if the float is
+
+ returns -- the floats sign bit, this has the value 1 if the float is
negative otherwise 0 (positive)
-
+
throws -- throws a TypeError if the the input object isn't a python
float
-
- '''
-
+
+ '''
+
# unpack float to bytes
- unpacked = floatAsByteArray(obj)
-
+ unpacked = floatAsByteArray(obj)
+
# grab last byte and check if sign bit is set
return unpacked[7] & SIGNBIT
def isPositive(obj):
''' test if a a pyhton float is positive
-
+
obj -- a python float object
-
+
returns -- True if the float is positive otherwise False
-
+
throws -- throws a TypeError if the the input object isn't a python
float
-
- '''
-
+
+ '''
+
if getSignBit(obj):
return False
else:
return True
-
+
def isNegative(obj):
''' test if a a pyhton float 64 bit ieee-74 double is negative
-
+
obj -- a python float object
-
+
returns -- True if the float is negative
-
+
throws -- tthrows a TypeError if the the input object isn't a python
float
- '''
- return not isPositive(obj)
+ '''
+ return not isPositive(obj)
def areUnordered(obj1,obj2):
''' test to see if two python float are unordered
-
- float comparison is unordered if either or both of the objects is
'not a
+
+ float comparison is unordered if either or both of the objects is
'not a
number' (nan)
-
+
obj1 -- a python float object
obj2 -- a python float object
-
+
throws -- throws a TypeError if the the input objects aren't a
python floats
-
+
'''
-
+
# check to see if objects are nans
nanTest1 = isNaN(obj1)
nanTest2 = isNaN(obj2)
-
+
# if either object is a nan we are unordered
if nanTest1 or nanTest2:
return True
else:
return False
-
+
def isFinite(obj):
''' test to see if a python float is finite
-
- to be finite a number mustn't be a nan or + or - inf a result of
True
+
+ to be finite a number mustn't be a nan or + or - inf a result of True
guarantees that the number is bounded by +- inf -inf < x < inf
-
+
obj -- a python float object
-
+
throws -- throws a TypeError if the the input object isn't a python
float
-
+
'''
-
+
result = True
if isNaN(obj):
result = False
if isInf(obj):
result = False
-
+
return result
def copySign(fromNumber,toDouble):
''' copy the sign bit from one python float to another
-
- this function is class agnostic the sign bit can be copied freely
between
+
+ this function is class agnostic the sign bit can be copied freely
between
ordinarys floats nans and +/-inf
-
+
fromDouble -- the python float to copy the sign bit from
toDouble -- the python float to copy the sign bit to
-
+
throws -- throws a TypeError if toDouble isn't a python float or if
fromNumber can't be converted to a float
-
+
'''
-
+
#convert first number to a float so as to use facilities
fromNumber = float(fromNumber)
-
+
# check signs of numbers
fromIsPositive = isPositive(fromNumber)
toIsPositive = isPositive(toDouble)
-
+
# convert the float to an array of 8 bytes
toBytes = floatAsByteArray(toDouble)
-
+
if not toIsPositive and fromIsPositive:
# unset the sign bit of the number
toBytes[7] &= EXPONENT_SIGN_MASK
-
+
elif toIsPositive and not fromIsPositive:
- # set the sign bit
+ # set the sign bit
toBytes[7] = toBytes[7] + 0x80
-
+
#repack bytes to float
return packBytesAsPyFloat(toBytes)
-
+
def isDenormalised(obj):
''' check to see if a python float is denormalised
-
- denormalisation indicates that the number has no exponent set and
all the
- precision is in the mantissa, this is an indication that the number
is
+
+ denormalisation indicates that the number has no exponent set and
all the
+ precision is in the mantissa, this is an indication that the number
is
tending to towards underflow
-
+
obj -- python float object to check
-
+
result -- True if the number is denormalised
-
+
throws -- throws a TypeError if toDouble isn't a python float or if
obj isn't a float
'''
-
+
result = True
- # check to see if the exponent is all zeros (a denorm doesn't have a
+ # check to see if the exponent is all zeros (a denorm doesn't have a
# finite exponent) Note we ignore the sign of the float
if not isExpAllZeros(obj):
result = False
-
- # check to see if this is zero (which is in some ways a special
- # class of denorm... but isn't counted in this case)
- # if it isn't zero it must be a 'general' denorm
+
+ # check to see if this is zero (which is in some ways a special
+ # class of denorm... but isn't counted in this case)
+ # if it isn't zero it must be a 'general' denorm
if isZero(obj):
result = False
-
+
return result
@@ -444,136 +444,136 @@
def getMantissaBytes(obj):
''' get the 7 bytes that makeup the mantissa of float
-
+
the mantissa is returned as the 7 bytes in the mantissa in little
endian order
- in the 7th byte the 2nd nibble of the byte is masked off as it
contains
- part of the exponent. The second nibble of the 7th byte is therefore
always
+ in the 7th byte the 2nd nibble of the byte is masked off as it
contains
+ part of the exponent. The second nibble of the 7th byte is therefore
always
has the value 0x0
-
+
obj -- float object to extract the mantissa from
-
+
returns -- a list of 7 bytes in little endian order
-
- throws -- throws a TypeError if obj isn't a python float
-
+
+ throws -- throws a TypeError if obj isn't a python float
+
'''
-
+
# unpack float to bytes
bytes = floatAsByteArray(obj)
-
+
# mask out overlap from exponent
bytes[6] = bytes[6] & MANTISSA_NIBBLE_MASK
-
+
# remove the exponent bytes that can be removed
return bytes[:7]
def getExponentBytes(obj):
- ''' get the 2 bytes that makeup the exponent of a float
-
+ ''' get the 2 bytes that makeup the exponent of a float
+
the exponent is returned as the 2 bytes in the exponent in little
endian order
- in the 2nd byte the last bit is masked off as this is the sign bit.
Ttherefore
+ in the 2nd byte the last bit is masked off as this is the sign bit.
Ttherefore
all values have the last bit set to zero. In the first byte the
first nibble of
the byte is also masked off as it contains part of the mantissa and
thus
- always has the value 0x0.
-
+ always has the value 0x0.
+
obj -- float object to extract the exponent from
-
+
returns -- a list of 2 bytes in little endian order
-
- throws -- throws a TypeError if obj isn't a python float
+
+ throws -- throws a TypeError if obj isn't a python float
'''
-
+
# unpack float to bytes
bytes = floatAsByteArray(obj)
-
+
# mask out the ovberlap with the mantissa
bytes[6] = bytes[6] & EXPONENT_NIBBLE_MASK
-
- # mask out the sign bit
+
+ # mask out the sign bit
bytes[7] = bytes[7] & EXPONENT_SIGN_MASK
-
+
# remove the mantissa bytes that can be removed
- return bytes[6:]
+ return bytes[6:]
def isExpAllZeros(obj):
''' check if the bits of the exponent of a float is zero
-
+
obj -- float object to check exponent for zero value
-
+
returns -- True if the exponent is zero
-
- throws -- throws a TypeError if obj isn't a python float
+
+ throws -- throws a TypeError if obj isn't a python float
'''
result = True
-
+
# get the exponent as a byte array porperly masked
expBytes = getExponentBytes(obj)
-
+
# check to see if any of the bytes in the exponent are not zero
if expBytes[0] > 0 or expBytes[1] > 0:
result = False
-
+
return result
def isMantissaAllZeros(obj):
''' check if the bits of the mantissa of a float is zero
obj -- float object to check mantissa for zero value
-
+
returns -- True if the mantissa is zero
-
- throws -- throws a TypeError if obj isn't a python float
+
+ throws -- throws a TypeError if obj isn't a python float
'''
result = True
-
+
# get the mantissa as a byte array properly masked
mantissaBytes = getMantissaBytes(obj)
-
+
# check if any of the mantissa bytes are greater than zero
for byte in mantissaBytes:
if byte != 0:
- result = False
+ result = False
break
-
+
return result
-
+
def isExpAllOnes(obj):
''' check if the bits of the exponent of a floatis all 1 bits
-
+
obj -- float object to check exponent for 1 bits
-
+
returns -- True if all the bits in the exponent are one
-
- throws -- throws a TypeError if obj isn't a python float
- '''
-
+
+ throws -- throws a TypeError if obj isn't a python float
+ '''
+
result = False
-
+
# get the exponent as a byte array properly masked
expBytes = getExponentBytes(obj)
-
- # check against masks to see if all the correct bits are set
+
+ # check against masks to see if all the correct bits are set
if expBytes[0] == EXPONENT_ALL_ONES_BYTE_0 and expBytes[1] ==
EXPONENT_ALL_ONES_BYTE_1:
result = True
-
- return result
+ return result
+
def isNaN(obj):
''' check to see if a python float is an ieee-754 double not a number
(nan)
-
+
obj -- float object to check for not a number
-
+
returns -- True if object is not a number
-
- throws -- throws a TypeError if obj isn't a python float
+
+ throws -- throws a TypeError if obj isn't a python float
'''
-
+
# bad result for code checking
result = None
-
+
# check to see if exponent is all ones (excluding sign bit)
# if exponent is not all ones this can't be a NaN
if not isExpAllOnes(obj):
@@ -581,7 +581,7 @@
else:
# get the mantissa as a byte array properly masked
manBytes = getMantissaBytes(obj)
-
+
# check if any of the unmasked mantissa bytes are not zero
# to be a NaN the mantissa must be non zero
for byte in manBytes:
@@ -589,33 +589,33 @@
result = True
break
# todo NOT NEEDED, UNITTEST!!!!
- # check to see if the mantissa nibble that overlaps with the
+ # check to see if the mantissa nibble that overlaps with the
#if (manBytes[6] & MANTISSA_NIBBLE_MASK) > 0:
# result = True
return result
-def isInf(obj):
- ''' check to see if a python float is an infinity
-
+def isInf(obj):
+ ''' check to see if a python float is an infinity
+
the check returns true for either positive or negative infinities
-
+
obj -- float object to check for infinity
-
- returns -- True if object is an infinity
-
- throws -- throws a TypeError if obj isn't a python float
- '''
+
+ returns -- True if object is an infinity
+
+ throws -- throws a TypeError if obj isn't a python float
+ '''
# bad result for code checking
result = None
-
+
# check to see if exponent is all ones (excluding sign bit)
- # if exponent is not all ones this can't be a Inf
+ # if exponent is not all ones this can't be a Inf
if not isExpAllOnes(obj):
result = False
else:
- # get the mantissa as a byte array properly masked
+ # get the mantissa as a byte array properly masked
manBytes = getMantissaBytes(obj)
-
+
for byte in manBytes:
#check if any of the unmasked mantissa bytes are zero
# to be a NaN the mantissa must be zero
@@ -623,30 +623,30 @@
result = False
break
result = True
-
+
return result
-
+
def isPosInf(obj):
- ''' check to see if a python float is positive infinity
-
+ ''' check to see if a python float is positive infinity
+
obj -- float object to check for positive infinity
-
- returns -- True if object is a positive infinity
-
- throws -- throws a TypeError if obj isn't a python float
- '''
+
+ returns -- True if object is a positive infinity
+
+ throws -- throws a TypeError if obj isn't a python float
+ '''
return isInf(obj) and isPositive(obj)
def isNegInf(obj):
- ''' check to see if a python float is negative infinity
-
-
+ ''' check to see if a python float is negative infinity
+
+
obj -- float object to check for negative infinity
-
- returns -- True if object is a negative infinity
-
- throws -- throws a TypeError if obj isn't a python float
+
+ returns -- True if object is a negative infinity
+
+ throws -- throws a TypeError if obj isn't a python float
'''
return isInf(obj) and not isPositive(obj)
Index: io.py
===================================================================
--- io.py (revision 3338)
+++ io.py (working copy)
@@ -158,7 +158,7 @@
def file_root(self, file_path):
"""Return the root file name, striped of path and extension
details"""
-
+
root,ext = splitext(file_path)
return basename(root)
Index: dx/isosurface_3D.py
===================================================================
--- dx/isosurface_3D.py (revision 3338)
+++ dx/isosurface_3D.py (working copy)
@@ -52,8 +52,8 @@
// workspace: width = 251, height = 142
// layout: snap = 0, width = 50, height = 50, align = NN
//
-// interactor Selector[1]: num_components = 1, value = 1
-// selections: maximum = 2, current = 0
+// interactor Selector[1]: num_components = 1, value = 1
+// selections: maximum = 2, current = 0
// option[0]: name = "Colour", value = 1
// option[1]: name = "Grey", value = 2
// instance: panel = 0, x = 81, y = 6, style = Scrolled List, vertical = 1,
size = 170x136
@@ -229,7 +229,7 @@
// input[3]: defaulting = 1, visible = 1, type = 32, value = "general"
// page group: Glyph
//
-main_Import_4_out_1 =
+main_Import_4_out_1 =
Import(
main_Import_4_in_1,
main_Import_4_in_2,
@@ -238,7 +238,7 @@
main_Import_4_in_5,
main_Import_4_in_6
) [instance: 4, cache: 1];
- //
+ //
// node Glyph[2]: x = 201, y = 182, inputs = 7, label = Glyph
// input[2]: defaulting = 0, visible = 1, type = 32, value = "sphere"
// input[3]: defaulting = 1, visible = 1, type = 5, value = 10.0
@@ -246,7 +246,7 @@
// input[5]: defaulting = 0, visible = 1, type = 5, value = 0.0
// page group: Glyph
//
-main_Glyph_2_out_1 =
+main_Glyph_2_out_1 =
Glyph(
main_Import_4_out_1,
main_Glyph_2_in_2,
@@ -256,13 +256,13 @@
main_Glyph_2_in_6,
main_Glyph_2_in_7
) [instance: 2, cache: 1];
- //
+ //
// node Color[10]: x = 357, y = 278, inputs = 5, label = Color
// input[2]: defaulting = 0, visible = 1, type = 8, value = [0 0 0]
// input[3]: defaulting = 0, visible = 1, type = 5, value = 1.0
// page group: Glyph
//
-main_Color_10_out_1 =
+main_Color_10_out_1 =
Color(
main_Glyph_2_out_1,
main_Color_10_in_2,
@@ -270,12 +270,12 @@
main_Color_10_in_4,
main_Color_10_in_5
) [instance: 10, cache: 1];
- //
+ //
// node Transmitter[1]: x = 352, y = 386, inputs = 1, label = GreySphere
// page group: Glyph
//
GreySphere = main_Color_10_out_1;
- //
+ //
// node Receiver[2]: x = 190, y = 350, inputs = 1, label = GreySphere
// page group: Grey Space
//
@@ -283,13 +283,13 @@
# Common code.
text = text + """
- //
+ //
// node Import[3]: x = 225, y = 84, inputs = 6, label = """ + self.file
+ """
// input[1]: defaulting = 0, visible = 1, type = 32, value = \"""" +
self.file + """.general"
// input[3]: defaulting = 1, visible = 1, type = 32, value = "general"
// page group: Isosurfaces
//
-main_Import_3_out_1 =
+main_Import_3_out_1 =
Import(
main_Import_3_in_1,
main_Import_3_in_2,
@@ -298,12 +298,12 @@
main_Import_3_in_5,
main_Import_3_in_6
) [instance: 3, cache: 1];
- //
+ //
// node Isosurface[5]: x = 102, y = 191, inputs = 6, label = Outer
Isosurface
// input[2]: defaulting = 0, visible = 1, type = 5, value = 500.0
// page group: Isosurfaces
//
-main_Isosurface_5_out_1 =
+main_Isosurface_5_out_1 =
Isosurface(
main_Import_3_out_1,
main_Isosurface_5_in_2,
@@ -312,23 +312,23 @@
main_Isosurface_5_in_5,
main_Isosurface_5_in_6
) [instance: 5, cache: 1];
- //
+ //
// node Transmitter[7]: x = 110, y = 292, inputs = 1, label = Surface4
// page group: Isosurfaces
//
Surface4 = main_Isosurface_5_out_1;
- //
+ //
// node Receiver[14]: x = 123, y = 51, inputs = 1, label = Surface4
// page group: Grey Space
//
main_Receiver_14_out_1[cache: 0] = Surface4;
- //
+ //
// node Color[6]: x = 142, y = 145, inputs = 5, label = Color
// input[2]: defaulting = 0, visible = 1, type = 8, value = [0 0 0]
// input[3]: defaulting = 0, visible = 1, type = 5, value = 0.2
// page group: Grey Space
//
-main_Color_6_out_1 =
+main_Color_6_out_1 =
Color(
main_Receiver_14_out_1,
main_Color_6_in_2,
@@ -336,12 +336,12 @@
main_Color_6_in_4,
main_Color_6_in_5
) [instance: 6, cache: 1];
- //
+ //
// node Isosurface[6]: x = 200, y = 191, inputs = 6, label = Middle
Isosurface
// input[2]: defaulting = 0, visible = 1, type = 5, value = 100.0
// page group: Isosurfaces
//
-main_Isosurface_6_out_1 =
+main_Isosurface_6_out_1 =
Isosurface(
main_Import_3_out_1,
main_Isosurface_6_in_2,
@@ -350,23 +350,23 @@
main_Isosurface_6_in_5,
main_Isosurface_6_in_6
) [instance: 6, cache: 1];
- //
+ //
// node Transmitter[8]: x = 208, y = 292, inputs = 1, label = Surface3
// page group: Isosurfaces
//
Surface3 = main_Isosurface_6_out_1;
- //
+ //
// node Receiver[13]: x = 227, y = 51, inputs = 1, label = Surface3
// page group: Grey Space
//
main_Receiver_13_out_1[cache: 0] = Surface3;
- //
+ //
// node Color[7]: x = 246, y = 145, inputs = 5, label = Color
// input[2]: defaulting = 0, visible = 1, type = 8, value = [0.2 0.2 0.2]
// input[3]: defaulting = 0, visible = 1, type = 5, value = 0.4
// page group: Grey Space
//
-main_Color_7_out_1 =
+main_Color_7_out_1 =
Color(
main_Receiver_13_out_1,
main_Color_7_in_2,
@@ -374,21 +374,21 @@
main_Color_7_in_4,
main_Color_7_in_5
) [instance: 7, cache: 1];
- //
+ //
// node Collect[5]: x = 203, y = 236, inputs = 2, label = Collect
// page group: Grey Space
//
-main_Collect_5_out_1 =
+main_Collect_5_out_1 =
Collect(
main_Color_6_out_1,
main_Color_7_out_1
) [instance: 5, cache: 1];
- //
+ //
// node Isosurface[7]: x = 298, y = 191, inputs = 6, label = Inner
Isosurface
// input[2]: defaulting = 0, visible = 1, type = 5, value = 20.0
// page group: Isosurfaces
//
-main_Isosurface_7_out_1 =
+main_Isosurface_7_out_1 =
Isosurface(
main_Import_3_out_1,
main_Isosurface_7_in_2,
@@ -397,23 +397,23 @@
main_Isosurface_7_in_5,
main_Isosurface_7_in_6
) [instance: 7, cache: 1];
- //
+ //
// node Transmitter[9]: x = 306, y = 292, inputs = 1, label = Surface2
// page group: Isosurfaces
//
Surface2 = main_Isosurface_7_out_1;
- //
+ //
// node Receiver[12]: x = 331, y = 51, inputs = 1, label = Surface2
// page group: Grey Space
//
main_Receiver_12_out_1[cache: 0] = Surface2;
- //
+ //
// node Color[8]: x = 350, y = 145, inputs = 5, label = Color
// input[2]: defaulting = 0, visible = 1, type = 8, value = [0.5 0.5 0.5]
// input[3]: defaulting = 0, visible = 1, type = 5, value = 0.5
// page group: Grey Space
//
-main_Color_8_out_1 =
+main_Color_8_out_1 =
Color(
main_Receiver_12_out_1,
main_Color_8_in_2,
@@ -421,12 +421,12 @@
main_Color_8_in_4,
main_Color_8_in_5
) [instance: 8, cache: 1];
- //
+ //
// node Isosurface[8]: x = 396, y = 191, inputs = 6, label = Innermost
Isosurface
// input[2]: defaulting = 0, visible = 1, type = 5, value = 7.0
// page group: Isosurfaces
//
-main_Isosurface_8_out_1 =
+main_Isosurface_8_out_1 =
Isosurface(
main_Import_3_out_1,
main_Isosurface_8_in_2,
@@ -435,23 +435,23 @@
main_Isosurface_8_in_5,
main_Isosurface_8_in_6
) [instance: 8, cache: 1];
- //
+ //
// node Transmitter[10]: x = 404, y = 292, inputs = 1, label = Surface1
// page group: Isosurfaces
//
Surface1 = main_Isosurface_8_out_1;
- //
+ //
// node Receiver[11]: x = 434, y = 51, inputs = 1, label = Surface1
// page group: Grey Space
//
main_Receiver_11_out_1[cache: 0] = Surface1;
- //
+ //
// node Color[9]: x = 453, y = 145, inputs = 5, label = Color
// input[2]: defaulting = 0, visible = 1, type = 32, value = "white"
// input[3]: defaulting = 0, visible = 1, type = 5, value = 0.7
// page group: Grey Space
//
-main_Color_9_out_1 =
+main_Color_9_out_1 =
Color(
main_Receiver_11_out_1,
main_Color_9_in_2,
@@ -459,20 +459,20 @@
main_Color_9_in_4,
main_Color_9_in_5
) [instance: 9, cache: 1];
- //
+ //
// node Collect[6]: x = 409, y = 236, inputs = 2, label = Collect
// page group: Grey Space
//
-main_Collect_6_out_1 =
+main_Collect_6_out_1 =
Collect(
main_Color_8_out_1,
main_Color_9_out_1
) [instance: 6, cache: 1];
- //
+ //
// node Collect[7]: x = 307, y = 327, inputs = 2, label = Collect
// page group: Grey Space
//
-main_Collect_7_out_1 =
+main_Collect_7_out_1 =
Collect(
main_Collect_5_out_1,
main_Collect_6_out_1
@@ -485,12 +485,12 @@
// node Collect[8]: x = 293, y = 431, inputs = 2, label = Collect
// page group: Grey Space
//
-main_Collect_8_out_1 =
+main_Collect_8_out_1 =
Collect(
main_Receiver_2_out_1,
main_Collect_7_out_1
) [instance: 8, cache: 1];
- //
+ //
// node Transmitter[4]: x = 282, y = 517, inputs = 1, label =
GreySpace"""
# No sphere.
@@ -515,22 +515,22 @@
# Common code.
text = text + """
- //
+ //
// node Receiver[3]: x = 137, y = 57, inputs = 1, label = GreySpace
// page group: GreyScene
//
main_Receiver_3_out_1[cache: 0] = GreySpace;
- //
+ //
// node Scale[3]: x = 163, y = 159, inputs = 2, label = Scale
// input[2]: defaulting = 0, visible = 1, type = 8, value = [1 1 1]
// page group: GreyScene
//
-main_Scale_3_out_1 =
+main_Scale_3_out_1 =
Scale(
main_Receiver_3_out_1,
main_Scale_3_in_2
) [instance: 3, cache: 1];
- //
+ //
// node AutoCamera[2]: x = 273, y = 264, inputs = 9, label = AutoCamera
// input[2]: defaulting = 0, visible = 1, type = 8, value = [1 -1 1]
// input[3]: defaulting = 1, visible = 1, type = 5, value = 500.0
@@ -542,7 +542,7 @@
// input[9]: defaulting = 0, visible = 1, type = 32, value = "white"
// page group: GreyScene
//
-main_AutoCamera_2_out_1 =
+main_AutoCamera_2_out_1 =
AutoCamera(
main_Scale_3_out_1,
main_AutoCamera_2_in_2,
@@ -554,7 +554,7 @@
main_AutoCamera_2_in_8,
main_AutoCamera_2_in_9
) [instance: 2, cache: 1];
- //
+ //
// node AutoAxes[2]: x = 175, y = 379, inputs = 19, label = AutoAxes
// input[3]: defaulting = 0, visible = 1, type = 16777248, value = """ +
self.labels + """
// input[4]: defaulting = 0, visible = 0, type = 1, value = 30
@@ -574,7 +574,7 @@
// input[19]: defaulting = 0, visible = 1, type = 16777248, value = """
+ self.tick_values[2] + """
// page group: GreyScene
//
-main_AutoAxes_2_out_1 =
+main_AutoAxes_2_out_1 =
AutoAxes(
main_Scale_3_out_1,
main_AutoCamera_2_out_1,
@@ -606,7 +606,7 @@
// input[3]: defaulting = 0, visible = 1, type = 5, value = 1.0
// page group: Glyph
//
-main_Color_11_out_1 =
+main_Color_11_out_1 =
Color(
main_Glyph_2_out_1,
main_Color_11_in_2,
@@ -614,12 +614,12 @@
main_Color_11_in_4,
main_Color_11_in_5
) [instance: 11, cache: 1];
- //
+ //
// node Transmitter[2]: x = 122, y = 386, inputs = 1, label =
ColourSphere
// page group: Glyph
//
ColourSphere = main_Color_11_out_1;
- //
+ //
// node Receiver[1]: x = 179, y = 349, inputs = 1, label = ColourSphere
// page group: Colour Space
//
@@ -627,12 +627,12 @@
# Common code.
text = text + """
- //
+ //
// node Receiver[10]: x = 123, y = 51, inputs = 1, label = Surface4
// page group: Colour Space
//
main_Receiver_10_out_1[cache: 0] = Surface4;
- //
+ //
// node Color[12]: x = 142, y = 145, inputs = 5, label = Color
// input[2]: defaulting = 0, visible = 1, type = 8, value = [0 0 0.2]
// input[3]: defaulting = 0, visible = 1, type = 5, value = 0.3
@@ -640,7 +640,7 @@
// input[5]: defaulting = 1, visible = 0, type = 3, value = NULL
// page group: Colour Space
//
-main_Color_12_out_1 =
+main_Color_12_out_1 =
Color(
main_Receiver_10_out_1,
main_Color_12_in_2,
@@ -648,18 +648,18 @@
main_Color_12_in_4,
main_Color_12_in_5
) [instance: 12, cache: 1];
- //
+ //
// node Receiver[9]: x = 227, y = 51, inputs = 1, label = Surface3
// page group: Colour Space
//
main_Receiver_9_out_1[cache: 0] = Surface3;
- //
+ //
// node Color[13]: x = 246, y = 145, inputs = 5, label = Color
// input[2]: defaulting = 0, visible = 1, type = 32, value = "blue"
// input[3]: defaulting = 0, visible = 1, type = 5, value = 0.3
// page group: Colour Space
//
-main_Color_13_out_1 =
+main_Color_13_out_1 =
Color(
main_Receiver_9_out_1,
main_Color_13_in_2,
@@ -667,27 +667,27 @@
main_Color_13_in_4,
main_Color_13_in_5
) [instance: 13, cache: 1];
- //
+ //
// node Collect[9]: x = 203, y = 236, inputs = 2, label = Collect
// page group: Colour Space
//
-main_Collect_9_out_1 =
+main_Collect_9_out_1 =
Collect(
main_Color_12_out_1,
main_Color_13_out_1
) [instance: 9, cache: 1];
- //
+ //
// node Receiver[8]: x = 331, y = 51, inputs = 1, label = Surface2
// page group: Colour Space
//
main_Receiver_8_out_1[cache: 0] = Surface2;
- //
+ //
// node Color[14]: x = 350, y = 145, inputs = 5, label = Color
// input[2]: defaulting = 0, visible = 1, type = 8, value = [0.5 0.5 1]
// input[3]: defaulting = 0, visible = 1, type = 5, value = 0.2
// page group: Colour Space
//
-main_Color_14_out_1 =
+main_Color_14_out_1 =
Color(
main_Receiver_8_out_1,
main_Color_14_in_2,
@@ -695,19 +695,19 @@
main_Color_14_in_4,
main_Color_14_in_5
) [instance: 14, cache: 1];
- //
+ //
// node Receiver[7]: x = 434, y = 51, inputs = 1, label = Surface1
// page group: Colour Space
//
main_Receiver_7_out_1[cache: 0] = Surface1;
- //
+ //
// node Color[15]: x = 453, y = 145, inputs = 5, label = Color
// input[2]: defaulting = 0, visible = 1, type = 32, value = "white"
// input[3]: defaulting = 0, visible = 1, type = 5, value = 0.55
// input[4]: defaulting = 1, visible = 0, type = 32, value = "positions"
// page group: Colour Space
//
-main_Color_15_out_1 =
+main_Color_15_out_1 =
Color(
main_Receiver_7_out_1,
main_Color_15_in_2,
@@ -715,20 +715,20 @@
main_Color_15_in_4,
main_Color_15_in_5
) [instance: 15, cache: 1];
- //
+ //
// node Collect[10]: x = 409, y = 236, inputs = 2, label = Collect
// page group: Colour Space
//
-main_Collect_10_out_1 =
+main_Collect_10_out_1 =
Collect(
main_Color_14_out_1,
main_Color_15_out_1
) [instance: 10, cache: 1];
- //
+ //
// node Collect[11]: x = 307, y = 327, inputs = 2, label = Collect
// page group: Colour Space
//
-main_Collect_11_out_1 =
+main_Collect_11_out_1 =
Collect(
main_Collect_9_out_1,
main_Collect_10_out_1
@@ -741,12 +741,12 @@
// node Collect[12]: x = 293, y = 431, inputs = 2, label = Collect
// page group: Colour Space
//
-main_Collect_12_out_1 =
+main_Collect_12_out_1 =
Collect(
main_Receiver_1_out_1,
main_Collect_11_out_1
) [instance: 12, cache: 1];
- //
+ //
// node Transmitter[3]: x = 276, y = 517, inputs = 1, label =
ColourSpace"""
# No sphere.
@@ -771,22 +771,22 @@
# Common code.
text = text + """
- //
+ //
// node Receiver[4]: x = 131, y = 58, inputs = 1, label = ColourSpace
// page group: ColourScene
//
main_Receiver_4_out_1[cache: 0] = ColourSpace;
- //
+ //
// node Scale[5]: x = 163, y = 159, inputs = 2, label = Scale
// input[2]: defaulting = 0, visible = 1, type = 8, value = [1 1 1]
// page group: ColourScene
//
-main_Scale_5_out_1 =
+main_Scale_5_out_1 =
Scale(
main_Receiver_4_out_1,
main_Scale_5_in_2
) [instance: 5, cache: 1];
- //
+ //
// node AutoCamera[4]: x = 273, y = 264, inputs = 9, label = AutoCamera
// input[2]: defaulting = 0, visible = 1, type = 8, value = [1 -1 1]
// input[3]: defaulting = 1, visible = 1, type = 5, value = 500.0
@@ -797,7 +797,7 @@
// input[9]: defaulting = 0, visible = 1, type = 32, value = "black"
// page group: ColourScene
//
-main_AutoCamera_4_out_1 =
+main_AutoCamera_4_out_1 =
AutoCamera(
main_Scale_5_out_1,
main_AutoCamera_4_in_2,
@@ -809,7 +809,7 @@
main_AutoCamera_4_in_8,
main_AutoCamera_4_in_9
) [instance: 4, cache: 1];
- //
+ //
// node AutoAxes[4]: x = 175, y = 379, inputs = 19, label = AutoAxes
// input[3]: defaulting = 0, visible = 1, type = 16777248, value = """ +
self.labels + """
// input[4]: defaulting = 0, visible = 0, type = 1, value = 30
@@ -829,7 +829,7 @@
// input[19]: defaulting = 0, visible = 1, type = 16777248, value = """
+ self.tick_values[2] + """
// page group: ColourScene
//
-main_AutoAxes_4_out_1 =
+main_AutoAxes_4_out_1 =
AutoAxes(
main_Scale_5_out_1,
main_AutoCamera_4_out_1,
@@ -851,60 +851,60 @@
main_AutoAxes_4_in_18,
main_AutoAxes_4_in_19
) [instance: 4, cache: 1];
- //
+ //
// node Selector[1]: x = 245, y = 66, inputs = 7, label = Selector
// input[1]: defaulting = 0, visible = 0, type = 32, value = "Selector_1"
- // input[2]: defaulting = 0, visible = 0, type = 32, value = "Colour"
- // input[3]: defaulting = 0, visible = 0, type = 29, value = 1
+ // input[2]: defaulting = 0, visible = 0, type = 32, value = "Colour"
+ // input[3]: defaulting = 0, visible = 0, type = 29, value = 1
// input[4]: defaulting = 1, visible = 1, type = 16777248, value = {
"Colour" "Grey" }
// input[5]: defaulting = 1, visible = 0, type = 16777245, value = { 1 2
}
- // output[1]: visible = 1, type = 29, value = 1
- // output[2]: visible = 1, type = 32, value = "Colour"
+ // output[1]: visible = 1, type = 29, value = 1
+ // output[2]: visible = 1, type = 32, value = "Colour"
// page group: Image
//
- //
+ //
// node Transmitter[6]: x = 299, y = 487, inputs = 1, label = ColourImage
// page group: ColourScene
//
ColourImage = main_AutoAxes_4_out_1;
- //
+ //
// node Receiver[5]: x = 76, y = 190, inputs = 1, label = ColourImage
// page group: Image
//
main_Receiver_5_out_1[cache: 0] = ColourImage;
- //
+ //
// node Transmitter[5]: x = 305, y = 489, inputs = 1, label = GreyImage
// page group: GreyScene
//
GreyImage = main_AutoAxes_2_out_1;
- //
+ //
// node Receiver[6]: x = 199, y = 190, inputs = 1, label = GreyImage
// page group: Image
//
main_Receiver_6_out_1[cache: 0] = GreyImage;
- //
+ //
// node Switch[1]: x = 177, y = 293, inputs = 3, label = Switch
// page group: Image
//
-main_Switch_1_out_1 =
+main_Switch_1_out_1 =
Switch(
main_Selector_1_out_1,
main_Receiver_5_out_1,
main_Receiver_6_out_1
) [instance: 1, cache: 1];
- //
+ //
// node Switch[14]: x = 325, y = 293, inputs = 3, label = Switch
// input[2]: defaulting = 0, visible = 1, type = 67108863, value =
"black"
// input[3]: defaulting = 0, visible = 1, type = 67108863, value =
"white"
// page group: Image
//
-main_Switch_14_out_1 =
+main_Switch_14_out_1 =
Switch(
main_Selector_1_out_1,
main_Switch_14_in_2,
main_Switch_14_in_3
) [instance: 14, cache: 1];
- //
+ //
// node Image[3]: x = 252, y = 424, inputs = 49, label = Image
// input[1]: defaulting = 0, visible = 0, type = 67108863, value =
"Image_3"
// input[4]: defaulting = 0, visible = 0, type = 1, value = 1
@@ -941,7 +941,7 @@
//
main_Image_3_out_1,
main_Image_3_out_2,
-main_Image_3_out_3 =
+main_Image_3_out_3 =
Image(
main_Image_3_in_1,
main_Switch_1_out_1,
@@ -1331,7 +1331,7 @@
perspective,
viewAngle,
backgroundColor) [instance: 1, cache: 1];
- coloredDefaultCamera =
+ coloredDefaultCamera =
UpdateCamera(defaultCamera,
background=backgroundColor) [instance: 1, cache: 1];
nullDefaultCamera =
@@ -1342,7 +1342,7 @@
nullDefaultCamera,
coloredDefaultCamera,
autoCamera) [instance: 1, cache: 1];
- resetNull =
+ resetNull =
Inquire(
reset,
"is null + 1") [instance: 2, cache: 1];