anchor.diff:        var buckets = {...x.keys, ...y.keys};
         var one = <Bucket, num>{};
         for (var bucket in buckets) {
  -        one[bucket] =
  -            x.putIfAbsent(bucket, () => 0) + y.putIfAbsent(bucket, () => 0);
  +        if (x.containsKey(bucket) && y.containsKey(bucket)) {
  +          one[bucket] = x[bucket] + y[bucket];
  +        }
         }
         out.add(IntervalTuple(z.interval, one));
       }
  
positive.code:   }
  
    /// Subtract two curves element by element.
    /// Most commonly the [other] curve will have the same buckets as this
    /// curve for a given term.  If they don't, the missing bucket is replaced
    /// with zero in the subtraction.
    PriceCurve operator -(PriceCurve other) {
      var zs = align(other);
      var out = PriceCurve();
  
negative.code:       var buckets = {...x.keys, ...y.keys};
        var one = <Bucket, num>{};
        for (var bucket in buckets) {
          if (x.containsKey(bucket) && y.containsKey(bucket)) {
            one[bucket] = x[bucket] - y[bucket];
          }
        }
        out.add(IntervalTuple(z.interval, one));
      }
      return out;
    }
  
    /// Multiply two curves element by element.
    /// If the curves don't match buckets, nothing is done (strict).
    PriceCurve operator *(PriceCurve other) {
      var zs = align(other);
      var out = PriceCurve();
  