SIC scalars

###
SIC scalars

Particular numpy.ndarray's which have no (0) dimension have a special treatment: they still have numpy.ndarray type, but their representation and handling is similar to standard Python scalars. SIC scalars are imported in Python as numpy.ndarray scalars through SicVar instances:

    >>> Sic.comm('DEF REAL D')
    >>> d
    0.0
    >>> print d.__doc__
    A SicVar instance.

You have to take care that you cannot modify scalars (and, actually, any SicVar or SicStructure instance) with commands such as d = 1, because this unbounds d to its corresponding SicVar instance (which is lost and deleted if no other variable uses it), and bounds it to integer 1. If it happens, you can get('D') again: SicVar instance is recreated and all the previous changes will not be lost because D have not been deleted in SIC.

    >>> Sic.comm('LET D 1.')
    >>> d
    1.0
    >>> d = 2.            # ooops... 'd' instance is lost!
    >>> type(d)
    <type 'float'>        # 'd' is bound to a standard float,
    >>> Sic.comm('EXA D') # but 'D' remains unchanged in SIC.
    D          =   1.000000              ! Real    GLOBAL
    >>> Sic.get('D')      # Reincarnates d.
    >>> d
    1.0

Thus, to modify scalars from Python, you have to access its data through its unique element:

    >>> d[0] = 2.
    >>> d
    2.0
    >>> print d.__doc__
    A SicVar instance.