Support code for AMUSE framework

class amuse.support.core.late(initializer)

An attribute that is set at first access.

The value of the attribute will be determined from the initializer method. The name of the attribute is the same as the name of the initializer method.

A late attribute is comparible with attributes set in the __init__ method. Except the value of the late attribute is determined when first accessed and not when the class is instantiated.

Typical use to define a managed attribute x:

>>> class C(object):
...    @late
...    def x(self):
...        return "i'm late!"
...
>>> c = C()
>>> print c.x
i'm late!
>>> c.x = "overridden"
>>> print c.x
overridden
Parameters

initializer – function to determine the initial value of the property

Returns

a descriptor to determine and set the value on first access

class amuse.support.core.print_out

Efficient way to contruct large strings.

Strings are build up out of parts. Objects of this class store these parts while building the string. Only on request the parts are concatenated into a large string.

Strings and numbers can be added to the print_out. For other objects str(object) is called before adding it to the print_out.

>>> p = print_out()
>>> p + "number of counts : " + 10    
<amuse.support.core.print_out object at 0x...>
>>> print p.string
number of counts : 10

All methods return the print_out instance, so that calls can be chained.

__add__(x)

Add a new part to the print_out.

dedent()

Decrease the indent. The next line will start dedented.

>>> p = print_out()
>>> p + "01" 
<amuse.support.core.print_out object at 0x...>
>>> p.indent().lf() + "2" 
<amuse.support.core.print_out object at 0x...>
>>> p.dedent().lf() + "01" 
<amuse.support.core.print_out object at 0x...>
>>> print p.string
01
  2
01
indent()

Increase the indent. The next and following lines will start indented.

>>> p = print_out()
>>> p + "01" 
<amuse.support.core.print_out object at 0x...>
>>> p.indent().lf() + "2" 
<amuse.support.core.print_out object at 0x...>
>>> p.lf() + "3" 
<amuse.support.core.print_out object at 0x...>
>>> print p.string
01
  2
  3
indent_characters()

The indent characters, by default 2 spaces.

Override this method to change the indent characters.

lf()

Start a new-line

lf_noindent()

Start a new-line

n()

Start a new-line, if the current line is not-empty.

>>> p = print_out()
>>> for i in range(3):
...     p.n() + i 
...
<amuse.support.core.print_out object at 0x...>
<amuse.support.core.print_out object at 0x...>
<amuse.support.core.print_out object at 0x...>
>>> print p.string
0
1
2
property string

String version of the print_out.

class amuse.support.core.OrderedDictionary

A dictionary that keeps the keys in the dictionary in order.

Ordered dictionaries are just like regular dictionaries but they remember the order that items were inserted. When iterating over an ordered dictionary, the values are returned in the order their keys were first added.

>>> d = OrderedDictionary()
>>> d["first"] = 0
>>> d["second"] = 1
>>> d["third"] = 2
>>> [x for x in d]
[0, 1, 2]