An iterable object containing symbolic expressions.
+ SETUP::
+
+ sage: from mjo.symbol_sequence import SymbolSequence
+
EXAMPLES:
The simplest use case::
degree::
sage: a = SymbolSequence('a')
- sage: p = sum([ a[i]*x^i for i in range(0,5)])
+ sage: p = sum( a[i]*x^i for i in xrange(5) )
sage: p
a_4*x^4 + a_3*x^3 + a_2*x^2 + a_1*x + a_0
a_0_1_2
sage: latex(a[0,1,2])
a_{0}_{1}_{2}
- sage: [ a[i,j] for i in range(0,2) for j in range(0,2) ]
+ sage: [ a[i,j] for i in xrange(2) for j in xrange(2) ]
[a_0_0, a_0_1, a_1_0, a_1_1]
You can pass slices instead of integers to obtain a list of
appropriate name and latex_name before delegating to
SR.symbol().
+ SETUP::
+
+ sage: from mjo.symbol_sequence import SymbolSequence
+
EXAMPLES::
sage: a = SymbolSequence('a', 'alpha', 'real')
more than can be said about some of the snappier solutions of
lore.
+ SETUP::
+
+ sage: from mjo.symbol_sequence import SymbolSequence
+
EXAMPLES::
sage: a = SymbolSequence('a')
result = []
for item in l:
- if isinstance(item, list):
+ try:
+ item = iter(item)
result += self._flatten_list_(item)
- else:
+ except TypeError:
result += [item]
return result
tuples. It just hands off the real work to
self._subscript_foo_().
+ SETUP::
+
+ sage: from mjo.symbol_sequence import SymbolSequence
+
EXAMPLES:
An integer argument::
The subscript is a single integer, or something that acts like
one.
+ SETUP::
+
+ sage: from mjo.symbol_sequence import SymbolSequence
+
EXAMPLES::
sage: a = SymbolSequence('a')
first. The start/step are default for lists. We make
copies of these because they're read-only.
+ SETUP::
+
+ sage: from mjo.symbol_sequence import SymbolSequence
+
EXAMPLES::
sage: a = SymbolSequence('a')
# If the user asks for a slice, we'll be returning a list
# of symbols.
return [ self._subscript_integer_(idx)
- for idx in range(start, s.stop, step) ]
+ for idx in xrange(start, s.stop, step) ]
When we have more than one level of subscripts, we pick off
the first one and generate the rest recursively.
+ SETUP::
+
+ sage: from mjo.symbol_sequence import SymbolSequence
+
EXAMPLES:
A simple two-tuple::
# corresponding to the second coordinate, with the first
# coordinate(s) fixed.
if isinstance(key, slice):
- ss = [ SymbolSequence(w._repr_(), w._latex_(), self._domain)
- for w in v ]
+ ss = ( SymbolSequence(w._repr_(), w._latex_(), self._domain)
+ for w in v )
# This might be nested...
- maybe_nested_list = [ s._subscript_tuple_(args) for s in ss ]
+ maybe_nested_list = ( s._subscript_tuple_(args) for s in ss )
return self._flatten_list_(maybe_nested_list)
else: