eachindex()



add sort order
substitutions

add symmetric and antisymmetric components
add levi civita tensor
add derivatives



substtitions: can look for exact name matches from a String
- will have to write code to parse a string and interpret what to do eg "A? B? : B? A?" should find pairs any A any B and do whatever
it will probs run in O(n^m) where n is length of expression, m is length of pattern 
- syntax:
    - A finds name mathcing, no indice
    - A? finds any name. no indices
    - A?^{i*}_{*j} finds any object with this index pattern exact names of all_indices
    - A?^{?i*}_{*?j} finds any object with this index pattern any names of all_indices from same index set
    - A^{?i*}_{*?j} finds this object with this index pattern any names of all_indices from same index set
    - A??^{?i*}_{*?j} finds this object with this index pattern any names of all_indices from any index set
    - A???^{?i*}_{*?j} finds any object with this index pattern any names of all_indices from any index set
    - A?{?} finds any name with any indices
    -A{?} exact name with any indices
    - A?? finds any object with any index pattern, with or without indices
    - O[[A]] find op O acting on A
    - O??[[A]] finds any op acting on A
    - etc......

    -eg suppose D^i_\alpha [[something]]
    -can apply deriv by doing "D^{?i*}_{*?\alpha}[[A??]]: blah"
    -eg  "D^{?i*}_{*?\alpha}[[\theta^{?j*}_{*?\beta}]]: \delta^{?j*}_{*?i} \delta^{?\alpha *}_{*?\beta}"
