export(elemental_index, as_index, is_index, is_aggregate_index, is_chainable_index,
       price_relative,
       aggregation_structure, expand_classification, as_aggregation_structure, is_aggregation_structure,
       carry_forward, shadow_price,
       contrib, chain, unchain, rebase, "weights<-")

S3method("[", index)
S3method("[[", index)
S3method("[", aggregate_index)
S3method("[<-", index)
S3method("[[<-", index)
S3method(head, index)
S3method(tail, index)

S3method(levels, index)
S3method("levels<-", index)
S3method(time, index)
S3method(start, index)
S3method(end, index)

S3method(as.data.frame, index)
S3method(as.matrix, index)
S3method(as.double, index)

S3method(merge, aggregate_index)
S3method(merge, chainable_index)
S3method(merge, direct_index)
S3method(merge, index)

S3method(stack, aggregate_index)
S3method(stack, chainable_index)
S3method(stack, direct_index)
S3method(stack, index)
S3method(unstack, index)

S3method(print, index)
S3method(summary, index)
S3method(print, index_summary)
S3method(str, index)

S3method(aggregate, index)
S3method(mean, index)

S3method(vcov, aggregate_index)

S3method(elemental_index, default)
S3method(elemental_index, numeric)

S3method(as_index, default)
S3method(as_index, matrix)
S3method(as_index, data.frame)
S3method(as_index, chainable_index)
S3method(as_index, direct_index)

S3method(contrib, index)

S3method(chain, default)
S3method(chain, chainable_index)
S3method(chain, direct_index)
S3method(unchain, default)
S3method(unchain, chainable_index)
S3method(unchain, direct_index)
S3method(rebase, default)
S3method(rebase, chainable_index)
S3method(rebase, direct_index)

S3method(as_aggregation_structure, default)
S3method(as_aggregation_structure, data.frame)
S3method(as_aggregation_structure, matrix)
S3method(as_aggregation_structure, aggregate_index)
S3method(as_aggregation_structure, aggregation_structure)

S3method(print, aggregation_structure)
S3method(str, aggregation_structure)

S3method(weights, aggregation_structure)
S3method("weights<-", aggregation_structure)
S3method(levels, aggregation_structure)
S3method("levels<-", aggregation_structure)

S3method(update, aggregation_structure)

S3method(as.matrix, aggregation_structure)
S3method(as.data.frame, aggregation_structure)
S3method(as.list, aggregation_structure)

importFrom(stats, aggregate, weights, update, time, start, end)

importFrom(utils, stack, unstack, head, tail, str)

importFrom(gpindex, generalized_mean, factor_weights, contributions, 
           transmute_weights, scale_weights, back_period)