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));
       }
       return out;
     }
   
  -  /// Multiply two curves element by element.  ONLY multiply buckets that exist
  -  /// in both curves.  This is different behavior than addition/subtraction.
  +  /// 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();
  
positive.code:       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);
        }
        out.add(IntervalTuple(z.interval, one));
      }
  
negative.code:   }
  
    /// Add two curves observation by observation and bucket by bucket.
    /// If the curves don't match buckets, nothing is done (strict).
    ///
    @override
    PriceCurve operator +(PriceCurve other) {
      var zs = align(other);
  