Basic data types
They are:float— type of double precision (64-bit) floating point numbersint— integer numbersbool— boolean valuesTrueorFalsestr— string data type
indie.Optional[T] class
In Indie (unlike in Python) it is not allowed to assign None value to a variable of any arbitrary type (e.g. basic
data types). But it is allowed to do so with the help of indie.Optional[T] class.
indie.Optional[T] is similar to Python’s typing.Optional[T] with a few significant differences:
Nonecan be assigned to values which haveindie.Optional[T]type only.Nonecannot be assigned to values of someTtype which is not an optional type- to write some value to an optional variable just simple assignment operator should be used
- to access the
Tvalue which is stored inindie.Optional[T]it is required to explicitly callvalue()orvalue_or()method - if
value()method is called on an optional variable which isNoneit raises runtime error - to test if an optional variable has some value stored inside
is Noneandis not Noneconstructs should be used - if variable was declared as
indie.Optional[T]thenTcannot be changed for that variable to some other typeU
T type for a in this example. Yes, it may guess that a is of indie.Optional type,
but it is unclear how to guess that T will be an int for it.
This will not work too:
a is explicitly declared as a non-optional type, None cannot be assigned to it.
That is why type of a must be declared explicitly as an optional type:
a is declared as optional of int value, it cannot at some point start to store str values.
By the way if you do not assign any value to an optional variable it will be None too:
a and b in this example are None.
To check if optional variable a is None or not we use:
a, the value() method should be explicitly called:
value() method call raises a runtime error. For example:
'foobar' is stored in optional variable s.
Built-in container types
Indie supports typedlist[T] and dict[K, V] containers. Container types can be nested, so a dictionary value may
contain another dictionary, a list, an Optional, or a tuple pair.
dict keys can be str, int, bool, or finite float values. 0.0 and -0.0 are the same key; NaN and
infinite float values are not supported as keys. keys() and values() return independent snapshot lists: later
changes to the dictionary do not change a snapshot, and items with the same index in both snapshots belong together.
tuple[A, B] is supported. Tuples with three or more items remain valid for temporary multi-return values and
unpacking, but cannot be stored in a serializable container or dataclass field. set, queue, and deque are not
supported containers.
Series data types
indie.Series[T]and an aliasindie.SeriesFforindie.Series[float]indie.MutSeries[T]and an aliasindie.MutSeriesFforindie.MutSeries[float]
Series[T] is a read-only container which stores series of T values. MutSeries[T] extends Series[T] with only
__setitem__ method, which allows writing to the last element of the container (which syntactically looks like
some_mut_series[0] = some_value).
Type T can be (almost) any type in Indie, not just float, but also int, bool, str, etc.
Context data types
There are three context classes:indie.Contextis a base class that represents a context of a chart instrumentindie.MainContextis a class that represents main context, extendsindie.Contextindie.SecContextis a class that represents secondary context, extendsindie.Context
Algorithm base class
There is aindie.Algorithm base class. All algorithms from indie.algorithms package are inherited from it.