Spindle retail (seed 42) vs port (seed 42) — scale=medium  (baseline = max distance of Spindle seeds [43] to Spindle seed 42)
bit-identical columns: 43
table order identical: True

table.column                       kind        type         null s/p dist(port)  baseline     tol  vocab  verdict
-- customer: rows 50,000 / 50,000  cols identical+ordered=True  types identical=True
customer.customer_id               numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.0123         EQUIVALENT
customer.first_name                categorical ok    0.0000/0.0000 |dR-1|  0.0000    0.0002  0.0200 1.0000  EQUIVALENT
customer.last_name                 categorical ok    0.0000/0.0000 |dR-1|  0.0000    0.0000  0.0200 1.0000  EQUIVALENT
customer.email                     categorical ok    0.0497/0.0497 |dR-1|  0.0000    0.0012  0.0200 1.0000  EQUIVALENT
customer.gender                    categorical ok    0.0000/0.0000 TVD  0.0000    0.0012  0.0151 1.0000  EQUIVALENT
customer.loyalty_tier              categorical ok    0.0000/0.0000 TVD  0.0000    0.0061  0.0214 1.0000  EQUIVALENT
customer.signup_date               datetime    ok    0.0000/0.0000  KS  0.0000    0.0035  0.0123         EQUIVALENT
customer.is_active                 categorical ok    0.0000/0.0000 TVD  0.0000    0.0007  0.0151 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.5200    0.5000  1.9739 1.0000  EQUIVALENT
product_category.parent_category_id numeric     ok    0.1600/0.1600  KS  0.0000    0.0952  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.0000    0.2800  1.1848 1.0000  EQUIVALENT
promotion.promo_type               categorical ok    0.0000/0.0000 TVD  0.0000    0.0600  0.3785 1.0000  EQUIVALENT
promotion.discount_pct             numeric     ok    0.0000/0.0000  KS  0.0000    0.0800  0.1949         EQUIVALENT
promotion.start_date               datetime    ok    0.0000/0.0000  KS  0.0000    0.0600  0.1949         EQUIVALENT
promotion.end_date                 datetime    ok    0.0000/0.0000  KS  0.0000    0.0650  0.1949         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.0000    0.0667  0.3385 1.0000  EQUIVALENT
store.city                         categorical ok    0.0000/0.0000 TVD  0.0000    0.4667  1.7261 1.0000  EQUIVALENT
store.state                        categorical ok    0.0000/0.0000 TVD  0.0000    0.3267  1.3255 1.0000  EQUIVALENT
-- address: rows 75,000 / 75,000  cols identical+ordered=True  types identical=True
address.address_id                 numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.0101         EQUIVALENT
address.customer_id                numeric     ok    0.0000/0.0000  KS  0.0000    0.0047  0.0101         EQUIVALENT
address.address_type               categorical ok    0.0000/0.0000 TVD  0.0000    0.0043  0.0151 1.0000  EQUIVALENT
address.street                     categorical ok    0.0000/0.0000 |dR-1|  0.0000    0.0002  0.0200 1.0000  EQUIVALENT
address.city                       categorical ok    0.0000/0.0000 |dR-1|  0.0000    0.0025  0.0200 1.0000  EQUIVALENT
address.state                      categorical ok    0.0000/0.0000 TVD  0.0000    0.0121  0.0624 1.0000  EQUIVALENT
address.zip_code                   categorical ok    0.0000/0.0000 |dR-1|  0.0000    0.0033  0.0200 1.0000  EQUIVALENT
address.lat                        numeric     ok    0.0000/0.0000  KS  0.0000    0.0041  0.0101         EQUIVALENT
address.lng                        numeric     ok    0.0000/0.0000  KS  0.0000    0.0041  0.0101         EQUIVALENT
address.is_primary                 categorical ok    0.0000/0.0000 TVD  0.0000    0.0004  0.0124 1.0000  EQUIVALENT
-- product: rows 5,000 / 5,000  cols identical+ordered=True  types identical=True
product.product_id                 numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.0390         EQUIVALENT
product.category_id                numeric     ok    0.0000/0.0000  KS  0.0000    0.0174  0.0390         EQUIVALENT
product.product_name               categorical ok    0.0000/0.0000 TVD  0.0000    0.0838  0.3614 1.0000  EQUIVALENT
product.unit_price                 numeric     ok    0.0000/0.0000  KS  0.0000    0.0312  0.0488         EQUIVALENT
product.product_status             categorical ok    0.0000/0.0000 TVD  0.0000    0.0062  0.0586 1.0000  EQUIVALENT
product.cost                       numeric     ok    0.0000/0.0000  KS  0.0000    0.0286  0.0449         EQUIVALENT
-- order: rows 500,000 / 500,000  cols identical+ordered=True  types identical=True
order.order_id                     numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.0039         EQUIVALENT
order.customer_id                  numeric     ok    0.0000/0.0000  KS  0.0012    0.0023  0.0054         EQUIVALENT
order.store_id                     numeric     ok    0.0000/0.0000  KS  0.0017    0.0012  0.0039         EQUIVALENT
order.shipping_address_id          numeric     ok    0.2239/0.2244  KS  0.0018    0.0059  0.0109         EQUIVALENT
order.promotion_id                 numeric     ok    0.7002/0.7002  KS  0.0026    0.0040  0.0080         EQUIVALENT
order.order_date                   datetime    ok    0.0000/0.0000  KS  0.0013    0.0033  0.0069         EQUIVALENT
order.status                       categorical ok    0.0000/0.0000 TVD  0.0007    0.0023  0.0076 1.0000  EQUIVALENT
order.order_total                  numeric     ok    0.0000/0.0000  KS  0.0016    0.1530  0.2315         EQUIVALENT
-- order_line: rows 1,250,000 / 1,250,000  cols identical+ordered=True  types identical=True
order_line.order_line_id           numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.0025         EQUIVALENT
order_line.order_id                numeric     ok    0.0000/0.0000  KS  0.0008    0.0010  0.0035         EQUIVALENT
order_line.product_id              numeric     ok    0.0000/0.0000  KS  0.0008    0.0005  0.0027         EQUIVALENT
order_line.quantity                numeric     ok    0.0000/0.0000  KS  0.0000    0.0006  0.0029         EQUIVALENT
order_line.promotion_id            numeric     ok    0.6999/0.7001  KS  0.0028    0.0038  0.0077         EQUIVALENT
order_line.unit_price              numeric     ok    0.0000/0.0000  KS  0.0009    0.4169  0.6273         EQUIVALENT
order_line.discount_percent        numeric     ok    0.0000/0.0000  KS  0.0010    0.0235  0.0372         EQUIVALENT
order_line.line_total              numeric     ok    0.0000/0.0000  KS  0.0007    0.3789  0.5704         EQUIVALENT
-- return: rows 85,000 / 85,000  cols identical+ordered=True  types identical=True
return.return_id                   numeric     ok    0.0000/0.0000  KS  0.0000    0.0000  0.0095         EQUIVALENT
return.order_id                    numeric     ok    0.0000/0.0000  KS  0.0049    0.0059  0.0108         EQUIVALENT
return.reason                      categorical ok    0.0000/0.0000 TVD  0.0000    0.0041  0.0217 1.0000  EQUIVALENT
return.refund_amount               numeric     ok    0.0000/0.0000  KS  0.0019    0.1167  0.1770         EQUIVALENT
return.return_date                 datetime    ok    0.0000/0.0000  KS  0.0053    0.0039  0.0095         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/8/0.223 | 1/3/5/8/0.223 | 0.0000 (0.0016, 0.0123)
  product_category->product.category_id    100/114/126/127/0.000 | 100/114/126/127/0.000 | 0.0000 (0.1200, 0.3899)
  customer->order.customer_id              8/15/50/50/0.001 | 8/15/50/50/0.001 | 0.0039 (0.0030, 0.0123)
  store->order.store_id                    564/4352/50833/156506/0.000 | 576/4316/50868/156892/0.000 | 0.0333 (0.0333, 0.2251)
  address->order.shipping_address_id       4/10/33/50/0.063 | 4/10/34/50/0.064 | 0.0017 (0.0033, 0.0101)
  promotion->order.promotion_id            748/790/818/832/0.000 | 749/784/821/825/0.000 | 0.0600 (0.0550, 0.1949)
  order->order_line.order_id               2/5/7/13/0.083 | 2/5/7/14/0.081 | 0.0013 (0.0003, 0.0039)
  product->order_line.product_id           4/44/1331/483642/0.065 | 4/43/1339/483867/0.062 | 0.0098 (0.0056, 0.0390)
  promotion->order_line.promotion_id       1877/1998/2053/2114/0.000 | 1878/1989/2048/2105/0.000 | 0.0550 (0.0650, 0.1949)
  order->return.order_id                   0/1/2/4/0.844 | 0/1/2/5/0.844 | 0.0001 (0.0002, 0.0039)
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.0090 / 0.0090
Business rules / cross-table semantics (spindle / port):
  spindle_BusinessRulesEngine_violations        {} / {}
  order_total_eq_sum_lines                      1.0 / 1.0
  orders_without_lines_frac                     0.08272 / 0.081456
  order_total_zero_frac                         0.08272 / 0.081456
  return_date_gt_order_date                     1.0 / 1.0
  return_lag_days_quantiles                     [1.0, 1.0, 14.039280281621444, 39.0] / [1.0, 1.2960405483969908, 15.0, 38.0]
  return_lag_eq_1day_frac                       0.4999176470588235 / 0.49927058823529413
  order_date_ge_signup                          1.0 / 1.0
  order_date_eq_signup_plus_1d_frac             0.494318 / 0.493806
  refund_le_order_total                         1.0 / 1.0
  refund_zero_frac                              0.08305882352941177 / 0.08144705882352941
  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.0417, 0.0398, 0.0415, 0.0415, 0.0408, 0.0438, 0.0429, 0.0433, 0.0418, 0.0399, 0.0406, 0.0421, 0.0423, 0.0415, 0.0416, 0.0411, 0.0422, 0.0418, 0.042, 0.0414, 0.0403, 0.0423, 0.042, 0.0419] / [0.0421, 0.0398, 0.0413, 0.0418, 0.0409, 0.0435, 0.0433, 0.0424, 0.0417, 0.0405, 0.0404, 0.0423, 0.042, 0.042, 0.0415, 0.0411, 0.042, 0.0416, 0.0419, 0.0416, 0.0401, 0.0424, 0.0419, 0.0418]
  order_dow_dist                                [0.1488, 0.1472, 0.1453, 0.1467, 0.1451, 0.1296, 0.1373] / [0.148, 0.1463, 0.1469, 0.1467, 0.145, 0.13, 0.137]
  order_month_dist                              [0.0594, 0.0605, 0.0687, 0.071, 0.0783, 0.0825, 0.0862, 0.0892, 0.0886, 0.0935, 0.1055, 0.1167] / [0.0596, 0.0599, 0.0689, 0.0712, 0.078, 0.083, 0.0866, 0.0889, 0.0885, 0.0939, 0.1053, 0.1163]
Spindle FidelityComparator (real=Spindle seed 42, synthetic=port): overall port=98.71  Spindle-vs-Spindle baselines=[91.56]
  address            port 100.00   baselines [88.22]
  customer           port 100.00   baselines [85.13]
  order              port  99.88   baselines [97.1]
  order_line         port  99.85   baselines [93.78]
  product            port 100.00   baselines [94.53]
  product_category   port  88.84   baselines [87.56]
  promotion          port 100.00   baselines [93.38]
  return             port  99.80   baselines [98.67]
  store              port 100.00   baselines [85.64]

COLUMNS EQUIVALENT: 60/60
