Spindle retail (seed 42) vs port (seed 1042) — scale=medium  (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 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.0002    0.0004  0.0200 1.0000  EQUIVALENT
customer.email                     categorical ok    0.0497/0.0503 |dR-1|  0.0007    0.0021  0.0200 1.0000  EQUIVALENT
customer.gender                    categorical ok    0.0000/0.0000 TVD  0.0017    0.0033  0.0151 1.0000  EQUIVALENT
customer.loyalty_tier              categorical ok    0.0000/0.0000 TVD  0.0048    0.0061  0.0214 1.0000  EQUIVALENT
customer.signup_date               datetime    ok    0.0000/0.0000  KS  0.0055    0.0108  0.0181         EQUIVALENT
customer.is_active                 categorical ok    0.0000/0.0000 TVD  0.0000    0.0036  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.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 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.0042    0.0047  0.0101         EQUIVALENT
address.address_type               categorical ok    0.0000/0.0000 TVD  0.0029    0.0043  0.0151 1.0000  EQUIVALENT
address.street                     categorical ok    0.0000/0.0000 |dR-1|  0.0003    0.0002  0.0200 1.0000  EQUIVALENT
address.city                       categorical ok    0.0000/0.0000 |dR-1|  0.0011    0.0026  0.0200 1.0000  EQUIVALENT
address.state                      categorical ok    0.0000/0.0000 TVD  0.0119    0.0143  0.0624 1.0000  EQUIVALENT
address.zip_code                   categorical ok    0.0000/0.0000 |dR-1|  0.0011    0.0036  0.0200 1.0000  EQUIVALENT
address.lat                        numeric     ok    0.0000/0.0000  KS  0.0032    0.0041  0.0101         EQUIVALENT
address.lng                        numeric     ok    0.0000/0.0000  KS  0.0040    0.0041  0.0101         EQUIVALENT
address.is_primary                 categorical ok    0.0000/0.0000 TVD  0.0003    0.0014  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.0218    0.0206  0.0390         EQUIVALENT
product.product_name               categorical ok    0.0000/0.0000 TVD  0.0810    0.0926  0.3614 1.0000  EQUIVALENT
product.unit_price                 numeric     ok    0.0000/0.0000  KS  0.0142    0.0312  0.0488         EQUIVALENT
product.product_status             categorical ok    0.0000/0.0000 TVD  0.0014    0.0114  0.0586 1.0000  EQUIVALENT
product.cost                       numeric     ok    0.0000/0.0000  KS  0.0134    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.0048    0.0039  0.0079         EQUIVALENT
order.store_id                     numeric     ok    0.0000/0.0000  KS  0.0016    0.0015  0.0043         EQUIVALENT
order.shipping_address_id          numeric     ok    0.2239/0.2234  KS  0.0042    0.0065  0.0117         EQUIVALENT
order.promotion_id                 numeric     ok    0.7002/0.7001  KS  0.0032    0.0040  0.0080         EQUIVALENT
order.order_date                   datetime    ok    0.0000/0.0000  KS  0.0043    0.0062  0.0112         EQUIVALENT
order.status                       categorical ok    0.0000/0.0000 TVD  0.0017    0.0026  0.0076 1.0000  EQUIVALENT
order.order_total                  numeric     ok    0.0000/0.0000  KS  0.1538    0.4060  0.6109         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.0010    0.0010  0.0035         EQUIVALENT
order_line.product_id              numeric     ok    0.0000/0.0000  KS  0.0008    0.0009  0.0034         EQUIVALENT
order_line.quantity                numeric     ok    0.0000/0.0000  KS  0.0008    0.0007  0.0031         EQUIVALENT
order_line.promotion_id            numeric     ok    0.6999/0.7006  KS  0.0029    0.0041  0.0081         EQUIVALENT
order_line.unit_price              numeric     ok    0.0000/0.0000  KS  0.6113    0.5283  0.7944         EQUIVALENT
order_line.discount_percent        numeric     ok    0.0000/0.0000  KS  0.0287    0.0263  0.0414         EQUIVALENT
order_line.line_total              numeric     ok    0.0000/0.0000  KS  0.3487    0.4434  0.6671         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.0071    0.0059  0.0108         EQUIVALENT
return.reason                      categorical ok    0.0000/0.0000 TVD  0.0054    0.0080  0.0217 1.0000  EQUIVALENT
return.refund_amount               numeric     ok    0.0000/0.0000  KS  0.0571    0.1167  0.1770         EQUIVALENT
return.return_date                 datetime    ok    0.0000/0.0000  KS  0.0051    0.0108  0.0181         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/10/0.222 | 0.0006 (0.0021, 0.0123)
  product_category->product.category_id    100/114/126/127/0.000 | 100/114/119/119/0.000 | 0.0600 (0.1200, 0.3899)
  customer->order.customer_id              8/15/50/50/0.001 | 7/15/50/50/0.001 | 0.0073 (0.0057, 0.0123)
  store->order.store_id                    564/4352/50833/156506/0.000 | 584/4396/50909/156185/0.000 | 0.0333 (0.0400, 0.2251)
  address->order.shipping_address_id       4/10/33/50/0.063 | 3/10/38/50/0.063 | 0.0052 (0.0036, 0.0101)
  promotion->order.promotion_id            748/790/818/832/0.000 | 748/782/805/831/0.000 | 0.0700 (0.0800, 0.1949)
  order->order_line.order_id               2/5/7/13/0.083 | 2/5/7/12/0.082 | 0.0007 (0.0008, 0.0039)
  product->order_line.product_id           4/44/1331/483642/0.065 | 4/42/1322/483690/0.073 | 0.0102 (0.0116, 0.0390)
  promotion->order_line.promotion_id       1877/1998/2053/2114/0.000 | 1869/1972/2062/2085/0.000 | 0.0800 (0.0700, 0.1949)
  order->return.order_id                   0/1/2/4/0.844 | 0/1/2/4/0.843 | 0.0002 (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.0092
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.08198
  order_total_zero_frac                         0.08272 / 0.08198
  return_date_gt_order_date                     1.0 / 1.0
  return_lag_days_quantiles                     [1.0, 1.0, 14.039280281621444, 39.0] / [1.0, 2.0, 15.0, 39.0]
  return_lag_eq_1day_frac                       0.4999176470588235 / 0.4964352941176471
  order_date_ge_signup                          1.0 / 1.0
  order_date_eq_signup_plus_1d_frac             0.494318 / 0.493458
  refund_le_order_total                         1.0 / 1.0
  refund_zero_frac                              0.08305882352941177 / 0.08036470588235294
  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.0444, 0.0417, 0.0424, 0.0414, 0.0423, 0.0427, 0.0404, 0.0402, 0.0416, 0.0418, 0.042, 0.0416, 0.0407, 0.0394, 0.0411, 0.0427, 0.0428, 0.0415, 0.0426, 0.0421, 0.0421, 0.0413, 0.0404, 0.0408]
  order_dow_dist                                [0.1488, 0.1472, 0.1453, 0.1467, 0.1451, 0.1296, 0.1373] / [0.1461, 0.1481, 0.1473, 0.1506, 0.144, 0.1291, 0.1349]
  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.0588, 0.0606, 0.0682, 0.0727, 0.0774, 0.0792, 0.0869, 0.0913, 0.0886, 0.0967, 0.1026, 0.117]
Spindle FidelityComparator (real=Spindle seed 42, synthetic=port): overall port=91.57  Spindle-vs-Spindle baselines=[91.56, 91.89, 89.08, 92.43]
  address            port  88.47   baselines [88.22, 88.07, 87.87, 90.75]
  customer           port  85.35   baselines [85.13, 85.63, 85.51, 85.68]
  order              port  98.47   baselines [97.1, 98.84, 91.23, 99.17]
  order_line         port  95.11   baselines [93.78, 95.6, 86.63, 97.6]
  product            port  94.60   baselines [94.53, 94.84, 94.58, 94.69]
  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  98.39   baselines [98.67, 98.48, 94.6, 99.08]
  store              port  85.61   baselines [85.64, 86.02, 85.52, 85.38]

COLUMNS EQUIVALENT: 60/60
