Spindle retail (seed 42) vs port (seed 1042) — scale=small  (baseline = max distance of Spindle seeds [43, 44, 45, 46] to Spindle seed 42)
bit-identical columns: 11
table order identical: True

table.column                       kind        type         null s/p dist(port)  baseline     tol  vocab  verdict
-- customer: rows 1,000 / 1,000  cols identical+ordered=True  types identical=True
customer.customer_id               numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.0872         EQUIVALENT
customer.first_name                categorical ok    0.0000/0.0000 TVD  0.8250    0.8550  2.2721 1.0000  EQUIVALENT
customer.last_name                 categorical ok    0.0000/0.0000 TVD  0.8220    0.8390  2.2934 1.0000  EQUIVALENT
customer.email                     categorical ok    0.0450/0.0410 |dR-1|  0.0042    0.0126  0.0200 1.0000  EQUIVALENT
customer.gender                    categorical ok    0.0000/0.0000 TVD  0.0200    0.0310  0.1070 1.0000  EQUIVALENT
customer.loyalty_tier              categorical ok    0.0000/0.0000 TVD  0.0360    0.0260  0.1514 1.0000  EQUIVALENT
customer.signup_date               datetime    ok    0.0000/0.0000  KS  0.0390    0.0440  0.0872         EQUIVALENT
customer.is_active                 categorical ok    0.0000/0.0000 TVD  0.0140    0.0260  0.1070 1.0000  EQUIVALENT
-- product_category: rows 50 / 50  cols identical+ordered=True  types identical=True
product_category.category_id       numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.3899         EQUIVALENT
product_category.category_name     categorical ok    0.0000/0.0000 TVD  0.4400    0.5600  1.9739 1.0000  EQUIVALENT
product_category.parent_category_id numeric     ok    0.1600/0.1600  KS  0.1905    0.1905  0.4254         EQUIVALENT
product_category.level             numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.3899         EQUIVALENT
-- promotion: rows 200 / 200  cols identical+ordered=True  types identical=True
promotion.promotion_id             numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.1949         EQUIVALENT
promotion.promo_name               categorical ok    0.0000/0.0000 TVD  0.2550    0.2800  1.1848 1.0000  EQUIVALENT
promotion.promo_type               categorical ok    0.0000/0.0000 TVD  0.0750    0.1100  0.3785 1.0000  EQUIVALENT
promotion.discount_pct             numeric     ok    0.0000/0.0000  KS  0.0950    0.0850  0.1949         EQUIVALENT
promotion.start_date               datetime    ok    0.0000/0.0000  KS  0.0700    0.1300  0.1970         EQUIVALENT
promotion.end_date                 datetime    ok    0.0000/0.0000  KS  0.0700    0.1300  0.1970         EQUIVALENT
-- store: rows 150 / 150  cols identical+ordered=True  types identical=True
store.store_id                     numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.2251         EQUIVALENT
store.store_name                   categorical ok    0.0000/0.0000 |dR-1|  0.0000    0.0000  0.0200 1.0000  EQUIVALENT
store.store_type                   categorical ok    0.0000/0.0000 TVD  0.0133    0.0667  0.3385 1.0000  EQUIVALENT
store.city                         categorical ok    0.0000/0.0000 TVD  0.3933    0.4733  1.7261 1.0000  EQUIVALENT
store.state                        categorical ok    0.0000/0.0000 TVD  0.2867    0.3467  1.3255 1.0000  EQUIVALENT
-- address: rows 1,500 / 1,500  cols identical+ordered=True  types identical=True
address.address_id                 numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.0712         EQUIVALENT
address.customer_id                numeric     ok    0.0000/0.0000  KS  0.0233    0.0413  0.0712         EQUIVALENT
address.address_type               categorical ok    0.0000/0.0000 TVD  0.0453    0.0507  0.1070 1.0000  EQUIVALENT
address.street                     categorical ok    0.0000/0.0000 |dR-1|  0.0000    0.0000  0.0200 1.0000  EQUIVALENT
address.city                       categorical ok    0.0000/0.0000 |dR-1|  0.0049    0.0218  0.0328 1.0000  EQUIVALENT
address.state                      categorical ok    0.0000/0.0000 TVD  0.0907    0.1027  0.4414 1.0000  EQUIVALENT
address.zip_code                   categorical ok    0.0000/0.0000 |dR-1|  0.0034    0.0068  0.0200 1.0000  EQUIVALENT
address.lat                        numeric     ok    0.0000/0.0000  KS  0.0320    0.0327  0.0712         EQUIVALENT
address.lng                        numeric     ok    0.0000/0.0000  KS  0.0287    0.0313  0.0712         EQUIVALENT
address.is_primary                 categorical ok    0.0000/0.0000 TVD  0.0080    0.0093  0.0874 1.0000  EQUIVALENT
-- product: rows 500 / 500  cols identical+ordered=True  types identical=True
product.product_id                 numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.1233         EQUIVALENT
product.category_id                numeric     ok    0.0000/0.0000  KS  0.0400    0.0380  0.1233         EQUIVALENT
product.product_name               categorical ok    0.0000/0.0000 TVD  0.2400    0.2900  1.1278 1.0000  EQUIVALENT
product.unit_price                 numeric     ok    0.0000/0.0000  KS  0.0420    0.0620  0.1233         EQUIVALENT
product.product_status             categorical ok    0.0000/0.0000 TVD  0.0360    0.0700  0.1854 1.0000  EQUIVALENT
product.cost                       numeric     ok    0.0000/0.0000  KS  0.0560    0.0560  0.1233         EQUIVALENT
-- order: rows 5,000 / 5,000  cols identical+ordered=True  types identical=True
order.order_id                     numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.0390         EQUIVALENT
order.customer_id                  numeric     ok    0.0000/0.0000  KS  0.0256    0.0546  0.0839         EQUIVALENT
order.store_id                     numeric     ok    0.0000/0.0000  KS  0.0180    0.0250  0.0395         EQUIVALENT
order.shipping_address_id          numeric     ok    0.2504/0.2326  KS  0.1055    0.0883  0.1345         EQUIVALENT
order.promotion_id                 numeric     ok    0.7022/0.7014  KS  0.0192    0.0296  0.0714         EQUIVALENT
order.order_date                   datetime    ok    0.0000/0.0000  KS  0.0468    0.0478  0.0737         EQUIVALENT
order.status                       categorical ok    0.0000/0.0000 TVD  0.0104    0.0146  0.0757 1.0000  EQUIVALENT
order.order_total                  numeric     ok    0.0000/0.0000  KS  0.1958    0.3080  0.4640         EQUIVALENT
-- order_line: rows 12,500 / 12,500  cols identical+ordered=True  types identical=True
order_line.order_line_id           numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.0247         EQUIVALENT
order_line.order_id                numeric     ok    0.0000/0.0000  KS  0.0072    0.0168  0.0272         EQUIVALENT
order_line.product_id              numeric     ok    0.0000/0.0000  KS  0.0046    0.0084  0.0247         EQUIVALENT
order_line.quantity                numeric     ok    0.0000/0.0000  KS  0.0045    0.0141  0.0247         EQUIVALENT
order_line.promotion_id            numeric     ok    0.7014/0.7020  KS  0.0235    0.0389  0.0603         EQUIVALENT
order_line.unit_price              numeric     ok    0.0000/0.0000  KS  0.5390    0.6520  0.9800         EQUIVALENT
order_line.discount_percent        numeric     ok    0.0000/0.0000  KS  0.0306    0.0259  0.0409         EQUIVALENT
order_line.line_total              numeric     ok    0.0000/0.0000  KS  0.3975    0.5086  0.7648         EQUIVALENT
-- return: rows 850 / 850  cols identical+ordered=True  types identical=True
return.return_id                   numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.0946         EQUIVALENT
return.order_id                    numeric     ok    0.0000/0.0000  KS  0.0318    0.0624  0.0955         EQUIVALENT
return.reason                      categorical ok    0.0000/0.0000 TVD  0.0294    0.0741  0.2172 1.0000  EQUIVALENT
return.refund_amount               numeric     ok    0.0000/0.0000  KS  0.1318    0.2059  0.3108         EQUIVALENT
return.return_date                 datetime    ok    0.0000/0.0000  KS  0.0482    0.0529  0.0946         EQUIVALENT

FK integrity (spindle / port):
  address.customer_id->customer.customer_id               1.0000 / 1.0000
  product.category_id->product_category.category_id       1.0000 / 1.0000
  product_category.parent_category_id->product_category.category_id 1.0000 / 1.0000
  order.customer_id->customer.customer_id                 1.0000 / 1.0000
  order.store_id->store.store_id                          1.0000 / 1.0000
  order.shipping_address_id->address.address_id           1.0000 / 1.0000
  order.promotion_id->promotion.promotion_id              1.0000 / 1.0000
  order_line.order_id->order.order_id                     1.0000 / 1.0000
  order_line.product_id->product.product_id               1.0000 / 1.0000
  order_line.promotion_id->promotion.promotion_id         1.0000 / 1.0000
  return.order_id->order.order_id                         1.0000 / 1.0000
FK fan-out (children per parent)  spindle p50/p90/p99/max/zero% | port | KS (baseline max, tol)
  customer->address.customer_id            1/3/5/7/0.228 | 1/3/5/7/0.240 | 0.0140 (0.0270, 0.0872)
  product_category->product.category_id    10/13/17/17/0.000 | 10/14/15/15/0.000 | 0.1000 (0.1600, 0.3899)
  customer->order.customer_id              3/7/50/50/0.061 | 3/7/50/50/0.059 | 0.0320 (0.0570, 0.0875)
  store->order.store_id                    6/42/534/1561/0.000 | 6/50/510/1574/0.013 | 0.0467 (0.0800, 0.2251)
  address->order.shipping_address_id       1/5/25/50/0.266 | 1/5/28/50/0.272 | 0.0107 (0.0273, 0.0712)
  promotion->order.promotion_id            7/11/13/15/0.000 | 7/12/14/19/0.000 | 0.0500 (0.0750, 0.1949)
  order->order_line.order_id               2/5/7/9/0.088 | 2/5/7/9/0.083 | 0.0106 (0.0116, 0.0390)
  product->order_line.product_id           1/14/342/4968/0.276 | 1/14/331/4966/0.270 | 0.0200 (0.0240, 0.1233)
  promotion->order_line.promotion_id       18/29/40/48/0.000 | 18/29/39/46/0.000 | 0.0450 (0.0750, 0.1949)
  order->return.order_id                   0/1/2/4/0.844 | 0/1/2/3/0.846 | 0.0024 (0.0024, 0.0390)
Address coherence (spindle / port):
  city_state_zip_in_reference                   1.0000 / 1.0000
  lat_lng_match_zip_record                      1.0000 / 1.0000
  state_tvd_vs_uniform_over_zip_records         0.0577 / 0.0565
Business rules / cross-table semantics (spindle / port):
  spindle_BusinessRulesEngine_violations        {} / {}
  order_total_eq_sum_lines                      1.0 / 1.0
  orders_without_lines_frac                     0.0882 / 0.0828
  order_total_zero_frac                         0.0882 / 0.0828
  return_date_gt_order_date                     1.0 / 1.0
  return_lag_days_quantiles                     [1.0, 1.0, 13.0, 34.52999999999997] / [1.0, 1.0, 13.0, 37.50999999999999]
  return_lag_eq_1day_frac                       0.528235294117647 / 0.5564705882352942
  order_date_ge_signup                          1.0 / 1.0
  order_date_eq_signup_plus_1d_frac             0.5126 / 0.5206
  refund_le_order_total                         1.0 / 1.0
  refund_zero_frac                              0.07764705882352942 / 0.07882352941176471
  cost_lt_unit_price                            1.0 / 1.0
  line_total_positive                           1.0 / 1.0
  line_unit_price_eq_product                    1.0 / 1.0
  line_promotion_eq_order_promotion             1.0 / 1.0
  discount_eq_promotion_pct_or_0                1.0 / 1.0
  line_total_formula                            1.0 / 1.0
  promo_duration_days_in_3_30                   1.0 / 1.0
  promo_duration_integral_days                  1.0 / 1.0
  is_primary_eq_first_per_customer              1.0 / 1.0
  shipping_address_belongs_to_customer          1.0 / 1.0
  shipping_null_iff_customer_has_no_address     1.0 / 1.0
  category_parent_level_consistent              1.0 / 1.0
  category_level_counts                         {"1": 8, "2": 21, "3": 21} / {"1": 8, "2": 21, "3": 21}
  email_built_from_row_first_last               1.0 / 1.0
  max_orders_per_customer                       50 / 50
  order_hour_dist                               [0.032, 0.033, 0.0386, 0.0282, 0.0354, 0.0424, 0.0398, 0.0588, 0.036, 0.0456, 0.046, 0.0416, 0.0664, 0.047, 0.0368, 0.0352, 0.0364, 0.0346, 0.0754, 0.0316, 0.0336, 0.0494, 0.0424, 0.0338] / [0.039, 0.0446, 0.0452, 0.0332, 0.0432, 0.0468, 0.0442, 0.0328, 0.0432, 0.0374, 0.0568, 0.0364, 0.0374, 0.0384, 0.0434, 0.042, 0.0546, 0.0422, 0.0438, 0.0308, 0.0428, 0.0396, 0.0398, 0.0424]
  order_dow_dist                                [0.139, 0.1488, 0.137, 0.1734, 0.1412, 0.1282, 0.1324] / [0.158, 0.161, 0.1464, 0.1332, 0.1498, 0.1178, 0.1338]
  order_month_dist                              [0.077, 0.057, 0.0852, 0.0752, 0.059, 0.075, 0.1008, 0.0786, 0.1008, 0.0974, 0.0914, 0.1026] / [0.0442, 0.075, 0.0558, 0.0702, 0.0842, 0.08, 0.0868, 0.0888, 0.1004, 0.0984, 0.095, 0.1212]
Spindle FidelityComparator (real=Spindle seed 42, synthetic=port): overall port=89.93  Spindle-vs-Spindle baselines=[90.83, 89.51, 90.11, 90.83]
  address            port  85.47   baselines [85.16, 85.98, 88.0, 85.57]
  customer           port  78.88   baselines [78.84, 78.91, 79.16, 79.05]
  order              port  96.98   baselines [98.58, 95.29, 96.1, 98.54]
  order_line         port  93.18   baselines [96.91, 92.57, 94.59, 97.09]
  product            port  94.06   baselines [93.95, 92.66, 93.77, 93.87]
  product_category   port  85.60   baselines [87.56, 87.73, 84.75, 87.54]
  promotion          port  92.50   baselines [93.38, 91.82, 91.03, 92.01]
  return             port  97.14   baselines [97.46, 94.55, 98.11, 98.42]
  store              port  85.61   baselines [85.64, 86.02, 85.52, 85.38]

COLUMNS EQUIVALENT: 60/60
