anchor.diff:      S2 = [pseudo_series([3.0, 9.0, 6.0])], % avg 6.0
       S3 = [pseudo_series([3.0, 12.0, 9.0])], % avg 8.0
       Series = S1 ++ S2 ++ S3,
  -    Named = fun(S) -> lists:map(fun(X) -> with_function_name(X, "mostDeviant") end, S) end,
  -    [?_assertEqual(Named(Series), evaluate_call(<<"mostDeviant">>, [Series, 3], 0, 0, 0)),
  -     ?_assertEqual(Named(Series), evaluate_call(<<"mostDeviant">>, [Series, 90], 0, 0, 0)),
  -     ?_assertEqual(Named(S3 ++ S2), evaluate_call(<<"mostDeviant">>, [Series, 2], 0, 0, 0)),
  -     ?_assertEqual(Named(S3), evaluate_call(<<"mostDeviant">>, [Series, 1], 0, 0, 0))
  +    [?_assertEqual(named(Series, "mostDeviant"), evaluate_call(<<"mostDeviant">>, [Series, 3], 0, 0, 0)),
  +     ?_assertEqual(named(Series, "mostDeviant"), evaluate_call(<<"mostDeviant">>, [Series, 90], 0, 0, 0)),
  +     ?_assertEqual(named(S3 ++ S2, "mostDeviant"), evaluate_call(<<"mostDeviant">>, [Series, 2], 0, 0, 0)),
  +     ?_assertEqual(named(S3, "mostDeviant"), evaluate_call(<<"mostDeviant">>, [Series, 1], 0, 0, 0))
       ].
   
   integral_test_() ->
  
positive.code:     end.
  
  
  zip_series([], _Func) -> [];
  zip_series([Hd | _] = Series, Func) ->
      Values = lists:map(fun(#series{values=Vs}) -> Vs end, Series),
      % we use the first series as a template
      [Hd#series{values=zip_lists(Values, Func)}].
  
  
  safe_sum(Vs) ->
  
negative.code: % multiplySeries
  evaluate_call(<<"multiplySeries">>, Series, _From, _Until, _Now) ->
      {Norm, _Start, _End, _Step} = normalize(Series),
      zip_series(Norm, fun safe_multiply/1, "multiplySeries");
  
  % nPercentile
  evaluate_call(<<"nPercentile">>, [Series, N], _From, _Until, _Now) when is_number(N) ->
  