From c16729604a3f56aa0b6e80db13db8652bef63dcd Mon Sep 17 00:00:00 2001 From: lillith <35337584+0xlillith@users.noreply.github.com> Date: Tue, 13 Oct 2026 12:17:03 +0200 Subject: [PATCH 01/54] claim: surface.surface_p9 Co-Authored-By: OpenAI Codex From 2b6bcd6ac338fbf699111c4be7273ecc2eaaa07e Mon Sep 17 00:00:00 2001 From: lillith <35337584+0xlillith@users.noreply.github.com> Date: Tue, 13 Oct 2026 12:42:52 +0200 Subject: [PATCH 02/54] port: surface tessellation splits, iso boundaries and CSI leaf driver Co-Authored-By: OpenAI Codex --- .../difftest/src/units/surface_surface_p9.rs | 318 +++ .../src/units/surface_surface_p9.rs | 110 + crates/solidcore/src/surface/surface.rs | 1 + crates/solidcore/src/surface/surface/p9.rs | 1024 +++++++++ fixtures/surface.surface_p9/cases.json | 2038 +++++++++++++++++ harness/cpp/shim/surface_surface_p9.cpp | 99 + 6 files changed, 3590 insertions(+) create mode 100644 crates/difftest/src/units/surface_surface_p9.rs create mode 100644 crates/solidcore-ffi/src/units/surface_surface_p9.rs create mode 100644 crates/solidcore/src/surface/surface/p9.rs create mode 100644 fixtures/surface.surface_p9/cases.json create mode 100644 harness/cpp/shim/surface_surface_p9.cpp diff --git a/crates/difftest/src/units/surface_surface_p9.rs b/crates/difftest/src/units/surface_surface_p9.rs new file mode 100644 index 0000000000..f032f966ee --- /dev/null +++ b/crates/difftest/src/units/surface_surface_p9.rs @@ -0,0 +1,318 @@ +//! Differential runner for surface.surface_p9. Reference: SmSurface.cpp:11644, +//! 13887, 14877. A quadratic Bezier patch is used on both sides. CSI fixtures use +//! one planar patch and one line span, so both subdivision trees have one leaf. +use crate::{Case, CaseContext, HarnessError, Output, Rng, UnitDiff}; +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use solidcore::curve::curve::Curve; +use solidcore::curve::curve_cache::{CurveCache, CurveCacheOptions}; +use solidcore::geom::extent1d::Extent1d; +use solidcore::geom::extent2d::Extent2d; +use solidcore::geom::extent3d::Extent3d; +use solidcore::geom::global_solver::{GlobalSolver, SolverOperation}; +use solidcore::geom::pseudo_box::PseudoBox; +use solidcore::geom::tree::{ + AuxDataType, NodeClass, NodeData, NodeId, SplitDir, SurfaceAux, Tree, TreeNode, TreeOwner, +}; +use solidcore::geom::vector3d::Vec3; +use solidcore::kernel::Kernel; +use solidcore::nurbs::b_spline_curve::BSplineCurve; +use solidcore::nurbs::b_spline_surface::{BSplineSurface, SurfParamType}; +use solidcore::nurbs::crv_basic::Curve as NlCurve; +use solidcore::nurbs::math::{CPoint, NOW}; +use solidcore::nurbs::srf_basic::Surface as NlSurface; +use solidcore::surface::surface::p9::CsiGlobalSolver; +use solidcore::surface::surface::Surface; +use solidcore::surface::surface_cache::{ + BezierAux2d, BezierPatch, SurfaceCache, SurfaceCacheOptions, +}; +use solidcore_ffi::units::surface_surface_p9 as ffi; + +pub struct Runner; +#[derive(Debug, Clone, Serialize, Deserialize)] +struct Inputs { + op: i32, + net: [[f64; 3]; 9], + #[serde(default = "domain")] + domain: [f64; 4], + direction: i32, + controls: [f64; 3], + #[serde(default)] + diagonals: bool, + #[serde(default = "line")] + line: [[f64; 3]; 2], +} +fn domain() -> [f64; 4] { + [0.0, 0.0, 1.0, 1.0] +} +fn line() -> [[f64; 3]; 2] { + [[0.5, 0.5, -5.0], [0.5, 0.5, 5.0]] +} +fn harness(e: impl std::fmt::Display) -> HarnessError { + HarnessError::new(e.to_string()) +} +fn surface(i: &Inputs) -> Result { + let net = i + .net + .chunks(3) + .map(|row| { + row.iter() + .map(|p| CPoint::new(p[0], p[1], p[2], NOW)) + .collect() + }) + .collect(); + let knots = vec![0.0, 0.0, 0.0, 1.0, 1.0, 1.0]; + let nurb = NlSurface::new(net, 2, 2, knots.clone(), knots).map_err(harness)?; + Ok(Surface::from(BSplineSurface::from_nurb(nurb, false))) +} +fn output(flat: Vec) -> Output { + let (status, rest) = flat.split_first().unwrap_or((&-1.0, &[])); + Output::new() + .scalar("status", *status) + .values("out", rest.to_vec()) +} +fn run_rust(i: &Inputs) -> Result { + let k = Kernel::default(); + let surface = surface(i)?; + let direction = + SurfParamType::from_code(i.direction as u64).ok_or_else(|| harness("direction"))?; + let domain = Extent2d::from_bounds(i.domain[0], i.domain[1], i.domain[2], i.domain[3]); + let result = match i.op { + 0 => surface + .find_tessellation_splits( + &k, + direction, + &domain, + i.controls[0], + i.controls[1], + i.controls[2], + i.diagonals, + ) + .map(|v| { + let mut out = vec![0.0]; + out.extend(v); + out + }), + 1 => surface + .create_iso_boundaries(&k, direction, i.controls[0]) + .and_then(|curves| { + let mut out = vec![0.0, if curves.is_some() { 2.0 } else { 0.0 }]; + if let Some((a, b)) = curves { + for curve in [a, b] { + for n in 0..=4 { + let p = curve.evaluate_point( + curve.natural_interval().evaluate(f64::from(n) / 4.0), + )?; + out.extend([p.x, p.y, p.z]); + } + } + } + Ok(out) + }), + 2 => { + let points = i + .line + .iter() + .map(|p| CPoint::new(p[0], p[1], p[2], NOW)) + .collect(); + let curve = Curve::from(BSplineCurve::from_nurb( + NlCurve::new(points, 1, vec![0.0, 0.0, 1.0, 1.0]).map_err(harness)?, + 3, + false, + )); + let interval = Extent1d::from_min_max(0.0, 1.0); + let mut cc = CurveCache::::new( + curve.clone(), + interval, + CurveCacheOptions { + make_full_tree: true, + ..CurveCacheOptions::default() + }, + ); + cc.set_curve_handle(Some(0)); + match cc.tessellate(&k) { + Err(e) => Err(e), + Ok(()) => { + let mut cache = SurfaceCache::::new( + surface, + Extent2d::from_bounds(0.0, 0.0, 1.0, 1.0), + SurfaceCacheOptions::default(), + ); + cache.set_surface_handle(Some(1)); + let uv = cache.uv_domain(); + let mut bbox = Extent3d::new(); + for p in i.net { + bbox = bbox.union(&Extent3d::from_points( + Vec3::new(p[0], p[1], p[2]), + Vec3::new(p[0], p[1], p[2]), + )); + } + cache.patches_mut().push(BezierPatch { + aux: BezierAux2d { + uv_domain: uv, + owning_tree_node: Some(NodeId(0)), + ..BezierAux2d::default() + }, + pseudo_box: PseudoBox::from_extent3d(&bbox), + ..BezierPatch::default() + }); + let mut tree = Tree::new(Some(TreeOwner::SurfaceCache)); + tree.add_node(TreeNode { + bbox, + aux_type: AuxDataType::BezierSurface, + data: NodeData::Surface(SurfaceAux { + split_dir: SplitDir::Unknown, + is_marked: false, + node_class: NodeClass::Unknown, + face: None, + surface: Some(1), + slot: Some(0), + }), + ..TreeNode::new() + }); + tree.set_top_node(Some(NodeId(0))); + cache.set_tree(Some(tree)); + let curve_tree = cc.tree().ok_or_else(|| harness("curve tree"))?; + let tree = cache.tree().ok_or_else(|| harness("surface tree"))?; + let mut base = GlobalSolver::with_trees(curve_tree, tree, 3); + base.operation = SolverOperation::Intersect; + base.tolerance_3d = 1e-6; + let mut solver = CsiGlobalSolver { + base, + curve: &curve, + surface_cache: &cache, + kernel: &k, + found_coincidence: false, + interval, + uv_domain: domain, + }; + solver + .local_solve_branch(&[Some(NodeId(0)), Some(NodeId(0)), None, None]) + .map(|more| { + let mut out = vec![ + 0.0, + f64::from(u8::from(more)), + solver.base.solutions.len() as f64, + ]; + for solution in solver.base.solutions.as_slice() { + out.extend([ + f64::from(solution.solution_type.code()), + solution.num_variables as f64, + solution.num_objects as f64, + solution.start.solution_value, + solution.end.solution_value, + ]); + out.extend(solution.start.parameters.iter().take(3)); + out.extend(solution.end.parameters.iter().take(3)); + out.extend( + solution + .nodes + .iter() + .take(2) + .map(|v| v.map_or(-1.0, |n| n.0 as f64)), + ); + out.extend( + solution + .objects + .iter() + .take(2) + .map(|v| v.map_or(-1.0, |n| n as f64)), + ); + } + out + }) + } + } + } + _ => return Err(harness("invalid op")), + }; + Ok(match result { + Ok(v) => output(v), + Err(e) => Output::unported(&e).unwrap_or_else(|| { + let status = match e { + solidcore::SolidError::Upstream { code, .. } => f64::from(code), + _ => 1007.0, + }; + output(vec![status]) + }), + }) +} +impl UnitDiff for Runner { + fn id(&self) -> &'static str { + "surface.surface_p9" + } + fn cases(&self, ctx: &CaseContext) -> Result, HarnessError> { + let ctx = CaseContext { + seeds: ctx.seeds.max(600), + ..ctx.clone() + }; + crate::runner::default_cases(self, &ctx) + } + fn run_cpp(&self, case: &Case) -> Result { + let i: Inputs = case.parse()?; + ffi::eval( + i.op, + &i.net, + i.domain, + i.direction, + i.controls, + i.diagonals, + i.line, + ) + .map(output) + .map_err(harness) + } + fn run_rust(&self, case: &Case) -> Result { + run_rust(&case.parse()?) + } + fn generate(&self, rng: &mut Rng) -> Option { + let mut net = [[0.0; 3]; 9]; + let scale = rng.uniform(0.5, 3.0); + let height = rng.uniform(0.0, 1.5); + for (index, p) in net.iter_mut().enumerate() { + *p = [ + (index / 3) as f64 * scale, + (index % 3) as f64 * scale, + rng.uniform(-height, height), + ]; + } + let direction = rng.below(2) as i32; + let (op, controls, diagonals) = if rng.chance(0.25) { + (1, [0.01, 0.0, 0.0], false) + } else { + let mode = rng.below(4); + ( + 0, + [ + if mode == 0 { + 0.0 + } else { + rng.uniform(0.02, 0.2) + }, + if mode < 2 { + 0.0 + } else { + rng.uniform(5.0, 30.0) + }, + if mode == 3 { + rng.uniform(0.5, 2.0) + } else { + 0.0 + }, + ], + rng.chance(0.5), + ) + }; + serde_json::to_value(Inputs { + op, + net, + direction, + domain: domain(), + controls, + diagonals, + line: line(), + }) + .ok() + } +} + diff --git a/crates/solidcore-ffi/src/units/surface_surface_p9.rs b/crates/solidcore-ffi/src/units/surface_surface_p9.rs new file mode 100644 index 0000000000..83acc042e4 --- /dev/null +++ b/crates/solidcore-ffi/src/units/surface_surface_p9.rs @@ -0,0 +1,110 @@ +//! Safe wrappers for `surface.surface_p9`; shim: `surface_surface_p9.cpp`. +//! Upstream: `source/SMLib/src/SmSurface.cpp` (tessellation, iso boundaries and CSI). +//! Inputs are one non-rational quadratic 3x3 Bezier patch, a domain within [0,1]^2, +//! bounded controls and, for CSI, a non-degenerate line. No counts cross the FFI. +use crate::{call_with_buffer, FfiError}; + +mod sys { + extern "C" { + pub fn sc_surface_surface_p9_eval( + op: i32, + xyz: *const f64, + bounds: *const f64, + direction: i32, + chord: f64, + angle: f64, + max_side: f64, + diagonals: i32, + line: *const f64, + output: *mut f64, + cap: i64, + out_len: *mut i64, + ) -> i32; + } +} + +/// Evaluates a bounded surface case: op 0 splits, 1 iso boundaries, 2 CSI leaf solve. +/// +/// # Errors +/// Invalid data is rejected before C++; shim failures return `FfiError::Status`. +pub fn eval( + op: i32, + net: &[[f64; 3]; 9], + domain: [f64; 4], + direction: i32, + controls: [f64; 3], + diagonals: bool, + line: [[f64; 3]; 2], +) -> Result, FfiError> { + let invalid = || FfiError::InvalidArgument("unsafe surface p9 input".into()); + if !(0..=2).contains(&op) + || !(0..=9).contains(&direction) + || net + .iter() + .flatten() + .any(|v| !v.is_finite() || v.abs() > 10.0) + || domain + .iter() + .any(|v| !v.is_finite() || !(0.0..=1.0).contains(v)) + || domain[2] - domain[0] < 1e-4 + || domain[3] - domain[1] < 1e-4 + || controls.iter().any(|v| !v.is_finite() || *v < 0.0) + || (controls[0] != 0.0 && !(1e-3..=10.0).contains(&controls[0])) + || (controls[1] != 0.0 && !(1.0..=90.0).contains(&controls[1])) + || (controls[2] != 0.0 && !(0.05..=100.0).contains(&controls[2])) + || line + .iter() + .flatten() + .any(|v| !v.is_finite() || v.abs() > 20.0) + { + return Err(invalid()); + } + if op == 0 && direction > 1 { + return Err(invalid()); + } + if controls[2] > 0.0 { + let distances = if direction == 0 { + [(0, 2), (3, 5), (6, 8)] + } else { + [(0, 6), (1, 7), (2, 8)] + }; + for (a, b) in distances { + let pa = net.get(a).ok_or_else(invalid)?; + let pb = net.get(b).ok_or_else(invalid)?; + if pa + .iter() + .zip(pb) + .map(|(a, b)| (a - b) * (a - b)) + .sum::() + < 1e-4 + { + return Err(invalid()); + } + } + } + if op == 2 && line[0] == line[1] { + return Err(invalid()); + } + let xyz: Vec = net.iter().flatten().copied().collect(); + let ray: Vec = line.iter().flatten().copied().collect(); + call_with_buffer(128, |buffer, len| { + // SAFETY: fixed input lengths, finite bounded values and valid enumerators + // were checked above; the shim copies output only within buffer capacity. + unsafe { + sys::sc_surface_surface_p9_eval( + op, + xyz.as_ptr(), + domain.as_ptr(), + direction, + controls[0], + controls[1], + controls[2], + i32::from(diagonals), + ray.as_ptr(), + buffer.as_mut_ptr(), + buffer.len() as i64, + &raw mut *len, + ) + } + }) +} diff --git a/crates/solidcore/src/surface/surface.rs b/crates/solidcore/src/surface/surface.rs index 28476ecc3d..2d5f6ddecd 100644 --- a/crates/solidcore/src/surface/surface.rs +++ b/crates/solidcore/src/surface/surface.rs @@ -8,5 +8,6 @@ //! functions). pub mod p2; +pub mod p9; pub use p2::{Surface, SurfaceKind}; diff --git a/crates/solidcore/src/surface/surface/p9.rs b/crates/solidcore/src/surface/surface/p9.rs new file mode 100644 index 0000000000..12e36c6f4d --- /dev/null +++ b/crates/solidcore/src/surface/surface/p9.rs @@ -0,0 +1,1024 @@ +//! Surface tessellation splits, iso boundaries and curve/surface leaf intersection. +//! +//! Upstream: `source/SMLib/src/SmSurface.cpp`, `source/SMLib/inc/SmSurface.h`. +//! +//! | Rust | Upstream | +//! |------|----------| +//! | [`Surface::find_tessellation_splits`] | `SmSurface::FindTessellationSplits` | +//! | [`Surface::create_iso_boundaries`] | `SmSurface::CreateIsoBoundaries` | +//! | [`CsiGlobalSolver::local_solve_branch`] | `SmCSIGlobalSolver::LocalSolve` | +//! +//! Deviations: return values replace output arrays. The maximum-length branch +//! recurses once with maximum length zero; an explicit depth limit of two guards +//! that invariant. Split arrays are limited to 1,000,000 entries before allocation +//! or concatenation. Unsupported surface virtuals return `Unported`, never an +//! approximate replacement. Failed tessellations retain the empty parameter array; +//! unported errors are propagated even where upstream ignores a status. + +use super::p2::{merge_double_arrays, Surface, SurfaceKind}; +use crate::curve::crv_on_surf::CrvOnSurf; +use crate::curve::curve::Curve; +use crate::curve::iso_curve::IsoCurve; +use crate::error::{ignored, Result, SolidError}; +use crate::geom::extent1d::Extent1d; +use crate::geom::extent2d::Extent2d; +use crate::kernel::Kernel; +use crate::math::EFF_ZERO_SQRT; +use crate::nurbs::b_spline_curve::BSplineCurve; +use crate::nurbs::b_spline_surface::{BSplineSurface, IsoCurveOptions, SurfParamType}; +use crate::nurbs::crv_basic::Curve as NurbCurve; +use crate::nurbs::math::{CPoint, NOW, NOZ}; + +const OP: &str = "surface::surface::p9::find_tessellation_splits"; +const MAX_SPLITS: usize = 1_000_000; + +fn bss(surface: &Surface) -> Result<&BSplineSurface> { + match surface.kind() { + SurfaceKind::BSpline(s) => Ok(s), + SurfaceKind::CurveBounded(_) => { + // UNPORTED(surface.surface_p5): SmSurface::CreateIsoParametricCurve + Err(SolidError::unported( + "SmSurface::CreateIsoParametricCurve", + "surface.surface_p5", + )) + } + } +} + +fn iso_curve( + k: &Kernel, + surface: &Surface, + direction: SurfParamType, + value: f64, +) -> Result { + Ok(bss(surface)? + .create_iso_parametric_curve(k, direction, value, IsoCurveOptions::default())? + .curve) +} + +fn implicit_iso( + surface: &Surface, + direction: SurfParamType, + value: f64, + left: bool, +) -> Result { + Ok(Curve::from(IsoCurve::new( + bss(surface)?.copy(), + direction, + value, + left, + true, + ))) +} + +fn tessellate(curve: &Curve, interval: &Extent1d, chord: f64, angle: f64) -> Result> { + Ok( + ignored(curve.tessellate_by_bisection(interval, chord, angle, 0.0))? + .map(|t| t.parameters) + .unwrap_or_default(), + ) +} + +fn check_count(n: usize) -> Result<()> { + if n > MAX_SPLITS { + return Err(SolidError::invalid_input( + OP, + "tessellation split limit exceeded", + )); + } + Ok(()) +} + +impl Surface { + /// Creates the curves at the minimum and maximum natural-domain boundary in + /// `direction`. Other enumerators leave both outputs unset, as upstream. + /// + /// # Errors + /// Those of iso-curve construction; `Unported` for unsupported surface kinds. + pub fn create_iso_boundaries( + &self, + k: &Kernel, + direction: SurfParamType, + _tolerance: f64, + ) -> Result> { + let domain = self.natural_uv_domain(); + let (min, max) = match direction { + SurfParamType::U => (domain.min().x, domain.max().x), + SurfParamType::V => (domain.min().y, domain.max().y), + _ => return Ok(None), + }; + let first = iso_curve(k, self, direction, min)?; + let second = iso_curve(k, self, direction, max)?; + Ok(Some((first, second))) + } + + /// Selects increasing parameters along the direction perpendicular to the + /// constant iso parameter, including the interval endpoints. + /// + /// # Errors + /// Evaluation/construction errors, unsupported surface virtuals and bounded + /// split-count or recursion limits. + pub fn find_tessellation_splits( + &self, + k: &Kernel, + direction: SurfParamType, + domain: &Extent2d, + chord_height: f64, + angle_deg: f64, + max_side: f64, + check_diagonals: bool, + ) -> Result> { + self.find_splits_at_depth( + k, + direction, + domain, + chord_height, + angle_deg, + max_side, + check_diagonals, + 0, + ) + } + + #[allow(clippy::too_many_arguments, clippy::too_many_lines)] + fn find_splits_at_depth( + &self, + k: &Kernel, + direction: SurfParamType, + domain: &Extent2d, + chord: f64, + angle: f64, + max_side: f64, + diagonals: bool, + depth: usize, + ) -> Result> { + if depth >= 2 { + return Err(SolidError::invalid_input( + OP, + "tessellation recursion limit exceeded", + )); + } + let interval = if direction == SurfParamType::V { + domain.u_interval() + } else { + domain.v_interval() + }; + if max_side > 0.0 { + let mut length = 0.0; + let mut max_length = -1.0; + let mut longest = None; + for i in 0..=5 { + let uv = domain.evaluate(f64::from(i) / 5.0, f64::from(i) / 5.0); + let iso = if direction == SurfParamType::V { + uv.y + } else { + uv.x + }; + let curve = iso_curve(k, self, direction, iso)?; + let generic = Curve::from(curve.clone()); + if generic.is_degenerate(crate::geom::tol::ZONE_TOL_3D, None)? { + continue; + } + length = generic.approximate_length(&interval, 30, false)?.0; + if length > max_length { + max_length = length; + longest = Some(curve); + } + } + let count = max_length / max_side + 1.0; + if !count.is_finite() || count < 0.0 || count > MAX_SPLITS as f64 { + return Err(SolidError::invalid_input( + OP, + "tessellation split limit exceeded", + )); + } + let count = count.max(0.0) as usize; + let splits = if count < 2 { + vec![interval.min(), interval.max()] + } else { + longest + .ok_or(SolidError::sm_err(OP))? + .equally_spaced_points(interval.min(), interval.max(), count, length / 1000.0)? + .1 + }; + let mut all = Vec::new(); + for (index, span) in splits.windows(2).enumerate() { + let (Some(&start), Some(&end)) = (span.first(), span.last()) else { + continue; + }; + let mut sub_domain = *domain; + let span_interval = Extent1d::from_min_max(start, end); + if direction == SurfParamType::V { + sub_domain.set_u_interval(&span_interval); + } else { + sub_domain.set_v_interval(&span_interval); + } + let mut part = self.find_splits_at_depth( + k, + direction, + &sub_domain, + chord, + angle, + 0.0, + diagonals, + depth + 1, + )?; + if index + 2 < splits.len() { + part.pop(); + } + check_count(all.len().saturating_add(part.len()))?; + all.extend(part); + } + return Ok(if all.len() > splits.len() { + all + } else { + splits + }); + } + if chord == 0.0 && angle == 0.0 { + return Ok(vec![interval.min(), interval.max()]); + } + let linear_tol = if chord == 0.0 { + EFF_ZERO_SQRT + } else { + chord / 10.0 + }; + let mut params = [Vec::new(), Vec::new()]; + let mut linear = [false; 2]; + let mut failures = 0; + for (index, (boundary, fallback)) in [(domain.min(), 0.4), (domain.max(), 0.6)] + .into_iter() + .enumerate() + { + let value = if direction == SurfParamType::V { + boundary.y + } else { + boundary.x + }; + let curve = implicit_iso(self, direction, value, true)?; + let degenerate = curve.is_degenerate(crate::geom::tol::ZONE_TOL_3D, None)?; + let is_linear = curve.is_linear(linear_tol, true)?.linear; + let mut splits = Vec::new(); + let mut fallback_needed = degenerate || is_linear; + if !fallback_needed { + match curve.tessellate_by_bisection(&interval, chord, angle, 0.0) { + Ok(result) => splits = result.parameters, + Err(e) if e.is_unported() => return Err(e), + Err(_) => fallback_needed = true, + } + } + let mut final_linear = is_linear; + if fallback_needed { + let uv = domain.evaluate(fallback, fallback); + let value = if direction == SurfParamType::V { + uv.y + } else { + uv.x + }; + let curve = implicit_iso(self, direction, value, true)?; + final_linear = curve.is_linear(linear_tol, true)?.linear; + if !final_linear { + match curve.tessellate_by_bisection(&interval, chord, angle, 0.0) { + Ok(result) => splits = result.parameters, + Err(e) if e.is_unported() => return Err(e), + Err(_) => failures += 1, + } + } + } + if let Some(p) = params.get_mut(index) { + *p = splits; + } + if let Some(l) = linear.get_mut(index) { + *l = final_linear; + } + } + if diagonals && (linear.iter().all(|&l| l) || failures == 2) { + for (index, (start, end)) in [ + (domain.min(), domain.max()), + ( + Point2::new(domain.min().x, domain.max().y), + Point2::new(domain.max().x, domain.min().y), + ), + ] + .into_iter() + .enumerate() + { + let uv_curve = Curve::from(BSplineCurve::from_nurb( + NurbCurve::new( + vec![ + CPoint::new(start.x, start.y, NOZ, NOW), + CPoint::new(end.x, end.y, NOZ, NOW), + ], + 1, + vec![0.0, 0.0, 1.0, 1.0], + ) + .map_err(SolidError::nl_ser(OP))?, + 2, + false, + )); + let curve = Curve::from(CrvOnSurf::new( + k, + uv_curve.clone(), + bss(self)?.copy(), + Some(*domain), + 0, + )?); + let mut p = tessellate(&curve, &Extent1d::from_min_max(0.0, 1.0), chord, angle)?; + if index == 1 && direction == SurfParamType::U { + p.reverse(); + } + for t in &mut p { + let uv = uv_curve.evaluate_point(*t)?; + *t = if direction == SurfParamType::V { + uv.x + } else { + uv.y + }; + } + if let Some(slot) = params.get_mut(index) { + *slot = p; + } + } + } + let [first, second] = params; + check_count(first.len().saturating_add(second.len()))?; + let merged = merge_double_arrays(&first, &second); + Ok(if merged.is_empty() { + vec![interval.min(), interval.max()] + } else { + merged + }) + } +} + +// ---- curve/surface leaf solver ----------------------------------------------------- + +use crate::curve::curve::p3::{local_curve_intersect, PointSolveOptions}; +use crate::geom::geom_utility::p2::ContinuityType; +use crate::geom::global_solver::{ + Branch, GlobalSolve, GlobalSolver, PreferredSolution, SolutionPairType, SolverOperation, +}; +use crate::geom::solution_array::{Solution, SolutionObject, SolutionType, SortKey}; +use crate::geom::tree::NodeId; +use crate::geom::vector2d::Point2; +use crate::geom::vector3d::Point3; +use crate::math::{max2, EFF_ZERO}; +use crate::surface::surface_cache::{BezierPatch, SurfaceCache}; + +/// Curve/surface intersection solver state (`SmCSIGlobalSolver`). Its constructor +/// belongs to `surface.surface_p1`; fields are explicit so that unit can assemble +/// the solver without global state or pointer casts. +#[derive(Debug, Clone)] +pub struct CsiGlobalSolver<'a, O> { + /// The global traversal and sorted solutions. + pub base: GlobalSolver<'a, O>, + /// Original curve decomposed by tree zero. + pub curve: &'a Curve, + /// Surface cache owning tree one and its patch arena. + pub surface_cache: &'a SurfaceCache, + /// Kernel reached through the geometry's context upstream. + pub kernel: &'a Kernel, + /// Whether coincidence was already found (`m_bFoundCoincidence`). + pub found_coincidence: bool, + /// Curve intersection interval (`m_crInterval`). + pub interval: Extent1d, + /// Surface intersection domain (`m_crUVDomain`). + pub uv_domain: Extent2d, +} + +struct CsiIntersection { + uv: Point2, + parameter: f64, + deviation: f64, +} + +fn surface_to_evaluate(_cache: &SurfaceCache, _node: NodeId) -> Result<&Surface> { + // UNPORTED(surface.surface_p1): sm_GetSurfaceToEvaluate + Err(SolidError::unported( + "sm_GetSurfaceToEvaluate", + "surface.surface_p1", + )) +} +fn node_valid(_cache: &SurfaceCache, _node: NodeId) -> Result { + // UNPORTED(surface.surface_p1): sm_IsNodeValid + Err(SolidError::unported("sm_IsNodeValid", "surface.surface_p1")) +} +fn surface_closed( + _surface: &Surface, + _domain: &Extent2d, + _direction: SurfParamType, +) -> Result<(bool, ContinuityType)> { + // UNPORTED(surface.surface_p7): SmSurface::IsClosed + Err(SolidError::unported( + "SmSurface::IsClosed", + "surface.surface_p7", + )) +} +fn tangent_drop(_surface: &Surface, _uv: Point2, _point: Point3) -> Result { + // UNPORTED(surface.surface_p7): SmSurface::DropPointsToTangentPlane + Err(SolidError::unported( + "SmSurface::DropPointsToTangentPlane", + "surface.surface_p7", + )) +} +fn intersect_surface_curve( + _surface: &Surface, + _domain: &Extent2d, + _curve: &Curve, + _interval: &Extent1d, + _tol: f64, + _uv: Point2, + _t: f64, +) -> Result> { + // UNPORTED(surface.surface_p6): SmSurface::LocalCurveIntersect + Err(SolidError::unported( + "SmSurface::LocalCurveIntersect", + "surface.surface_p6", + )) +} +fn filter_solution( + _surface: &Surface, + _domain: &Extent2d, + _curve: &Curve, + _interval: &Extent1d, + _conts: [[ContinuityType; 2]; 3], + _solution: &Solution, +) -> Result { + // UNPORTED(surface.surface_p5): sm_FilterSolution + Err(SolidError::unported( + "sm_FilterSolution", + "surface.surface_p5", + )) +} +fn point_valid(_cache: &SurfaceCache, _node: NodeId, _uv: Point2) -> Result { + // UNPORTED(surface.surface_p1): sm_IsPointValid + Err(SolidError::unported( + "sm_IsPointValid", + "surface.surface_p1", + )) +} +fn nearby_intersection( + _surface: &Surface, + _domain: &Extent2d, + _curve: &Curve, + _interval: &Extent1d, + _uv: Point2, + _t: f64, +) -> Result> { + // UNPORTED(surface.surface_p4): sm_ClassifyCurveSurfaceXSectPoint + Err(SolidError::unported( + "sm_ClassifyCurveSurfaceXSectPoint", + "surface.surface_p4", + )) +} +fn surface_point_solve( + _surface: &Surface, + _domain: &Extent2d, + _point: Point3, + _guess: Point2, +) -> Result<(bool, Solution)> { + // UNPORTED(surface.surface_p5): SmSurface::LocalPointSolve + Err(SolidError::unported( + "SmSurface::LocalPointSolve", + "surface.surface_p5", + )) +} + +impl<'a, O: SolutionObject + 'a> GlobalSolve<'a, O> for CsiGlobalSolver<'a, O> { + fn solver(&self) -> &GlobalSolver<'a, O> { + &self.base + } + fn solver_mut(&mut self) -> &mut GlobalSolver<'a, O> { + &mut self.base + } + fn local_solve(&mut self, branch: &Branch) -> Result { + self.local_solve_branch(branch) + } + fn identical_solutions( + &self, + _first: &Solution, + _second: &Solution, + ) -> Result<(SolutionPairType, Option)> { + // UNPORTED(surface.surface_p5): SmCSIGlobalSolver::IdenticalSolutions + Err(SolidError::unported( + "SmCSIGlobalSolver::IdenticalSolutions", + "surface.surface_p5", + )) + } +} + +impl<'a, O: SolutionObject + 'a> CsiGlobalSolver<'a, O> { + fn solution(&self, branch: &Branch, t: f64, uv: Point2, deviation: f64) -> Result> { + let mut solution = Solution::new(); + solution.num_variables = 3; + for (slot, value) in solution.start.parameters.iter_mut().zip([t, uv.x, uv.y]) { + *slot = value; + } + solution.start.solution_value = deviation; + solution.solution_type = SolutionType::SingleValue; + solution.num_objects = 2; + solution.objects[0] = self.base.tree(0)?.owner_object()?; + solution.objects[1] = + super::p2::original_surface(self.base.tree(1)?, self.base.branch_node(branch, 1)?)? + .into(); + for (slot, id) in solution + .nodes + .iter_mut() + .take(2) + .zip(branch.iter().copied().take(2)) + { + *slot = id; + } + Ok(solution) + } + + fn keep( + &mut self, + branch: &Branch, + surface: &Surface, + domain: &Extent2d, + interval: &Extent1d, + conts: [[ContinuityType; 2]; 3], + solution: &Solution, + ) -> Result<()> { + if filter_solution(surface, domain, self.curve, interval, conts, solution)? { + let uv = Point2::new(solution.start.param(1)?, solution.start.param(2)?); + let node = branch + .get(1) + .copied() + .flatten() + .ok_or(SolidError::null_pointer(OP))?; + if point_valid(self.surface_cache, node, uv)? { + self.add_sorted_solution(solution, SortKey::ByAllParameters, true)?; + } + } + Ok(()) + } + + /// `SmCSIGlobalSolver::LocalSolve`. Returns the request for more subdivision + /// (always false in the upstream implementation), appending kept solutions to + /// `base.solutions` in upstream order. + /// + /// # Errors + /// Invalid branch/patch data and explicit unported surface operations. No + /// missing solver operation is replaced with a synthetic intersection. + #[allow(clippy::too_many_lines)] + pub fn local_solve_branch(&mut self, branch: &Branch) -> Result { + let curve_node = *self.base.branch_node(branch, 0)?; + let surface_node = *self.base.branch_node(branch, 1)?; + let curve_tree = self.base.tree(0)?; + let span = *curve_tree.curve_span(&curve_node)?; + let surface_id = branch + .get(1) + .copied() + .flatten() + .ok_or(SolidError::null_pointer(OP))?; + let patch: BezierPatch = self.surface_cache.patch(surface_id)?.clone(); + let parent_surface = self.surface_cache.surface(); + let eval_surface = surface_to_evaluate(self.surface_cache, surface_id)?; + let mut domain = patch.aux.uv_domain; + let u_interval = domain.u_interval(); + let v_interval = domain.v_interval(); + let mut interval = *span.interval(); + if !node_valid(self.surface_cache, surface_id)? { + return Ok(false); + } + if domain.are_disjoint(&self.uv_domain, 0.0) || self.interval.are_disjoint(&interval, 0.0) { + return Ok(false); + } + let mut pseudo_box = span.pseudo_box; + pseudo_box.expand_absolute(self.base.tolerance_3d); + if pseudo_box.are_disjoint(&patch.pseudo_box, None) { + return Ok(false); + } + let scaled_zero = EFF_ZERO * (1.0 + curve_node.bbox.max().max_dimension()); + let bigger = curve_node.bbox.size().length() > surface_node.bbox.size().length() * 2.0; + let mut t_conts = span.aux.conts; + let mut u_conts = patch.u_curve_conts; + let mut v_conts = patch.v_curve_conts; + if self.uv_domain.min().x >= domain.min().x { + u_conts[0] = ContinuityType::Discontinuous; + } + if self.uv_domain.max().x <= domain.max().x { + u_conts[1] = ContinuityType::Discontinuous; + } + if self.uv_domain.min().y >= domain.min().y { + v_conts[0] = ContinuityType::Discontinuous; + } + if self.uv_domain.max().y <= domain.max().y { + v_conts[1] = ContinuityType::Discontinuous; + } + if !domain.is_contained_by(&self.uv_domain, EFF_ZERO) { + domain = domain.intersect(&self.uv_domain)?; + if crate::geom::tol::are_same(domain.max().x, domain.min().x) + || crate::geom::tol::are_same(domain.max().y, domain.min().y) + { + return Ok(false); + } + } + if self.interval.min() >= interval.min() { + t_conts[0] = ContinuityType::Discontinuous; + } + if self.interval.max() <= interval.max() { + t_conts[1] = ContinuityType::Discontinuous; + } + if !interval.is_contained_by(&self.interval, EFF_ZERO) { + interval = interval.intersect(&self.interval)?; + if crate::geom::tol::are_same(interval.max(), interval.min()) { + return Ok(false); + } + } + let natural = self.curve.natural_interval(); + if (crate::geom::tol::is_zero(interval.min() - natural.min()) + || crate::geom::tol::is_zero(interval.max() - natural.max())) + && crate::geom::tol::is_zero(self.interval.min() - natural.min()) + && crate::geom::tol::is_zero(self.interval.max() - natural.max()) + && self.curve.is_closed(&natural, 0.0)? + { + let continuity = ignored(crate::curve::curve::p2::evaluate_continuity( + self.curve, + natural.min(), + false, + self.curve, + natural.max(), + true, + 0.5, + ))? + .map_or(ContinuityType::Discontinuous, |c| c.continuity); + if crate::geom::tol::is_zero(interval.min() - natural.min()) { + t_conts[0] = continuity; + } + if crate::geom::tol::is_zero(interval.max() - natural.max()) { + t_conts[1] = continuity; + } + } + let natural_domain = parent_surface.natural_uv_domain(); + for (dir, leaf, parent, work, conts) in [ + ( + SurfParamType::U, + u_interval, + natural_domain.u_interval(), + self.uv_domain.u_interval(), + &mut u_conts, + ), + ( + SurfParamType::V, + v_interval, + natural_domain.v_interval(), + self.uv_domain.v_interval(), + &mut v_conts, + ), + ] { + if (crate::geom::tol::is_zero(leaf.min() - parent.min()) + || crate::geom::tol::is_zero(leaf.max() - parent.max())) + && crate::geom::tol::is_zero(work.min() - parent.min()) + && crate::geom::tol::is_zero(work.max() - parent.max()) + { + let (closed, continuity) = surface_closed(parent_surface, &natural_domain, dir)?; + if closed { + if crate::geom::tol::is_zero(leaf.min() - parent.min()) { + conts[0] = continuity; + } + if crate::geom::tol::is_zero(leaf.max() - parent.max()) { + conts[1] = continuity; + } + } + } + } + let conts = [u_conts, v_conts, t_conts]; + let mut guesses = vec![(domain.evaluate(0.5, 0.5), interval.evaluate(0.5))]; + let mut uv = domain.evaluate(0.5, 0.5); + let mut t = interval.evaluate(0.5); + if bigger { + let point = eval_surface.evaluate_point(uv)?; + let (found, solution) = self.curve.local_point_solve::( + &interval, + SolverOperation::Minimize, + point, + &PointSolveOptions::default(), + t, + )?; + if found { + t = solution.start.param(0)?; + } + } + uv = tangent_drop(eval_surface, uv, self.curve.evaluate_point(t)?)?; + if !domain.contains_point(uv, 0.0) { + if bigger { + uv = domain.clamp_point(uv); + let (found, solution) = self.curve.local_point_solve::( + &interval, + SolverOperation::Minimize, + eval_surface.evaluate_point(uv)?, + &PointSolveOptions::default(), + interval.evaluate(0.5), + )?; + if found { + let t2 = solution.start.param(0)?; + let uv2 = domain.clamp_point(tangent_drop( + eval_surface, + uv, + self.curve.evaluate_point(t2)?, + )?); + guesses.push((uv2, t2)); + } + } else { + uv = domain.evaluate(0.5, 0.5); + t = interval.min(); + uv = tangent_drop(eval_surface, uv, self.curve.evaluate_point(t)?)?; + if !domain.contains_point(uv, 0.0) { + uv = domain.evaluate(0.5, 0.5); + t = interval.max(); + uv = tangent_drop(eval_surface, uv, self.curve.evaluate_point(t)?)?; + if !domain.contains_point(uv, 0.0) { + t = interval.evaluate(0.5); + uv = domain.evaluate(0.5, 0.5); + uv = domain.clamp_point(tangent_drop( + eval_surface, + uv, + self.curve.evaluate_point(t)?, + )?); + for fraction in [0.5, 0.0, 1.0] { + guesses.push((domain.evaluate(0.5, 0.5), interval.evaluate(fraction))); + } + } + } + } + } + if let Some(first) = guesses.first_mut() { + *first = (uv, t); + } + if self.found_coincidence { + guesses.clear(); + } + let mut found_intersection = false; + let mut deviation = 0.0; + let mut index = 0; + while let Some(&(guess_uv, guess_t)) = guesses.get(index) { + let result = intersect_surface_curve( + eval_surface, + &domain, + self.curve, + &interval, + self.base.tolerance_3d, + guess_uv, + guess_t, + )?; + found_intersection = result.is_some(); + if let Some(hit) = result { + deviation = hit.deviation; + let solution = self.solution(branch, hit.parameter, hit.uv, hit.deviation)?; + if !filter_solution( + eval_surface, + &domain, + self.curve, + &interval, + conts, + &solution, + )? { + index += 1; + continue; + } + if point_valid(self.surface_cache, surface_id, hit.uv)? { + self.add_sorted_solution(&solution, SortKey::ByAllParameters, true)?; + } + if super::p2::cs_are_perpen_disjoint(curve_tree, &curve_node, &surface_node)? { + return Ok(false); + } + if index < 1 { + if let Some(new_guess) = ignored(nearby_intersection( + eval_surface, + &domain, + self.curve, + &interval, + hit.uv, + hit.parameter, + ))? + .flatten() + { + if guesses.len() >= 6 { + return Err(SolidError::invalid_input( + OP, + "intersection guess limit exceeded", + )); + } + guesses.push(new_guess); + } + } + } + index += 1; + } + for j in 0..2 { + let t_cont = *t_conts.get(j).ok_or(SolidError::null_pointer(OP))?; + if (t_cont as i32) <= ContinuityType::C0 as i32 && !self.found_coincidence { + let t = if j == 0 { + interval.min() + } else { + interval.max() + }; + let point = self.curve.evaluate_point(t)?; + if pseudo_box.distance_to_point(point) < EFF_ZERO { + let (found, mut solution) = surface_point_solve::( + parent_surface, + &natural_domain, + point, + domain.evaluate(0.5, 0.5), + )?; + if found && solution.start.solution_value < self.base.tolerance_3d { + let uv = Point2::new(solution.start.param(0)?, solution.start.param(1)?); + let value = solution.start.solution_value; + solution = self.solution(branch, t, uv, value)?; + self.keep( + branch, + parent_surface, + &natural_domain, + &interval, + conts, + &solution, + )?; + } + } + } + if !self.surface_cache.process_boundary_curves { + continue; + } + for (dir, cont, constant, iso_interval) in [ + ( + SurfParamType::U, + u_conts.get(j), + if j == 0 { + domain.min().x + } else { + domain.max().x + }, + domain.v_interval(), + ), + ( + SurfParamType::V, + v_conts.get(j), + if j == 0 { + domain.min().y + } else { + domain.max().y + }, + domain.u_interval(), + ), + ] { + if cont.is_none_or(|c| (*c as i32) > ContinuityType::C0 as i32) { + continue; + } + let iso = implicit_iso(eval_surface, dir, constant, j == 0)?; + if iso.is_degenerate(crate::geom::tol::ZONE_TOL_3D, None)? { + continue; + } + let coincident = self.curve.simple_coincidence_checker::( + self.kernel, + &interval, + &iso, + &iso_interval, + self.base.tolerance_3d, + Some(&span.pseudo_box), + Some(&patch.pseudo_box), + [None, None], + )?; + let count = coincident.len(); + let mut max_error = 0.0; + let mut found_coincidence = false; + for mut solution in coincident { + solution.num_variables = 3; + let other_t = solution.start.param(1)?; + let uv = if dir == SurfParamType::U { + Point2::new(constant, other_t) + } else { + Point2::new(other_t, constant) + }; + let t = solution.start.param(0)?; + let value = solution.start.solution_value; + let mut adapted = self.solution(branch, t, uv, value)?; + adapted.solution_type = solution.solution_type; + if found_intersection + && (if dir == SurfParamType::U { + value + EFF_ZERO > deviation + } else { + value > deviation + EFF_ZERO + }) + { + continue; + } + max_error = max2(max_error, value); + if solution.solution_type == SolutionType::RangeOfValues { + found_coincidence = true; + let end_other = solution.end.param(1)?; + let end_uv = if dir == SurfParamType::U { + Point2::new(constant, end_other) + } else { + Point2::new(end_other, constant) + }; + let end_t = solution.end.param(0)?; + for (slot, value) in solution + .end + .parameters + .iter_mut() + .zip([end_t, end_uv.x, end_uv.y]) + { + *slot = value; + } + adapted.end = solution.end; + self.add_sorted_solution(&adapted, SortKey::ByAllParameters, true)?; + } else { + self.keep(branch, eval_surface, &domain, &interval, conts, &adapted)?; + } + } + if found_coincidence { + return Ok(false); + } + let zero = if dir == SurfParamType::U { + EFF_ZERO + } else { + scaled_zero + }; + if max_error > zero || count == 0 { + if let Some(hit) = local_curve_intersect( + &iso, + &iso_interval, + self.curve, + &interval, + self.base.tolerance_3d, + iso_interval.evaluate(0.5), + interval.evaluate(0.5), + )? { + let uv = if dir == SurfParamType::U { + Point2::new(constant, hit.my_param) + } else { + Point2::new(hit.my_param, constant) + }; + let solution = self.solution(branch, hit.other_param, uv, hit.deviation)?; + self.keep(branch, eval_surface, &domain, &interval, conts, &solution)?; + } + } + } + } + Ok(false) + } +} + +#[cfg(test)] +mod tests { + use super::*; + fn plane() -> Surface { + let net = (0..3) + .map(|i| { + (0..3) + .map(|j| CPoint::new(f64::from(i) / 2.0, f64::from(j) / 2.0, 0.0, NOW)) + .collect() + }) + .collect(); + let knots = vec![0.0, 0.0, 0.0, 1.0, 1.0, 1.0]; + let n = crate::nurbs::srf_basic::Surface::new(net, 2, 2, knots.clone(), knots).unwrap(); + Surface::from(BSplineSurface::from_nurb(n, false)) + } + #[test] + fn plane_splits_and_natural_boundaries() { + let s = plane(); + let k = Kernel::default(); + let domain = s.natural_uv_domain(); + for direction in [SurfParamType::U, SurfParamType::V] { + assert_eq!( + s.find_tessellation_splits(&k, direction, &domain, 0.01, 10.0, 0.0, true) + .unwrap(), + vec![0.0, 1.0] + ); + let (a, b) = s + .create_iso_boundaries(&k, direction, 0.01) + .unwrap() + .unwrap(); + let a = a.evaluate_point(0.5).unwrap(); + let b = b.evaluate_point(0.5).unwrap(); + if direction == SurfParamType::U { + assert_eq!((a.x, b.x), (0.0, 1.0)); + } else { + assert_eq!((a.y, b.y), (0.0, 1.0)); + } + } + assert!(s + .create_iso_boundaries(&k, SurfParamType::Unknown, 0.01) + .unwrap() + .is_none()); + } + #[test] + fn excessive_split_count_returns_error_before_allocating() { + let s = plane(); + let k = Kernel::default(); + assert!(s + .find_tessellation_splits( + &k, + SurfParamType::U, + &s.natural_uv_domain(), + 0.01, + 0.0, + 1e-100, + false + ) + .is_err()); + } +} diff --git a/fixtures/surface.surface_p9/cases.json b/fixtures/surface.surface_p9/cases.json new file mode 100644 index 0000000000..e0b8dfcc02 --- /dev/null +++ b/fixtures/surface.surface_p9/cases.json @@ -0,0 +1,2038 @@ +{ + "cases": [ + { + "name": "plane_splits_0_0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": true, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "plane_splits_0_1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 0, + "controls": [ + 0.01, + 0, + 0 + ], + "diagonals": true, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "plane_splits_0_2", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 0, + "controls": [ + 0, + 10, + 0 + ], + "diagonals": true, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "plane_splits_0_3", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 0, + "controls": [ + 0.01, + 10, + 0.3 + ], + "diagonals": true, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "trimmed_domain_0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 0, + "controls": [ + 0.01, + 10, + 0 + ], + "diagonals": true, + "domain": [ + 0.2, + 0.3, + 0.8, + 0.9 + ] + } + }, + { + "name": "plane_iso_boundaries_0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:14877", + "inputs": { + "op": 1, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 0, + "controls": [ + 0.01, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "surf1_subnet_0_False", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:29 (first 3x3 control points of my_load_surf1_pts)", + "inputs": { + "op": 0, + "net": [ + [ + 0, + 0, + -0.6 + ], + [ + 1, + 0.1, + 0.4 + ], + [ + 2, + 0.2, + 0.3 + ], + [ + 0, + 1, + 0.2 + ], + [ + 1, + 1, + 1.5 + ], + [ + 2, + 1, + 1.6 + ], + [ + 0, + 2, + 0.3 + ], + [ + 1, + 2, + 1.6 + ], + [ + 2, + 2, + 1.5 + ] + ], + "direction": 0, + "controls": [ + 0.05, + 15, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "surf1_subnet_0_True", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:29 (first 3x3 control points of my_load_surf1_pts)", + "inputs": { + "op": 0, + "net": [ + [ + 0, + 0, + -0.6 + ], + [ + 1, + 0.1, + 0.4 + ], + [ + 2, + 0.2, + 0.3 + ], + [ + 0, + 1, + 0.2 + ], + [ + 1, + 1, + 1.5 + ], + [ + 2, + 1, + 1.6 + ], + [ + 0, + 2, + 0.3 + ], + [ + 1, + 2, + 1.6 + ], + [ + 2, + 2, + 1.5 + ] + ], + "direction": 0, + "controls": [ + 0.05, + 15, + 0 + ], + "diagonals": true, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "surf1_max_length_0", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:29", + "inputs": { + "op": 0, + "net": [ + [ + 0, + 0, + -0.6 + ], + [ + 1, + 0.1, + 0.4 + ], + [ + 2, + 0.2, + 0.3 + ], + [ + 0, + 1, + 0.2 + ], + [ + 1, + 1, + 1.5 + ], + [ + 2, + 1, + 1.6 + ], + [ + 0, + 2, + 0.3 + ], + [ + 1, + 2, + 1.6 + ], + [ + 2, + 2, + 1.5 + ] + ], + "direction": 0, + "controls": [ + 0.05, + 15, + 0.8 + ], + "diagonals": true, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "surf1_boundaries_0", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:29", + "inputs": { + "op": 1, + "net": [ + [ + 0, + 0, + -0.6 + ], + [ + 1, + 0.1, + 0.4 + ], + [ + 2, + 0.2, + 0.3 + ], + [ + 0, + 1, + 0.2 + ], + [ + 1, + 1, + 1.5 + ], + [ + 2, + 1, + 1.6 + ], + [ + 0, + 2, + 0.3 + ], + [ + 1, + 2, + 1.6 + ], + [ + 2, + 2, + 1.5 + ] + ], + "direction": 0, + "controls": [ + 0.01, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "plane_splits_1_10", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 1, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": true, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "plane_splits_1_11", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 1, + "controls": [ + 0.01, + 0, + 0 + ], + "diagonals": true, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "plane_splits_1_12", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 1, + "controls": [ + 0, + 10, + 0 + ], + "diagonals": true, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "plane_splits_1_13", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 1, + "controls": [ + 0.01, + 10, + 0.3 + ], + "diagonals": true, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "trimmed_domain_1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 1, + "controls": [ + 0.01, + 10, + 0 + ], + "diagonals": true, + "domain": [ + 0.2, + 0.3, + 0.8, + 0.9 + ] + } + }, + { + "name": "plane_iso_boundaries_1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:14877", + "inputs": { + "op": 1, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 1, + "controls": [ + 0.01, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "surf1_subnet_1_False", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:29 (first 3x3 control points of my_load_surf1_pts)", + "inputs": { + "op": 0, + "net": [ + [ + 0, + 0, + -0.6 + ], + [ + 1, + 0.1, + 0.4 + ], + [ + 2, + 0.2, + 0.3 + ], + [ + 0, + 1, + 0.2 + ], + [ + 1, + 1, + 1.5 + ], + [ + 2, + 1, + 1.6 + ], + [ + 0, + 2, + 0.3 + ], + [ + 1, + 2, + 1.6 + ], + [ + 2, + 2, + 1.5 + ] + ], + "direction": 1, + "controls": [ + 0.05, + 15, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "surf1_subnet_1_True", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:29 (first 3x3 control points of my_load_surf1_pts)", + "inputs": { + "op": 0, + "net": [ + [ + 0, + 0, + -0.6 + ], + [ + 1, + 0.1, + 0.4 + ], + [ + 2, + 0.2, + 0.3 + ], + [ + 0, + 1, + 0.2 + ], + [ + 1, + 1, + 1.5 + ], + [ + 2, + 1, + 1.6 + ], + [ + 0, + 2, + 0.3 + ], + [ + 1, + 2, + 1.6 + ], + [ + 2, + 2, + 1.5 + ] + ], + "direction": 1, + "controls": [ + 0.05, + 15, + 0 + ], + "diagonals": true, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "surf1_max_length_1", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:29", + "inputs": { + "op": 0, + "net": [ + [ + 0, + 0, + -0.6 + ], + [ + 1, + 0.1, + 0.4 + ], + [ + 2, + 0.2, + 0.3 + ], + [ + 0, + 1, + 0.2 + ], + [ + 1, + 1, + 1.5 + ], + [ + 2, + 1, + 1.6 + ], + [ + 0, + 2, + 0.3 + ], + [ + 1, + 2, + 1.6 + ], + [ + 2, + 2, + 1.5 + ] + ], + "direction": 1, + "controls": [ + 0.05, + 15, + 0.8 + ], + "diagonals": true, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "surf1_boundaries_1", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:29", + "inputs": { + "op": 1, + "net": [ + [ + 0, + 0, + -0.6 + ], + [ + 1, + 0.1, + 0.4 + ], + [ + 2, + 0.2, + 0.3 + ], + [ + 0, + 1, + 0.2 + ], + [ + 1, + 1, + 1.5 + ], + [ + 2, + 1, + 1.6 + ], + [ + 0, + 2, + 0.3 + ], + [ + 1, + 2, + 1.6 + ], + [ + 2, + 2, + 1.5 + ] + ], + "direction": 1, + "controls": [ + 0.01, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "iso_non_direction_2", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:14877", + "inputs": { + "op": 1, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 2, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "iso_non_direction_3", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:14877", + "inputs": { + "op": 1, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 3, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "iso_non_direction_4", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:14877", + "inputs": { + "op": 1, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 4, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "iso_non_direction_5", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:14877", + "inputs": { + "op": 1, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 5, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "iso_non_direction_6", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:14877", + "inputs": { + "op": 1, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 6, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "iso_non_direction_7", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:14877", + "inputs": { + "op": 1, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 7, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "iso_non_direction_8", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:14877", + "inputs": { + "op": 1, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 8, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "iso_non_direction_9", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:14877", + "inputs": { + "op": 1, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 9, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "csi_crossing_plane", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (one patch/one span intersection)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "csi_disjoint_plane", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (disjoint boxes)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0 + ], + [ + 0.0, + 0.5, + 0 + ], + [ + 0.0, + 1.0, + 0 + ], + [ + 0.5, + 0.0, + 0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0 + ], + [ + 1.0, + 0.0, + 0 + ], + [ + 1.0, + 0.5, + 0 + ], + [ + 1.0, + 1.0, + 0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + 5 + ], + [ + 0.5, + 0.5, + 10 + ] + ] + } + } + ] +} diff --git a/harness/cpp/shim/surface_surface_p9.cpp b/harness/cpp/shim/surface_surface_p9.cpp new file mode 100644 index 0000000000..c361f47444 --- /dev/null +++ b/harness/cpp/shim/surface_surface_p9.cpp @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: Apache-2.0 +// Unit surface.surface_p9. Calls the pinned SmSurface methods and the file-local +// SmCSIGlobalSolver class (declaration reproduced from SmSurface.cpp:13781). +#include "sc_shim.h" +#include "StdAfx.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class SmCSIGlobalSolver : public SmGlobalSolver { +public: + const SmSurface* m_pSurf; + SmBoolean m_bFoundCoincidence; + const SmExtent1d& m_crInterval; + const SmExtent2d& m_crUVDomain; + SmCSIGlobalSolver(SmTree*, SmTree*, SmBoolean, const SmExtent1d&, const SmExtent2d&); + virtual SmStatus LocalSolve(SmTreeNode* [SM_GS_MAX_TREES], SmBoolean&); + virtual SmSolutionPairType IdenticalSolutions(const SmSolution&, const SmSolution&, const SmSolution*&) const; +}; + +SC_EXPORT int32_t sc_surface_surface_p9_eval(int32_t op, const double* xyz, const double* bounds, + int32_t direction, double chord, double angle, double max_side, int32_t diagonals, + const double* line, double* output, int64_t cap, int64_t* out_len) { + SC_TRY + SmContext context; + gw_CPOINT points[3][3]; gw_CPOINT* rows[3] = {points[0],points[1],points[2]}; + for (int i=0;i<3;i++) for(int j=0;j<3;j++) { + auto& p=points[i][j]; const int at=3*(3*i+j); + p.x=xyz[at];p.y=xyz[at+1];p.z=xyz[at+2];p.w=NL_NOW; + } + double knots[6]={0,0,0,1,1,1}; + SmBSplineSurface* surface=new(context) SmBSplineSurface(2,2,2,2,5,5,rows,knots,knots); + SmExtent2d domain(bounds[0],bounds[1],bounds[2],bounds[3]); + std::vector out; + auto status=[](SmStatus r){return r==SM_SUCCESS ? 0.0 : (double)r;}; + if(op==0) { + SmTArray splits; + SmStatus r=surface->FindTessellationSplits((SmSurfParamType)direction,domain,chord,angle,max_side,splits,diagonals?TRUE:FALSE); + out.push_back(status(r)); + if(r==SM_SUCCESS) for(ULONG i=0;iCreateIsoBoundaries(context,(SmSurfParamType)direction,SmApproxTol3d(chord),a,b); + out.push_back(status(r)); + if(r==SM_SUCCESS) { + out.push_back((a?1.0:0.0)+(b?1.0:0.0)); + for(auto curve:{a,b}) if(curve) for(int i=0;i<=4;i++) { + SmPoint3d p; + SmStatus er=curve->EvaluatePoint(curve->GetNaturalInterval().Evaluate((double)i/4.0),p); + if(er!=SM_SUCCESS) { delete a;delete b;delete surface;return SC_ERR_ARG; } + out.push_back(p.x);out.push_back(p.y);out.push_back(p.z); + } + } + delete a;delete b; + } else if(op==2) { + gw_CPOINT cp[2]={{line[0],line[1],line[2],NL_NOW},{line[3],line[4],line[5],NL_NOW}}; + double ck[4]={0,0,1,1}; + SmBSplineCurve* curve=new(context) SmBSplineCurve(3,1,3,1,cp,ck); + { + SmExtent1d interval(0.0,1.0); + SmCurveCache cc(*curve,interval,TRUE); + SmSurfaceCache sc(*surface,surface->GetNaturalUVDomain()); + SmStatus r=cc.Tessellate(); + if(r==SM_SUCCESS) r=sc.BuildTree(NULL); + if(r==SM_SUCCESS) { + SmCSIGlobalSolver solver(cc.GetTree(),sc.GetTree(),FALSE,interval,domain); + SmSolutionArray solutions;solver.SetSolutions(&solutions); + solver.SetSolverOperation(SM_SO_INTERSECT);solver.Set3DTolerance(1e-6);solver.SetSolutionRequested(SM_SR_ALL); + SmTreeNode* branch[SM_GS_MAX_TREES]={cc.GetTree()->GetFirstLeafNode(),sc.GetTree()->GetFirstLeafNode(),NULL,NULL}; + SmBoolean more=FALSE;r=solver.LocalSolve(branch,more); + out.push_back(status(r)); + if(r==SM_SUCCESS) { + out.push_back(more==TRUE?1.0:0.0);out.push_back((double)solutions.GetSize()); + for(ULONG i=0;i Date: Tue, 13 Oct 2026 12:52:07 +0200 Subject: [PATCH 03/54] fix: match reference solver tree count and test supported path Co-Authored-By: OpenAI Codex --- crates/solidcore/src/surface/surface/p9.rs | 3 ++- harness/cpp/shim/surface_surface_p9.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/solidcore/src/surface/surface/p9.rs b/crates/solidcore/src/surface/surface/p9.rs index 12e36c6f4d..de8f67c2ce 100644 --- a/crates/solidcore/src/surface/surface/p9.rs +++ b/crates/solidcore/src/surface/surface/p9.rs @@ -984,7 +984,7 @@ mod tests { let domain = s.natural_uv_domain(); for direction in [SurfParamType::U, SurfParamType::V] { assert_eq!( - s.find_tessellation_splits(&k, direction, &domain, 0.01, 10.0, 0.0, true) + s.find_tessellation_splits(&k, direction, &domain, 0.01, 10.0, 0.0, false) .unwrap(), vec![0.0, 1.0] ); @@ -1022,3 +1022,4 @@ mod tests { .is_err()); } } + diff --git a/harness/cpp/shim/surface_surface_p9.cpp b/harness/cpp/shim/surface_surface_p9.cpp index c361f47444..1e5310e01a 100644 --- a/harness/cpp/shim/surface_surface_p9.cpp +++ b/harness/cpp/shim/surface_surface_p9.cpp @@ -73,7 +73,7 @@ SC_EXPORT int32_t sc_surface_surface_p9_eval(int32_t op, const double* xyz, cons SmCSIGlobalSolver solver(cc.GetTree(),sc.GetTree(),FALSE,interval,domain); SmSolutionArray solutions;solver.SetSolutions(&solutions); solver.SetSolverOperation(SM_SO_INTERSECT);solver.Set3DTolerance(1e-6);solver.SetSolutionRequested(SM_SR_ALL); - SmTreeNode* branch[SM_GS_MAX_TREES]={cc.GetTree()->GetFirstLeafNode(),sc.GetTree()->GetFirstLeafNode(),NULL,NULL}; + SmTreeNode* branch[SM_GS_MAX_TREES]={cc.GetTree()->GetFirstLeafNode(),sc.GetTree()->GetFirstLeafNode(),NULL}; SmBoolean more=FALSE;r=solver.LocalSolve(branch,more); out.push_back(status(r)); if(r==SM_SUCCESS) { From d0553d6dc94df86ce4024bac33e91bd714b2cd7f Mon Sep 17 00:00:00 2001 From: lillith <35337584+0xlillith@users.noreply.github.com> Date: Tue, 13 Oct 2026 12:53:17 +0200 Subject: [PATCH 04/54] style: format surface part 9 test module Co-Authored-By: OpenAI Codex --- crates/solidcore/src/surface/surface/p9.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/solidcore/src/surface/surface/p9.rs b/crates/solidcore/src/surface/surface/p9.rs index de8f67c2ce..d90a67dcb4 100644 --- a/crates/solidcore/src/surface/surface/p9.rs +++ b/crates/solidcore/src/surface/surface/p9.rs @@ -1022,4 +1022,3 @@ mod tests { .is_err()); } } - From 4f99f62793e2f6c8e65e7c14b29ec8a04911c3ae Mon Sep 17 00:00:00 2001 From: lillith <35337584+0xlillith@users.noreply.github.com> Date: Tue, 13 Oct 2026 12:56:47 +0200 Subject: [PATCH 05/54] fix: include endpoint in bounded split allocation count Co-Authored-By: OpenAI Codex --- crates/solidcore/src/surface/surface/p9.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/solidcore/src/surface/surface/p9.rs b/crates/solidcore/src/surface/surface/p9.rs index d90a67dcb4..abf5adfa4d 100644 --- a/crates/solidcore/src/surface/surface/p9.rs +++ b/crates/solidcore/src/surface/surface/p9.rs @@ -12,7 +12,9 @@ //! recurses once with maximum length zero; an explicit depth limit of two guards //! that invariant. Split arrays are limited to 1,000,000 entries before allocation //! or concatenation. Unsupported surface virtuals return `Unported`, never an -//! approximate replacement. Failed tessellations retain the empty parameter array; +//! approximate replacement. Iso extraction is exact for B-splines, so the public +//! approximation tolerance has no numerical effect for that supported kind. +//! Failed tessellations retain the empty parameter array; //! unported errors are propagated even where upstream ignores a status. use super::p2::{merge_double_arrays, Surface, SurfaceKind}; @@ -186,7 +188,7 @@ impl Surface { } } let count = max_length / max_side + 1.0; - if !count.is_finite() || count < 0.0 || count > MAX_SPLITS as f64 { + if !count.is_finite() || count < 0.0 || count > (MAX_SPLITS - 1) as f64 { return Err(SolidError::invalid_input( OP, "tessellation split limit exceeded", From 3bcf3cd9298b85d8e94832f9ceed726eab00694b Mon Sep 17 00:00:00 2001 From: lillith <35337584+0xlillith@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:00:08 +0200 Subject: [PATCH 06/54] fix: use typed geometry handles in CSI differential runner Co-Authored-By: OpenAI Codex --- .../difftest/src/units/surface_surface_p9.rs | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/crates/difftest/src/units/surface_surface_p9.rs b/crates/difftest/src/units/surface_surface_p9.rs index f032f966ee..4ec57e7e3b 100644 --- a/crates/difftest/src/units/surface_surface_p9.rs +++ b/crates/difftest/src/units/surface_surface_p9.rs @@ -28,6 +28,18 @@ use solidcore::surface::surface_cache::{ }; use solidcore_ffi::units::surface_surface_p9 as ffi; +use solidcore::geom::solution_array::{ObjectKind, SolutionObject}; + +#[derive(Debug, Clone, Copy, PartialEq)] +struct Handle(u8); +impl SolutionObject for Handle { + fn kind(&self) -> ObjectKind { + if self.0 == 0 { ObjectKind::Curve } else { ObjectKind::Surface } + } + fn natural_interval(&self) -> Option { + (self.0 == 0).then(|| Extent1d::from_min_max(0.0, 1.0)) + } +} pub struct Runner; #[derive(Debug, Clone, Serialize, Deserialize)] struct Inputs { @@ -121,7 +133,7 @@ fn run_rust(i: &Inputs) -> Result { false, )); let interval = Extent1d::from_min_max(0.0, 1.0); - let mut cc = CurveCache::::new( + let mut cc = CurveCache::::new( curve.clone(), interval, CurveCacheOptions { @@ -129,16 +141,16 @@ fn run_rust(i: &Inputs) -> Result { ..CurveCacheOptions::default() }, ); - cc.set_curve_handle(Some(0)); + cc.set_curve_handle(Some(Handle(0))); match cc.tessellate(&k) { Err(e) => Err(e), Ok(()) => { - let mut cache = SurfaceCache::::new( + let mut cache = SurfaceCache::::new( surface, Extent2d::from_bounds(0.0, 0.0, 1.0, 1.0), SurfaceCacheOptions::default(), ); - cache.set_surface_handle(Some(1)); + cache.set_surface_handle(Some(Handle(1))); let uv = cache.uv_domain(); let mut bbox = Extent3d::new(); for p in i.net { @@ -165,7 +177,7 @@ fn run_rust(i: &Inputs) -> Result { is_marked: false, node_class: NodeClass::Unknown, face: None, - surface: Some(1), + surface: Some(Handle(1)), slot: Some(0), }), ..TreeNode::new() @@ -216,7 +228,7 @@ fn run_rust(i: &Inputs) -> Result { .objects .iter() .take(2) - .map(|v| v.map_or(-1.0, |n| n as f64)), + .map(|v| v.map_or(-1.0, |n| f64::from(n.0))), ); } out From e67921af434a1487414aa09a9689f854713cc65a Mon Sep 17 00:00:00 2001 From: lillith <35337584+0xlillith@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:01:07 +0200 Subject: [PATCH 07/54] style: format typed differential runner handles Co-Authored-By: OpenAI Codex --- crates/difftest/src/units/surface_surface_p9.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/difftest/src/units/surface_surface_p9.rs b/crates/difftest/src/units/surface_surface_p9.rs index 4ec57e7e3b..9a7e2abb2e 100644 --- a/crates/difftest/src/units/surface_surface_p9.rs +++ b/crates/difftest/src/units/surface_surface_p9.rs @@ -34,7 +34,11 @@ use solidcore::geom::solution_array::{ObjectKind, SolutionObject}; struct Handle(u8); impl SolutionObject for Handle { fn kind(&self) -> ObjectKind { - if self.0 == 0 { ObjectKind::Curve } else { ObjectKind::Surface } + if self.0 == 0 { + ObjectKind::Curve + } else { + ObjectKind::Surface + } } fn natural_interval(&self) -> Option { (self.0 == 0).then(|| Extent1d::from_min_max(0.0, 1.0)) @@ -327,4 +331,3 @@ impl UnitDiff for Runner { .ok() } } - From 8640f20ae66d2a54588179a72bc1c89ab741212d Mon Sep 17 00:00:00 2001 From: lillith <35337584+0xlillith@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:06:39 +0200 Subject: [PATCH 08/54] docs: describe differential runner entry point Co-Authored-By: OpenAI Codex --- crates/difftest/src/units/surface_surface_p9.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/difftest/src/units/surface_surface_p9.rs b/crates/difftest/src/units/surface_surface_p9.rs index 9a7e2abb2e..a0ae3ed19c 100644 --- a/crates/difftest/src/units/surface_surface_p9.rs +++ b/crates/difftest/src/units/surface_surface_p9.rs @@ -44,6 +44,7 @@ impl SolutionObject for Handle { (self.0 == 0).then(|| Extent1d::from_min_max(0.0, 1.0)) } } +/// Differential runner for the three owned surface operations. pub struct Runner; #[derive(Debug, Clone, Serialize, Deserialize)] struct Inputs { From d8ba78efccdc24bca88c0a2ae31efaf91170f30a Mon Sep 17 00:00:00 2001 From: lillith <35337584+0xlillith@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:08:59 +0200 Subject: [PATCH 09/54] fix: use three tree slots in Rust CSI runner Co-Authored-By: OpenAI Codex --- crates/difftest/src/units/surface_surface_p9.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/difftest/src/units/surface_surface_p9.rs b/crates/difftest/src/units/surface_surface_p9.rs index a0ae3ed19c..49ceeb19a8 100644 --- a/crates/difftest/src/units/surface_surface_p9.rs +++ b/crates/difftest/src/units/surface_surface_p9.rs @@ -204,7 +204,7 @@ fn run_rust(i: &Inputs) -> Result { uv_domain: domain, }; solver - .local_solve_branch(&[Some(NodeId(0)), Some(NodeId(0)), None, None]) + .local_solve_branch(&[Some(NodeId(0)), Some(NodeId(0)), None]) .map(|more| { let mut out = vec![ 0.0, From 653e9cc7ccfc62f6384bc860a5792ef926e353e7 Mon Sep 17 00:00:00 2001 From: lillith <35337584+0xlillith@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:27:12 +0200 Subject: [PATCH 10/54] fix: certify CSI fixture setup and satisfy strict harness lint Co-Authored-By: OpenAI Codex --- .../difftest/src/units/surface_surface_p9.rs | 191 +++++++++--------- harness/cpp/shim/surface_surface_p9.cpp | 8 +- 2 files changed, 101 insertions(+), 98 deletions(-) diff --git a/crates/difftest/src/units/surface_surface_p9.rs b/crates/difftest/src/units/surface_surface_p9.rs index 49ceeb19a8..b030cfec56 100644 --- a/crates/difftest/src/units/surface_surface_p9.rs +++ b/crates/difftest/src/units/surface_surface_p9.rs @@ -1,4 +1,4 @@ -//! Differential runner for surface.surface_p9. Reference: SmSurface.cpp:11644, +//! Differential runner for `surface.surface_p9`. Reference: SmSurface.cpp:11644, //! 13887, 14877. A quadratic Bezier patch is used on both sides. CSI fixtures use //! one planar patch and one line span, so both subdivision trees have one leaf. use crate::{Case, CaseContext, HarnessError, Output, Rng, UnitDiff}; @@ -83,10 +83,11 @@ fn surface(i: &Inputs) -> Result { Ok(Surface::from(BSplineSurface::from_nurb(nurb, false))) } fn output(flat: Vec) -> Output { - let (status, rest) = flat.split_first().unwrap_or((&-1.0, &[])); + let mut values = flat.into_iter(); + let status = values.next().unwrap_or(-1.0); Output::new() - .scalar("status", *status) - .values("out", rest.to_vec()) + .scalar("status", status) + .values("out", values.collect()) } fn run_rust(i: &Inputs) -> Result { let k = Kernel::default(); @@ -143,102 +144,102 @@ fn run_rust(i: &Inputs) -> Result { interval, CurveCacheOptions { make_full_tree: true, + chord_height_tolerance: 0.01, ..CurveCacheOptions::default() }, ); cc.set_curve_handle(Some(Handle(0))); - match cc.tessellate(&k) { - Err(e) => Err(e), - Ok(()) => { - let mut cache = SurfaceCache::::new( - surface, - Extent2d::from_bounds(0.0, 0.0, 1.0, 1.0), - SurfaceCacheOptions::default(), - ); - cache.set_surface_handle(Some(Handle(1))); - let uv = cache.uv_domain(); - let mut bbox = Extent3d::new(); - for p in i.net { - bbox = bbox.union(&Extent3d::from_points( - Vec3::new(p[0], p[1], p[2]), - Vec3::new(p[0], p[1], p[2]), - )); - } - cache.patches_mut().push(BezierPatch { - aux: BezierAux2d { - uv_domain: uv, - owning_tree_node: Some(NodeId(0)), - ..BezierAux2d::default() - }, - pseudo_box: PseudoBox::from_extent3d(&bbox), - ..BezierPatch::default() - }); - let mut tree = Tree::new(Some(TreeOwner::SurfaceCache)); - tree.add_node(TreeNode { - bbox, - aux_type: AuxDataType::BezierSurface, - data: NodeData::Surface(SurfaceAux { - split_dir: SplitDir::Unknown, - is_marked: false, - node_class: NodeClass::Unknown, - face: None, - surface: Some(Handle(1)), - slot: Some(0), - }), - ..TreeNode::new() - }); - tree.set_top_node(Some(NodeId(0))); - cache.set_tree(Some(tree)); - let curve_tree = cc.tree().ok_or_else(|| harness("curve tree"))?; - let tree = cache.tree().ok_or_else(|| harness("surface tree"))?; - let mut base = GlobalSolver::with_trees(curve_tree, tree, 3); - base.operation = SolverOperation::Intersect; - base.tolerance_3d = 1e-6; - let mut solver = CsiGlobalSolver { - base, - curve: &curve, - surface_cache: &cache, - kernel: &k, - found_coincidence: false, - interval, - uv_domain: domain, - }; - solver - .local_solve_branch(&[Some(NodeId(0)), Some(NodeId(0)), None]) - .map(|more| { - let mut out = vec![ - 0.0, - f64::from(u8::from(more)), - solver.base.solutions.len() as f64, - ]; - for solution in solver.base.solutions.as_slice() { - out.extend([ - f64::from(solution.solution_type.code()), - solution.num_variables as f64, - solution.num_objects as f64, - solution.start.solution_value, - solution.end.solution_value, - ]); - out.extend(solution.start.parameters.iter().take(3)); - out.extend(solution.end.parameters.iter().take(3)); - out.extend( - solution - .nodes - .iter() - .take(2) - .map(|v| v.map_or(-1.0, |n| n.0 as f64)), - ); - out.extend( - solution - .objects - .iter() - .take(2) - .map(|v| v.map_or(-1.0, |n| f64::from(n.0))), - ); - } - out - }) + if let Err(e) = cc.tessellate(&k) { + return Err(harness(format!("CSI fixture cache setup: {e}"))); + } else { + let mut cache = SurfaceCache::::new( + surface, + Extent2d::from_bounds(0.0, 0.0, 1.0, 1.0), + SurfaceCacheOptions::default(), + ); + cache.set_surface_handle(Some(Handle(1))); + let uv = cache.uv_domain(); + let mut bbox = Extent3d::new(); + for p in i.net { + bbox = bbox.union(&Extent3d::from_points( + Vec3::new(p[0], p[1], p[2]), + Vec3::new(p[0], p[1], p[2]), + )); } + cache.patches_mut().push(BezierPatch { + aux: BezierAux2d { + uv_domain: uv, + owning_tree_node: Some(NodeId(0)), + ..BezierAux2d::default() + }, + pseudo_box: PseudoBox::from_extent3d(&bbox), + ..BezierPatch::default() + }); + let mut tree = Tree::new(Some(TreeOwner::SurfaceCache)); + tree.add_node(TreeNode { + bbox, + aux_type: AuxDataType::BezierSurface, + data: NodeData::Surface(SurfaceAux { + split_dir: SplitDir::Unknown, + is_marked: false, + node_class: NodeClass::Unknown, + face: None, + surface: Some(Handle(1)), + slot: Some(0), + }), + ..TreeNode::new() + }); + tree.set_top_node(Some(NodeId(0))); + cache.set_tree(Some(tree)); + let curve_tree = cc.tree().ok_or_else(|| harness("curve tree"))?; + let tree = cache.tree().ok_or_else(|| harness("surface tree"))?; + let mut base = GlobalSolver::with_trees(curve_tree, tree, 3); + base.operation = SolverOperation::Intersect; + base.tolerance_3d = 1e-6; + let mut solver = CsiGlobalSolver { + base, + curve: &curve, + surface_cache: &cache, + kernel: &k, + found_coincidence: false, + interval, + uv_domain: domain, + }; + solver + .local_solve_branch(&[Some(NodeId(0)), Some(NodeId(0)), None]) + .map(|more| { + let mut out = vec![ + 0.0, + f64::from(u8::from(more)), + solver.base.solutions.len() as f64, + ]; + for solution in solver.base.solutions.as_slice() { + out.extend([ + f64::from(solution.solution_type.code()), + solution.num_variables as f64, + solution.num_objects as f64, + solution.start.solution_value, + solution.end.solution_value, + ]); + out.extend(solution.start.parameters.iter().take(3)); + out.extend(solution.end.parameters.iter().take(3)); + out.extend( + solution + .nodes + .iter() + .take(2) + .map(|v| v.map_or(-1.0, |n| n.0 as f64)), + ); + out.extend( + solution + .objects + .iter() + .take(2) + .map(|v| v.map_or(-1.0, |n| f64::from(n.0))), + ); + } + out + }) } } _ => return Err(harness("invalid op")), diff --git a/harness/cpp/shim/surface_surface_p9.cpp b/harness/cpp/shim/surface_surface_p9.cpp index 1e5310e01a..2b8e9b6ddc 100644 --- a/harness/cpp/shim/surface_surface_p9.cpp +++ b/harness/cpp/shim/surface_surface_p9.cpp @@ -63,10 +63,11 @@ SC_EXPORT int32_t sc_surface_surface_p9_eval(int32_t op, const double* xyz, cons gw_CPOINT cp[2]={{line[0],line[1],line[2],NL_NOW},{line[3],line[4],line[5],NL_NOW}}; double ck[4]={0,0,1,1}; SmBSplineCurve* curve=new(context) SmBSplineCurve(3,1,3,1,cp,ck); + bool setup_failed=false; { SmExtent1d interval(0.0,1.0); - SmCurveCache cc(*curve,interval,TRUE); - SmSurfaceCache sc(*surface,surface->GetNaturalUVDomain()); + SmCurveCache cc(*curve,interval,TRUE,0.01); + SmSurfaceCache sc(*surface,surface->GetNaturalUVDomain(),0.01); SmStatus r=cc.Tessellate(); if(r==SM_SUCCESS) r=sc.BuildTree(NULL); if(r==SM_SUCCESS) { @@ -88,8 +89,9 @@ SC_EXPORT int32_t sc_surface_surface_p9_eval(int32_t op, const double* xyz, cons for(int j=0;j<2;j++) out.push_back(s.m_apObjects[j]==curve?0.0:(s.m_apObjects[j]==surface?1.0:-1.0)); } } - } else out.push_back(status(r)); + } else setup_failed=true; } + if(setup_failed) {delete curve;delete surface;return SC_ERR_ARG;} delete curve; } else {delete surface;return SC_ERR_ARG;} delete surface; From 42cebe12ab0ed62b09f9c3fd417bccc28996dd39 Mon Sep 17 00:00:00 2001 From: lillith <35337584+0xlillith@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:31:08 +0200 Subject: [PATCH 11/54] style: propagate fixture setup errors directly Co-Authored-By: OpenAI Codex --- crates/difftest/src/units/surface_surface_p9.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/difftest/src/units/surface_surface_p9.rs b/crates/difftest/src/units/surface_surface_p9.rs index b030cfec56..2b77e5ea26 100644 --- a/crates/difftest/src/units/surface_surface_p9.rs +++ b/crates/difftest/src/units/surface_surface_p9.rs @@ -149,9 +149,9 @@ fn run_rust(i: &Inputs) -> Result { }, ); cc.set_curve_handle(Some(Handle(0))); - if let Err(e) = cc.tessellate(&k) { - return Err(harness(format!("CSI fixture cache setup: {e}"))); - } else { + cc.tessellate(&k) + .map_err(|e| harness(format!("CSI fixture cache setup: {e}")))?; + { let mut cache = SurfaceCache::::new( surface, Extent2d::from_bounds(0.0, 0.0, 1.0, 1.0), From c7b8220a9c71f3f6eebc61f18a7f365c4a788022 Mon Sep 17 00:00:00 2001 From: lillith <35337584+0xlillith@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:35:17 +0200 Subject: [PATCH 12/54] fix: specify consumed runner output collection type Co-Authored-By: OpenAI Codex --- crates/difftest/src/units/surface_surface_p9.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/difftest/src/units/surface_surface_p9.rs b/crates/difftest/src/units/surface_surface_p9.rs index 2b77e5ea26..d0121bd171 100644 --- a/crates/difftest/src/units/surface_surface_p9.rs +++ b/crates/difftest/src/units/surface_surface_p9.rs @@ -87,7 +87,7 @@ fn output(flat: Vec) -> Output { let status = values.next().unwrap_or(-1.0); Output::new() .scalar("status", status) - .values("out", values.collect()) + .values("out", values.collect::>()) } fn run_rust(i: &Inputs) -> Result { let k = Kernel::default(); From 92af1da8aec3b5a2d25867913db897c95daf274f Mon Sep 17 00:00:00 2001 From: lillith <35337584+0xlillith@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:46:47 +0200 Subject: [PATCH 13/54] test: require successful reference CSI fixtures after setup Refresh lockfile for upstream solidcore 0.0.1 metadata. Co-Authored-By: OpenAI Codex --- Cargo.lock | 2 +- crates/difftest/src/units/surface_surface_p9.rs | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0c7cd83f86..7f6e2ca795 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -141,7 +141,7 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "solidcore" -version = "0.1.0" +version = "0.0.1" dependencies = [ "thiserror", ] diff --git a/crates/difftest/src/units/surface_surface_p9.rs b/crates/difftest/src/units/surface_surface_p9.rs index d0121bd171..96460aa0b6 100644 --- a/crates/difftest/src/units/surface_surface_p9.rs +++ b/crates/difftest/src/units/surface_surface_p9.rs @@ -277,8 +277,13 @@ impl UnitDiff for Runner { i.diagonals, i.line, ) - .map(output) .map_err(harness) + .and_then(|v| { + if i.op == 2 && v.first().copied() != Some(0.0) { + return Err(harness("CSI reference fixture must solve successfully")); + } + Ok(output(v)) + }) } fn run_rust(&self, case: &Case) -> Result { run_rust(&case.parse()?) From c2cd6e75e86ecdc34ec68b96be74e71c85e44706 Mon Sep 17 00:00:00 2001 From: lillith <35337584+0xlillith@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:59:04 +0200 Subject: [PATCH 14/54] port: certify surface.surface_p9 as partial with differential evidence 630 cases: 615 bit-identical, 15 explicit dependency deferrals, zero failures. CSI downstream body remains unverified. Required gates, full C++ workspace tests, strict feature lint and sensitivity checks pass. Co-Authored-By: OpenAI Codex --- plan/STATUS.md | 20 +- plan/findings.md | 33 + plan/modules.toml | 4 +- reports/difftest/surface.surface_p9.json | 5120 ++++++++++++++++++++++ 4 files changed, 5170 insertions(+), 7 deletions(-) create mode 100644 reports/difftest/surface.surface_p9.json diff --git a/plan/STATUS.md b/plan/STATUS.md index 2e7f28386d..b1ef4a6422 100644 --- a/plan/STATUS.md +++ b/plan/STATUS.md @@ -1,6 +1,6 @@ # solidcore status -Last updated: 2026-10-13, Wave 1 in progress (after `curve.curve_p5`). Update a summary line here when your unit changes it; per-unit state lives in `plan/modules.toml`. +Last updated: 2026-10-13, Wave 1 in progress (after `surface.surface_p9`). Update a summary line here when your unit changes it; per-unit state lives in `plan/modules.toml`. ## Handoff (2026-10-13): from one local swarm to pull requests @@ -12,7 +12,7 @@ can contribute. From now on all work goes through PRs; see AGENTS.md section 4. The source of truth stays `plan/modules.toml`; evidence per unit is `reports/difftest/.json`. - **Ready now:** `curve.curve_p9`, `surface.plane_p1`, `surface.surf_of_revolution_p1`, - `surface.surface_p9`, `surface.trim_srf_cache` (unverified WIP for the last one is on + `surface.trim_srf_cache` (unverified WIP for the last one is on `origin` branch `unit/surface.trim_srf_cache`). - **Throughput limit:** the dependency chain, not people. Often only 2 to 5 units are ready at once. A useful non-port task: find `depends_on` links that are only 1 or 2 @@ -32,11 +32,11 @@ Counts are from `plan/modules.toml`. Line counts are the upstream function-body |---|---| | Units planned | 261 (65 layers), 387,903 upstream lines | | Green | **83** (104,137 lines): `geom.extent3d`, `geom.vector2d`, `nlib.knots`, `nlib.math`, `topology.database_io`, `geom.tol`, `nlib.geom`, `geom.assert_array`, `geom.context`, `geom.extent1d`, `geom.matrix`, `geom.periodic_extent1d`, `geom.vector3d`, `nlib.basis_basic`, `nlib.srf_basic`, `geom.axis2_placement`, `geom.extent2d`, `geom.geom_utility_p2`, `geom.hash_table`, `geom.local_solve1d`, `geom.local_solve_nd`, `geom.polynomial`, `nlib.basis_adv`, `nlib.bezier`, `nlib.funcs_basic`, `geom.geom_utility_p1`, `geom.polar_box`, `nlib.crv_basic`, `geom.pseudo_box`, `nlib.crv_fit_p1`, `nlib.crv_tool_p1`, `nlib.iges`, `nlib.srf_tool_p1`, `curve.hermite_curve`, `geom.point_set`, `nlib.crv_fit_p2`, `nlib.crv_nurb`, `nlib.funcs_adv`, `nlib.srf_fit`, `nlib.crv_fit_p3`, `nlib.crv_geom`, `nlib.crv_tool_p2`, `nurbs.nurbs_crv`, `topology.topology`, `nlib.crv_adv_p1`, `nlib.crv_common`, `nlib.spiral`, `nlib.crv_adv_p2`, `nlib.srf_common`, `nlib.crv_approx`, `nlib.crv_offset`, `nlib.srf_nurb`, `nlib.srf_tool_p2`, `nurbs.b_spline_curve_n_lib`, `nurbs.nurbs_srf`, `nlib.srf_adv_p2`, `nlib.srf_adv_p3`, `nlib.srf_tool_p3`, `nlib.srf_tool_p4`, `curve.conic`, `curve.projected_curve`, `nlib.srf_adv_p4`, `nlib.srf_adv_p1`, `nlib.srf_adv_p5`, `nlib.srf_adv_p6`, `nlib.srf_offset`, `curve.offset_curve`, `surface.b_spline_volume`, `nurbs.b_spline_curve_p1`, `curve.parabola`, `primitive.api_curves`, `nurbs.b_spline_curve_p2`, `curve.curve_p2`, `curve.curve_cache`, `curve.hyperbola`, `curve.line`, `curve.ellipse_p2`, `curve.curve_p6`, `curve.curve_p7`, `curve.ellipse_p1`, `curve.curve_p8`, `curve.composite_curve_p1`, `curve.composite_curve_p2` | -| Partial | **27** (36,524 lines): `geom.attribute`, `geom.tree`, `geom.object`, `geom.grid`, `geom.solution_array`, `geom.global_solver`, `geom.tools`, `geom.transform`, `geom.a_object`, `nurbs.b_spline_surface_p1`, `nurbs.b_spline_curve_p3`, `curve.crv_in_volume`, `curve.tangent_field`, `nurbs.b_spline_surface_n_lib_p1`, `curve.iso_curve`, `nurbs.b_spline_surface_n_lib_p2`, `nurbs.b_spline_surface_p2`, `surface.volume_p1`, `curve.curve_p4`, `surface.twist_volume`, `curve.curve_p3`, `curve.curve_p1`, `curve.crv_on_surf`, `surface.surface_p2`, `surface.curve_bounded_surface`, `surface.surface_cache_p1`, `curve.curve_p5` | -| Ported (green + partial) | 110 units, 140,661 upstream lines (36.3%); about 150,000 Rust lines in `crates/solidcore/src` | +| Partial | **28** (37,776 lines): `geom.attribute`, `geom.tree`, `geom.object`, `geom.grid`, `geom.solution_array`, `geom.global_solver`, `geom.tools`, `geom.transform`, `geom.a_object`, `nurbs.b_spline_surface_p1`, `nurbs.b_spline_curve_p3`, `curve.crv_in_volume`, `curve.tangent_field`, `nurbs.b_spline_surface_n_lib_p1`, `curve.iso_curve`, `nurbs.b_spline_surface_n_lib_p2`, `nurbs.b_spline_surface_p2`, `surface.volume_p1`, `curve.curve_p4`, `surface.twist_volume`, `curve.curve_p3`, `curve.curve_p1`, `curve.crv_on_surf`, `surface.surface_p2`, `surface.curve_bounded_surface`, `surface.surface_cache_p1`, `curve.curve_p5`, `surface.surface_p9` | +| Ported (green + partial) | 111 units, 141,913 upstream lines (36.6%); about 150,000 Rust lines in `crates/solidcore/src` | | Claimed | 1 (966 lines): `surface.trim_srf_cache` | | Blocked | 0 | -| Todo | 150 (246,276 lines) | +| Todo | 149 (245,024 lines) | ## What Wave 0 produced @@ -836,3 +836,13 @@ geom_utility_p2 3270 green; all `max_rel_err` 0. fmt, clippy, tests and wasm32 p extend `math.rs`, or re-export from it, rather than create duplicate types, and update `rust_module` to match. *Resolved for `Vec2`:* `geom.vector2d` moved `Vec2`/`Point2` into `geom::vector2d` and `math` re-exports them; `geom.vector3d` can do the same for `Vec3`. + +## Surface tessellation and iso boundaries (2026-10-13) + +`surface.surface_p9` is partial: 630 cases, 615 bit-identical, zero failed and +15 deferred (`intersect.curve_class_p4`: 13; `surface.surface_p1`: 2), with no +absolute floors. The report covers quadratic B-spline patches and upstream-derived +surface controls. The CSI leaf-solver body is translated but remains unverified +behind `sm_GetSurfaceToEvaluate`; later surface solver back-edges remain explicit. +No `UNPORTED(surface.surface_p9)` callers existed to wire. Other surface kinds, +trimmed-face solving and complete curve/surface intersection remain pending. \ No newline at end of file diff --git a/plan/findings.md b/plan/findings.md index b9e6e1a81e..14e3d8b592 100644 --- a/plan/findings.md +++ b/plan/findings.md @@ -2512,3 +2512,36 @@ Upstream behaviour worth knowing: `LocalSolve`, and `SmCurvePropertyGS::LocalSolve`'s angle special case copies it into `m_apNodes[1]` of a one-object solution. The `curve.curve_p7` harness reports the second node only for two-object solutions. + +## surface.surface_p9 + +- Owns `FindTessellationSplits`, `CreateIsoBoundaries` and the CSI leaf `LocalSolve` + body in `SmSurface.cpp:11644,13887,14877`. Default report: 630 cases (30 fixtures + and 600 fixed-seed generated), 615 bit-identical, zero failed, 15 deferred, + max relative error zero, no absolute floors. +- The 13 diagonal-tessellation deferrals reach curve classification in + `intersect.curve_class_p4`. The two CSI fixtures reach `sm_GetSurfaceToEvaluate` + (`surface.surface_p1`). The downstream CSI body is therefore not C++ verified; + its surface_p1/p4/p5/p6/p7 calls and identical-solution virtual stay explicit + Unported back-edges. The constructor belongs to surface_p1. Do not describe the + intersection solver as usable end to end. +- CSI fixture caches use a nonzero chord tolerance. Cache preparation failures + are harness failures, never matching operation errors. The reference solver + must also return success. The surface fixture is one planar quadratic patch; + Rust assembles its one-leaf arena because general surface tree construction is + not available yet. Further CSI coverage must use fully equivalent constructed + caches when those dependencies land. +- B-spline iso extraction is exact, so the approximation tolerance has no effect + for that supported kind. Curve-bounded surface virtuals defer to surface_p5. + The maximum-side branch retains the upstream last-sampled length for its + equally-spaced-point tolerance, even if another sampled curve was longest. +- Input-driven tessellation recursion has an explicit depth limit of two (the + recursive call sets maximum side length to zero). Split arrays are bounded to + 1,000,000 entries including endpoints. Invalid/nonfinite/negative derived counts + return an error instead of converting to an unsigned count. The FFI excludes + the all-degenerate maximum-side case where upstream's negative count conversion + is unsafe. Two kernel tests cover analytic boundaries and excessive counts. +- Ignored non-Unported tessellation failures leave empty returned arrays in Rust; + the C++ out-array API can retain partial arrays on failure. This deviation is + documented in the module header. All Unported errors propagate explicitly. + No numerical disagreement was found in the tested supported paths. diff --git a/plan/modules.toml b/plan/modules.toml index d31dffcfb8..b628fa86fc 100644 --- a/plan/modules.toml +++ b/plan/modules.toml @@ -1479,10 +1479,10 @@ depends_on = ["curve.crv_on_surf", "curve.curve_cache", "curve.curve_p1", "curve est_lines = 1252 layer = 23 tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"] -status = "todo" +status = "partial" claimed_by = "" claimed_at = "" -notes = "3 fns; largest: SmCSIGlobalSolver::LocalSolve, SmSurface::FindTessellationSplits, SmSurface::CreateIsoBoundaries; cycle back-edges (call into later units; stub or co-port): surface.surface_p5(4), surface.surface_p1(3), surface.surface_p7(2), surface.surface_p4(1), surface.surface_p6(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit" +notes = "3 fns; largest: SmCSIGlobalSolver::LocalSolve, SmSurface::FindTessellationSplits, SmSurface::CreateIsoBoundaries; cycle back-edges (call into later units; stub or co-port): surface.surface_p5(4), surface.surface_p1(3), surface.surface_p7(2), surface.surface_p4(1), surface.surface_p6(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; verified: 630 cases (30 fixtures + 600 generated), 615 bit-identical, 0 failed, 15 deferred: intersect.curve_class_p4(13), surface.surface_p1(2), max_rel_err=0; CSI body remains unverified behind sm_GetSurfaceToEvaluate; explicit back-edges and bounded tessellation recursion/allocation" [[unit]] id = "surface.trim_srf_cache" diff --git a/reports/difftest/surface.surface_p9.json b/reports/difftest/surface.surface_p9.json new file mode 100644 index 0000000000..f8e652cc33 --- /dev/null +++ b/reports/difftest/surface.surface_p9.json @@ -0,0 +1,5120 @@ +{ + "abs_floors": [], + "cases": [ + { + "max_rel_err": 0.0, + "name": "plane_splits_0_0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#0 (upstream source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression))", + "values_compared": 3 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "plane_splits_0_1", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surface_p9/cases.json#1 (upstream source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "plane_splits_0_2", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surface_p9/cases.json#2 (upstream source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "plane_splits_0_3", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surface_p9/cases.json#3 (upstream source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "trimmed_domain_0", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surface_p9/cases.json#4 (upstream source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression))", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "plane_iso_boundaries_0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#5 (upstream source/SMLib/src/SmSurface.cpp:14877)", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "surf1_subnet_0_False", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#6 (upstream tests/prog_test/src/smSurfaceTest.cpp:29 (first 3x3 control points of my_load_surf1_pts))", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surf1_subnet_0_True", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#7 (upstream tests/prog_test/src/smSurfaceTest.cpp:29 (first 3x3 control points of my_load_surf1_pts))", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surf1_max_length_0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#8 (upstream tests/prog_test/src/smSurfaceTest.cpp:29)", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surf1_boundaries_0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#9 (upstream tests/prog_test/src/smSurfaceTest.cpp:29)", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "plane_splits_1_10", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#10 (upstream source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression))", + "values_compared": 3 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "plane_splits_1_11", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surface_p9/cases.json#11 (upstream source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "plane_splits_1_12", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surface_p9/cases.json#12 (upstream source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "plane_splits_1_13", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surface_p9/cases.json#13 (upstream source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "trimmed_domain_1", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surface_p9/cases.json#14 (upstream source/SMLib/src/SmSurface.cpp:11644 (analytic boundary regression))", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "plane_iso_boundaries_1", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#15 (upstream source/SMLib/src/SmSurface.cpp:14877)", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "surf1_subnet_1_False", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#16 (upstream tests/prog_test/src/smSurfaceTest.cpp:29 (first 3x3 control points of my_load_surf1_pts))", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surf1_subnet_1_True", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#17 (upstream tests/prog_test/src/smSurfaceTest.cpp:29 (first 3x3 control points of my_load_surf1_pts))", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surf1_max_length_1", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#18 (upstream tests/prog_test/src/smSurfaceTest.cpp:29)", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "surf1_boundaries_1", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#19 (upstream tests/prog_test/src/smSurfaceTest.cpp:29)", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "iso_non_direction_2", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#20 (upstream source/SMLib/src/SmSurface.cpp:14877)", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "iso_non_direction_3", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#21 (upstream source/SMLib/src/SmSurface.cpp:14877)", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "iso_non_direction_4", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#22 (upstream source/SMLib/src/SmSurface.cpp:14877)", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "iso_non_direction_5", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#23 (upstream source/SMLib/src/SmSurface.cpp:14877)", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "iso_non_direction_6", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#24 (upstream source/SMLib/src/SmSurface.cpp:14877)", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "iso_non_direction_7", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#25 (upstream source/SMLib/src/SmSurface.cpp:14877)", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "iso_non_direction_8", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#26 (upstream source/SMLib/src/SmSurface.cpp:14877)", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "iso_non_direction_9", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surface_p9/cases.json#27 (upstream source/SMLib/src/SmSurface.cpp:14877)", + "values_compared": 2 + }, + { + "deferred": { + "symbol": "sm_GetSurfaceToEvaluate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "csi_crossing_plane", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surface_p9/cases.json#28 (upstream source/SMLib/src/SmSurface.cpp:13887 (one patch/one span intersection))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "sm_GetSurfaceToEvaluate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "csi_disjoint_plane", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surface_p9/cases.json#29 (upstream source/SMLib/src/SmSurface.cpp:13887 (disjoint boxes))", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0000", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812329", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0001", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812330", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0002", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812331", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0003", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812332", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0004", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812333", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0005", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812334", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0006", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812335", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0007", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812336", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0008", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812337", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0009", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812338", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0010", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812339", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0011", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812340", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0012", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812341", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0013", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812342", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0014", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812343", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0015", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812344", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0016", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812345", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0017", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812346", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0018", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812347", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0019", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812348", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0020", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812349", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0021", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812350", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0022", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812351", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0023", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812352", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0024", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812353", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0025", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812354", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0026", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812355", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0027", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812356", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0028", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812357", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0029", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812358", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0030", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812359", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0031", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812360", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0032", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812361", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0033", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812362", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0034", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812363", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0035", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812364", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0036", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812365", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0037", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812366", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0038", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812367", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0039", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812368", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0040", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812369", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0041", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812370", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0042", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812371", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0043", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812372", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0044", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812373", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0045", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812374", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0046", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812375", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0047", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812376", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0048", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812377", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0049", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812378", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0050", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812379", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0051", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812380", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0052", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812381", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0053", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812382", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0054", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812383", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0055", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812384", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0056", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812385", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0057", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812386", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0058", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812387", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0059", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812388", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0060", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812389", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0061", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812390", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0062", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812391", + "values_compared": 16 + }, + { + "max_rel_err": 0.0, + "name": "gen0063", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812392", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0064", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812393", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0065", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812394", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0066", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812395", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0067", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812396", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0068", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812397", + "values_compared": 6 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "gen0069", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=9548438738981812398", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0070", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812399", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0071", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812400", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0072", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812401", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0073", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812402", + "values_compared": 32 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "gen0074", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=9548438738981812403", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0075", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812404", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0076", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812405", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0077", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812406", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0078", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812407", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0079", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812408", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0080", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812409", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0081", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812410", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0082", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812411", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0083", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812412", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0084", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812413", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0085", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812414", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0086", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812415", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0087", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812416", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0088", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812417", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0089", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812418", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0090", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812419", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0091", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812420", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0092", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812421", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0093", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812422", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0094", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812423", + "values_compared": 15 + }, + { + "max_rel_err": 0.0, + "name": "gen0095", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812424", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0096", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812425", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0097", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812426", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0098", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812427", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0099", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812428", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0100", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812429", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0101", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812430", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0102", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812431", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0103", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812432", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0104", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812433", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0105", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812434", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0106", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812435", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0107", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812436", + "values_compared": 11 + }, + { + "max_rel_err": 0.0, + "name": "gen0108", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812437", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0109", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812438", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0110", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812439", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0111", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812440", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0112", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812441", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0113", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812442", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0114", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812443", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0115", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812444", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0116", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812445", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0117", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812446", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0118", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812447", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0119", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812448", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0120", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812449", + "values_compared": 31 + }, + { + "max_rel_err": 0.0, + "name": "gen0121", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812450", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0122", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812451", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0123", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812452", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0124", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812453", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0125", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812454", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0126", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812455", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0127", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812456", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0128", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812457", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0129", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812458", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0130", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812459", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0131", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812460", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0132", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812461", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0133", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812462", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0134", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812463", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0135", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812464", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0136", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812465", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0137", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812466", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0138", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812467", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0139", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812468", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0140", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812469", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0141", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812470", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0142", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812471", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0143", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812472", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0144", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812473", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0145", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812474", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0146", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812475", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0147", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812476", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0148", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812477", + "values_compared": 3 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "gen0149", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=9548438738981812478", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0150", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812479", + "values_compared": 18 + }, + { + "max_rel_err": 0.0, + "name": "gen0151", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812480", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0152", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812481", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0153", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812482", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0154", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812483", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0155", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812484", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0156", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812485", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0157", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812486", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0158", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812487", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0159", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812488", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0160", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812489", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0161", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812490", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0162", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812491", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0163", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812492", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0164", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812493", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0165", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812494", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0166", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812495", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0167", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812496", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0168", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812497", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0169", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812498", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0170", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812499", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0171", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812500", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0172", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812501", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0173", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812502", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0174", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812503", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0175", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812504", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0176", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812505", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0177", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812506", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0178", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812507", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0179", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812508", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0180", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812509", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0181", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812510", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0182", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812511", + "values_compared": 14 + }, + { + "max_rel_err": 0.0, + "name": "gen0183", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812512", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0184", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812513", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0185", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812514", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0186", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812515", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0187", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812516", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0188", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812517", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0189", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812518", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0190", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812519", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0191", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812520", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0192", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812521", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0193", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812522", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0194", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812523", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0195", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812524", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0196", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812525", + "values_compared": 16 + }, + { + "max_rel_err": 0.0, + "name": "gen0197", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812526", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0198", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812527", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0199", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812528", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0200", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812529", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0201", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812530", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0202", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812531", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0203", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812532", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0204", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812533", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0205", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812534", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0206", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812535", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0207", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812536", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0208", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812537", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0209", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812538", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0210", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812539", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0211", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812540", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0212", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812541", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0213", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812542", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0214", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812543", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0215", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812544", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0216", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812545", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0217", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812546", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0218", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812547", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0219", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812548", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0220", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812549", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0221", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812550", + "values_compared": 13 + }, + { + "max_rel_err": 0.0, + "name": "gen0222", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812551", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0223", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812552", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0224", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812553", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0225", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812554", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0226", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812555", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0227", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812556", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0228", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812557", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0229", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812558", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0230", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812559", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0231", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812560", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0232", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812561", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0233", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812562", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0234", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812563", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0235", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812564", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0236", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812565", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0237", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812566", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0238", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812567", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0239", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812568", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0240", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812569", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0241", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812570", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0242", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812571", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0243", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812572", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0244", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812573", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0245", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812574", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0246", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812575", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0247", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812576", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0248", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812577", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0249", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812578", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0250", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812579", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0251", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812580", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0252", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812581", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0253", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812582", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0254", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812583", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0255", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812584", + "values_compared": 14 + }, + { + "max_rel_err": 0.0, + "name": "gen0256", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812585", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0257", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812586", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0258", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812587", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0259", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812588", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0260", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812589", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0261", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812590", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0262", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812591", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0263", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812592", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0264", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812593", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0265", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812594", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0266", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812595", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0267", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812596", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0268", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812597", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0269", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812598", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0270", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812599", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0271", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812600", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0272", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812601", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0273", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812602", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0274", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812603", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0275", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812604", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0276", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812605", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0277", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812606", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0278", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812607", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0279", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812608", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0280", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812609", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0281", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812610", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0282", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812611", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0283", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812612", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0284", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812613", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0285", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812614", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0286", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812615", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0287", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812616", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0288", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812617", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0289", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812618", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0290", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812619", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0291", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812620", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0292", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812621", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0293", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812622", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0294", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812623", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0295", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812624", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0296", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812625", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0297", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812626", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0298", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812627", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0299", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812628", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0300", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812629", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0301", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812630", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0302", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812631", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0303", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812632", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0304", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812633", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0305", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812634", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0306", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812635", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0307", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812636", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0308", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812637", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0309", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812638", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0310", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812639", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0311", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812640", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0312", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812641", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0313", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812642", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0314", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812643", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0315", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812644", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0316", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812645", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0317", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812646", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0318", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812647", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0319", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812648", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0320", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812649", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0321", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812650", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0322", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812651", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0323", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812652", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0324", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812653", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0325", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812654", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0326", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812655", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0327", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812656", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0328", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812657", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0329", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812658", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0330", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812659", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0331", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812660", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0332", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812661", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0333", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812662", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0334", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812663", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0335", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812664", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0336", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812665", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0337", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812666", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0338", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812667", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0339", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812668", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0340", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812669", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0341", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812670", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0342", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812671", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0343", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812672", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0344", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812673", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0345", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812674", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0346", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812675", + "values_compared": 13 + }, + { + "max_rel_err": 0.0, + "name": "gen0347", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812676", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0348", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812677", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0349", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812678", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0350", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812679", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0351", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812680", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0352", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812681", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0353", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812682", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0354", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812683", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0355", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812684", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0356", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812685", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0357", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812686", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0358", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812687", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0359", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812688", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0360", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812689", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0361", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812690", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0362", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812691", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0363", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812692", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0364", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812693", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0365", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812694", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0366", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812695", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0367", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812696", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0368", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812697", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0369", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812698", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0370", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812699", + "values_compared": 11 + }, + { + "max_rel_err": 0.0, + "name": "gen0371", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812700", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0372", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812701", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0373", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812702", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0374", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812703", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0375", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812704", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0376", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812705", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0377", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812706", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0378", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812707", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0379", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812708", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0380", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812709", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0381", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812710", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0382", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812711", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0383", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812712", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0384", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812713", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0385", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812714", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0386", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812715", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0387", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812716", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0388", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812717", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0389", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812718", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0390", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812719", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0391", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812720", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0392", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812721", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0393", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812722", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0394", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812723", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0395", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812724", + "values_compared": 24 + }, + { + "max_rel_err": 0.0, + "name": "gen0396", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812725", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0397", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812726", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0398", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812727", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0399", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812728", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0400", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812729", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0401", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812730", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0402", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812731", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0403", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812732", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0404", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812733", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0405", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812734", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0406", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812735", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0407", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812736", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0408", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812737", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0409", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812738", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0410", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812739", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0411", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812740", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0412", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812741", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0413", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812742", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0414", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812743", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0415", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812744", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0416", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812745", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0417", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812746", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0418", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812747", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0419", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812748", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0420", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812749", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0421", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812750", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0422", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812751", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0423", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812752", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0424", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812753", + "values_compared": 10 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "gen0425", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=9548438738981812754", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0426", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812755", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0427", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812756", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0428", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812757", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0429", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812758", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0430", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812759", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0431", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812760", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0432", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812761", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0433", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812762", + "values_compared": 24 + }, + { + "max_rel_err": 0.0, + "name": "gen0434", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812763", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0435", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812764", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0436", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812765", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0437", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812766", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0438", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812767", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0439", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812768", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0440", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812769", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0441", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812770", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0442", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812771", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0443", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812772", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0444", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812773", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0445", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812774", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0446", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812775", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0447", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812776", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0448", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812777", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0449", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812778", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0450", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812779", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0451", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812780", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0452", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812781", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0453", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812782", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0454", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812783", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0455", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812784", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0456", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812785", + "values_compared": 18 + }, + { + "max_rel_err": 0.0, + "name": "gen0457", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812786", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0458", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812787", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0459", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812788", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0460", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812789", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0461", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812790", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0462", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812791", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0463", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812792", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0464", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812793", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0465", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812794", + "values_compared": 13 + }, + { + "max_rel_err": 0.0, + "name": "gen0466", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812795", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0467", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812796", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0468", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812797", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0469", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812798", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0470", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812799", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0471", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812800", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0472", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812801", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0473", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812802", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0474", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812803", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0475", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812804", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0476", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812805", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0477", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812806", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0478", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812807", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0479", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812808", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0480", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812809", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0481", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812810", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0482", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812811", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0483", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812812", + "values_compared": 11 + }, + { + "max_rel_err": 0.0, + "name": "gen0484", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812813", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0485", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812814", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0486", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812815", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0487", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812816", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0488", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812817", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0489", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812818", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0490", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812819", + "values_compared": 18 + }, + { + "max_rel_err": 0.0, + "name": "gen0491", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812820", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0492", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812821", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0493", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812822", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0494", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812823", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0495", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812824", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0496", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812825", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0497", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812826", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0498", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812827", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0499", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812828", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0500", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812829", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0501", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812830", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0502", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812831", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0503", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812832", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0504", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812833", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0505", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812834", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0506", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812835", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0507", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812836", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0508", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812837", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0509", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812838", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0510", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812839", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0511", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812840", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0512", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812841", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0513", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812842", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0514", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812843", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0515", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812844", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0516", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812845", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0517", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812846", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0518", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812847", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0519", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812848", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0520", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812849", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0521", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812850", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0522", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812851", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0523", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812852", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0524", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812853", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0525", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812854", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0526", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812855", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0527", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812856", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0528", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812857", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0529", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812858", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0530", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812859", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0531", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812860", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0532", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812861", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0533", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812862", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0534", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812863", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0535", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812864", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0536", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812865", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0537", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812866", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0538", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812867", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0539", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812868", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0540", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812869", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0541", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812870", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0542", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812871", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0543", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812872", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0544", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812873", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0545", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812874", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0546", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812875", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0547", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812876", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0548", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812877", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0549", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812878", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0550", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812879", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0551", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812880", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0552", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812881", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0553", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812882", + "values_compared": 16 + }, + { + "max_rel_err": 0.0, + "name": "gen0554", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812883", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0555", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812884", + "values_compared": 11 + }, + { + "max_rel_err": 0.0, + "name": "gen0556", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812885", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0557", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812886", + "values_compared": 12 + }, + { + "max_rel_err": 0.0, + "name": "gen0558", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812887", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0559", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812888", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0560", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812889", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0561", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812890", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0562", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812891", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0563", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812892", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0564", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812893", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0565", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812894", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0566", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812895", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0567", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812896", + "values_compared": 12 + }, + { + "max_rel_err": 0.0, + "name": "gen0568", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812897", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0569", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812898", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0570", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812899", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0571", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812900", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0572", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812901", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0573", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812902", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0574", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812903", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0575", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812904", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0576", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812905", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0577", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812906", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0578", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812907", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0579", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812908", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0580", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812909", + "values_compared": 29 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "gen0581", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=9548438738981812910", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0582", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812911", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0583", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812912", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0584", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812913", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0585", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812914", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0586", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812915", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0587", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812916", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0588", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812917", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0589", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812918", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0590", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812919", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0591", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812920", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0592", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812921", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0593", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812922", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0594", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812923", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0595", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812924", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0596", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812925", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0597", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812926", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0598", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812927", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0599", + "outcome": "pass", + "pass": true, + "source": "generated:seed=9548438738981812928", + "values_compared": 32 + } + ], + "cases_both_errored": 0, + "cases_deferred": 15, + "cases_failed": 0, + "cases_passed": 615, + "cases_total": 630, + "deferred_by_unit": { + "intersect.curve_class_p4": 13, + "surface.surface_p1": 2 + }, + "max_rel_err": 0.0, + "pass": true, + "rel_tol": 1e-9, + "seeds": 16, + "status": "partial", + "unit": "surface.surface_p9" +} From f58e8b6bddda15bdc3cc59acfe77463d75e00a3c Mon Sep 17 00:00:00 2001 From: bherbruck Date: Tue, 13 Oct 2026 20:27:26 -0400 Subject: [PATCH 15/54] claim: surface.plane_p2 Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01FsWWaoeGNWKgzeGrF2Pkn5 From d2e485938112de0e705ead40b404e8a5be241102 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Tue, 13 Oct 2026 20:50:13 -0400 Subject: [PATCH 16/54] claim: intersect.adv_surface_intersector Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01FsWWaoeGNWKgzeGrF2Pkn5 From 5d91c8b18f5c56e420f34e8c96df7bd6534800ec Mon Sep 17 00:00:00 2001 From: bherbruck Date: Tue, 13 Oct 2026 21:07:53 -0400 Subject: [PATCH 17/54] port: surface.plane_p2 (WIP): SmPlane part 2, shim, ffi, runner, fixtures Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01FsWWaoeGNWKgzeGrF2Pkn5 --- crates/difftest/src/units/surface_plane_p2.rs | 1443 ++++ .../src/units/surface_plane_p2.rs | 650 ++ .../src/nurbs/b_spline_surface/p2.rs | 32 +- crates/solidcore/src/surface/plane.rs | 1 + crates/solidcore/src/surface/plane/p1.rs | 10 +- crates/solidcore/src/surface/plane/p2.rs | 1376 ++++ crates/solidcore/src/surface/surface/p2.rs | 139 +- fixtures/surface.plane_p2/edge.json | 6185 +++++++++++++++++ fixtures/surface.plane_p2/upstream.json | 1446 ++++ harness/cpp/shim/surface_plane_p2.cpp | 653 ++ 10 files changed, 11869 insertions(+), 66 deletions(-) create mode 100644 crates/difftest/src/units/surface_plane_p2.rs create mode 100644 crates/solidcore-ffi/src/units/surface_plane_p2.rs create mode 100644 crates/solidcore/src/surface/plane/p2.rs create mode 100644 fixtures/surface.plane_p2/edge.json create mode 100644 fixtures/surface.plane_p2/upstream.json create mode 100644 harness/cpp/shim/surface_plane_p2.cpp diff --git a/crates/difftest/src/units/surface_plane_p2.rs b/crates/difftest/src/units/surface_plane_p2.rs new file mode 100644 index 0000000000..69b62f5eb8 --- /dev/null +++ b/crates/difftest/src/units/surface_plane_p2.rs @@ -0,0 +1,1443 @@ +//! Runner for unit `surface.plane_p2`. C++: `solidcore_ffi::units::surface_plane_p2` +//! (`harness/cpp/shim/surface_plane_p2.cpp`). Rust: `solidcore::surface::plane::p2` +//! (methods of [`Plane`], and [`Surface::global_surface_intersect`] for the plane kind). +//! +//! Each case is one op on freshly built objects; both sides produce the record +//! documented in the FFI module (`rec`), compared value by value. Planes are built with +//! or without their NURB (upstream's `m_pNurb`, which `IntersectWithPlane`'s parallel +//! case tests). Curves are real `SmLine`, `SmEllipse`, `SmCircle` and B-spline curves. + +use std::fmt::Write as _; + +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +use solidcore::curve::curve::{Curve, CurveKind}; +use solidcore::curve::ellipse::{Ellipse, EllipseOptions}; +use solidcore::curve::line::Line; +use solidcore::geom::axis2_placement::Axis2Placement; +use solidcore::geom::extent1d::Extent1d; +use solidcore::geom::extent2d::Extent2d; +use solidcore::geom::vector2d::Vec2; +use solidcore::geom::vector3d::Vec3; +use solidcore::kernel::Kernel; +use solidcore::nurbs::b_spline_curve::BSplineCurve; +use solidcore::nurbs::b_spline_surface::BSplineSurface; +use solidcore::nurbs::math::CPoint; +use solidcore::nurbs::srf_basic::Surface as NurbSurface; +use solidcore::surface::plane::Plane; +use solidcore::surface::surface::p2::SurfaceIntersection; +use solidcore::surface::surface::Surface; +use solidcore::topology::database_io::{DatabaseReader, FileType}; +use solidcore::SolidError; +use solidcore_ffi::units::surface_plane_p2 as ffi; + +use crate::case::CaseContext; +use crate::runner::default_cases; +use crate::{Case, HarnessError, Output, Rng, UnitDiff}; + +/// The runner. +pub struct Runner; + +/// Generated cases per run at least (the ops are many and cheap). +const MIN_GENERATED: usize = 2000; + +fn harness(msg: impl Into) -> HarnessError { + HarnessError::new(msg.into()) +} + +const NOW: f64 = -f64::MAX; + +// ---- inputs --------------------------------------------------------------------------- + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "kind", rename_all = "snake_case")] +enum MakeIn { + Bounded { + o: [f64; 3], + x: [f64; 3], + y: [f64; 3], + scale: [f64; 2], + domain: [f64; 4], + }, + Normal { + o: [f64; 3], + n: [f64; 3], + }, + Canonical { + o: [f64; 3], + x: [f64; 3], + y: [f64; 3], + }, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct PlaneIn { + make: MakeIn, + #[serde(default)] + nurb: bool, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct SurfaceIn { + p: usize, + q: usize, + /// `net[i][j] = [x, y, z]`. + net: Vec>, + /// Optional weights (`w[i][j]`). + #[serde(default, skip_serializing_if = "Option::is_none")] + w: Option>>, + u: Vec, + v: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "kind", rename_all = "snake_case")] +enum CurveIn { + Segment { + a: [f64; 3], + b: [f64; 3], + }, + BSpline { + dim: u32, + p: usize, + cpts: Vec<[f64; 3]>, + #[serde(default, skip_serializing_if = "Option::is_none")] + w: Option>, + knots: Vec, + }, + Ellipse { + c: [f64; 3], + x: [f64; 3], + y: [f64; 3], + dom: [f64; 2], + r: [f64; 2], + }, + Circle { + c: [f64; 3], + x: [f64; 3], + y: [f64; 3], + dom: [f64; 2], + r: f64, + }, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "kind", rename_all = "snake_case")] +enum OtherIn { + Same, + Plane { plane: PlaneIn }, + BSpline { surface: SurfaceIn }, +} + +/// A database stream: the plane header, then the B-spline part from `surface`, as +/// upstream `WriteToDB` lays them out; `cut` drops trailing bytes of an ASCII stream, never +/// into the B-spline header or first control point (upstream reads those uninitialised; a +/// truncated binary stream is not comparable: upstream `SmDatabaseIO::ReadDouble` reads +/// past the end without failing and returns stale bytes, the port fails). +#[derive(Debug, Clone, Serialize, Deserialize)] +struct DbIn { + binary: bool, + version: u32, + /// `O X Y amin amax scale` (15 values). + header: Vec, + surface: SurfaceIn, + #[serde(default = "one")] + kt: u64, + #[serde(default = "nine")] + form: u64, + #[serde(default)] + rat: Option, + #[serde(default)] + cut: usize, +} + +fn one() -> u64 { + 1 +} + +fn nine() -> u64 { + 9 +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "op", rename_all = "snake_case")] +enum Inputs { + Offset { + a: PlaneIn, + dist: f64, + }, + Transform { + a: PlaneIn, + frame: [[f64; 3]; 3], + #[serde(default)] + scale: Option<[f64; 3]>, + }, + TrimDomain { + a: PlaneIn, + dom: [f64; 4], + }, + IsNurbPlane { + s: SurfaceIn, + scale: f64, + }, + Intersect { + #[serde(default)] + global: bool, + a: PlaneIn, + da: [f64; 4], + b: OtherIn, + db: [f64; 4], + #[serde(default)] + tol: Option, + }, + TrimCurve { + a: PlaneIn, + dom: [f64; 4], + curve: CurveIn, + tol: f64, + }, + Line { + a: PlaneIn, + dom: [f64; 4], + p: [[f64; 3]; 2], + tol: f64, + }, + Ellipse { + a: PlaneIn, + dom: [f64; 4], + c: [f64; 3], + r: [f64; 2], + axes: [[f64; 3]; 2], + ivl: [f64; 2], + tol: f64, + }, + ReadDb(DbIn), +} + +// ---- C++ side ------------------------------------------------------------------------- + +fn ffi_plane(p: &PlaneIn) -> ffi::PlaneIn { + let make = match p.make.clone() { + MakeIn::Bounded { + o, + x, + y, + scale, + domain, + } => ffi::Make::Bounded { + o, + x, + y, + scale, + domain, + }, + MakeIn::Normal { o, n } => ffi::Make::Normal { o, n }, + MakeIn::Canonical { o, x, y } => ffi::Make::Canonical { o, x, y }, + }; + ffi::PlaneIn { + make, + nurb: p.nurb, + } +} + +fn ffi_surface(s: &SurfaceIn) -> ffi::SurfaceData { + let net = s + .net + .iter() + .enumerate() + .map(|(i, r)| { + r.iter() + .enumerate() + .map(|(j, c)| { + let w = s + .w + .as_ref() + .and_then(|w| w.get(i).and_then(|r| r.get(j)).copied()) + .unwrap_or(NOW); + [c[0], c[1], c[2], w] + }) + .collect() + }) + .collect(); + ffi::SurfaceData { + p: s.p, + q: s.q, + net, + u: s.u.clone(), + v: s.v.clone(), + } +} + +fn ffi_curve(c: &CurveIn) -> ffi::CurveIn { + match c.clone() { + CurveIn::Segment { a, b } => ffi::CurveIn::Segment(a, b), + CurveIn::BSpline { + dim, + p, + cpts, + w, + knots, + } => ffi::CurveIn::BSpline(ffi::CurveData { + dim, + p, + cpts: cpts + .iter() + .enumerate() + .map(|(i, q)| { + let wi = w.as_ref().and_then(|w| w.get(i).copied()).unwrap_or(NOW); + [q[0], q[1], q[2], wi] + }) + .collect(), + knots, + }), + CurveIn::Ellipse { c, x, y, dom, r } => ffi::CurveIn::Ellipse { c, x, y, dom, r }, + CurveIn::Circle { c, x, y, dom, r } => ffi::CurveIn::Circle { c, x, y, dom, r }, + } +} + +/// The bytes of a database stream. +fn db_bytes(d: &DbIn) -> Result, HarnessError> { + if d.binary && d.cut > 0 { + return Err(harness("truncated binary streams are not comparable")); + } + let s = &d.surface; + let n = s.net.len().checked_sub(1).ok_or_else(|| harness("empty net"))? as i64; + let m = s + .net + .first() + .map_or(0, Vec::len) + .checked_sub(1) + .ok_or_else(|| harness("empty net row"))? as i64; + let rational = s.w.is_some(); + let rat = d.rat.unwrap_or(i16::from(rational)); + let mut vals: Vec = Vec::new(); + for (i, row) in s.net.iter().enumerate() { + for (j, c) in row.iter().enumerate() { + vals.extend_from_slice(c); + if let Some(w) = &s.w { + vals.push(w.get(i).and_then(|r| r.get(j)).copied().unwrap_or(1.0)); + } + } + } + let n_pts = vals.len(); + vals.extend_from_slice(&s.u); + vals.extend_from_slice(&s.v); + let mut b = Vec::new(); + let mut min_len = 0; + if d.binary { + for x in &d.header { + b.extend_from_slice(&x.to_ne_bytes()); + } + b.extend_from_slice(&n.to_ne_bytes()); + b.extend_from_slice(&m.to_ne_bytes()); + b.extend_from_slice(&(s.p as i16).to_ne_bytes()); + b.extend_from_slice(&(s.q as i16).to_ne_bytes()); + b.extend_from_slice(&rat.to_ne_bytes()); + if d.version > 32 { + b.extend_from_slice(&d.kt.to_ne_bytes()); + b.extend_from_slice(&d.form.to_ne_bytes()); + } + for x in &vals { + b.extend_from_slice(&x.to_ne_bytes()); + } + } else { + let mut t = String::new(); + for (k, x) in d.header.iter().enumerate() { + let _ = write!(t, "{x:.17e}"); + // O, X, Y one per line; the domain corners on one line; the scales on one + t.push(if matches!(k, 2 | 5 | 8 | 12 | 14) { '\n' } else { ' ' }); + } + let _ = write!(t, "{n} {m}\n{} {}\n{rat}\n", s.p, s.q); + if d.version > 32 { + let _ = write!(t, "{}\n{}\n", d.kt, d.form); + } + let per = if rational { 4 } else { 3 }; + let (pts, knots) = vals.split_at(n_pts); + for c in pts.chunks(per) { + let s: Vec = c.iter().map(|x| format!("{x:.17e}")).collect(); + t.push_str(&s.join(" ")); + t.push('\n'); + // upstream reads the B-spline header and first control point uninitialised + // when they are unreadable: a cut must leave them whole + if min_len == 0 { + min_len = t.len(); + } + } + for x in knots { + let _ = writeln!(t, "{x:.17e}"); + } + b = t.into_bytes(); + } + let len = b.len().saturating_sub(d.cut); + if d.cut > 0 && len < min_len { + return Err(harness("cut into the B-spline header (uninitialised upstream)")); + } + b.truncate(len); + Ok(b) +} + +fn ffi_op(i: &Inputs) -> Result { + Ok(match i { + Inputs::Offset { a, dist } => ffi::Op::Offset { + a: ffi_plane(a), + dist: *dist, + }, + Inputs::Transform { a, frame, scale } => ffi::Op::Transform { + a: ffi_plane(a), + frame: *frame, + scale: *scale, + }, + Inputs::TrimDomain { a, dom } => ffi::Op::TrimDomain { + a: ffi_plane(a), + dom: *dom, + }, + Inputs::IsNurbPlane { s, scale } => ffi::Op::IsNurbPlane { + s: ffi_surface(s), + scale: *scale, + }, + Inputs::Intersect { + global, + a, + da, + b, + db, + tol, + } => ffi::Op::Intersect { + global: *global, + a: ffi_plane(a), + da: *da, + b: match b { + OtherIn::Same => ffi::OtherIn::Same, + OtherIn::Plane { plane } => ffi::OtherIn::Plane(ffi_plane(plane)), + OtherIn::BSpline { surface } => ffi::OtherIn::BSpline(ffi_surface(surface)), + }, + db: *db, + tol: *tol, + }, + Inputs::TrimCurve { + a, + dom, + curve, + tol, + } => ffi::Op::TrimCurve { + a: ffi_plane(a), + dom: *dom, + curve: ffi_curve(curve), + tol: *tol, + }, + Inputs::Line { a, dom, p, tol } => ffi::Op::Line { + a: ffi_plane(a), + dom: *dom, + p: *p, + tol: *tol, + }, + Inputs::Ellipse { + a, + dom, + c, + r, + axes, + ivl, + tol, + } => ffi::Op::Ellipse { + a: ffi_plane(a), + dom: *dom, + c: *c, + r: *r, + axes: *axes, + ivl: *ivl, + tol: *tol, + }, + Inputs::ReadDb(d) => ffi::Op::ReadDb { + binary: d.binary, + version: d.version, + bytes: db_bytes(d)?, + }, + }) +} + +fn to_output(rec: Vec) -> Output { + Output::new().values("rec", rec) +} + +fn cpp(i: &Inputs) -> Result { + match ffi::run(&ffi_op(i)?) { + Ok(rec) => Ok(to_output(rec)), + Err(e) => Err(harness(e.to_string())), + } +} + +// ---- Rust side ------------------------------------------------------------------------ + +fn v3(p: [f64; 3]) -> Vec3 { + Vec3::from_array(p) +} + +fn ext(d: [f64; 4]) -> Extent2d { + Extent2d::from_bounds(d[0], d[1], d[2], d[3]) +} + +fn fl(x: bool) -> f64 { + if x { + 1.0 + } else { + 0.0 + } +} + +/// The `SmStatus` of a Rust error; `1007` for `InvalidInput`, `-1` for one upstream +/// cannot return. +fn status(e: &SolidError) -> f64 { + match e { + SolidError::InvalidInput { .. } => 1007.0, + SolidError::Upstream { code, .. } => f64::from(*code), + _ => -1.0, + } +} + +/// A failed Rust operation: the whole case is deferred, or the harness failed. +enum Fail { + Deferred(Box), + Harness(HarnessError), +} + +impl From for Fail { + fn from(e: HarnessError) -> Self { + Fail::Harness(e) + } +} + +/// Defers on [`SolidError::Unported`], else passes the result on. +fn defer(r: solidcore::Result) -> Result, Fail> { + if let Err(e) = &r { + if let Some(d) = Output::unported(e) { + return Err(Fail::Deferred(Box::new(d))); + } + } + Ok(r) +} + +/// `Ok(v)` with status `0` pushed, or the error status pushed (`None`). +fn st(o: &mut Vec, r: solidcore::Result) -> Result, Fail> { + match defer(r)? { + Ok(v) => { + o.push(0.0); + Ok(Some(v)) + } + Err(e) => { + o.push(status(&e)); + Ok(None) + } + } +} + +fn put_vec(o: &mut Vec, v: Vec3) { + o.extend([v.x, v.y, v.z]); +} + +fn put_dom(o: &mut Vec, e: &Extent2d) { + o.extend([e.min().x, e.min().y, e.max().x, e.max().y]); +} + +fn put_ivl(o: &mut Vec, e: &Extent1d) { + o.extend([e.min(), e.max()]); +} + +fn put_surface_nurb(o: &mut Vec, s: Option<&NurbSurface>) { + let Some(sur) = s else { + o.push(0.0); + return; + }; + o.extend([ + 1.0, + sur.n() as f64, + sur.m() as f64, + sur.p() as f64, + sur.q() as f64, + sur.r() as f64, + sur.s() as f64, + ]); + for row in sur.rows() { + for c in row { + o.extend([c.x, c.y, c.z, c.w]); + } + } + o.extend_from_slice(sur.u_knots()); + o.extend_from_slice(sur.v_knots()); +} + +fn put_state(o: &mut Vec, a: &Plane) { + let pos = a.position(); + o.push(a.type_code() as f64); + put_vec(o, pos.origin()); + put_vec(o, pos.x_axis()); + put_vec(o, pos.y_axis()); + put_vec(o, pos.z_axis()); + put_dom(o, &a.step_uv_domain()); + let sc = a.uv_scale(); + o.extend([sc.x, sc.y]); + let base = a.base(); + o.extend([ + fl(base.is_out_of_bounds_enabled()), + f64::from(base.knot_type() as i32), + f64::from(base.form() as i32), + ]); + put_surface_nurb(o, base.gw_nurb()); +} + +fn put_curve_nurb(o: &mut Vec, c: &BSplineCurve) { + o.extend([f64::from(c.knot_type() as i32), f64::from(c.form() as i32)]); + match c.gw_nurb() { + None => o.push(0.0), + Some(cur) => { + o.extend([1.0, cur.n() as f64, cur.degree() as f64, cur.m() as f64]); + for p in cur.cpts() { + o.extend([p.x, p.y, p.z, p.w]); + } + o.extend_from_slice(cur.knots()); + } + } +} + +fn put_curve(o: &mut Vec, c: Option<&Curve>) -> Result<(), Fail> { + let Some(c) = c else { + o.push(0.0); + return Ok(()); + }; + o.extend([1.0, c.type_code() as f64, c.dim() as f64]); + match c.kind() { + CurveKind::Line(l) => { + put_vec(o, l.line_point()); + put_vec(o, l.line_vector()); + put_ivl(o, &l.step_interval()); + o.extend([l.line_scale(), fl(l.inside_out())]); + put_curve_nurb(o, l.base()); + } + CurveKind::Ellipse(e) => { + let pos = e.position(); + put_vec(o, pos.origin()); + put_vec(o, pos.x_axis()); + put_vec(o, pos.y_axis()); + o.extend([e.x_radius(), e.y_radius()]); + put_ivl(o, &e.step_interval()); + o.push(fl(e.inside_out())); + put_curve_nurb(o, e.base()); + } + CurveKind::BSpline(bs) => put_curve_nurb(o, bs), + _ => return Err(Fail::Harness(harness("unexpected curve kind"))), + } + put_ivl(o, &c.natural_interval()); + Ok(()) +} + +fn put_intersection(o: &mut Vec, x: &SurfaceIntersection) -> Result<(), Fail> { + o.push(x.curves_3d.len() as f64); + for c in &x.curves_3d { + put_curve(o, Some(c))?; + } + for uv in [&x.surface1_uv_curves, &x.surface2_uv_curves] { + o.push(uv.len() as f64); + o.extend(uv.iter().map(|c| fl(c.is_some()))); + } + o.push(x.curve_types.len() as f64); + o.extend(x.curve_types.iter().map(|t| f64::from(*t as i32))); + o.push(x.deviations.len() as f64); + o.extend_from_slice(&x.deviations); + Ok(()) +} + +/// Builds a plane (with its NURB when asked; the status is ignored as +/// `GetOrCreateGwNurbPointer`'s). +fn rust_plane(p: &PlaneIn) -> Result { + let mut plane = match &p.make { + MakeIn::Bounded { + o, + x, + y, + scale, + domain, + } => Plane::new( + v3(*o), + v3(*x), + v3(*y), + Vec2::new(scale[0], scale[1]), + &ext(*domain), + ), + MakeIn::Normal { o, n } => Plane::from_normal(v3(*o), v3(*n)), + MakeIn::Canonical { o, x, y } => { + let frame = Axis2Placement::new(v3(*o), v3(*x), v3(*y)); + match defer(Plane::create_canonical(&frame))? { + Ok(p) => p, + Err(_) => return Err(Fail::Harness(harness("canonical plane failed"))), + } + } + }; + if p.nurb && plane.base().gw_nurb().is_none() { + let _ = defer(plane.make_nurb())?; + } + Ok(plane) +} + +fn rust_surface(s: &SurfaceIn) -> Result { + let net = s + .net + .iter() + .enumerate() + .map(|(i, r)| { + r.iter() + .enumerate() + .map(|(j, c)| { + let w = s + .w + .as_ref() + .and_then(|w| w.get(i).and_then(|r| r.get(j)).copied()) + .unwrap_or(NOW); + CPoint::new(c[0], c[1], c[2], w) + }) + .collect() + }) + .collect(); + let sur = NurbSurface::new(net, s.p, s.q, s.u.clone(), s.v.clone()) + .map_err(|e| harness(format!("surface: {e}")))?; + Ok(BSplineSurface::from_nurb(sur, false)) +} + +fn rust_curve(k: &Kernel, c: &CurveIn) -> Result { + let opts = EllipseOptions::default(); + let r = match c { + CurveIn::Segment { a, b } => { + Line::create_line_segment(3, v3(*a), v3(*b), None).map(Curve::from) + } + CurveIn::BSpline { + dim, + p, + cpts, + w, + knots, + } => { + let pw: Vec = cpts + .iter() + .enumerate() + .map(|(i, q)| { + let wi = w.as_ref().and_then(|w| w.get(i).copied()).unwrap_or(NOW); + CPoint::new(q[0], q[1], q[2], wi) + }) + .collect(); + let n = pw.len().checked_sub(1).ok_or_else(|| harness("empty B-spline"))?; + let m = knots.len().checked_sub(1).ok_or_else(|| harness("no knots"))?; + BSplineCurve::from_data(u64::from(*dim), n, m, *p, &pw, knots).map(Curve::from) + } + CurveIn::Ellipse { c, x, y, dom, r } => Ellipse::new( + k, + v3(*c), + v3(*x), + v3(*y), + Extent1d::from_min_max(dom[0], dom[1]), + r[0], + r[1], + &opts, + ) + .map(Curve::from), + CurveIn::Circle { c, x, y, dom, r } => Ellipse::new_circle( + k, + v3(*c), + v3(*x), + v3(*y), + Extent1d::from_min_max(dom[0], dom[1]), + *r, + &opts, + ) + .map(Curve::from), + }; + match defer(r)? { + Ok(c) => Ok(c), + Err(e) => Err(Fail::Harness(harness(format!("curve: {e}")))), + } +} + +#[allow(clippy::too_many_lines)] // one arm per op +fn rust_op(k: &Kernel, i: &Inputs, o: &mut Vec) -> Result<(), Fail> { + match i { + Inputs::Offset { a, dist } => { + let a = rust_plane(a)?; + if let Some(p) = st(o, a.create_offset_surface(*dist))? { + put_state(o, &p); + } + } + Inputs::Transform { a, frame, scale } => { + let mut a = rust_plane(a)?; + let f = Axis2Placement::new(v3(frame[0]), v3(frame[1]), v3(frame[2])); + st(o, a.transform(&f, scale.map(v3)))?; + put_state(o, &a); + } + Inputs::TrimDomain { a, dom } => { + let mut a = rust_plane(a)?; + st(o, a.trim_with_domain(&ext(*dom)))?; + put_state(o, &a); + } + Inputs::IsNurbPlane { s, scale } => { + let s = rust_surface(s)?; + o.push(0.0); + match defer(Plane::is_nurb_surface_plane(&s, *scale))? { + Ok(Some(p)) => { + o.extend([1.0, 1.0]); + put_state(o, &p); + } + Ok(None) => o.extend([0.0, 0.0]), + // upstream's SER status returned through the SmBoolean: TRUE, no plane + Err(_) => o.extend([1.0, 0.0]), + } + } + Inputs::Intersect { + global, + a, + da, + b, + db, + tol, + } => { + let a = rust_plane(a)?; + if *global { + let sa = Surface::from(a); + let other = match b { + OtherIn::Same => None, + OtherIn::Plane { plane } => Some(Surface::from(rust_plane(plane)?)), + OtherIn::BSpline { surface } => Some(Surface::from(rust_surface(surface)?)), + }; + let other_ref = other.as_ref().unwrap_or(&sa); + let r = sa.global_surface_intersect( + &ext(*da), + other_ref, + &ext(*db), + [true, true], + *tol, + None, + ); + if let Some(x) = st(o, r)? { + put_intersection(o, &x)?; + } + } else { + let other = match b { + OtherIn::Same => None, + OtherIn::Plane { plane } => Some(rust_plane(plane)?), + OtherIn::BSpline { .. } => { + return Err(Fail::Harness(harness("IntersectWithPlane needs a plane"))) + } + }; + let other_ref = other.as_ref().unwrap_or(&a); + let r = a.intersect_with_plane(&ext(*da), other_ref, &ext(*db), *tol); + if let Some((more, x)) = st(o, r)? { + o.push(fl(more)); + put_intersection(o, &x)?; + } + } + } + Inputs::TrimCurve { + a, + dom, + curve, + tol, + } => { + let a = rust_plane(a)?; + let c = rust_curve(k, curve)?; + if let Some(cs) = st(o, a.trim_curve_to_plane_domain(k, &ext(*dom), &c, *tol))? { + o.push(cs.len() as f64); + for c in &cs { + put_curve(o, Some(c))?; + } + } + } + Inputs::Line { a, dom, p, tol } => { + let a = rust_plane(a)?; + let r = a.make_new_plane_line(&ext(*dom), v3(p[0]), v3(p[1]), *tol); + match defer(r)? { + Ok((c, found)) => { + o.extend([0.0, fl(found)]); + put_curve(o, c.as_ref())?; + } + Err(e) => return Err(Fail::Harness(harness(format!("line: {e}")))), + } + } + Inputs::Ellipse { + a, + dom, + c, + r, + axes, + ivl, + tol, + } => { + let a = rust_plane(a)?; + let res = a.make_new_plane_ellipse( + k, + &ext(*dom), + v3(*c), + r[0], + r[1], + v3(axes[0]), + v3(axes[1]), + &Extent1d::from_min_max(ivl[0], ivl[1]), + *tol, + ); + if let Some(cs) = st(o, res)? { + o.push(cs.len() as f64); + for c in &cs { + put_curve(o, Some(c))?; + } + } + } + Inputs::ReadDb(d) => { + let bytes = db_bytes(d)?; + let mut r = DatabaseReader::new(); + r.open_for_read( + bytes, + if d.binary { + FileType::Binary + } else { + FileType::Ascii + }, + ); + if let Some(p) = st(o, Plane::read_from_db(&mut r, u64::from(d.version)))? { + put_state(o, &p); + } + } + } + Ok(()) +} + +fn rust(i: &Inputs) -> Result { + let k = Kernel::default(); + let mut o = Vec::new(); + match rust_op(&k, i, &mut o) { + Ok(()) => Ok(to_output(o)), + Err(Fail::Deferred(d)) => Ok(*d), + Err(Fail::Harness(e)) => Err(e), + } +} + +// ---- generated cases ------------------------------------------------------------------ + +fn coord(rng: &mut Rng) -> f64 { + // coordinates on a coarse grid sometimes, so coincidences happen + if rng.chance(0.3) { + rng.range_i64(-4, 4) as f64 + } else { + rng.uniform(-10.0, 10.0) + } +} + +fn pt(rng: &mut Rng) -> [f64; 3] { + [coord(rng), coord(rng), coord(rng)] +} + +fn add(a: [f64; 3], b: [f64; 3]) -> [f64; 3] { + [a[0] + b[0], a[1] + b[1], a[2] + b[2]] +} + +fn mul(a: [f64; 3], s: f64) -> [f64; 3] { + [a[0] * s, a[1] * s, a[2] * s] +} + +fn cross(a: [f64; 3], b: [f64; 3]) -> [f64; 3] { + [ + a[1] * b[2] - a[2] * b[1], + a[2] * b[0] - a[0] * b[2], + a[0] * b[1] - a[1] * b[0], + ] +} + +fn norm(a: [f64; 3]) -> [f64; 3] { + let l = (a[0] * a[0] + a[1] * a[1] + a[2] * a[2]).sqrt(); + [a[0] / l, a[1] / l, a[2] / l] +} + +fn unit_dir(rng: &mut Rng) -> [f64; 3] { + if rng.chance(0.3) { + let mut d = [0.0; 3]; + let i = rng.below(3) as usize; + if let Some(c) = d.get_mut(i) { + *c = if rng.chance(0.5) { 1.0 } else { -1.0 }; + } + return d; + } + loop { + let d = rng.point3(-1.0, 1.0); + let l = (d[0] * d[0] + d[1] * d[1] + d[2] * d[2]).sqrt(); + if l > 0.2 { + return [d[0] / l, d[1] / l, d[2] / l]; + } + } +} + +/// An orthonormal pair. +fn frame(rng: &mut Rng) -> ([f64; 3], [f64; 3]) { + let x = unit_dir(rng); + let mut t = unit_dir(rng); + while cross(x, t).iter().map(|c| c * c).sum::() < 0.05 { + t = unit_dir(rng); + } + let z = norm(cross(x, t)); + (x, cross(z, x)) +} + +/// A scale factor for the whole case: mostly 1, sometimes tiny or huge. +fn world_scale(rng: &mut Rng) -> f64 { + match rng.below(10) { + 0 => 1e-4, + 1 => 1e5, + _ => 1.0, + } +} + +fn domain(rng: &mut Rng) -> [f64; 4] { + let u0 = coord(rng); + let v0 = coord(rng); + let du = if rng.chance(0.05) { 1e-9 } else { rng.uniform(0.5, 8.0) }; + let dv = rng.uniform(0.5, 8.0); + [u0, v0, u0 + du, v0 + dv] +} + +fn gen_plane(rng: &mut Rng, s: f64) -> PlaneIn { + let o = mul(pt(rng), s); + let make = match rng.below(10) { + 0 => MakeIn::Normal { + o, + n: unit_dir(rng), + }, + 1 => { + let (x, y) = frame(rng); + MakeIn::Canonical { o, x, y } + } + _ => { + let (x, mut y) = frame(rng); + if rng.chance(0.1) { + // slightly skewed axes: SetCanonical straightens them + y = add(y, mul(x, 0.01)); + } + let scale = if rng.chance(0.3) { + [rng.uniform(0.2, 3.0), rng.uniform(0.2, 3.0)] + } else { + [1.0, 1.0] + }; + MakeIn::Bounded { + o, + x, + y, + scale, + domain: domain(rng).map(|v| v * s), + } + } + }; + PlaneIn { + make, + nurb: rng.chance(0.5), + } +} + +/// Origin, X, Y, scale and domain of a plane input (for points on it); an infinite +/// plane gets a finite stand-in domain. +fn plane_data(p: &PlaneIn) -> ([f64; 3], [f64; 3], [f64; 3], [f64; 2], [f64; 4]) { + match &p.make { + MakeIn::Bounded { + o, + x, + y, + scale, + domain, + } => (*o, norm(*x), norm(*y), *scale, *domain), + MakeIn::Canonical { o, x, y } => (*o, norm(*x), norm(*y), [1.0, 1.0], [-5.0, -5.0, 5.0, 5.0]), + MakeIn::Normal { o, n } => { + let n = norm(*n); + let t = if n[0].abs() < 0.9 { [1.0, 0.0, 0.0] } else { [0.0, 1.0, 0.0] }; + let x = norm(cross(n, t)); + (*o, x, cross(n, x), [1.0, 1.0], [-5.0, -5.0, 5.0, 5.0]) + } + } +} + +/// The point at `(u, v)` of a plane input. +fn at(p: &PlaneIn, u: f64, v: f64) -> [f64; 3] { + let (o, x, y, s, _) = plane_data(p); + add(add(o, mul(x, u * s[0])), mul(y, v * s[1])) +} + +/// A domain for an op: the plane's, a sub-domain, or one sticking out. +fn op_domain(rng: &mut Rng, p: &PlaneIn) -> [f64; 4] { + let (.., d) = plane_data(p); + match rng.below(4) { + 0 => d, + 1 => { + let a = rng.uniform(0.0, 0.4); + let b2 = rng.uniform(0.6, 1.0); + [ + d[0] + a * (d[2] - d[0]), + d[1] + a * (d[3] - d[1]), + d[0] + b2 * (d[2] - d[0]), + d[1] + b2 * (d[3] - d[1]), + ] + } + 2 => [d[0] - 1.0, d[1], d[2] + 0.5, d[3]], + _ => domain(rng), + } +} + +fn tol(rng: &mut Rng, s: f64) -> f64 { + match rng.below(6) { + 0 => 0.0, + 1 => 1e-3 * s, + 2 => 0.5 * s, + _ => 1e-6 * s, + } +} + +fn gen_bspline_surface(rng: &mut Rng, s: f64) -> SurfaceIn { + // mostly bilinear or bi-quadratic planar patches, sometimes bent or rational + let p = 1 + rng.below(2) as usize; + let q = 1 + rng.below(2) as usize; + let n1 = p + 1 + rng.below(2) as usize; + let m1 = q + 1 + rng.below(2) as usize; + let (x, y) = frame(rng); + let o = mul(pt(rng), s); + let su = rng.uniform(1.0, 6.0) * s; + let sv = rng.uniform(1.0, 6.0) * s; + let skew = if rng.chance(0.2) { rng.uniform(-0.5, 0.5) } else { 0.0 }; + let bend = if rng.chance(0.25) { rng.uniform(0.01, 1.0) * s } else { 0.0 }; + let z = cross(x, y); + let net: Vec> = (0..n1) + .map(|i| { + (0..m1) + .map(|j| { + let a = i as f64 / (n1 - 1) as f64; + let c = j as f64 / (m1 - 1) as f64; + let h = if i > 0 && i + 1 < n1 { bend } else { 0.0 }; + add(add(add(o, mul(x, a * su + c * skew * su)), mul(y, c * sv)), mul(z, h)) + }) + .collect() + }) + .collect(); + let knots = |n1: usize, p: usize, lo: f64, hi: f64| -> Vec { + let inner = n1 - p - 1; + let mut k = vec![lo; p + 1]; + for i in 1..=inner { + k.push(lo + (hi - lo) * i as f64 / (inner + 1) as f64); + } + k.extend(vec![hi; p + 1]); + k + }; + let (u0, v0) = if rng.chance(0.5) { (0.0, 0.0) } else { (coord(rng), coord(rng)) }; + let w = if rng.chance(0.15) { + Some((0..n1).map(|_| (0..m1).map(|_| rng.uniform(0.5, 2.0)).collect()).collect()) + } else { + None + }; + SurfaceIn { + p, + q, + net, + w, + u: knots(n1, p, u0, u0 + rng.uniform(0.5, 3.0)), + v: knots(m1, q, v0, v0 + rng.uniform(0.5, 3.0)), + } +} + +/// A curve near the plane (in it, crossing it, or off it). +fn gen_curve(rng: &mut Rng, p: &PlaneIn, s: f64) -> CurveIn { + let (_, x, y, sc, d) = plane_data(p); + let z = cross(x, y); + let off = if rng.chance(0.2) { rng.uniform(-1.0, 1.0) * s } else { 0.0 }; + let q = |rng: &mut Rng| { + let u = rng.uniform(d[0] - 0.5 * (d[2] - d[0]), d[2] + 0.5 * (d[2] - d[0])); + let v = rng.uniform(d[1] - 0.5 * (d[3] - d[1]), d[3] + 0.5 * (d[3] - d[1])); + let _ = sc; + add(at(p, u, v), mul(z, off)) + }; + match rng.below(5) { + 0 | 1 => { + let a = q(rng); + let mut b2 = q(rng); + if a == b2 { + b2 = add(b2, x); + } + CurveIn::Segment { a, b: b2 } + } + 2 => { + let n1 = 3 + rng.below(4) as usize; + let pdeg = 1 + rng.below(3.min(n1 as u64 - 1)) as usize; + let cpts: Vec<[f64; 3]> = (0..n1).map(|_| q(rng)).collect(); + let inner = n1 - pdeg - 1; + let mut knots = vec![0.0; pdeg + 1]; + for i in 1..=inner { + knots.push(i as f64 / (inner + 1) as f64); + } + knots.extend(vec![1.0; pdeg + 1]); + CurveIn::BSpline { + dim: 3, + p: pdeg, + cpts, + w: None, + knots, + } + } + k => { + let c = q(rng); + let ang = rng.uniform(0.0, std::f64::consts::TAU); + let (ca, sa) = (ang.cos(), ang.sin()); + let ex = add(mul(x, ca), mul(y, sa)); + let ey = add(mul(x, -sa), mul(y, ca)); + let ey = if rng.chance(0.3) { mul(ey, -1.0) } else { ey }; + let d0 = if rng.chance(0.5) { 0.0 } else { rng.uniform(-180.0, 180.0) }; + let len = if rng.chance(0.5) { 360.0 } else { rng.uniform(10.0, 359.0) }; + let r0 = rng.uniform(0.3, 5.0) * s; + if k == 3 { + CurveIn::Circle { + c, + x: ex, + y: ey, + dom: [d0, d0 + len], + r: r0, + } + } else { + CurveIn::Ellipse { + c, + x: ex, + y: ey, + dom: [d0, d0 + len], + r: [r0, rng.uniform(0.3, 5.0) * s], + } + } + } + } +} + +fn gen_frame(rng: &mut Rng, s: f64) -> [[f64; 3]; 3] { + if rng.chance(0.1) { + return [[0.0; 3], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]; + } + let (x, y) = frame(rng); + [mul(pt(rng), s), x, y] +} + +#[allow(clippy::too_many_lines)] // one arm per op +fn gen_case(rng: &mut Rng) -> Inputs { + let s = world_scale(rng); + match rng.below(20) { + 0 => Inputs::Offset { + a: gen_plane(rng, s), + dist: rng.uniform(-5.0, 5.0) * s, + }, + 1 | 2 => Inputs::Transform { + a: gen_plane(rng, s), + frame: gen_frame(rng, s), + scale: match rng.below(4) { + 0 => { + let k = rng.uniform(0.2, 4.0); + Some([k, k, k]) + } + 1 => Some([1.0, rng.uniform(0.5, 2.0), 1.0]), + _ => None, + }, + }, + 3 => { + let a = gen_plane(rng, s); + let dom = op_domain(rng, &a); + Inputs::TrimDomain { a, dom } + } + 4 | 5 => Inputs::IsNurbPlane { + s: gen_bspline_surface(rng, s), + scale: *rng.choose(&[1.0, 10.0, 100.0, 1000.0]).unwrap_or(&1.0), + }, + 6..=9 => { + let a = gen_plane(rng, s); + let da = op_domain(rng, &a); + let bp = match rng.below(6) { + // parallel or coincident + 0 | 1 => { + let (o, x, y, sc, d) = plane_data(&a); + let z = cross(x, y); + let shift = if rng.chance(0.5) { 0.0 } else { rng.uniform(-1.0, 1.0) * s }; + let shift = if rng.chance(0.3) { 1e-9 * s } else { shift }; + let du = rng.uniform(-3.0, 3.0); + PlaneIn { + make: MakeIn::Bounded { + o: add(o, mul(z, shift)), + x, + y: if rng.chance(0.3) { mul(y, -1.0) } else { y }, + scale: sc, + domain: [d[0] + du, d[1], d[2] + du, d[3]], + }, + nurb: rng.chance(0.7), + } + } + // a plane through a point of A's domain (crossing A) + 2..=4 => { + let (.., d) = plane_data(&a); + let mid = at( + &a, + rng.uniform(d[0], d[2]), + rng.uniform(d[1], d[3]), + ); + let (x, y) = frame(rng); + let h = rng.uniform(0.5, 6.0) * s; + let w = rng.uniform(0.5, 6.0) * s; + PlaneIn { + make: MakeIn::Bounded { + o: mid, + x, + y, + scale: [1.0, 1.0], + domain: [-h, -w, h, w], + }, + nurb: rng.chance(0.5), + } + } + _ => gen_plane(rng, s), + }; + let db = op_domain(rng, &bp); + let b2 = if rng.chance(0.05) { + OtherIn::Same + } else { + OtherIn::Plane { plane: bp } + }; + Inputs::Intersect { + global: rng.chance(0.3), + a, + da, + b: b2, + db, + tol: if rng.chance(0.3) { Some(tol(rng, s)) } else { None }, + } + } + 10..=13 => { + let a = gen_plane(rng, s); + let dom = op_domain(rng, &a); + let curve = gen_curve(rng, &a, s); + Inputs::TrimCurve { + a, + dom, + curve, + tol: if rng.chance(0.5) { 1e-6 * s } else { tol(rng, s).max(1e-9 * s) }, + } + } + 14 | 15 => { + let a = gen_plane(rng, s); + let dom = op_domain(rng, &a); + let (.., d) = plane_data(&a); + let q = |rng: &mut Rng| { + at( + &a, + rng.uniform(d[0] - 2.0, d[2] + 2.0), + rng.uniform(d[1] - 2.0, d[3] + 2.0), + ) + }; + let p0 = q(rng); + let p1 = if rng.chance(0.1) { p0 } else { q(rng) }; + Inputs::Line { + a, + dom, + p: [p0, p1], + tol: tol(rng, s), + } + } + 16..=18 => { + let a = gen_plane(rng, s); + let dom = op_domain(rng, &a); + let (_, x, y, _, d) = plane_data(&a); + let c = at( + &a, + rng.uniform(d[0] - 0.5, d[2] + 0.5), + rng.uniform(d[1] - 0.5, d[3] + 0.5), + ); + let ang = rng.uniform(0.0, std::f64::consts::TAU); + let (ca, sa) = (ang.cos(), ang.sin()); + let ex = add(mul(x, ca), mul(y, sa)); + let ey = add(mul(x, -sa), mul(y, ca)); + let ey = if rng.chance(0.3) { mul(ey, -1.0) } else { ey }; + let rx = match rng.below(8) { + 0 => 0.0, + _ => rng.uniform(0.2, 6.0) * s, + }; + let ry = if rng.chance(0.5) { rx } else { rng.uniform(0.2, 6.0) * s }; + let d0 = if rng.chance(0.5) { 0.0 } else { rng.uniform(-180.0, 180.0) }; + let len = if rng.chance(0.5) { 360.0 } else { rng.uniform(10.0, 359.0) }; + Inputs::Ellipse { + a, + dom, + c, + r: [rx, ry], + axes: [ex, ey], + ivl: [d0, d0 + len], + tol: tol(rng, s).max(1e-9 * s), + } + } + _ => { + let a = gen_plane(rng, 1.0); + let (o, x, y, sc, d) = plane_data(&a); + let mut header = Vec::new(); + header.extend_from_slice(&o); + header.extend_from_slice(&x); + header.extend_from_slice(&y); + header.extend_from_slice(&d); + header.extend_from_slice(&sc); + let corner = |u: f64, v: f64| at(&a, u, v); + let surface = SurfaceIn { + p: 1, + q: 1, + net: vec![ + vec![corner(d[0], d[1]), corner(d[0], d[3])], + vec![corner(d[2], d[1]), corner(d[2], d[3])], + ], + w: None, + u: vec![d[0], d[0], d[2], d[2]], + v: vec![d[1], d[1], d[3], d[3]], + }; + let binary = rng.chance(0.5); + Inputs::ReadDb(DbIn { + binary, + version: if rng.chance(0.5) { 30 } else { 33 }, + header, + surface, + kt: rng.below(5), + form: rng.below(12), + rat: if rng.chance(0.05) { Some(2) } else { None }, + cut: if !binary && rng.chance(0.15) { + 1 + rng.below(40) as usize + } else { + 0 + }, + }) + } + } +} + +impl UnitDiff for Runner { + fn id(&self) -> &'static str { + "surface.plane_p2" + } + + fn generate(&self, rng: &mut Rng) -> Option { + for _ in 0..64 { + let i = gen_case(rng); + if ffi_op(&i).is_ok_and(|op| ffi::encode(&op).is_ok()) { + return serde_json::to_value(i).ok(); + } + } + None + } + + fn cases(&self, ctx: &CaseContext) -> Result, HarnessError> { + let ctx = CaseContext { + seeds: ctx.seeds.max(MIN_GENERATED), + ..ctx.clone() + }; + default_cases(self, &ctx) + } + + fn run_cpp(&self, case: &Case) -> Result { + cpp(&case.parse()?) + } + + fn run_rust(&self, case: &Case) -> Result { + rust(&case.parse()?) + } +} diff --git a/crates/solidcore-ffi/src/units/surface_plane_p2.rs b/crates/solidcore-ffi/src/units/surface_plane_p2.rs new file mode 100644 index 0000000000..6797bca823 --- /dev/null +++ b/crates/solidcore-ffi/src/units/surface_plane_p2.rs @@ -0,0 +1,650 @@ +//! FFI wrappers for unit `surface.plane_p2`. +//! +//! Shim: `harness/cpp/shim/surface_plane_p2.cpp` (`sc_surface_plane_p2_run`). Upstream: +//! `source/SMLib/src/SmPlane.cpp`, `source/SMLib/inc/SmPlane.h` (`SmPlane`). +//! +//! [`run`] runs one [`Op`] on freshly built objects and returns its record. Statuses are +//! `0` (`SM_SUCCESS`) or the `SmStatus`. +//! +//! A plane state is `type O[3] X[3] Y[3] Z[3] domain[4] scale[2] oob knot_type form` then +//! the plane's own NURB `has [n m p q r s cpts(x y z w) u v]`. A curve is `has` then +//! `type dim [P[3] V[3] dom[2] scale inside_out]` (lines) or `[C[3] X[3] Y[3] rx ry +//! dom[2] inside_out]` (ellipses and circles), then `knot_type form has [n p m cpts(x y z +//! w) knots]` and the natural interval. An intersection is `count curves`, `count` +//! UV-curve presence flags (twice), `count types`, `count deviations`. +//! +//! | [`Op`] | upstream | record | +//! |---------------|---------------------------------------------------------|--------| +//! | `Offset` | `CreateOffsetSurface(ctx, dist, 0, s)` | `status [state]` | +//! | `Transform` | `Transform(SmAxis2Placement(o, x, y), scale)` | `status state` | +//! | `TrimDomain` | `TrimWithDomain(dom)` | `status state` | +//! | `IsNurbPlane` | `IsNurbSurfacePlane(ctx, bss, p, scale)` | `0 result has [state]` | +//! | `Intersect` | `IntersectWithPlane(ctx, da, b, db, {1,1}, tol, NULL, ..)` | `status [needs_more intersection]` | +//! | `Global` | `GlobalSurfaceIntersect(ctx, da, b, db, {1,1}, tol, NULL, ..)` | `status [intersection]` | +//! | `TrimCurve` | `TrimCurveToPlaneDomain(dom, curve, tol, out)` | `status [count curves]` | +//! | `Line` | `MakeNewPlaneLine(ctx, dom, p0, p1, tol, found)` | `0 found curve` | +//! | `Ellipse` | `MakeNewPlaneEllipse(ctx, dom, c, rx, ry, x, y, ivl, tol, out)` | `status [count curves]` | +//! | `ReadDb` | `ReadFromDB(SmPlane_TYPE, db, ctx, s, version)` | `status [state]` | +//! +//! [`run`] accepts only finite inputs of magnitude at most [`MAX_COORD`], well-formed +//! clamped B-splines (at most [`MAX_INDEX`] + 1 control points per direction, degree at +//! most [`MAX_DEGREE`], positive weights or none), non-degenerate curve and plane +//! constructors and transform scales without a zero component (upstream collapses the +//! NURB, `IsNurbSurfacePlane` can then return `TRUE` without a plane and `Transform` +//! dereferences it). + +use crate::{call_with_buffer, FfiError}; + +mod sys { + extern "C" { + pub fn sc_surface_plane_p2_run( + input: *const f64, + n_in: i64, + out: *mut f64, + cap: i64, + out_len: *mut i64, + ) -> i32; + } +} + +/// Largest control point index `n` (curves: 32, surfaces: 16 per direction). +pub const MAX_INDEX: usize = 16; +/// Largest degree. +pub const MAX_DEGREE: usize = 8; +/// Largest input magnitude. +pub const MAX_COORD: f64 = 1e12; +/// Most database bytes. +pub const MAX_BYTES: usize = 1 << 20; +/// `NL_NOW`: the weight of a non-rational control point. +pub const NOW: f64 = -f64::MAX; + +/// How a plane is built, and whether its NURB is made right away +/// (`GetOrCreateGwNurbPointer`). +#[derive(Debug, Clone, PartialEq)] +pub struct PlaneIn { + /// The constructor. + pub make: Make, + /// Make the NURB after construction. + pub nurb: bool, +} + +/// A plane constructor. +#[derive(Debug, Clone, PartialEq)] +pub enum Make { + /// `SmPlane(o, x, y, SmVector2d(scale), SmExtent2d(domain), ctx)`. + Bounded { + /// Origin. + o: [f64; 3], + /// X axis. + x: [f64; 3], + /// Y axis. + y: [f64; 3], + /// u and v scales. + scale: [f64; 2], + /// `umin vmin umax vmax`. + domain: [f64; 4], + }, + /// `SmPlane(o, normal, ctx)`. + Normal { + /// Origin. + o: [f64; 3], + /// Normal. + n: [f64; 3], + }, + /// `SmPlane::CreateCanonical(ctx, SmAxis2Placement(o, x, y), p)`. + Canonical { + /// Origin. + o: [f64; 3], + /// X axis. + x: [f64; 3], + /// Y axis. + y: [f64; 3], + }, +} + +/// A clamped B-spline curve: `SmBSplineCurve(dim, n, m, p, Pw, U)`. +#[derive(Debug, Clone, PartialEq)] +pub struct CurveData { + /// Image dimension, 2 or 3. + pub dim: u32, + /// Degree. + pub p: usize, + /// Control points as stored (`x y z w`, `w` = [`NOW`] when non-rational). + pub cpts: Vec<[f64; 4]>, + /// Knots (`n + p + 2` of them). + pub knots: Vec, +} + +/// A curve operand. +#[derive(Debug, Clone, PartialEq)] +pub enum CurveIn { + /// `SmLine::CreateLineSegment(ctx, 3, a, b, l)`. + Segment([f64; 3], [f64; 3]), + /// A B-spline curve. + BSpline(CurveData), + /// `SmEllipse(c, x, y, SmExtent1d(d0, d1), rx, ry, 3, ctx)`. + Ellipse { + /// Centre. + c: [f64; 3], + /// X axis. + x: [f64; 3], + /// Y axis. + y: [f64; 3], + /// Angular domain (degrees). + dom: [f64; 2], + /// Radii. + r: [f64; 2], + }, + /// `SmCircle(c, x, y, SmExtent1d(d0, d1), r, 3, ctx)`. + Circle { + /// Centre. + c: [f64; 3], + /// X axis. + x: [f64; 3], + /// Y axis. + y: [f64; 3], + /// Angular domain (degrees). + dom: [f64; 2], + /// Radius. + r: f64, + }, +} + +/// A clamped B-spline surface: `SmBSplineSurface(gw_SURFACE*, FALSE, ctx)`. +#[derive(Debug, Clone, PartialEq)] +pub struct SurfaceData { + /// u degree. + pub p: usize, + /// v degree. + pub q: usize, + /// Control net, `net[i][j]` (`x y z w`). + pub net: Vec>, + /// u knots. + pub u: Vec, + /// v knots. + pub v: Vec, +} + +/// The other surface of an intersection. +#[derive(Debug, Clone, PartialEq)] +pub enum OtherIn { + /// The first plane itself. + Same, + /// Another plane. + Plane(PlaneIn), + /// A B-spline surface. + BSpline(SurfaceData), +} + +/// One op. +#[derive(Debug, Clone, PartialEq)] +pub enum Op { + /// `CreateOffsetSurface`. + Offset { + /// The plane. + a: PlaneIn, + /// Signed distance. + dist: f64, + }, + /// `Transform`. + Transform { + /// The plane. + a: PlaneIn, + /// Placement origin, X and Y axes. + frame: [[f64; 3]; 3], + /// Optional scale. + scale: Option<[f64; 3]>, + }, + /// `TrimWithDomain`. + TrimDomain { + /// The plane. + a: PlaneIn, + /// Domain. + dom: [f64; 4], + }, + /// `IsNurbSurfacePlane`. + IsNurbPlane { + /// The surface. + s: SurfaceData, + /// Tolerance scale. + scale: f64, + }, + /// `IntersectWithPlane` (`global == false`) or `GlobalSurfaceIntersect`. + Intersect { + /// `GlobalSurfaceIntersect`. + global: bool, + /// This plane. + a: PlaneIn, + /// Its domain. + da: [f64; 4], + /// The other surface (a plane for `IntersectWithPlane`). + b: OtherIn, + /// Its domain. + db: [f64; 4], + /// Approximation tolerance. + tol: Option, + }, + /// `TrimCurveToPlaneDomain`. + TrimCurve { + /// The plane. + a: PlaneIn, + /// Domain. + dom: [f64; 4], + /// The curve. + curve: CurveIn, + /// Tolerance. + tol: f64, + }, + /// `MakeNewPlaneLine`. + Line { + /// The plane. + a: PlaneIn, + /// Domain. + dom: [f64; 4], + /// End points. + p: [[f64; 3]; 2], + /// Tolerance. + tol: f64, + }, + /// `MakeNewPlaneEllipse`. + Ellipse { + /// The plane. + a: PlaneIn, + /// Domain. + dom: [f64; 4], + /// Centre. + c: [f64; 3], + /// Radii. + r: [f64; 2], + /// X and Y axes. + axes: [[f64; 3]; 2], + /// Angular interval (degrees). + ivl: [f64; 2], + /// Tolerance. + tol: f64, + }, + /// `ReadFromDB`. + ReadDb { + /// Binary file. + binary: bool, + /// Database version. + version: u32, + /// The stream bytes. + bytes: Vec, + }, +} + +fn bad(msg: &str) -> FfiError { + FfiError::InvalidArgument(msg.into()) +} + +fn finite(x: f64) -> Result { + if x.is_finite() && x.abs() <= MAX_COORD { + Ok(x) + } else { + Err(bad("non-finite or huge value")) + } +} + +fn check_knots(knots: &[f64], n1: usize, p: usize) -> Result<(), FfiError> { + if knots.len() != n1 + p + 1 { + return Err(bad("knot count")); + } + if knots.windows(2).any(|w| w.first() > w.last()) { + return Err(bad("knots decreasing")); + } + let (Some(&k0), Some(&km)) = (knots.first(), knots.last()) else { + return Err(bad("knot count")); + }; + if km <= k0 + || knots.iter().take(p + 1).any(|&k| k != k0) + || knots.iter().rev().take(p + 1).any(|&k| k != km) + { + return Err(bad("knots not clamped")); + } + let mut run = 0usize; + let mut last = f64::NAN; + for &k in knots.iter().filter(|&&k| k != k0 && k != km) { + run = if k == last { run + 1 } else { 1 }; + last = k; + if run > p { + return Err(bad("interior knot multiplicity")); + } + } + Ok(()) +} + +fn check_weights<'a>(mut ws: impl Iterator) -> Result<(), FfiError> { + let Some(first) = ws.next() else { + return Err(bad("no control points")); + }; + let rational = first[3] != NOW; + let ok = |w: f64| if rational { w > 0.0 && w <= MAX_COORD } else { w == NOW }; + if !ok(first[3]) || ws.any(|c| !ok(c[3])) { + return Err(bad("weights")); + } + Ok(()) +} + +fn len_sq(v: &[f64; 3]) -> f64 { + v[0] * v[0] + v[1] * v[1] + v[2] * v[2] +} + +struct Enc(Vec); + +impl Enc { + fn num(&mut self, x: f64) -> Result<(), FfiError> { + self.0.push(finite(x)?); + Ok(()) + } + fn int(&mut self, x: usize) { + self.0.push(x as f64); + } + fn flag(&mut self, b: bool) { + self.0.push(if b { 1.0 } else { 0.0 }); + } + fn nums(&mut self, v: &[f64]) -> Result<(), FfiError> { + v.iter().try_for_each(|&x| self.num(x)) + } + fn cpt(&mut self, c: &[f64; 4]) -> Result<(), FfiError> { + self.nums(&c[..3])?; + // the weight was checked (NL_NOW or positive) + self.0.push(c[3]); + Ok(()) + } + + fn plane(&mut self, p: &PlaneIn) -> Result<(), FfiError> { + match &p.make { + Make::Bounded { + o, + x, + y, + scale, + domain, + } => { + self.int(0); + self.nums(o)?; + self.nums(x)?; + self.nums(y)?; + self.nums(scale)?; + self.nums(domain)?; + } + Make::Normal { o, n } => { + // SmVector3d::MakeUnitOrthoVectors fails for |n|^2 < SM_EFF_ZERO_SQ and the + // constructor then reads uninitialised axes (SE ignores the status) + if len_sq(n) < 1.0e-24 { + return Err(bad("zero plane normal")); + } + self.int(1); + self.nums(o)?; + self.nums(n)?; + } + Make::Canonical { o, x, y } => { + self.int(2); + self.nums(o)?; + self.nums(x)?; + self.nums(y)?; + } + } + self.flag(p.nurb); + Ok(()) + } + + fn curve(&mut self, c: &CurveIn) -> Result<(), FfiError> { + match c { + CurveIn::Segment(a, b) => { + if a == b { + return Err(bad("degenerate segment")); + } + self.int(0); + self.nums(a)?; + self.nums(b) + } + CurveIn::BSpline(d) => { + let n1 = d.cpts.len(); + if !(2..=2 * MAX_INDEX + 1).contains(&n1) + || !(1..=MAX_DEGREE).contains(&d.p) + || d.p >= n1 + || (d.dim != 2 && d.dim != 3) + { + return Err(bad("B-spline curve size, degree or dimension")); + } + check_knots(&d.knots, n1, d.p)?; + check_weights(d.cpts.iter())?; + self.int(1); + self.int(d.dim as usize); + self.int(n1 - 1); + self.int(d.p); + self.int(d.knots.len() - 1); + for c in &d.cpts { + self.cpt(c)?; + } + self.nums(&d.knots) + } + CurveIn::Ellipse { c, x, y, dom, r } => { + Self::check_conic(x, y, dom, r[0].min(r[1]))?; + self.int(2); + self.nums(c)?; + self.nums(x)?; + self.nums(y)?; + self.nums(dom)?; + self.nums(r) + } + CurveIn::Circle { c, x, y, dom, r } => { + Self::check_conic(x, y, dom, *r)?; + self.int(3); + self.nums(c)?; + self.nums(x)?; + self.nums(y)?; + self.nums(dom)?; + self.num(*r) + } + } + } + + /// An ellipse needs independent axes, positive radii and a non-empty domain within + /// one turn (the NURB construction divides by them). + fn check_conic(x: &[f64; 3], y: &[f64; 3], dom: &[f64; 2], r: f64) -> Result<(), FfiError> { + let cr = [ + x[1] * y[2] - x[2] * y[1], + x[2] * y[0] - x[0] * y[2], + x[0] * y[1] - x[1] * y[0], + ]; + if len_sq(x) < 1e-12 || len_sq(y) < 1e-12 || len_sq(&cr) < 1e-12 * len_sq(x) * len_sq(y) + { + return Err(bad("ellipse axes")); + } + if !(r > 1e-9) || !(dom[1] - dom[0] > 1e-6) || dom[1] - dom[0] > 360.0 || dom[0].abs() > 720.0 + { + return Err(bad("ellipse radii or domain")); + } + Ok(()) + } + + fn surface(&mut self, d: &SurfaceData) -> Result<(), FfiError> { + let n1 = d.net.len(); + let m1 = d.net.first().map_or(0, Vec::len); + if !(2..=MAX_INDEX + 1).contains(&n1) + || !(2..=MAX_INDEX + 1).contains(&m1) + || d.net.iter().any(|r| r.len() != m1) + || !(1..=MAX_DEGREE).contains(&d.p) + || !(1..=MAX_DEGREE).contains(&d.q) + || d.p >= n1 + || d.q >= m1 + { + return Err(bad("B-spline surface size or degree")); + } + check_knots(&d.u, n1, d.p)?; + check_knots(&d.v, m1, d.q)?; + check_weights(d.net.iter().flatten())?; + self.int(n1 - 1); + self.int(m1 - 1); + self.int(d.p); + self.int(d.q); + self.int(d.u.len() - 1); + self.int(d.v.len() - 1); + for c in d.net.iter().flatten() { + self.cpt(c)?; + } + self.nums(&d.u)?; + self.nums(&d.v) + } + + fn opt(&mut self, t: Option) -> Result<(), FfiError> { + self.flag(t.is_some()); + self.num(t.unwrap_or(0.0)) + } + + fn op(&mut self, op: &Op) -> Result<(), FfiError> { + match op { + Op::Offset { a, dist } => { + self.int(1); + self.plane(a)?; + self.num(*dist) + } + Op::Transform { a, frame, scale } => { + if let Some(s) = scale { + if s.iter().any(|&c| c == 0.0) { + return Err(bad("zero scale component")); + } + } + self.int(2); + self.plane(a)?; + for v in frame { + self.nums(v)?; + } + self.flag(scale.is_some()); + self.nums(&scale.unwrap_or([1.0; 3])) + } + Op::TrimDomain { a, dom } => { + self.int(3); + self.plane(a)?; + self.nums(dom) + } + Op::IsNurbPlane { s, scale } => { + self.int(4); + self.surface(s)?; + self.num(*scale) + } + Op::Intersect { + global, + a, + da, + b, + db, + tol, + } => { + self.int(if *global { 6 } else { 5 }); + self.plane(a)?; + self.nums(da)?; + match b { + OtherIn::Same => self.flag(true), + OtherIn::Plane(p) => { + self.flag(false); + self.int(0); + self.plane(p)?; + } + OtherIn::BSpline(s) => { + if !*global { + return Err(bad("IntersectWithPlane needs a plane")); + } + self.flag(false); + self.int(1); + self.surface(s)?; + } + } + self.nums(db)?; + self.opt(*tol) + } + Op::TrimCurve { + a, + dom, + curve, + tol, + } => { + self.int(7); + self.plane(a)?; + self.nums(dom)?; + self.curve(curve)?; + self.num(*tol) + } + Op::Line { a, dom, p, tol } => { + self.int(8); + self.plane(a)?; + self.nums(dom)?; + self.nums(&p[0])?; + self.nums(&p[1])?; + self.num(*tol) + } + Op::Ellipse { + a, + dom, + c, + r, + axes, + ivl, + tol, + } => { + self.int(9); + self.plane(a)?; + self.nums(dom)?; + self.nums(c)?; + self.nums(r)?; + self.nums(&axes[0])?; + self.nums(&axes[1])?; + self.nums(ivl)?; + self.num(*tol) + } + Op::ReadDb { + binary, + version, + bytes, + } => { + if *version > 100 || bytes.len() > MAX_BYTES { + return Err(bad("version or byte count")); + } + self.int(10); + self.flag(*binary); + self.int(*version as usize); + self.int(bytes.len()); + for &b in bytes { + self.int(usize::from(b)); + } + Ok(()) + } + } + } +} + +/// The shim program of `op`. +/// +/// # Errors +/// +/// [`FfiError::InvalidArgument`] for inputs [`run`] does not accept. +pub fn encode(op: &Op) -> Result, FfiError> { + let mut e = Enc(Vec::new()); + e.op(op)?; + Ok(e.0) +} + +/// Runs `op` through the shim and returns its record (module docs). +/// +/// # Errors +/// +/// [`FfiError::InvalidArgument`] for inputs [`run`] does not accept; the shim's status +/// otherwise. +pub fn run(op: &Op) -> Result, FfiError> { + let input = encode(op)?; + call_with_buffer(256, |buf, len| { + // SAFETY: input valid for input.len() reads; buf valid for buf.len() writes; len valid. + unsafe { + sys::sc_surface_plane_p2_run( + input.as_ptr(), + input.len() as i64, + buf.as_mut_ptr(), + buf.len() as i64, + &raw mut *len, + ) + } + }) +} diff --git a/crates/solidcore/src/nurbs/b_spline_surface/p2.rs b/crates/solidcore/src/nurbs/b_spline_surface/p2.rs index 909b84e50c..13de1928a6 100644 --- a/crates/solidcore/src/nurbs/b_spline_surface/p2.rs +++ b/crates/solidcore/src/nurbs/b_spline_surface/p2.rs @@ -58,8 +58,9 @@ //! - **`SetCanonical`** passes no domain to `CreateCanonical` (as upstream), so the //! [`CanonicalSurfaceData::uv_domain`] of its argument is ignored. As upstream, only //! the NURB is replaced: form and knot type stay those of the surface. -//! - **Back-edges.** `CopyAndAddAnalytics` needs `SmPlane::IsNurbSurfacePlane` -//! (`surface.plane_p2`, then `surface.cone_p2`, `surface.sphere`, +//! - **Back-edges.** `CopyAndAddAnalytics` returns the [`Surface`] that +//! `SmPlane::IsNurbSurfacePlane` recognises, else needs the recognisers after it +//! (`surface.cone_p2`, `surface.sphere`, //! `surface.surf_of_revolution_p2`, `surface.surf_of_extrusion_p2`); //! `CreateTrimmedPlaneFromRuled` (unless the ruled //! surface is a rectangle) nothing unported (`SmSurface::Evaluate1stDerivatives`, @@ -91,6 +92,7 @@ use crate::nurbs::nurbs_srf::{is_nsrf_degenerate, split_srf}; use crate::nurbs::srf_basic::Direction; use crate::nurbs::srf_tool::p1::{extract_iso_crv, extract_patch}; use crate::surface::plane::Plane; +use crate::surface::surface::Surface; use super::p1::{ BSplineSurface, BSplineSurfaceForm, BoundingBoxRequest, CanonicalSurfaceData, SurfParamType, @@ -200,13 +202,13 @@ fn transpose(a: &mut [T], num_rows: usize) { // ---- unported callees --------------------------------------------------------------- -/// `SmPlane::IsNurbSurfacePlane` (then the cone, sphere, revolution and extrusion +/// `SmCone::IsNurbSurfaceCone` (then the sphere, revolution and extrusion /// recognisers). -fn is_nurb_surface_plane(_srf: &BSplineSurface) -> Result> { - // UNPORTED(surface.plane_p2): SmPlane::IsNurbSurfacePlane +fn is_nurb_surface_cone(_srf: &BSplineSurface) -> Result> { + // UNPORTED(surface.cone_p2): SmCone::IsNurbSurfaceCone Err(SolidError::Unported { - upstream: "SmPlane::IsNurbSurfacePlane", - unit: "surface.plane_p2", + upstream: "SmCone::IsNurbSurfaceCone", + unit: "surface.cone_p2", }) } @@ -336,16 +338,20 @@ impl BSplineSurface { /// /// # Errors /// - /// [`SolidError::Unported`]: the recognisers (`SmPlane::IsNurbSurfacePlane`, ...) - /// are not ported. - pub fn copy_and_add_analytics(&self) -> Result { + /// Those of [`Plane::is_nurb_surface_plane`]; [`SolidError::Unported`]: the + /// recognisers after the plane (`SmCone::IsNurbSurfaceCone`, ...) are not ported. + pub fn copy_and_add_analytics(&self) -> Result { // (a surface that is not SmBSplineSurface_TYPE is copied as is: never here) - // SmPlane (then SmCone, SmSphere, SmSurfOfRevolution, SmSurfOfExtrusion) - if let Some(analytic) = is_nurb_surface_plane(self)? { + // SmPlane + if let Some(plane) = Plane::is_nurb_surface_plane(self, 1.0)? { + return Ok(Surface::from(plane)); + } + // SmCone (then SmSphere, SmSurfOfRevolution, SmSurfOfExtrusion) + if let Some(analytic) = is_nurb_surface_cone(self)? { return Ok(analytic); } // arrive here - make sure it's a copy - Ok(self.copy()) + Ok(Surface::from(self.copy())) } /// The 3D iso-parametric curve at `iso_parameter` (`CreateIsoParametricCurve`): diff --git a/crates/solidcore/src/surface/plane.rs b/crates/solidcore/src/surface/plane.rs index 6fb841f0b9..0bc3fc2dae 100644 --- a/crates/solidcore/src/surface/plane.rs +++ b/crates/solidcore/src/surface/plane.rs @@ -6,5 +6,6 @@ //! its own submodule and adds methods to [`Plane`]. pub mod p1; +pub mod p2; pub use p1::{Coincidence, Plane, PlaneDropCurve, PlaneIsoCurve}; diff --git a/crates/solidcore/src/surface/plane/p1.rs b/crates/solidcore/src/surface/plane/p1.rs index 17a9bfe80c..ce6ea8a50e 100644 --- a/crates/solidcore/src/surface/plane/p1.rs +++ b/crates/solidcore/src/surface/plane/p1.rs @@ -133,13 +133,13 @@ const OP_LINE: &str = "surface::plane::p1::Plane::global_line_intersect"; #[derive(Debug)] pub struct Plane { /// The `SmBSplineSurface` part (the NURB representation). - base: BSplineSurface, + pub(super) base: BSplineSurface, /// `m_vPosition`: origin, unit X axis and unit Y axis. - position: Axis2Placement, + pub(super) position: Axis2Placement, /// `m_vAnalUVDomain`: the analytic (STEP) domain. - anal_uv_domain: Extent2d, + pub(super) anal_uv_domain: Extent2d, /// `m_vUVScale`: the u and v scales. - uv_scale: Vec2, + pub(super) uv_scale: Vec2, } /// The result of [`Plane::coincidence_check`]. @@ -342,7 +342,7 @@ impl Plane { /// Makes the NURB when missing (`GetOrCreateGwNurbPointer` of a non-`const` /// method; a failure leaves the plane without NURB). - fn ensure_nurb(&mut self) { + pub(super) fn ensure_nurb(&mut self) { if self.base.gw_nurb().is_none() { let _ = self.make_nurb(); } diff --git a/crates/solidcore/src/surface/plane/p2.rs b/crates/solidcore/src/surface/plane/p2.rs new file mode 100644 index 0000000000..9db3672194 --- /dev/null +++ b/crates/solidcore/src/surface/plane/p2.rs @@ -0,0 +1,1376 @@ +//! `SmPlane`, part 2: the offset plane, transformation, trimming to a domain, reading +//! from a database stream, recognising a plane in a B-spline surface, the plane/plane +//! intersection (and its `GlobalSurfaceIntersect` dispatch), and trimming curves, +//! lines and ellipses to a plane domain. +//! +//! Upstream: `source/SMLib/src/SmPlane.cpp`, `source/SMLib/inc/SmPlane.h`. +//! +//! | Rust | Upstream | +//! |--------------------------------------------|---------------------------------------------------| +//! | [`Plane::create_offset_surface`] | `CreateOffsetSurface` | +//! | [`global_surface_intersect`] (via [`Surface::global_surface_intersect`]) | `GlobalSurfaceIntersect` | +//! | [`Plane::intersect_with_plane`] | `IntersectWithPlane` | +//! | [`Plane::trim_curve_to_plane_domain`] | `TrimCurveToPlaneDomain` | +//! | [`Plane::is_nurb_surface_plane`] | `IsNurbSurfacePlane` (static) | +//! | [`Plane::transform`] | `Transform` | +//! | [`Plane::trim_with_domain`] | `TrimWithDomain` | +//! | [`Plane::read_from_db`] | `ReadFromDB` (static) | +//! | [`Plane::make_new_plane_line`] | `MakeNewPlaneLine` | +//! | [`Plane::make_new_plane_ellipse`] | `MakeNewPlaneEllipse` | +//! +//! Deviations: +//! - **Arguments.** Out-params become return values; `SmContext` arguments are +//! dropped. `GlobalSurfaceIntersect`'s and `IntersectWithPlane`'s optional output +//! arrays are always filled ([`SurfaceIntersection`]; a plane/plane intersection has +//! no UV curves, so those entries are `None`, upstream's `NULL`). The arguments upstream +//! marks `NotUsed` (`CreateOffsetSurface`'s tolerance, `IntersectWithPlane`'s edge +//! flags and angle tolerance, `ReadFromDB`'s type) are dropped. +//! - **Zone tolerance.** The plane boxes of `IntersectWithPlane` are expanded by the +//! zone tolerance of the plane's face or B-rep (`SmSurface::GetFace`, unit +//! `surface.surface_p1`). A bare [`Plane`] has no owner (the owner lives on +//! [`Surface`]), so it uses `SM_ZONE_TOL_3D`; through [`Surface::global_surface_intersect`] +//! an owned plane returns [`SolidError::Unported`] there. +//! - **NURB.** `IntersectWithPlane`'s parallel case tests whether both planes hold a +//! NURB (`m_pNurb`), as upstream; the boxes are computed on a NURB made on a copy +//! when the plane has none (upstream makes it in place, a `const_cast`). +//! - **Statuses.** Where upstream ignores a status and would go on with stale or +//! uninitialised values (curve evaluations and copies in `TrimCurveToPlaneDomain`, +//! the test-point evaluation of `IsNurbSurfacePlane`), the port propagates the error. +//! A `GlobalCurveIntersect` failure in `TrimCurveToPlaneDomain` (status ignored) +//! contributes no solutions. `IsNurbSurfacePlane` returns a status through its +//! `SmBoolean` (`SER`): upstream's "`TRUE` without plane" is an `Err` here. +//! `SmMatrix::SolveLinearSystem`'s near-singular warning, which upstream returns +//! through `SER`, is [`SolidError::Upstream`] with `SM_ERR_WARNING`. +//! - **Recognisers** after the plane in `GlobalSurfaceIntersect` (cone, cylinder, sphere, +//! extrusion, revolution) need surface kinds not in [`SurfaceKind`] yet; the general +//! `SmSurface::GlobalSurfaceIntersect` returns [`SolidError::Unported`] +//! (`intersect.adv_surface_intersector`). + +use crate::curve::curve::p8::CurveIntersectOptions; +use crate::curve::curve::Curve; +use crate::curve::ellipse::{Ellipse, EllipseOptions}; +use crate::curve::line::{BoundedLineOptions, Line}; +use crate::error::{ignore_status, ignored, Result, SolidError, SM_ERR_WARNING}; +use crate::geom::axis2_placement::Axis2Placement; +use crate::geom::extent1d::Extent1d; +use crate::geom::extent2d::Extent2d; +use crate::geom::extent3d::Extent3d; +use crate::geom::geom_utility::p2::{line_coplanar_ellipse_intersect, CoplanarEllipse}; +use crate::geom::global_solver::{GlobalSolve, GlobalSolver, SolverOperation}; +use crate::geom::matrix::Matrix; +use crate::geom::pseudo_box::PseudoBox; +use crate::geom::solution_array::{ + ObjectKind, SolutionArray, SolutionObject, SolutionType, SortKey, +}; +use crate::geom::tol::{are_same, is_zero, is_zero_to_tol, ZONE_TOL_3D}; +use crate::geom::vector2d::{Point2, Vec2}; +use crate::geom::vector3d::{sqrt, Point3, Vec3}; +use crate::kernel::Kernel; +use crate::math::{max2, min2, EFF_ZERO, EFF_ZERO_PARAM, EFF_ZERO_SQRT, PI}; +use crate::nurbs::b_spline_curve::BSplineCurve; +use crate::nurbs::b_spline_curve_n_lib::TrimMode; +use crate::nurbs::b_spline_surface::{BSplineSurface, BoundingBoxRequest}; +use crate::nurbs::knots::Side; +use crate::surface::surface::p2::{ + base_global_surface_intersect, SurfaceIntersection, TsectCurveType, +}; +use crate::surface::surface::p7::{base_evaluate_normal, evaluate_1st_derivatives}; +use crate::surface::surface::{Surface, SurfaceKind}; +use crate::topology::database_io::{DatabaseReader, FileType, InputStream}; + +use super::p1::{is_grazing_intersection, Plane}; + +const OP_PP: &str = "surface::plane::p2::Plane::intersect_with_plane"; +const OP_NURB: &str = "surface::plane::p2::Plane::is_nurb_surface_plane"; +const OP_XFORM: &str = "surface::plane::p2::Plane::transform"; +const OP_TRIM: &str = "surface::plane::p2::Plane::trim_with_domain"; + +/// A curve handle of `TrimCurveToPlaneDomain`'s intersections: an id (`0` the curve, +/// `1..=4` the boundary lines, `10 +` those for their analytic replacements) and the +/// curve's natural interval (what upstream reads through the curve pointer). Distinct +/// curves have distinct handles, as upstream's pointers. +#[derive(Debug, Clone, Copy, PartialEq)] +struct CurveHandle(u8, Extent1d); + +impl SolutionObject for CurveHandle { + fn kind(&self) -> ObjectKind { + ObjectKind::Curve + } + + fn natural_interval(&self) -> Option { + Some(self.1) + } +} + +/// The zone tolerance of a plane's face or B-rep, else `SM_ZONE_TOL_3D` (the +/// `bExpandPosBoxesByZoneTol3d` expansion of `CalculateBoundingBox`). +fn zone_tolerance(owned: bool) -> Result { + if owned { + // UNPORTED(surface.surface_p1): SmSurface::GetFace + return Err(SolidError::unported( + "SmSurface::GetFace", + "surface.surface_p1", + )); + } + Ok(ZONE_TOL_3D) +} + +impl Plane { + // ---- new surfaces ----------------------------------------------------------------- + + /// A copy of the plane moved by `signed_offset_distance` along its normal + /// (`CreateOffsetSurface`; a negative distance moves against the normal). + /// + /// # Errors + /// + /// Those of [`Plane::transform`]. + pub fn create_offset_surface(&self, signed_offset_distance: f64) -> Result { + // construct plane copy + let mut off_plane = self.copy(); + + // translate the plane copy + let mut trans = Axis2Placement::IDENTITY; + let mv = self.position.z_axis() * signed_offset_distance; + trans.translate(mv); + off_plane.transform(&trans, None)?; + + // set output + Ok(off_plane) + } + + // ---- edits ------------------------------------------------------------------------ + + /// Scales about the origin (optional, isotropic only) then rotates and moves the + /// plane (`Transform`): the NURB is transformed, then the analytic data is rebuilt + /// from it with [`Plane::is_nurb_surface_plane`] (tolerance scales 1, 10, 100, + /// 1000). The identity frame with no or unit scale changes nothing. + /// + /// # Errors + /// + /// Those of [`BSplineSurface::transform`]; `SM_ERR` for a non-isotropic scale (the + /// NURB is already transformed, as upstream) or when the transformed NURB is not + /// recognised as a plane; those of [`Plane::is_nurb_surface_plane`]. + pub fn transform(&mut self, rotate_n_move: &Axis2Placement, scale: Option) -> Result<()> { + let identity_scale = Vec3::new(1.0, 1.0, 1.0); + + // no work - identity transform + if rotate_n_move.is_identity(EFF_ZERO) && scale.is_none_or(|s| s.approx_eq(identity_scale)) + { + return Ok(()); + } + + // apply m_pNurb (SmBSplineSurface::Transform makes a missing NURB) + self.ensure_nurb(); + self.base.transform(rotate_n_move, scale)?; + + // when scaling + if let Some(s) = scale { + if !(s.x == 1.0 && s.y == 1.0 && s.z == 1.0) { + // scaling must be isotropic + if !are_same(s.x, s.y) || !are_same(s.x, s.z) { + return Err(SolidError::sm_err(OP_XFORM)); + } + } + } + + // check transformed m_pNurb for planarity and gen transformed Plane parameters + let nurb = self + .base + .gw_nurb() + .ok_or(SolidError::null_pointer(OP_XFORM))?; + let bss = BSplineSurface::from_nurb(nurb.clone(), true); + let mut plane = None; + for tol_scale in [1.0, 10.0, 100.0, 1000.0] { + plane = Self::is_nurb_surface_plane(&bss, tol_scale)?; + if plane.is_some() { + break; + } + } + // Something wrong here if scaling a plane does not produce a plane. + let plane = plane.ok_or(SolidError::sm_err(OP_XFORM))?; + + // save the transformed plane parameters + self.position = plane.position; + self.anal_uv_domain = plane.anal_uv_domain; + self.uv_scale = plane.uv_scale; + Ok(()) + } + + /// Trims the plane to `trim_domain`, which must lie in the natural domain within + /// `SM_EFF_ZERO_PARAM` (`TrimWithDomain`): the analytic domain becomes `trim_domain` + /// and the NURB is rebuilt ([`Plane::adjust_step_uv_domain`]), unless the natural + /// domain already lies in `trim_domain`. + /// + /// # Errors + /// + /// `SM_ERR` when `trim_domain` is not inside the natural domain; those of + /// [`Plane::adjust_step_uv_domain`]. + pub fn trim_with_domain(&mut self, trim_domain: &Extent2d) -> Result<()> { + // (Notify(SM_NO_PRE_EDIT) only drops caches) + // GetNaturalUVDomain makes a missing NURB in place + self.ensure_nurb(); + let natural_domain = self.base.natural_uv_domain(); + + // Make sure trim domain in inside of natural domain + if !trim_domain.is_contained_by(&natural_domain, EFF_ZERO_PARAM) { + return Err(SolidError::sm_err(OP_TRIM)); + } + + // See if no trimming necessary - just return + if natural_domain.is_contained_by(trim_domain, EFF_ZERO_PARAM) { + return Ok(()); + } + + self.adjust_step_uv_domain(trim_domain) + } + + // ---- database --------------------------------------------------------------------- + + /// Reads a plane written by `WriteToDB` (`ReadFromDB`): origin, X axis, Y axis + /// (set with `SetCanonical`, status ignored), the analytic domain corners and the + /// scales (one group per line in ASCII files), then the B-spline part + /// (`SmBSplineSurface::ReadFromDB`). Unreadable ASCII values keep their defaults. + /// + /// # Errors + /// + /// Those of the binary reads and of [`BSplineSurface::read_from_db`]. + pub fn read_from_db(db: &mut DatabaseReader, version: u64) -> Result { + // locals + let mut orig = Vec3::UNDEF; + let mut x = Vec3::UNDEF; + let mut y = Vec3::UNDEF; + let mut anal_min = Point2::UNDEF; + let mut anal_max = Point2::UNDEF; + let mut uv_scale = Vec2::UNDEF; + + if db.file_type() == FileType::Ascii { + for v in [&mut orig, &mut x, &mut y] { + if let Some(s) = db.in_stream_mut() { + for c in [&mut v.x, &mut v.y, &mut v.z] { + if let Some(d) = s.extract_double() { + *c = d; + } + } + } + db.go_to_next_line(); + } + if let Some(s) = db.in_stream_mut() { + for c in [ + &mut anal_min.x, + &mut anal_min.y, + &mut anal_max.x, + &mut anal_max.y, + ] { + if let Some(d) = s.extract_double() { + *c = d; + } + } + } + db.go_to_next_line(); + if let Some(s) = db.in_stream_mut() { + for c in [&mut uv_scale.x, &mut uv_scale.y] { + if let Some(d) = InputStream::extract_double(s) { + *c = d; + } + } + } + db.go_to_next_line(); + } else { + orig.x = db.read_double()?; + orig.y = db.read_double()?; + orig.z = db.read_double()?; + + x.x = db.read_double()?; + x.y = db.read_double()?; + x.z = db.read_double()?; + + y.x = db.read_double()?; + y.y = db.read_double()?; + y.z = db.read_double()?; + + anal_min.x = db.read_double()?; + anal_min.y = db.read_double()?; + + anal_max.x = db.read_double()?; + anal_max.y = db.read_double()?; + + uv_scale.x = db.read_double()?; + uv_scale.y = db.read_double()?; + } + + // load the plane (statuses ignored) + let mut position = Axis2Placement::IDENTITY; + let _ = position.set_canonical(orig, x, y); + let mut anal_uv_domain = Extent2d::new(); + let _ = anal_uv_domain.set_min_max(anal_min, anal_max); + + // read the parent object + let base = BSplineSurface::read_from_db(db, version)?; + + Ok(Self { + base, + position, + anal_uv_domain, + uv_scale, + }) + } + + // ---- recognition ------------------------------------------------------------------ + + /// The plane with the parameterisation of `test` when `test` is one + /// (`IsNurbSurfacePlane`): the first derivatives at the natural domain corners + /// `(1, 1)` and `(0, 0)` are perpendicular and their normals parallel to the normal + /// near the centre (angle tolerance `tolerance_scale * 1e-4` degrees), and ten test + /// points lie within `SM_EFF_ZERO_SQRT * (1 + |origin|)` of the plane built from + /// the `(0, 0)` derivatives. The plane is re-parameterised to the natural domain + /// of `test` (which makes its NURB). `None` when `test` is not a plane. + /// + /// # Errors + /// + /// Upstream's `SER` statuses (returned as a `TRUE` result without plane): a + /// failing test-point evaluation, a degenerate Y axis; [`SolidError::Unported`] + /// from the evaluations. + pub fn is_nurb_surface_plane( + test: &BSplineSurface, + tolerance_scale: f64, + ) -> Result> { + // (HIGHER_ORDER_USE_ANALYTICS: no degree or control point limit) + + // surface locals + let uv_domain = test.natural_uv_domain(); + let mut origin = Vec3::UNDEF; + let mut x_axis = Vec3::UNDEF; + let mut y_axis = Vec3::UNDEF; + + // get surface throughPoint, tangents, and normal at natural domain upper corner + // (SE: a failed evaluation keeps the previous values) + if let Some((p, du, dv)) = ignored(evaluate_1st_derivatives( + test, + uv_domain.evaluate(1.0, 1.0), + Side::Left, + Side::Left, + ))? { + (origin, x_axis, y_axis) = (p, du, dv); + } + let mut normal_at_max = x_axis.cross(y_axis); + + // pick angle tolerance + let angle_tol = tolerance_scale * 0.0001; // 1/10000 of a degree + + // not a plane - UTangent not perpendicular to VTangent + if !x_axis.is_perpendicular_to(y_axis, angle_tol) { + return Ok(None); + } + + // pick spatial tolerances + let tol = EFF_ZERO_SQRT * (1.0 + origin.max_dimension()); + let tol_sq = tol * tol; + + // get surface throughPoint, tangents, and normal at natural domain lower corner + if let Some((p, du, dv)) = ignored(evaluate_1st_derivatives( + test, + uv_domain.evaluate(0.0, 0.0), + Side::Left, + Side::Left, + ))? { + (origin, x_axis, y_axis) = (p, du, dv); + } + let normal_at_origin = x_axis.cross(y_axis); + + // not a plane - UTangent not perpendicular to VTangent + if !x_axis.is_perpendicular_to(y_axis, angle_tol) { + return Ok(None); + } + + // not a plane - origin and max normal vectors not parallel + if !normal_at_origin.is_parallel_to(normal_at_max, angle_tol) { + return Ok(None); + } + + // get normal near domain center (SE) + if let Some(n) = ignored(base_evaluate_normal( + test, + uv_domain.evaluate(0.45, 0.56), + Side::Left, + Side::Left, + ))? { + normal_at_max = n; + } + + // not a plane - center and origin normal vectors not parallel + if !normal_at_origin.is_parallel_to(normal_at_max, angle_tol) { + return Ok(None); + } + + // set up plane origin and X/Y axis (Unitize statuses ignored) + let uv_scale = Vec2::new(x_axis.length(), y_axis.length()); + let x_axis = x_axis.unitize_or_z(); + let mut y_axis = y_axis.unitize_or_z(); + + // Move the origin to correspond to the zero [u=0, v=0] parameter. + let new_origin = origin + - uv_domain.min().x * x_axis * uv_scale.x + - uv_domain.min().y * y_axis * uv_scale.y; + + // Force XAxis and YAxis to be nicely perpendicular + if x_axis.dot(y_axis).abs() > EFF_ZERO { + y_axis = x_axis.cross(y_axis).cross(x_axis); + y_axis = y_axis.unitize().map_err(|_| SolidError::sm_err(OP_NURB))?; + } + + // construct temporary new plane (m_pNurb == NULL) + let mut plane = Self::new(new_origin, x_axis, y_axis, uv_scale, &uv_domain); + + // Now test about 10 points along surface just to make sure. + let uvs = [ + uv_domain.evaluate(0.3, 0.4), + uv_domain.evaluate(0.2, 0.1), + uv_domain.evaluate(0.6, 0.4), + uv_domain.evaluate(0.7, 0.7), + uv_domain.evaluate(0.8, 0.9), + uv_domain.evaluate(0.4, 0.6), + uv_domain.evaluate(0.9, 0.2), + uv_domain.evaluate(0.6, 0.1), + uv_domain.evaluate(0.1, 0.8), + uv_domain.evaluate(1.0, 0.0), + ]; + for uv in uvs { + // when any point is not a plane - return not a plane + let orig_pnt = test.evaluate_point(uv)?; + let plane_pnt = plane.evaluate_point(uv); + if orig_pnt.distance_squared(plane_pnt) > tol_sq { + return Ok(None); + } + } + + // reparameterize the NURB so that AnalyticSurface->NurbDomain == + // InputSurface->NurbDomain (status ignored) + ignore_status(plane.reparameterize(&test.natural_uv_domain()))?; + + // (Notify(SM_NO_COPY) copies the test surface's attributes: not modelled) + Ok(Some(plane)) + } + + // ---- intersections ---------------------------------------------------------------- + + /// The axis aligned and pseudo boxes of the plane (`CalculateBoundingBox(domain, + /// &box, &pbox)`, the inherited `SmBSplineSurface` override with its default + /// zone-tolerance expansion). + fn boxes(&self, uv_domain: &Extent2d, owned: bool) -> Result<(Extent3d, PseudoBox)> { + let req = BoundingBoxRequest { + normal: true, + pseudo: true, + expand_by_zone_tol: false, + ..BoundingBoxRequest::default() + }; + let b = self + .base_with_nurb()? + .calculate_bounding_box(uv_domain, &req)?; + let mut bbox = b.normal.ok_or(SolidError::null_pointer(OP_PP))?; + let mut pbox = b.pseudo.ok_or(SolidError::null_pointer(OP_PP))?; + // When asked, expand the normal and pseudo boxes by the zone tolerance + bbox.expand_absolute(zone_tolerance(owned)?); + pbox.expand_absolute(zone_tolerance(owned)?); + Ok((bbox, pbox)) + } + + /// The intersection line of this plane over `uv_domain` with `other` over + /// `other_uv_domain` (`IntersectWithPlane`), and whether the general intersector + /// is still needed. Not parallel planes: one infinite line when neither plane is + /// bounded, else the segment inside both domains (a degenerate curve, + /// [`TsectCurveType::Touching`], when shorter than the tolerance), crossing, with + /// no UV curves and deviation `0`. Parallel planes give nothing; coincident ones + /// (both with NURB, boxes overlapping, within the tolerance) need the general + /// intersector. The tolerance is `approx_tol_3d`, else `SM_EFF_ZERO_SQRT * (1 +` + /// the domain mid-point sizes `)`. Both planes are taken as without owner (see the + /// module docs). + /// + /// # Errors + /// + /// Those of the boxes and of the linear solve (`SM_ERR_WARNING` when nearly + /// singular); those of [`BSplineCurve::create_degenerate_curve`]. + pub fn intersect_with_plane( + &self, + uv_domain: &Extent2d, + other: &Self, + other_uv_domain: &Extent2d, + approx_tol_3d: Option, + ) -> Result<(bool, SurfaceIntersection)> { + self.intersect_with_plane_owned( + uv_domain, + other, + other_uv_domain, + approx_tol_3d, + [false, false], + ) + } + + /// [`Plane::intersect_with_plane`] with the planes' ownership (for the zone + /// tolerance). + #[allow(clippy::too_many_lines)] // one upstream function + pub(crate) fn intersect_with_plane_owned( + &self, + uv_domain: &Extent2d, + other: &Self, + other_uv_domain: &Extent2d, + approx_tol_3d: Option, + owned: [bool; 2], + ) -> Result<(bool, SurfaceIntersection)> { + // init output + let mut out = SurfaceIntersection::default(); + + // no work - looking for self-intersections; planes have no self-intersections + if core::ptr::eq(self, other) { + return Ok((false, out)); + } + + // locals + let this_bounded = self.is_bounded(); + let other_bounded = other.is_bounded(); + + // get thisPlane midPoint and normal + let origin_this = self.evaluate_point_fast(uv_domain.evaluate(0.5, 0.5)); + let normal_this = self.position.z_axis(); + + // get otherPlane midPoint and normal + let origin_other = other.evaluate_point_fast(other_uv_domain.evaluate(0.5, 0.5)); + let normal_other = other.position.z_axis(); + + // set tol proportional to midPoint size or as given + let tol = approx_tol_3d.unwrap_or_else(|| { + EFF_ZERO_SQRT * (1.0 + origin_this.max_dimension() + origin_other.max_dimension()) + }); + + // intersection line direction = CrossProduct(PlaneNormal1, PlaneNormal2) + let line_dir = normal_this.cross(normal_other); + + // when planes are parallel or coincident + let ang_tol_sq = 1.0e-16; // Cross product length is sine, which is same as angle for small angles. + let len_sq = line_dir.length_squared(); + if len_sq < ang_tol_sq { + // Planes are parallel. + if self.base.gw_nurb().is_none() || other.base.gw_nurb().is_none() { + return Ok((false, out)); + } + + // get plane1 and plane2 bounding and pseudo boxes + let (bbox1, pbox1) = self.boxes(uv_domain, owned[0])?; + let (bbox2, pbox2) = other.boxes(other_uv_domain, owned[1])?; + + // no work - when bounding or pseudo boxes are disjoint + if bbox1.are_disjoint(&bbox2, 0.0) || pbox1.are_disjoint(&pbox2, None) { + return Ok((false, out)); + } + + // let sPnt2 = plane2 midPoint projected to plane1 + let uv_found = self.project_point_to_uv_domain(origin_other); + let pnt2 = self.evaluate_point_fast(uv_found); + + // no work - planes are parallel not coincident + let dist = origin_other.distance(pnt2); + if dist > tol { + return Ok((false, out)); + } + + // more work needed - planes are coincident + return Ok((true, out)); + } + + // Arrive here when planes are not parallel. + + // unitize lineDir and set OriginCross = avg(midPoint1, midPoint2) + let line_dir = line_dir.unitize().map_err(|_| SolidError::sm_err(OP_PP))?; + let origin_cross = if this_bounded && !other_bounded { + origin_this + } else if !this_bounded && other_bounded { + origin_other + } else { + (origin_this + origin_other) / 2.0 + }; + + // build A of Ax=b matrix problem + let mut mat = Matrix::new(3, 3); + for i in 0..3 { + mat.set_at(0, i, normal_this.component(i))?; + mat.set_at(1, i, normal_other.component(i))?; + mat.set_at(2, i, line_dir.component(i))?; + } + + // build b of Ax=b matrix problem + let rhs = [ + normal_this.dot(origin_this), + normal_other.dot(origin_other), + line_dir.dot(origin_cross), + ]; + + // let sStartPt = solution x in Ax=b + let sol = mat.solve_linear_system(&rhs)?; + if sol.near_singular { + return Err(SolidError::Upstream { + operation: OP_PP, + code: SM_ERR_WARNING, + entity: None, + }); + } + let [x0, x1, x2] = <[f64; 3]>::try_from(sol.x.as_slice()) + .map_err(|_| SolidError::invalid_input(OP_PP, "linear solution size"))?; + let start_pt = Point3::new(x0, x1, x2); + + // when both planes aren't bounded - output infinite line + if !this_bounded && !other_bounded { + // Create an 'infinite' line + let line = Line::infinite(start_pt, line_dir, 3, false); + out.curves_3d.push(Curve::from(line)); + out.surface1_uv_curves.push(None); + out.surface2_uv_curves.push(None); + out.curve_types.push(TsectCurveType::Crossing); + out.deviations.push(0.0); + return Ok((false, out)); + } + + // Create a bounded line + + // get bounding and pseudo boxes for both planes + let mut dist = 0.0; + let mut bbox1 = Extent3d::new(); + let mut bbox2 = Extent3d::new(); + let mut pbox1 = PseudoBox::new(); + let mut pbox2 = PseudoBox::new(); + + // get size of bounded ThisPlane + if this_bounded { + (bbox1, pbox1) = self.boxes(uv_domain, owned[0])?; + let radius1 = bbox1.sphere_bound().radius; + bbox1.expand_absolute(tol / 2.0); + pbox1.expand_absolute(tol / 2.0); + dist += 2.0 * radius1; + } + + // get size of bounded OtherPlane + if other_bounded { + (bbox2, pbox2) = other.boxes(other_uv_domain, owned[1])?; + let radius2 = bbox2.sphere_bound().radius; + bbox2.expand_absolute(tol / 2.0); + pbox2.expand_absolute(tol / 2.0); + dist += 2.0 * radius2; + } + + // no work - bounding boxes are disjoint + if (this_bounded && other_bounded) + && (bbox1.are_disjoint(&bbox2, 0.0) || pbox1.are_disjoint(&pbox2, None)) + { + return Ok((false, out)); + } + + // Init the line length to be longer than both bounding boxes + let mut seg_start = start_pt - dist * line_dir; + let mut seg_end = start_pt + dist * line_dir; + + // Trim line to Plane boundaries (no trimming infinite planes) + let mut this_found = true; + let mut other_found = true; + if this_bounded { + match self.trim_plane_line_to_plane_domain(uv_domain, seg_start, seg_end, tol) { + Some((s, e)) => (seg_start, seg_end) = (s, e), + None => this_found = false, + } + } + if other_bounded { + match other.trim_plane_line_to_plane_domain(other_uv_domain, seg_start, seg_end, tol) { + Some((s, e)) => (seg_start, seg_end) = (s, e), + None => other_found = false, + } + } + + // when line segment doesn't intersect both plane domains + if !this_found || !other_found { + return Ok((false, out)); + } + + // when segment is short - return degenerate curve xsect + let length_of_line = seg_start.distance(seg_end); + if length_of_line < tol { + let bsc = BSplineCurve::create_degenerate_curve(3, seg_start)?; + out.curves_3d.push(Curve::from(bsc)); + out.surface1_uv_curves.push(None); + out.surface2_uv_curves.push(None); + out.curve_types.push(TsectCurveType::Touching); + out.deviations.push(0.0); + return Ok((false, out)); + } + + // create output line and set outputs + let line = Line::bounded( + seg_start, + line_dir, + &Extent1d::from_min_max(0.0, 1.0), + &BoundedLineOptions { + scale: length_of_line, + ..BoundedLineOptions::default() + }, + ); + out.curves_3d.push(Curve::from(line)); + out.surface1_uv_curves.push(None); + out.surface2_uv_curves.push(None); + out.curve_types.push(TsectCurveType::Crossing); + out.deviations.push(0.0); + Ok((false, out)) + } + + // ---- curves ----------------------------------------------------------------------- + + /// The parts of `curve` inside the plane's `uv_domain` (`TrimCurveToPlaneDomain`): + /// the curve is intersected with the four domain boundary lines within `tol_3d` + /// (grazing points skipped), the intervals between the intersections are + /// classified by dropping a point of each onto the domain, and each inside + /// interval becomes a trimmed copy of the curve (coincident ranges are kept); two + /// consecutive outside intervals give a degenerate curve at their common end. + /// + /// # Errors + /// + /// Those of the curve evaluations, copies and degenerate curves (statuses upstream + /// ignores); [`SolidError::Unported`] from the intersection. + #[allow(clippy::too_many_lines)] // one upstream function + pub fn trim_curve_to_plane_domain( + &self, + k: &Kernel, + uv_domain: &Extent2d, + curve: &Curve, + tol_3d: f64, + ) -> Result> { + // init output + let mut curves_3d = Vec::new(); + + // locals + let ivl = curve.natural_interval(); + let mut solutions: SolutionArray = SolutionArray::new(); + + // get Plane domain corners + let min_x = uv_domain.min().x; + let min_y = uv_domain.min().y; + let max_x = uv_domain.max().x; + let max_y = uv_domain.max().y; + let p00 = self.evaluate_point(Point2::new(min_x, min_y)); + let p01 = self.evaluate_point(Point2::new(min_x, max_y)); + let p10 = self.evaluate_point(Point2::new(max_x, min_y)); + let p11 = self.evaluate_point(Point2::new(max_x, max_y)); + + // boundary line segments - a PlaneSurface domain boundary is a line + let line_ivl = Extent1d::from_min_max(0.0, 1.0); + let boundary = |p: Point3, q: Point3| { + Line::bounded( + p, + q - p, + &line_ivl, + &BoundedLineOptions { + scale: (q - p).length(), + ..BoundedLineOptions::default() + }, + ) + }; + let lines = [ + boundary(p00, p10), + boundary(p10, p11), + boundary(p11, p01), + boundary(p01, p00), + ]; + + // for every boundary line + for (line_id, line) in (1u8..).zip(&lines) { + // Intersect Curve with boundary lines (status ignored) + let line_curve = Curve::from(line.clone()); + let t_solutions = ignored(curve.global_curve_intersect( + k, + &ivl, + &line_curve, + &line.natural_interval(), + tol_3d, + &CurveIntersectOptions { + skip_global_coincidence_check: false, + handles: [ + Some(CurveHandle(0, ivl)), + Some(CurveHandle(line_id, line.natural_interval())), + ], + analytic_handles: [ + Some(CurveHandle(10, ivl)), + Some(CurveHandle(10 + line_id, line.natural_interval())), + ], + }, + ))? + .unwrap_or_default(); + + // accumulate the solutions - sorted by crCurve parameter + let mut gs: GlobalSolver<'_, CurveHandle> = GlobalSolver::new(); + gs.set_solutions(core::mem::take(&mut solutions)); + gs.set_num_variables(1); + for solution in t_solutions.as_slice() { + // Skip grazing solutions. [Boolean Restructure] + if solution.solution_type == SolutionType::SingleValue + && is_grazing_intersection( + curve, + solution.start.param(0)?, + line, + solution.start.param(1)?, + )? + { + continue; + } + + // (status ignored) + ignore_status(gs.add_sorted_solution(solution, SortKey::ByFirstParameter, true))?; + } + solutions = gs.set_solutions(SolutionArray::new()); + } + + // get all intervals to be turned into curves + let mut starts: Vec = Vec::new(); + let mut ends: Vec = Vec::new(); + let mut keeps: Vec = Vec::new(); // 0 = no, 1=yes, 2=unknown + + // for every solution + for solution in solutions.as_slice() { + // get curve interval from last boundary to start of this solution + let s_param = ends.last().copied().unwrap_or(ivl.min()); + let e_param = solution.start.param(0)?; + + // skip zero length intervals at the curve start, curve end, and + // PlaneCorner/curve intersections (statuses ignored) + let start_point = curve.evaluate(s_param, 1, true, true)?; + let end_point = curve.evaluate_point(e_param)?; + let p0 = start_point.first().copied().unwrap_or(Vec3::UNDEF); + let d0 = start_point.get(1).copied().unwrap_or(Vec3::UNDEF); + let dist = p0.distance(end_point); + let speed = d0.length(); + if is_zero_to_tol(s_param - e_param, 10.0 * tol_3d / max2(1.0, speed)) && dist < tol_3d + { + continue; + } + + // add an interval with an unknown classification + starts.push(s_param); + ends.push(e_param); + keeps.push(2); // unclassified interval + + // when the solution is a coincident length + if solution.solution_type == SolutionType::RangeOfValues { + // add another interval marked for keeping + starts.push(e_param); + ends.push(solution.end.param(0)?); + keeps.push(1); // classify interval for keeping + } + } + + // get interval from last solution end to curve end + let s_param = ends.last().copied().unwrap_or(ivl.min()); + let e_param = ivl.max(); + + // add non-zero length interval at the end of the curve + if starts.is_empty() || !is_zero(s_param - e_param) { + starts.push(s_param); + ends.push(e_param); + keeps.push(2); // unclassified interval + } + + // classify every interval unclassified interval + for ((&s_param, &e_param), keep) in starts.iter().zip(&ends).zip(keeps.iter_mut()) { + // skip classified intervals + if *keep != 2 { + continue; + } + + // drop curve interval midPoint to inside of trimmed plane (statuses ignored) + let t = (s_param + e_param) / 2.0; + let mid_point = curve.evaluate_point(t)?; + let mut t_solutions = self.drop_point_fast( + uv_domain, + SolverOperation::Normalize, + mid_point, + tol_3d, + None, + None::, + )?; + if let Some(first) = t_solutions.get(0) { + // If the point is on the boundary of the domain, use a different curve + // point. [B627] + let pt_uv = Point2::new(first.start.param(0)?, first.start.param(1)?); + if uv_domain.is_point_on_boundary(pt_uv, 2.0 * tol_3d).0 { + let frac = 0.3579; // Make it not quite the midpoint. + let param = s_param * frac + e_param * (1.0 - frac); + let mid_point = curve.evaluate_point(param)?; + t_solutions = self.drop_point_fast( + uv_domain, + SolverOperation::Normalize, + mid_point, + tol_3d, + None, + None::, + )?; + } + } + + // classify the interval + *keep = u8::from(!t_solutions.is_empty()); + } + + // build an output curve for every keeper interval + let mut prev_keep: Option = None; + for ((&s_param, &e_param), &keep) in starts.iter().zip(&ends).zip(&keeps) { + // degenerate curves for tangency intersections + if keep == 0 && prev_keep == Some(0) { + // Create a degenerate curve - at the curve point (statuses ignored) + let point = curve.evaluate_point(s_param)?; + let bsp = BSplineCurve::create_degenerate_curve(3, point)?; + curves_3d.push(Curve::from(bsp)); + } + prev_keep = Some(keep); + + // skip intervals outside the square + if keep == 0 { + continue; + } + + // copy, trim, and add curve to output + let mut trim_ivl = Extent1d::from_min_max(s_param, e_param); + let mut new_curve = curve.copy(k)?; + // may snap sIvl by tol to existing knots (status ignored) + ignore_status(new_curve.trim(k, &mut trim_ivl, TrimMode::Notify))?; + curves_3d.push(new_curve); + } + + Ok(curves_3d) + } + + /// The segment `start_pt`-`end_pt` (known to lie in the plane) trimmed to + /// `uv_domain` (`MakeNewPlaneLine`): a bounded [`Line`] over `[0, 1]`, or a + /// degenerate curve when shorter than `tol`, and whether the segment meets the + /// domain (`rbFoundInterval`; `true` for the degenerate curve too, as upstream). + /// + /// # Errors + /// + /// [`SolidError::Unported`] only (a failing degenerate curve gives `None`). + pub fn make_new_plane_line( + &self, + uv_domain: &Extent2d, + start_pt: Point3, + end_pt: Point3, + tol: f64, + ) -> Result<(Option, bool)> { + // trim line endPoints to plane UVDomain + let Some((t0, t1)) = self.trim_plane_line_to_plane_domain(uv_domain, start_pt, end_pt, tol) + else { + // when no part of the line is on the plane + return Ok((None, false)); + }; + + // get line length + let line_dist = t0.distance(t1); + + // when line is degenerate + if line_dist < tol { + let crv = ignored(BSplineCurve::create_degenerate_curve(3, t0))?; + return Ok((crv.map(Curve::from), true)); + } + + // when line has a finite length (Unitize status ignored) + let line_vec = (t1 - t0).unitize_or_z(); + let line = Line::bounded( + t0, + line_vec, + &Extent1d::from_min_max(0.0, 1.0), + &BoundedLineOptions { + scale: line_dist, + ..BoundedLineOptions::default() + }, + ); + Ok((Some(Curve::from(line)), true)) + } + + /// The ellipse (circle when the radii are the same) centred at `center` with + /// radii `radius_x` / `radius_y` along `x_axis` / `y_axis` over the angular + /// interval `anal_ivl` (degrees), known to lie in the plane, trimmed to + /// `uv_domain` (`MakeNewPlaneEllipse`): zero to five arcs ([`Ellipse`]s) or + /// degenerate curves. A zero radius gives a degenerate curve at the centre or the + /// trimmed line of the other diameter; an ellipse meeting the domain boundary in + /// fewer than two points is kept whole (or as its tangent point) when inside; + /// otherwise each arc from an entering to the next exiting boundary point, split at + /// `anal_ivl`'s ends, is kept (a degenerate curve when shorter than `tol`). + /// + /// # Errors + /// + /// Those of [`Ellipse::new`] and of the degenerate curves. + #[allow(clippy::too_many_arguments, clippy::too_many_lines)] // one upstream function + pub fn make_new_plane_ellipse( + &self, + k: &Kernel, + uv_domain: &Extent2d, + center: Point3, + radius_x: f64, + radius_y: f64, + x_axis: Vec3, + y_axis: Vec3, + anal_ivl: &Extent1d, + tol: f64, + ) -> Result> { + // init output + let mut crvs: Vec = Vec::new(); + + // locals + let circle = are_same(radius_x, radius_y); + let mut trim_points: Vec = Vec::new(); // circ/plane boundary xsectPoints + let mut trim_entering: Vec = Vec::new(); // TRUE = entering, FALSE = exiting + let mut trim_side: Vec = Vec::new(); // isoCurve index (debug checks only) + + // get circle center and XAxis to plane UVPoints + let circ_z_axis = x_axis.cross(y_axis).unitize_or_z(); + let center_uv = self.project_point_to_uv_domain(center); + + // get circle's yAxis using plane normal as the positive direction + let plane_normal = self.evaluate_normal(); + let circ_y_axis_for_plane_normal = plane_normal.cross(x_axis); + + // note when circle axis and plane Normal are in opposite directions + let opposite = circ_z_axis.dot(plane_normal) < 0.0; + + // the curve of an arc + let new_arc = |ivl: Extent1d| -> Result { + let opts = EllipseOptions::default(); + Ok(Curve::from(if circle { + Ellipse::new_circle(k, center, x_axis, y_axis, ivl, radius_x, &opts)? + } else { + Ellipse::new(k, center, x_axis, y_axis, ivl, radius_x, radius_y, &opts)? + })) + }; + + // zero radius ellipse + if radius_x < tol || radius_y < tol { + // when center is on plane + if radius_x < tol && radius_y < tol && uv_domain.contains_point(center_uv, 0.0) { + // create a degenerate curve to mark the point + crvs.push(Curve::from(BSplineCurve::create_degenerate_curve( + 3, center, + )?)); + return Ok(crvs); + } + + // else make a degenerate line and quit + let (line_start_pt, line_end_pt) = if radius_x < tol { + (center - radius_y * y_axis, center + radius_y * y_axis) + } else { + (center - radius_x * x_axis, center + radius_x * x_axis) + }; + let (crv, found) = + self.make_new_plane_line(uv_domain, line_start_pt, line_end_pt, tol)?; + if found { + // (upstream adds the curve even when it is NULL) + crvs.extend(crv); + } + return Ok(crvs); + } + + // for all 4 plane boundary lines + let min_x = uv_domain.min().x; + let max_x = uv_domain.max().x; + let min_y = uv_domain.min().y; + let max_y = uv_domain.max().y; + let mut tangent = false; + let mut tangent_inside = false; + let mut tangent_pt = Vec3::UNDEF; + for ii in 0..4_usize { + // get Plane isoParamLine running in counter clockwise direction + // set IsoCurveTangentUV = [dVecX dVecY]; IsoCurveBiNormInside = [-dVecY dVecX] + let (plane_start_uv, plane_end_uv, vec_x, vec_y) = match ii { + 0 => ( + Point2::new(min_x, min_y), + Point2::new(max_x, min_y), + 1.0, + 0.0, + ), + 1 => ( + Point2::new(max_x, min_y), + Point2::new(max_x, max_y), + 0.0, + 1.0, + ), + 2 => ( + Point2::new(max_x, max_y), + Point2::new(min_x, max_y), + -1.0, + 0.0, + ), + _ => ( + Point2::new(min_x, max_y), + Point2::new(min_x, min_y), + 0.0, + -1.0, + ), + }; + + // set isoLineVec + let plane_start_pt = self.evaluate_point_fast(plane_start_uv); + let plane_end_pt = self.evaluate_point_fast(plane_end_uv); + let plane_vec = plane_end_pt - plane_start_pt; + let bi_norm_in = plane_normal.cross(plane_vec); + + // intersect the line with the ellipse (status ignored: no intersections) + let mut params = ignored(line_coplanar_ellipse_intersect( + plane_start_pt, + plane_vec, + &CoplanarEllipse { + center, + x_axis, + x_radius: radius_x, + y_axis: circ_y_axis_for_plane_normal, + y_radius: radius_y, + }, + tol, + ))? + .unwrap_or_default(); + + // when there are solutions + if params.is_empty() { + continue; + } + + // Check for solutions within tol. (The intersection routine doesn't do that.) + // If so, collapse them to the midpoint. [B10] + if let [a0, a1] = params[..] { + let dist = (a1 - a0).abs() * plane_vec.length(); + + // Actually, check for the entire span between the intersections + // being within tol of the line. + let rad = min2(radius_x, radius_y); + if dist < rad * 0.1745 { + // About 10 deg: just to avoid a sqrt when not close. + // Max dist from ellipse to line between the two solutions: + let h = rad - sqrt(rad * rad - dist * dist * 0.25); + if h < tol / 2.0 { + params = vec![(a0 + a1) / 2.0]; + } + } + } + + // order aParams + if let [a0, a1] = params[..] { + if a0 > a1 { + params = vec![a1, a0]; + } + } + + let point_at = |a: f64| (1.0 - a) * plane_start_pt + a * plane_end_pt; + // (0.0-SM_EFF_ZERO <= a && 1.0+SM_EFF_ZERO >= a) + let inside_line = |a: f64| (0.0 - EFF_ZERO..=1.0 + EFF_ZERO).contains(&a); + + if let [a0] = params[..] { + // get the first solution point + // when inside the line extent - save 1 tangent inside/outside state (only + // used if no other intersections) + if inside_line(a0) && !tangent { + tangent = true; + tangent_pt = point_at(a0); + // curve inside when DotProduct(SurfaceBoundaryBinorm,CircleRadiusVec) > 0 + // Binorm = [-dVecY, dVecX], CircleRadius = sCenterUV - sTangentUV. + let tangent_uv = self.project_point_to_uv_domain(tangent_pt); + tangent_inside = (-vec_y * (center_uv.x - tangent_uv.x) + + vec_x * (center_uv.y - tangent_uv.y)) + > 0.0; + } + } else { + // save the points inside the line extent + for &a in ¶ms { + if !inside_line(a) { + continue; + } + let pt = point_at(a); + trim_points.push(pt); + // entering when dot(BiNormInside,EllipseTangent) > 0.0 + // Tan = -Rx/Ry * Dot(P-C,Y) * x + Ry/Rx * Dot(P-C,X) * Y + let tangent_vec = -radius_x / radius_y + * (pt - center).dot(circ_y_axis_for_plane_normal) + * x_axis + + radius_y / radius_x + * (pt - center).dot(x_axis) + * circ_y_axis_for_plane_normal; + trim_entering.push(bi_norm_in.dot(tangent_vec) > 0.0); + trim_side.push(ii); + } + } + } + + // If there were no trim points, with the whole (untrimmed) ellipse, then it's + // all either inside or outside the domain. Also do this in the + // one-intersection case. [B286] + if trim_points.len() < 2 { + // need to classify a circumference point when there are no tangent points + if !tangent { + let circle_pt = center + radius_x * x_axis; + let circle_uv = self.project_point_to_uv_domain(circle_pt); + tangent_inside = uv_domain.contains_point(circle_uv, 0.0); + } + + // and the circle is in the plane + if tangent_inside { + // build 1 full circle or ellipse + crvs.push(new_arc(*anal_ivl)?); + return Ok(crvs); + } + + // or the circle is outside the plane and there is a tangent point + if tangent { + // mark the tangency with a degenerate curve + crvs.push(Curve::from(BSplineCurve::create_degenerate_curve( + 3, tangent_pt, + )?)); + return Ok(crvs); + } + + // there is no part of the circle in the square + return Ok(crvs); + } + + // arrive here when there are trim points, ordered in a CCW traversal of the + // plane ZAxis. Make a trim curve from every entering xSectPoint to every + // exiting xSectPoint; any trim curve containing the circle's start/end point is + // broken up into two intervals. + let count = trim_points.len(); + for ii in 0..count { + let entering = trim_entering.get(ii).copied().unwrap_or(false); + + // skip exiting points - when plane and circ normals are opposite, entering + // and exiting swap + if (!opposite && !entering) || (opposite && entering) { + continue; + } + + // circle arc 3d start/end points + let next = if opposite { + ((ii + count) - 1) % count + } else { + (ii + 1) % count + }; + let point1 = trim_points.get(ii).copied().unwrap_or(Vec3::UNDEF); + let point2 = trim_points.get(next).copied().unwrap_or(Vec3::UNDEF); + let dist = point2.distance(point1); + + // ellipse start angle Rad + let vec = point1 - center; + let dx = vec.dot(x_axis); + let dy = vec.dot(y_axis); + let enter_ang_rad = (radius_x / radius_y * dy).atan2(dx); + + // ellipse end angle Rad + let vec = point2 - center; + let dx = vec.dot(x_axis); + let dy = vec.dot(y_axis); + let exit_ang_rad = (radius_x / radius_y * dy).atan2(dx); + + // ellipse start/stop angles deg with periodicity + let enter_ang_deg = anal_ivl + .contains_periodic_value(enter_ang_rad * 180.0 / PI, 360.0, -1.0) + .periodic_value; + let exit_ang_deg = anal_ivl + .contains_periodic_value(exit_ang_rad * 180.0 / PI, 360.0, -1.0) + .periodic_value; + + // when circNorm is opposite to plane Norm Start/End will be reversed + let tol_enter_deg = if enter_ang_deg > exit_ang_deg + EFF_ZERO { + enter_ang_deg - 360.0 + } else if enter_ang_deg > exit_ang_deg { + exit_ang_deg + } else { + enter_ang_deg + }; + let arc_ivl = Extent1d::from_min_max(tol_enter_deg, exit_ang_deg); + + // trim arc to input circle domain (status ignored) + let trim_ivls = + ignored(anal_ivl.intersect_periodic(&arc_ivl, 360.0, true))?.unwrap_or_default(); + + // for every trimmed arc interval + for trim_ivl in trim_ivls { + // Check for degenerate. + let arc_len = (trim_ivl.length() * (PI / 180.0)) * radius_x; + if arc_len < tol { + // build a degenerate line at the degenerate point + let cos_u = (trim_ivl.min() * PI / 180.0).cos(); + let sin_u = (trim_ivl.min() * PI / 180.0).sin(); + let point = center + cos_u * radius_x * x_axis + sin_u * radius_y * y_axis; + let Some(crv) = ignored(BSplineCurve::create_degenerate_curve(3, point))? + else { + return Ok(crvs); + }; + crvs.push(Curve::from(crv)); + + if dist < tol { + break; + } + continue; + } + + // output a circle or ellipse arc + crvs.push(new_arc(trim_ivl)?); + } + } + let _ = trim_side; // (only read by upstream's debug assertion) + + Ok(crvs) + } +} + +/// `SmPlane::GlobalSurfaceIntersect` of `this` (whose kind is `plane`) over `uv_domain` +/// with `other` over `other_uv_domain`: the plane/plane special case +/// ([`Plane::intersect_with_plane`]) when `other` is a plane, then the general +/// `SmSurface::GlobalSurfaceIntersect` when that is not complete (or for any other +/// surface kind). +/// +/// # Errors +/// +/// Those of [`Plane::intersect_with_plane`]; [`SolidError::Unported`] from the general +/// intersector. +pub(crate) fn global_surface_intersect( + this: &Surface, + plane: &Plane, + uv_domain: &Extent2d, + other: &Surface, + other_uv_domain: &Extent2d, + use_surface_edges: [bool; 2], + approx_tol_3d: Option, + ang_tol_rad: Option, +) -> Result { + // assume special case intersections will be complete + let mut need_nurb_intersection = true; + let mut out = SurfaceIntersection::default(); + + // switch on OtherSurface Type looking for cheap special intersection case + match other.kind() { + // plane/plane special case intersection + SurfaceKind::Plane(other_plane) => { + let owned = [this.owner().is_some(), other.owner().is_some()]; + (need_nurb_intersection, out) = plane.intersect_with_plane_owned( + uv_domain, + other_plane, + other_uv_domain, + approx_tol_3d, + owned, + )?; + } + // (the cone, cylinder, sphere, extrusion and revolution special cases need + // surface kinds that are not ported yet) + SurfaceKind::BSpline(_) | SurfaceKind::CurveBounded(_) => {} + } + + // If we're here, then analytic intersection were not found - do general intersection + if need_nurb_intersection { + out = base_global_surface_intersect( + this, + uv_domain, + other, + other_uv_domain, + use_surface_edges, + approx_tol_3d, + ang_tol_rad, + )?; + } + + // all done + Ok(out) +} diff --git a/crates/solidcore/src/surface/surface/p2.rs b/crates/solidcore/src/surface/surface/p2.rs index e86f3340b6..29c0e47402 100644 --- a/crates/solidcore/src/surface/surface/p2.rs +++ b/crates/solidcore/src/surface/surface/p2.rs @@ -34,7 +34,7 @@ //! | [`Surface::knots`] | `GetKnots` | //! | [`Surface::convert_uv_from_step_to_nurbs`], [`Surface::convert_uv_from_nurbs_to_step`] | `ConvertUVFromSTEPToNURBS`, `ConvertUVFromNURBSToSTEP` | //! | [`Surface::curve_on_classify`] | `CurveOnClassify` | -//! | [`Surface::global_surface_intersect`], [`SurfaceIntersection`] | `GlobalSurfaceIntersect` | +//! | [`Surface::global_surface_intersect`], [`base_global_surface_intersect`], [`SurfaceIntersection`] | `GlobalSurfaceIntersect` (virtual: the `SmPlane` override in `surface::plane::p2`; the `SmSurface` body) | //! | [`Surface::point_based_surface_intersect`], [`PointIntersection`] | `PointBasedSurfaceIntersect` (UV point version) | //! | [`Surface::read_from_db`] | `SmSurface::ReadFromDB` | //! | [`Surface::create_plane_with_3d_curves`], [`PlaneWith3dCurves`] | `CreatePlaneWith3DCurves` | @@ -67,7 +67,8 @@ //! [`BSplineSurface`], [`CurveBoundedSurface`] (unit //! `surface.curve_bounded_surface`) and [`Plane`] (unit `surface.plane_p1`: the //! inherited `SmBSplineSurface` methods run on its B-spline part, re-dispatched to -//! the plane's overrides; `Transform` and `TrimWithDomain` belong to +//! the plane's overrides; `Transform`, `TrimWithDomain`, `ReadFromDB`, +//! `IntersectWithPlane` and `GlobalSurfaceIntersect` are those of //! `surface.plane_p2`, `STEPInversion` needs the point solvers of //! `surface.surface_p1`); the other analytic and generated surfaces (`SmCone`, ...) //! join the enum in their own units. Each virtual method is one `match`: a @@ -99,8 +100,7 @@ //! `SmBezierPatch` of a tree node, which the tree reaches once the tree construction //! (`surface.surface_cache_p3`) hands the cache's patch data over; //! `ReadFromDB` of the analytic and generated surfaces needs their units. Those -//! calls return [`SolidError::Unported`]. The `IntersectWithPlane` default takes -//! the plane as an opaque argument until `SmPlane` is ported. +//! calls return [`SolidError::Unported`]. //! - **`SmDerivSurfDefinition`.** The reference curves are borrowed //! ([`Option<&Curve>`]). `AssertValid` runs every test (all are `SM_LEVEL_0` and the //! release build ignores the test level and the test requests), so it takes only @@ -277,10 +277,12 @@ impl From for Surface { pub struct SurfaceIntersection { /// `pOpt3DCurves`: the 3D intersection curves. pub curves_3d: Vec, - /// `pOptSurface1UVCurves`: their UV curves on this surface. - pub surface1_uv_curves: Vec, - /// `pOptSurface2UVCurves`: their UV curves on the other surface. - pub surface2_uv_curves: Vec, + /// `pOptSurface1UVCurves`: their UV curves on this surface (`None`: upstream's + /// `NULL`, no UV curve). + pub surface1_uv_curves: Vec>, + /// `pOptSurface2UVCurves`: their UV curves on the other surface (`None`: no UV + /// curve). + pub surface2_uv_curves: Vec>, /// `pOptCurveTypes`: the kind of each intersection. pub curve_types: Vec, /// `pOptDeviations`: the maximum distance of each curve from the surfaces. @@ -473,7 +475,7 @@ impl Surface { /// Those of the kind's override (the base default is [`Surface::copy`]). pub fn copy_and_add_analytics(&self) -> Result { match &self.kind { - SurfaceKind::BSpline(s) => Ok(Self::from(s.copy_and_add_analytics()?)), + SurfaceKind::BSpline(s) => s.copy_and_add_analytics(), SurfaceKind::CurveBounded(_) => base_copy_and_add_analytics(), // SmBSplineSurface::CopyAndAddAnalytics: not SmBSplineSurface_TYPE, so Copy SurfaceKind::Plane(s) => Ok(Self::from(s.copy())), @@ -687,22 +689,34 @@ impl Surface { } } - /// `IntersectWithPlane`: no ported kind overrides it; the base default fails. - /// `plane` stands for the `SmPlane` argument until that type is ported. + /// `IntersectWithPlane`: the special-case intersection with `plane` and whether + /// the general intersector is still needed. The `SmPlane` override + /// ([`Plane::intersect_with_plane`]; `plane` is taken as without owner); the other + /// ported kinds run the base default. /// /// # Errors /// - /// `SM_ERR` (the base default). - pub fn intersect_with_plane( + /// Those of [`Plane::intersect_with_plane`] (with this surface's owner for the + /// zone tolerance); `SM_ERR` (the base default). + pub fn intersect_with_plane( &self, - _uv_domain: &Extent2d, - _plane: &P, - _other_uv_domain: &Extent2d, + uv_domain: &Extent2d, + plane: &Plane, + other_uv_domain: &Extent2d, _use_surface_edges: [bool; 2], - _approx_tol_3d: Option, + approx_tol_3d: Option, _ang_tol_rad: Option, ) -> Result<(bool, SurfaceIntersection)> { - base_intersect_with_plane() + match &self.kind { + SurfaceKind::Plane(s) => s.intersect_with_plane_owned( + uv_domain, + plane, + other_uv_domain, + approx_tol_3d, + [self.owner.is_some(), false], + ), + SurfaceKind::BSpline(_) | SurfaceKind::CurveBounded(_) => base_intersect_with_plane(), + } } // ---- edits ---------------------------------------------------------------------- @@ -769,11 +783,7 @@ impl Surface { match &mut self.kind { SurfaceKind::BSpline(s) => s.transform(rotate_n_move, scale), SurfaceKind::CurveBounded(_) => base_edit(), - // UNPORTED(surface.plane_p2): SmPlane::Transform - SurfaceKind::Plane(_) => Err(SolidError::unported( - "SmPlane::Transform", - "surface.plane_p2", - )), + SurfaceKind::Plane(s) => s.transform(rotate_n_move, scale), } } @@ -786,11 +796,7 @@ impl Surface { match &mut self.kind { SurfaceKind::BSpline(s) => s.trim_with_domain(trim_domain), SurfaceKind::CurveBounded(_) => base_edit(), - // UNPORTED(surface.plane_p2): SmPlane::TrimWithDomain - SurfaceKind::Plane(_) => Err(SolidError::unported( - "SmPlane::TrimWithDomain", - "surface.plane_p2", - )), + SurfaceKind::Plane(s) => s.trim_with_domain(trim_domain), } } @@ -882,11 +888,7 @@ impl Surface { // pass the call along to the appropriate derived type match surface_type { B_SPLINE_SURFACE_TYPE => Ok(Self::from(BSplineSurface::read_from_db(db, version)?)), - // UNPORTED(surface.plane_p2): SmPlane::ReadFromDB - PLANE_TYPE => Err(SolidError::unported( - "SmPlane::ReadFromDB", - "surface.plane_p2", - )), + PLANE_TYPE => Ok(Self::from(Plane::read_from_db(db, version)?)), // UNPORTED(surface.surf_of_extrusion_p2): SmSurfOfExtrusion::ReadFromDB SURF_OF_EXTRUSION_TYPE => Err(SolidError::unported( "SmSurfOfExtrusion::ReadFromDB", @@ -957,27 +959,45 @@ impl Surface { } /// The intersection curves of this surface over `uv_domain` with `other` over - /// `other_uv_domain` (`GlobalSurfaceIntersect`, through - /// `SmAdvSurfaceIntersector`). + /// `other_uv_domain` (`GlobalSurfaceIntersect`): the `SmPlane` override (the + /// plane/plane special case first), else [`base_global_surface_intersect`]. /// /// # Errors /// - /// [`SolidError::Unported`]: `SmAdvSurfaceIntersector` - /// (`intersect.adv_surface_intersector`). + /// Those of the plane/plane intersection; [`SolidError::Unported`]: + /// `SmAdvSurfaceIntersector` (`intersect.adv_surface_intersector`). pub fn global_surface_intersect( &self, - _uv_domain: &Extent2d, - _other: &Self, - _other_uv_domain: &Extent2d, - _use_surface_edges: [bool; 2], - _approx_tol_3d: Option, - _ang_tol_rad: Option, + uv_domain: &Extent2d, + other: &Self, + other_uv_domain: &Extent2d, + use_surface_edges: [bool; 2], + approx_tol_3d: Option, + ang_tol_rad: Option, ) -> Result { - // UNPORTED(intersect.adv_surface_intersector): SmAdvSurfaceIntersector::SmAdvSurfaceIntersector - Err(SolidError::unported( - "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", - "intersect.adv_surface_intersector", - )) + match &self.kind { + SurfaceKind::Plane(p) => crate::surface::plane::p2::global_surface_intersect( + self, + p, + uv_domain, + other, + other_uv_domain, + use_surface_edges, + approx_tol_3d, + ang_tol_rad, + ), + SurfaceKind::BSpline(_) | SurfaceKind::CurveBounded(_) => { + base_global_surface_intersect( + self, + uv_domain, + other, + other_uv_domain, + use_surface_edges, + approx_tol_3d, + ang_tol_rad, + ) + } + } } /// The intersection curve of this surface with `other` through the given pairs @@ -1267,6 +1287,29 @@ pub const fn base_number_control_points() -> usize { 0 } +/// `SmSurface::GlobalSurfaceIntersect`: the intersection curves of `this` over +/// `uv_domain` with `other` over `other_uv_domain`, through `SmAdvSurfaceIntersector`. +/// +/// # Errors +/// +/// [`SolidError::Unported`]: `SmAdvSurfaceIntersector` +/// (`intersect.adv_surface_intersector`). +pub fn base_global_surface_intersect( + _this: &Surface, + _uv_domain: &Extent2d, + _other: &Surface, + _other_uv_domain: &Extent2d, + _use_surface_edges: [bool; 2], + _approx_tol_3d: Option, + _ang_tol_rad: Option, +) -> Result { + // UNPORTED(intersect.adv_surface_intersector): SmAdvSurfaceIntersector::SmAdvSurfaceIntersector + Err(SolidError::unported( + "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", + "intersect.adv_surface_intersector", + )) +} + /// `SmSurface::GetMaxAnalyticDomain`: reports `SM_ERR` and returns an initialised /// (empty) domain. #[must_use] diff --git a/fixtures/surface.plane_p2/edge.json b/fixtures/surface.plane_p2/edge.json new file mode 100644 index 0000000000..3ad1007d49 --- /dev/null +++ b/fixtures/surface.plane_p2/edge.json @@ -0,0 +1,6185 @@ +{ + "cases": [ + { + "name": "pp_infinite_perp", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "normal", + "o": [ + 0, + 0, + 0 + ], + "n": [ + 0, + 0, + 1 + ] + }, + "nurb": false + }, + "da": [ + -1, + -1, + 1, + 1 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "normal", + "o": [ + 1, + 2, + 3 + ], + "n": [ + 1, + 0, + 0 + ] + }, + "nurb": false + } + }, + "db": [ + -1, + -1, + 1, + 1 + ] + } + }, + { + "name": "pp_infinite_oblique_tol", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "normal", + "o": [ + 0, + 0, + 1 + ], + "n": [ + 0, + 1, + 1 + ] + }, + "nurb": false + }, + "da": [ + 0, + 0, + 1, + 1 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "normal", + "o": [ + 3, + 0, + 0 + ], + "n": [ + 1, + 0, + 1 + ] + }, + "nurb": false + } + }, + "db": [ + 0, + 0, + 1, + 1 + ], + "tol": 0.001 + } + }, + { + "name": "pp_bounded_cross", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 1, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -4, + -2, + 4, + 2 + ] + }, + "nurb": true + } + }, + "db": [ + -4, + -2, + 4, + 2 + ] + } + }, + { + "name": "pp_bounded_one_infinite", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "normal", + "o": [ + 1, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + }, + "nurb": false + } + }, + "db": [ + -1, + -1, + 1, + 1 + ] + } + }, + { + "name": "pp_infinite_one_bounded", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "normal", + "o": [ + 1, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + }, + "nurb": false + }, + "da": [ + -1, + -1, + 1, + 1 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "pp_touch_edge", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 5, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -3, + 0, + 3, + 4 + ] + }, + "nurb": true + } + }, + "db": [ + -3, + 0, + 3, + 4 + ] + } + }, + { + "name": "pp_touch_corner_point", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 5, + 3, + 0 + ], + "x": [ + 0.7071067811865476, + -0.7071067811865476, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + 0, + 0, + 2, + 2 + ] + }, + "nurb": true + } + }, + "db": [ + 0, + 0, + 2, + 2 + ] + } + }, + { + "name": "pp_disjoint", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 20, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -4, + -2, + 4, + 2 + ] + }, + "nurb": true + } + }, + "db": [ + -4, + -2, + 4, + 2 + ] + } + }, + { + "name": "pp_miss_domain", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 1, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -4, + 1, + 4, + 2 + ] + }, + "nurb": true + } + }, + "db": [ + -4, + 1, + 4, + 2 + ] + } + }, + { + "name": "pp_parallel_offset_nurb", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "pp_coincident_nurb", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 2, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + -1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -3, + -2, + 3, + 2 + ] + }, + "nurb": true + } + }, + "db": [ + -3, + -2, + 3, + 2 + ] + } + }, + { + "name": "pp_coincident_within_tol", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 2, + 0, + 1e-09 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -3, + -2, + 3, + 2 + ] + }, + "nurb": true + } + }, + "db": [ + -3, + -2, + 3, + 2 + ] + } + }, + { + "name": "pp_coincident_no_nurb", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": false + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 2, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -3, + -2, + 3, + 2 + ] + }, + "nurb": true + } + }, + "db": [ + -3, + -2, + 3, + 2 + ] + } + }, + { + "name": "pp_near_parallel", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 5e-09 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "pp_slightly_tilted", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 1e-07 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "pp_same_object", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "same" + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "pp_huge", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -1000000.0, + -1000000.0, + 1000000.0, + 1000000.0 + ] + }, + "nurb": true + }, + "da": [ + -1000000.0, + -1000000.0, + 1000000.0, + 1000000.0 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 300000.0, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -1000000.0, + -1000000.0, + 1000000.0, + 1000000.0 + ] + }, + "nurb": true + } + }, + "db": [ + -1000000.0, + -1000000.0, + 1000000.0, + 1000000.0 + ] + } + }, + { + "name": "pp_tiny", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -1e-05, + -1e-05, + 1e-05, + 1e-05 + ] + }, + "nurb": true + }, + "da": [ + -1e-05, + -1e-05, + 1e-05, + 1e-05 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 3e-06, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -1e-05, + -1e-05, + 1e-05, + 1e-05 + ] + }, + "nurb": true + } + }, + "db": [ + -1e-05, + -1e-05, + 1e-05, + 1e-05 + ] + } + }, + { + "name": "pp_sub_domain", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + 0, + 0, + 2, + 2 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 1, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -4, + -2, + 4, + 2 + ] + }, + "nurb": true + } + }, + "db": [ + 0, + -1, + 1, + 1 + ] + } + }, + { + "name": "gsi_plane_cross", + "inputs": { + "op": "intersect", + "global": true, + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 1, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -4, + -2, + 4, + 2 + ] + }, + "nurb": true + } + }, + "db": [ + -4, + -2, + 4, + 2 + ] + } + }, + { + "name": "gsi_plane_parallel", + "inputs": { + "op": "intersect", + "global": true, + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "gsi_plane_coincident", + "inputs": { + "op": "intersect", + "global": true, + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 1, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "gsi_bspline", + "inputs": { + "op": "intersect", + "global": true, + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "b_spline", + "surface": { + "p": 1, + "q": 1, + "net": [ + [ + [ + -2, + -2, + -1 + ], + [ + -2, + 2, + -1 + ] + ], + [ + [ + 2, + -2, + 1 + ], + [ + 2, + 2, + 1 + ] + ] + ], + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + "db": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "trim_segment_inside", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + -1, + -1, + 0 + ], + "b": [ + 1, + 1, + 0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "trim_segment_outside", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + 6, + -1, + 0 + ], + "b": [ + 7, + 1, + 0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "trim_segment_through_corners", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + -10, + -6, + 0 + ], + "b": [ + 10, + 6, + 0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "trim_segment_off_plane", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + -10, + 0, + 2 + ], + "b": [ + 10, + 0, + 2 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "trim_segment_piercing", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + 0, + 0, + -2 + ], + "b": [ + 0, + 0, + 2 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "trim_circle_tangent_inside", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 360 + ], + "r": 3.0 + }, + "tol": 1e-06 + } + }, + { + "name": "trim_circle_tangent_outside", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "circle", + "c": [ + 0, + 6, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 360 + ], + "r": 3.0 + }, + "tol": 1e-06 + } + }, + { + "name": "trim_ellipse_arc", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "ellipse", + "c": [ + 4, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 30, + 300 + ], + "r": [ + 3, + 2 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "trim_ellipse_big_tol", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "ellipse", + "c": [ + 4, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 360 + ], + "r": [ + 3, + 2 + ] + }, + "tol": 0.5 + } + }, + { + "name": "trim_bspline_wiggle", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "b_spline", + "dim": 3, + "p": 3, + "cpts": [ + [ + -7, + 0, + 0 + ], + [ + -3, + 5, + 0 + ], + [ + 0, + -5, + 0 + ], + [ + 3, + 5, + 0 + ], + [ + 7, + 0, + 0 + ] + ], + "knots": [ + 0, + 0, + 0, + 0, + 0.5, + 1, + 1, + 1, + 1 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "trim_bspline_along_edge", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "b_spline", + "dim": 3, + "p": 2, + "cpts": [ + [ + -7, + 3, + 0 + ], + [ + 0, + 3, + 0 + ], + [ + 7, + 3, + 0 + ] + ], + "knots": [ + 0, + 0, + 0, + 1, + 1, + 1 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "trim_rational_arc", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "b_spline", + "dim": 3, + "p": 2, + "cpts": [ + [ + 6, + 0, + 0 + ], + [ + 6, + 6, + 0 + ], + [ + 0, + 6, + 0 + ] + ], + "w": [ + 1, + 0.7071067811865476, + 1 + ], + "knots": [ + 0, + 0, + 0, + 1, + 1, + 1 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "line_degenerate", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + 1, + 1, + 0 + ], + [ + 1, + 1, + 0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "line_short", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + 5, + 1, + 0 + ], + [ + 5.0000001, + 1, + 0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "line_zero_tol_zero_len", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + 1, + 1, + 0 + ], + [ + 1, + 1, + 0 + ] + ], + "tol": 0.0 + } + }, + { + "name": "line_outside", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + 6, + 1, + 0 + ], + [ + 8, + 1, + 0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "line_touch_corner", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + 4, + 4, + 0 + ], + [ + 6, + 2, + 0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "ell_zero_radii_in", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 1, + 1, + 0 + ], + "r": [ + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "ell_zero_radii_out", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 9, + 1, + 0 + ], + "r": [ + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "ell_zero_rx", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 1, + 1, + 0 + ], + "r": [ + 0, + 2 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "ell_zero_ry", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 1, + 1, + 0 + ], + "r": [ + 7, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "ell_inside_full", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "r": [ + 2, + 1 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "ell_outside", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 20, + 0, + 0 + ], + "r": [ + 2, + 1 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "ell_contains_rect", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "r": [ + 20, + 20 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "circ_tangent_inside", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "r": [ + 3, + 3 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "circ_tangent_outside", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 6, + 0 + ], + "r": [ + 3, + 3 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "circ_cross_right", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 4, + 0, + 0 + ], + "r": [ + 2, + 2 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "circ_cross_right_opposite", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 4, + 0, + 0 + ], + "r": [ + 2, + 2 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + -1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "circ_cross_right_arc", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 4, + 0, + 0 + ], + "r": [ + 2, + 2 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + -90, + 90 + ], + "tol": 1e-06 + } + }, + { + "name": "circ_cross_right_arc2", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 4, + 0, + 0 + ], + "r": [ + 2, + 2 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 90, + 270 + ], + "tol": 1e-06 + } + }, + { + "name": "circ_cross_all_sides", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "r": [ + 5.5, + 5.5 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "ell_cross_all_sides", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "r": [ + 6, + 4 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "ell_rotated", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 1, + 0.5, + 0 + ], + "r": [ + 6, + 2 + ], + "axes": [ + [ + 0.6, + 0.8, + 0 + ], + [ + -0.8, + 0.6, + 0 + ] + ], + "ivl": [ + 10, + 350 + ], + "tol": 1e-06 + } + }, + { + "name": "circ_corner", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 5, + 3, + 0 + ], + "r": [ + 1, + 1 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "circ_through_corner", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "r": [ + 5.830951894845301, + 5.830951894845301 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "circ_big_tol", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 4.9, + 0, + 0 + ], + "r": [ + 0.2, + 0.2 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 0.5 + } + }, + { + "name": "circ_tiny", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 4.9999, + 0, + 0 + ], + "r": [ + 0.0001, + 0.0001 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-09 + } + }, + { + "name": "circ_huge_plane", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -1000000.0, + -300000.0, + 1000000.0, + 300000.0 + ] + }, + "nurb": true + }, + "dom": [ + -1000000.0, + -300000.0, + 1000000.0, + 300000.0 + ], + "c": [ + 0, + 0, + 0 + ], + "r": [ + 500000.0, + 500000.0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "xf_identity", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "frame": [ + [ + 0, + 0, + 0 + ], + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ] + } + }, + { + "name": "xf_identity_unit_scale", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "frame": [ + [ + 0, + 0, + 0 + ], + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "scale": [ + 1, + 1, + 1 + ] + } + }, + { + "name": "xf_translate", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "frame": [ + [ + 1, + 2, + 3 + ], + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ] + } + }, + { + "name": "xf_rotate", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "frame": [ + [ + 1, + 2, + 3 + ], + [ + 0, + 0, + 1 + ], + [ + 1, + 0, + 0 + ] + ] + } + }, + { + "name": "xf_scale_iso", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "frame": [ + [ + 0, + 0, + 0 + ], + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "scale": [ + 2, + 2, + 2 + ] + } + }, + { + "name": "xf_scale_iso_rot", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 1, + 1, + 1 + ], + "x": [ + 0.6, + 0.8, + 0 + ], + "y": [ + -0.8, + 0.6, + 0 + ], + "scale": [ + 2, + 0.5 + ], + "domain": [ + 0, + 0, + 2, + 3 + ] + }, + "nurb": true + }, + "frame": [ + [ + 5, + 0, + 0 + ], + [ + 0, + 1, + 0 + ], + [ + 0, + 0, + 1 + ] + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + } + }, + { + "name": "xf_scale_aniso", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "frame": [ + [ + 0, + 0, + 0 + ], + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "scale": [ + 2, + 1, + 1 + ] + } + }, + { + "name": "xf_no_nurb", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": false + }, + "frame": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ], + [ + 1, + 0, + 0 + ] + ] + } + }, + { + "name": "xf_infinite", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "normal", + "o": [ + 0, + 0, + 0 + ], + "n": [ + 1, + 1, + 1 + ] + }, + "nurb": true + }, + "frame": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + } + }, + { + "name": "off_pos", + "inputs": { + "op": "offset", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dist": 2.0 + } + }, + { + "name": "off_neg", + "inputs": { + "op": "offset", + "a": { + "make": { + "kind": "bounded", + "o": [ + 1, + 1, + 1 + ], + "x": [ + 0.6, + 0.8, + 0 + ], + "y": [ + -0.8, + 0.6, + 0 + ], + "scale": [ + 2, + 0.5 + ], + "domain": [ + 0, + 0, + 2, + 3 + ] + }, + "nurb": false + }, + "dist": -3.0 + } + }, + { + "name": "off_zero", + "inputs": { + "op": "offset", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dist": 0.0 + } + }, + { + "name": "off_canonical", + "inputs": { + "op": "offset", + "a": { + "make": { + "kind": "canonical", + "o": [ + 1, + 2, + 3 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ] + }, + "nurb": true + }, + "dist": 1e-07 + } + }, + { + "name": "trimdom_sub", + "inputs": { + "op": "trim_domain", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -1, + -1, + 2, + 2 + ] + } + }, + { + "name": "trimdom_same", + "inputs": { + "op": "trim_domain", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "trimdom_tol_edge", + "inputs": { + "op": "trim_domain", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5.000000001, + -3, + 5, + 3 + ] + } + }, + { + "name": "trimdom_outside", + "inputs": { + "op": "trim_domain", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -6, + -1, + 2, + 2 + ] + } + }, + { + "name": "trimdom_no_nurb", + "inputs": { + "op": "trim_domain", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": false + }, + "dom": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "isplane_bilinear_flat", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 1, + "q": 1, + "net": [ + [ + [ + 0, + 0, + 0 + ], + [ + 0, + 3, + 0 + ] + ], + [ + [ + 2, + 0, + 0 + ], + [ + 2, + 3, + 0 + ] + ] + ], + "u": [ + 1, + 1, + 3, + 3 + ], + "v": [ + -1, + -1, + 2, + 2 + ] + }, + "scale": 1.0 + } + }, + { + "name": "isplane_bilinear_twisted", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 1, + "q": 1, + "net": [ + [ + [ + -2, + -2, + -1 + ], + [ + -2, + 2, + -1 + ] + ], + [ + [ + 2, + -2, + 1 + ], + [ + 2, + 2, + 1 + ] + ] + ], + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + }, + "scale": 1.0 + } + }, + { + "name": "isplane_skewed", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 1, + "q": 1, + "net": [ + [ + [ + 0, + 0, + 0 + ], + [ + 1, + 3, + 0 + ] + ], + [ + [ + 2, + 0, + 0 + ], + [ + 3, + 3, + 0 + ] + ] + ], + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + }, + "scale": 1.0 + } + }, + { + "name": "isplane_nearly_flat_scale", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 1, + "q": 1, + "net": [ + [ + [ + 0, + 0, + 0 + ], + [ + 0, + 3, + 0 + ] + ], + [ + [ + 2, + 0, + 0 + ], + [ + 2, + 3, + 1e-07 + ] + ] + ], + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + }, + "scale": 1000.0 + } + }, + { + "name": "isplane_quadratic_flat", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 2, + "q": 1, + "net": [ + [ + [ + 0, + 0, + 0 + ], + [ + 0, + 2, + 0 + ] + ], + [ + [ + 1, + 0, + 0 + ], + [ + 1, + 2, + 0 + ] + ], + [ + [ + 3, + 0, + 0 + ], + [ + 3, + 2, + 0 + ] + ] + ], + "u": [ + 0, + 0, + 0, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + }, + "scale": 1.0 + } + }, + { + "name": "isplane_rational_flat", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 1, + "q": 1, + "net": [ + [ + [ + 0, + 0, + 0 + ], + [ + 0, + 3, + 0 + ] + ], + [ + [ + 2, + 0, + 0 + ], + [ + 2, + 3, + 0 + ] + ] + ], + "w": [ + [ + 1, + 2 + ], + [ + 1, + 2 + ] + ], + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + }, + "scale": 1.0 + } + }, + { + "name": "isplane_cylinder_patch", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 2, + "q": 1, + "net": [ + [ + [ + 1, + 0, + 0 + ], + [ + 1, + 0, + 2 + ] + ], + [ + [ + 1, + 1, + 0 + ], + [ + 1, + 1, + 2 + ] + ], + [ + [ + 0, + 1, + 0 + ], + [ + 0, + 1, + 2 + ] + ] + ], + "w": [ + [ + 1, + 1 + ], + [ + 0.7071067811865476, + 0.7071067811865476 + ], + [ + 1, + 1 + ] + ], + "u": [ + 0, + 0, + 0, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + }, + "scale": 1.0 + } + }, + { + "name": "db_bin_30", + "inputs": { + "op": "read_db", + "binary": true, + "version": 30, + "header": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + -5, + -3, + 5, + 3, + 1, + 1 + ], + "surface": { + "p": 1, + "q": 1, + "net": [ + [ + [ + -5, + -3, + 0 + ], + [ + -5, + 3, + 0 + ] + ], + [ + [ + 5, + -3, + 0 + ], + [ + 5, + 3, + 0 + ] + ] + ], + "u": [ + -5, + -5, + 5, + 5 + ], + "v": [ + -3, + -3, + 3, + 3 + ] + } + } + }, + { + "name": "db_bin_33", + "inputs": { + "op": "read_db", + "binary": true, + "version": 33, + "header": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + -5, + -3, + 5, + 3, + 1, + 1 + ], + "surface": { + "p": 1, + "q": 1, + "net": [ + [ + [ + -5, + -3, + 0 + ], + [ + -5, + 3, + 0 + ] + ], + [ + [ + 5, + -3, + 0 + ], + [ + 5, + 3, + 0 + ] + ] + ], + "u": [ + -5, + -5, + 5, + 5 + ], + "v": [ + -3, + -3, + 3, + 3 + ] + } + } + }, + { + "name": "db_ascii_30", + "inputs": { + "op": "read_db", + "binary": false, + "version": 30, + "header": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + -5, + -3, + 5, + 3, + 1, + 1 + ], + "surface": { + "p": 1, + "q": 1, + "net": [ + [ + [ + -5, + -3, + 0 + ], + [ + -5, + 3, + 0 + ] + ], + [ + [ + 5, + -3, + 0 + ], + [ + 5, + 3, + 0 + ] + ] + ], + "u": [ + -5, + -5, + 5, + 5 + ], + "v": [ + -3, + -3, + 3, + 3 + ] + } + } + }, + { + "name": "db_ascii_33", + "inputs": { + "op": "read_db", + "binary": false, + "version": 33, + "header": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + -5, + -3, + 5, + 3, + 1, + 1 + ], + "surface": { + "p": 1, + "q": 1, + "net": [ + [ + [ + -5, + -3, + 0 + ], + [ + -5, + 3, + 0 + ] + ], + [ + [ + 5, + -3, + 0 + ], + [ + 5, + 3, + 0 + ] + ] + ], + "u": [ + -5, + -5, + 5, + 5 + ], + "v": [ + -3, + -3, + 3, + 3 + ] + } + } + }, + { + "name": "db_ascii_cut_points", + "inputs": { + "op": "read_db", + "binary": false, + "version": 33, + "header": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + -5, + -3, + 5, + 3, + 1, + 1 + ], + "surface": { + "p": 1, + "q": 1, + "net": [ + [ + [ + -5, + -3, + 0 + ], + [ + -5, + 3, + 0 + ] + ], + [ + [ + 5, + -3, + 0 + ], + [ + 5, + 3, + 0 + ] + ] + ], + "u": [ + -5, + -5, + 5, + 5 + ], + "v": [ + -3, + -3, + 3, + 3 + ] + }, + "cut": 330 + } + }, + { + "name": "db_ascii_cut_knot", + "inputs": { + "op": "read_db", + "binary": false, + "version": 33, + "header": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + -5, + -3, + 5, + 3, + 1, + 1 + ], + "surface": { + "p": 1, + "q": 1, + "net": [ + [ + [ + -5, + -3, + 0 + ], + [ + -5, + 3, + 0 + ] + ], + [ + [ + 5, + -3, + 0 + ], + [ + 5, + 3, + 0 + ] + ] + ], + "u": [ + -5, + -5, + 5, + 5 + ], + "v": [ + -3, + -3, + 3, + 3 + ] + }, + "cut": 5 + } + }, + { + "name": "db_bin_bad_rat", + "inputs": { + "op": "read_db", + "binary": true, + "version": 33, + "header": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + -5, + -3, + 5, + 3, + 1, + 1 + ], + "surface": { + "p": 1, + "q": 1, + "net": [ + [ + [ + -5, + -3, + 0 + ], + [ + -5, + 3, + 0 + ] + ], + [ + [ + 5, + -3, + 0 + ], + [ + 5, + 3, + 0 + ] + ] + ], + "u": [ + -5, + -5, + 5, + 5 + ], + "v": [ + -3, + -3, + 3, + 3 + ] + }, + "rat": 2 + } + }, + { + "name": "db_bin_skew_axes", + "inputs": { + "op": "read_db", + "binary": true, + "version": 33, + "header": [ + 1, + 2, + 3, + 2, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 2, + 1, + 0.5, + 3 + ], + "surface": { + "p": 1, + "q": 1, + "net": [ + [ + [ + -5, + -3, + 0 + ], + [ + -5, + 3, + 0 + ] + ], + [ + [ + 5, + -3, + 0 + ], + [ + 5, + 3, + 0 + ] + ] + ], + "u": [ + -5, + -5, + 5, + 5 + ], + "v": [ + -3, + -3, + 3, + 3 + ] + } + } + }, + { + "name": "db_bin_inverted_domain", + "inputs": { + "op": "read_db", + "binary": true, + "version": 30, + "header": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 5, + 3, + -5, + -3, + 1, + 1 + ], + "surface": { + "p": 1, + "q": 1, + "net": [ + [ + [ + -5, + -3, + 0 + ], + [ + -5, + 3, + 0 + ] + ], + [ + [ + 5, + -3, + 0 + ], + [ + 5, + 3, + 0 + ] + ] + ], + "u": [ + -5, + -5, + 5, + 5 + ], + "v": [ + -3, + -3, + 3, + 3 + ] + } + } + } + ] +} \ No newline at end of file diff --git a/fixtures/surface.plane_p2/upstream.json b/fixtures/surface.plane_p2/upstream.json new file mode 100644 index 0000000000..d983f0c96e --- /dev/null +++ b/fixtures/surface.plane_p2/upstream.json @@ -0,0 +1,1446 @@ +{ + "cases": [ + { + "name": "rect_edge_0", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:424", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + -5, + -3, + 0 + ], + "b": [ + 5, + -3, + 0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "rect_edge_line_0", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:424", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + -5, + -3, + 0 + ], + [ + 5, + -3, + 0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "rect_edge_1", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:424", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + 5, + -3, + 0 + ], + "b": [ + 5, + 3, + 0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "rect_edge_line_1", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:424", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + 5, + -3, + 0 + ], + [ + 5, + 3, + 0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "rect_edge_2", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:424", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + 5, + 3, + 0 + ], + "b": [ + -5, + 3, + 0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "rect_edge_line_2", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:424", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + 5, + 3, + 0 + ], + [ + -5, + 3, + 0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "rect_edge_3", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:424", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + -5, + 3, + 0 + ], + "b": [ + -5, + -3, + 0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "rect_edge_line_3", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:424", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + -5, + 3, + 0 + ], + [ + -5, + -3, + 0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "hex_edge_0", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:462", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + 5.0, + 0.0, + 0.0 + ], + "b": [ + 2.5000000000000004, + 4.330127018922193, + 0.0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "hex_edge_line_0", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:462", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + 5.0, + 0.0, + 0.0 + ], + [ + 2.5000000000000004, + 4.330127018922193, + 0.0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "hex_edge_1", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:462", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + 2.5000000000000004, + 4.330127018922193, + 0.0 + ], + "b": [ + -2.499999999999999, + 4.330127018922194, + 0.0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "hex_edge_line_1", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:462", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + 2.5000000000000004, + 4.330127018922193, + 0.0 + ], + [ + -2.499999999999999, + 4.330127018922194, + 0.0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "hex_edge_2", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:462", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + -2.499999999999999, + 4.330127018922194, + 0.0 + ], + "b": [ + -5.0, + 6.123233995736766e-16, + 0.0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "hex_edge_line_2", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:462", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + -2.499999999999999, + 4.330127018922194, + 0.0 + ], + [ + -5.0, + 6.123233995736766e-16, + 0.0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "hex_edge_3", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:462", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + -5.0, + 6.123233995736766e-16, + 0.0 + ], + "b": [ + -2.500000000000002, + -4.330127018922192, + 0.0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "hex_edge_line_3", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:462", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + -5.0, + 6.123233995736766e-16, + 0.0 + ], + [ + -2.500000000000002, + -4.330127018922192, + 0.0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "hex_edge_4", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:462", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + -2.500000000000002, + -4.330127018922192, + 0.0 + ], + "b": [ + 2.5000000000000004, + -4.330127018922193, + 0.0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "hex_edge_line_4", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:462", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + -2.500000000000002, + -4.330127018922192, + 0.0 + ], + [ + 2.5000000000000004, + -4.330127018922193, + 0.0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "hex_edge_5", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:462", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + 2.5000000000000004, + -4.330127018922193, + 0.0 + ], + "b": [ + 5.0, + 0.0, + 0.0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "hex_edge_line_5", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:462", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + 2.5000000000000004, + -4.330127018922193, + 0.0 + ], + [ + 5.0, + 0.0, + 0.0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "hex_circle_trim", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:462", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 360 + ], + "r": 5.0 + }, + "tol": 1e-06 + } + }, + { + "name": "hex_circle_ellipse", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:462", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "r": [ + 5, + 5 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06 + } + }, + { + "name": "far_rect_line", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:424", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 10000000000.0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -5e-10, + 5, + 5e-10 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -5e-10, + 5, + 5e-10 + ], + "p": [ + [ + -5, + 10000000000.0, + 0 + ], + [ + 5, + 10000000000.0, + 0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "far_rect_trim_width", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:424", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 10000000000.0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -5e-10, + 5, + 5e-10 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -5e-10, + 5, + 5e-10 + ], + "curve": { + "kind": "segment", + "a": [ + -5, + 9999999999.0, + 0 + ], + "b": [ + -5, + 10000000001.0, + 0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "far_rect_offset", + "upstream_ref": "tests/SM_API_test/src/TestSmCurves.cpp:424", + "inputs": { + "op": "offset", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 10000000000.0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -5e-10, + 5, + 5e-10 + ] + }, + "nurb": true + }, + "dist": 2.5 + } + } + ] +} \ No newline at end of file diff --git a/harness/cpp/shim/surface_plane_p2.cpp b/harness/cpp/shim/surface_plane_p2.cpp new file mode 100644 index 0000000000..c7fde3d772 --- /dev/null +++ b/harness/cpp/shim/surface_plane_p2.cpp @@ -0,0 +1,653 @@ +// SPDX-License-Identifier: Apache-2.0 +// difftest shim for unit `surface.plane_p2`: the SmPlane members owned by the unit +// (source/SMLib/src/SmPlane.cpp, source/SMLib/inc/SmPlane.h): CreateOffsetSurface, +// GlobalSurfaceIntersect, IntersectWithPlane, TrimCurveToPlaneDomain, IsNurbSurfacePlane, +// Transform, TrimWithDomain, ReadFromDB, MakeNewPlaneLine and MakeNewPlaneEllipse. +// +// One entry point, sc_surface_plane_p2_run(in, n_in, out, cap, out_len). `in` is one op: its +// code then its operands; layouts are documented in +// crates/solidcore-ffi/src/units/surface_plane_p2.rs, which validates every value. Every read +// is bounds checked here too (a bad program is SC_ERR_ARG). `out` receives the op's record. +#include "sc_shim.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +namespace +{ +// Ops (keep in sync with crates/solidcore-ffi/src/units/surface_plane_p2.rs). +enum : int32_t +{ + OP_OFFSET = 1, + OP_TRANSFORM = 2, + OP_TRIM_DOMAIN = 3, + OP_IS_NURB_PLANE = 4, + OP_INTERSECT = 5, + OP_GLOBAL = 6, + OP_TRIM_CURVE = 7, + OP_LINE = 8, + OP_ELLIPSE = 9, + OP_READ_DB = 10, + OP_LAST = 10, +}; + +struct PeekS : SmBSplineSurface +{ + static SmKnotType SmBSplineSurface::*kt() { return &PeekS::m_eKnotType; } + static SmBSplineSurfaceForm SmBSplineSurface::*form() { return &PeekS::m_eBSplineSurfaceForm; } +}; + +struct PeekC : SmBSplineCurve +{ + static SmKnotType SmBSplineCurve::*kt() { return &PeekC::m_eKnotType; } + static SmBSplineCurveForm SmBSplineCurve::*form() { return &PeekC::m_eBSplineCurveForm; } +}; + +struct Bad : std::runtime_error +{ + Bad() : std::runtime_error("bad program") {} +}; + +struct Rd +{ + const double* in; + int64_t n; + int64_t at; + double num() + { + if (at >= n) + throw Bad(); + return in[at++]; + } + int64_t idx(int64_t lo, int64_t hi) + { + double d = num(); + if (!(d >= (double)lo && d <= (double)hi) || d != (double)(int64_t)d) + throw Bad(); + return (int64_t)d; + } + bool flag() { return idx(0, 1) != 0; } + SmVector3d vec() + { + double x = num(); + double y = num(); + double z = num(); + return SmVector3d(x, y, z); + } + SmExtent2d dom4() + { + double a = num(); + double b = num(); + double c = num(); + double d = num(); + return SmExtent2d(a, b, c, d); + } +}; + +double st(SmStatus s) +{ + return s == SM_SUCCESS ? 0.0 : (double)s; +} + +double flg(SmBoolean b) +{ + return b ? 1.0 : 0.0; +} + +void put_vec(std::vector& o, const SmVector3d& v) +{ + o.push_back(v.x); + o.push_back(v.y); + o.push_back(v.z); +} + +void put_dom(std::vector& o, const SmExtent2d& e) +{ + o.push_back(e.GetMin().x); + o.push_back(e.GetMin().y); + o.push_back(e.GetMax().x); + o.push_back(e.GetMax().y); +} + +void put_ivl(std::vector& o, const SmExtent1d& e) +{ + o.push_back(e.GetMin()); + o.push_back(e.GetMax()); +} + +// A plane block: `kind` (0 bounded `o x y scale[2] dom[4]`, 1 normal `o n`, 2 canonical `o x y`) +// then `nurb` (1: make the NURB now with GetOrCreateGwNurbPointer). NULL when CreateCanonical +// fails. +SmPlane* read_plane(Rd& rd, const SmContext& ctx) +{ + int64_t kind = rd.idx(0, 2); + SmPlane* p = NULL; + switch (kind) + { + case 0: + { + SmPoint3d o = rd.vec(); + SmVector3d x = rd.vec(); + SmVector3d y = rd.vec(); + double su = rd.num(); + double sv = rd.num(); + SmExtent2d d = rd.dom4(); + p = new (ctx) SmPlane(o, x, y, SmVector2d(su, sv), d, &ctx); + break; + } + case 1: + { + SmPoint3d o = rd.vec(); + SmVector3d nv = rd.vec(); + p = new (ctx) SmPlane(o, nv, &ctx); + break; + } + default: + { + SmPoint3d o = rd.vec(); + SmVector3d x = rd.vec(); + SmVector3d y = rd.vec(); + SmAxis2Placement f(o, x, y); + if (SmPlane::CreateCanonical(ctx, f, p) != SM_SUCCESS) + { + delete p; + p = NULL; + } + break; + } + } + bool nurb = rd.flag(); + if (p != NULL && nurb) + p->GetOrCreateGwNurbPointer(); + return p; +} + +// `n m p q r s cpts(x y z w) u v`, sizes checked by the Rust side. +SmBSplineSurface* read_bspline_surface(Rd& rd, const SmContext& ctx) +{ + gw_INDEX n = (gw_INDEX)rd.idx(1, 16); + gw_INDEX m = (gw_INDEX)rd.idx(1, 16); + gw_DEGREE p = (gw_DEGREE)rd.idx(1, 8); + gw_DEGREE q = (gw_DEGREE)rd.idx(1, 8); + gw_INDEX r = (gw_INDEX)rd.idx(3, 40); + gw_INDEX s = (gw_INDEX)rd.idx(3, 40); + if (p > n || q > m || r != n + p + 1 || s != m + q + 1) + throw Bad(); + std::vector v; + for (int64_t i = 0; i < 4 * (n + 1) * (m + 1) + r + 1 + s + 1; i++) + v.push_back(rd.num()); + gw_SURFACE* sur = sm_AllocateNurbSurface(n, m, p, q, r, s); + size_t k = 0; + for (gw_INDEX i = 0; i <= n; i++) + for (gw_INDEX j = 0; j <= m; j++) + { + sur->net->Pw[i][j].x = v[k++]; + sur->net->Pw[i][j].y = v[k++]; + sur->net->Pw[i][j].z = v[k++]; + sur->net->Pw[i][j].w = v[k++]; + } + for (gw_INDEX i = 0; i <= r; i++) + sur->knu->U[i] = v[k++]; + for (gw_INDEX i = 0; i <= s; i++) + sur->knv->U[i] = v[k++]; + return new (ctx) SmBSplineSurface(sur, FALSE, &ctx); +} + +// A curve: `0 a b` (CreateLineSegment, dim 3), `1 dim n p m cpts(x y z w) knots`, +// `2 c x y d0 d1 rx ry` (SmEllipse, dim 3) or `3 c x y d0 d1 r` (SmCircle, dim 3). +SmCurve* read_curve(Rd& rd, const SmContext& ctx) +{ + int64_t kind = rd.idx(0, 3); + if (kind == 0) + { + SmPoint3d a = rd.vec(); + SmPoint3d b = rd.vec(); + SmLine* l = NULL; + if (SmLine::CreateLineSegment(ctx, 3, a, b, l) != SM_SUCCESS || l == NULL) + throw Bad(); + return l; + } + if (kind == 2 || kind == 3) + { + SmPoint3d c = rd.vec(); + SmVector3d x = rd.vec(); + SmVector3d y = rd.vec(); + double d0 = rd.num(); + double d1 = rd.num(); + double rx = rd.num(); + if (kind == 3) + return new (ctx) SmCircle(c, x, y, SmExtent1d(d0, d1), rx, 3, &ctx); + double ry = rd.num(); + return new (ctx) SmEllipse(c, x, y, SmExtent1d(d0, d1), rx, ry, 3, &ctx); + } + ULONG dim = (ULONG)rd.idx(2, 3); + int64_t n = rd.idx(1, 32); + int64_t p = rd.idx(1, 8); + int64_t m = rd.idx(3, 64); + if (p > n || m != n + p + 1) + throw Bad(); + std::vector v; + for (int64_t i = 0; i < 4 * (n + 1) + m + 1; i++) + v.push_back(rd.num()); + gw_CURVE* cur = sm_AllocateNurbCurve((gw_INDEX)n, (gw_DEGREE)p, (gw_INDEX)m); + for (int64_t i = 0; i <= n; i++) + { + cur->pol->Pw[i].x = v[4 * i]; + cur->pol->Pw[i].y = v[4 * i + 1]; + cur->pol->Pw[i].z = v[4 * i + 2]; + cur->pol->Pw[i].w = v[4 * i + 3]; + } + for (int64_t i = 0; i <= m; i++) + cur->knt->U[i] = v[4 * (n + 1) + i]; + SmBSplineCurve* c = new (ctx) SmBSplineCurve(dim, (ULONG)cur->pol->n, (ULONG)cur->knt->m, + (short)cur->p, cur->pol->Pw, cur->knt->U, &ctx); + smos_Free(cur); + return c; +} + +void put_surface_nurb(std::vector& o, const gw_SURFACE* sur) +{ + o.push_back(sur ? 1.0 : 0.0); + if (!sur) + return; + gw_INDEX n = sur->net->n; + gw_INDEX m = sur->net->m; + gw_INDEX r = sur->knu->m; + gw_INDEX s = sur->knv->m; + o.push_back((double)n); + o.push_back((double)m); + o.push_back((double)sur->p); + o.push_back((double)sur->q); + o.push_back((double)r); + o.push_back((double)s); + for (gw_INDEX i = 0; i <= n; i++) + for (gw_INDEX j = 0; j <= m; j++) + { + o.push_back(sur->net->Pw[i][j].x); + o.push_back(sur->net->Pw[i][j].y); + o.push_back(sur->net->Pw[i][j].z); + o.push_back(sur->net->Pw[i][j].w); + } + for (gw_INDEX i = 0; i <= r; i++) + o.push_back(sur->knu->U[i]); + for (gw_INDEX i = 0; i <= s; i++) + o.push_back(sur->knv->U[i]); +} + +// type O X Y Z domain scale oob kt form, then the plane's own NURB `has [..]`. +void put_state(std::vector& o, const SmPlane* a) +{ + const SmAxis2Placement& pos = a->GetPosition(); + o.push_back((double)a->GetType()); + put_vec(o, pos.GetOrigin()); + put_vec(o, pos.GetXAxis()); + put_vec(o, pos.GetYAxis()); + put_vec(o, pos.GetZAxis()); + put_dom(o, a->GetSTEPUVDomain()); + SmVector2d sc = a->GetUVScale(); + o.push_back(sc.x); + o.push_back(sc.y); + o.push_back(flg(a->IsOutOfBoundsEnabled())); + o.push_back((double)(a->*PeekS::kt())); + o.push_back((double)(a->*PeekS::form())); + put_surface_nurb(o, a->GetGwNurbPointer()); +} + +void put_curve_nurb(std::vector& o, const SmBSplineCurve* c) +{ + o.push_back((double)(c->*PeekC::kt())); + o.push_back((double)(c->*PeekC::form())); + const gw_CURVE* cur = c->GetGwNurbPointer(); + o.push_back(cur ? 1.0 : 0.0); + if (!cur) + return; + gw_INDEX n = cur->pol->n; + gw_INDEX m = cur->knt->m; + o.push_back((double)n); + o.push_back((double)cur->p); + o.push_back((double)m); + for (gw_INDEX i = 0; i <= n; i++) + { + o.push_back(cur->pol->Pw[i].x); + o.push_back(cur->pol->Pw[i].y); + o.push_back(cur->pol->Pw[i].z); + o.push_back(cur->pol->Pw[i].w); + } + for (gw_INDEX i = 0; i <= m; i++) + o.push_back(cur->knt->U[i]); +} + +// `has` then type dim [line: P V dom scale inside_out] [ellipse: C X Y rx ry dom inside_out] +// B-spline part, natural interval. +void put_curve(std::vector& o, const SmCurve* c) +{ + o.push_back(c ? 1.0 : 0.0); + if (!c) + return; + o.push_back((double)c->GetType()); + o.push_back((double)c->GetDim()); + if (c->IsKindOf(SmLine_TYPE)) + { + const SmLine* l = (const SmLine*)c; + put_vec(o, l->GetLinePoint()); + put_vec(o, l->GetLineVector()); + put_ivl(o, l->GetSTEPInterval()); + o.push_back(l->GetLineScale()); + o.push_back(l->GetInsideOut() ? 1.0 : 0.0); + } + else if (c->IsKindOf(SmEllipse_TYPE)) + { + const SmEllipse* e = (const SmEllipse*)c; + const SmAxis2Placement& pos = e->GetPosition(); + put_vec(o, pos.GetOrigin()); + put_vec(o, pos.GetXAxis()); + put_vec(o, pos.GetYAxis()); + o.push_back(e->GetXRadius()); + o.push_back(e->GetYRadius()); + put_ivl(o, e->GetSTEPInterval()); + o.push_back(e->GetInsideOut() ? 1.0 : 0.0); + } + if (!c->IsKindOf(SmBSplineCurve_TYPE)) + throw Bad(); + put_curve_nurb(o, (const SmBSplineCurve*)c); + put_ivl(o, c->GetNaturalInterval()); +} + +void free_curves(SmTArray& a) +{ + for (ULONG i = 0; i < a.GetSize(); i++) + delete a[i]; + a.ReSet(); +} + +// `status [needs_more] count curves... types... deviations...` of an intersection. +void put_intersection(std::vector& o, SmTArray& c3, SmTArray& uv1, + SmTArray& uv2, SmTArray& ty, + SmTArray& dev) +{ + o.push_back((double)c3.GetSize()); + for (ULONG i = 0; i < c3.GetSize(); i++) + put_curve(o, c3[i]); + o.push_back((double)uv1.GetSize()); + for (ULONG i = 0; i < uv1.GetSize(); i++) + o.push_back(uv1[i] ? 1.0 : 0.0); + o.push_back((double)uv2.GetSize()); + for (ULONG i = 0; i < uv2.GetSize(); i++) + o.push_back(uv2[i] ? 1.0 : 0.0); + o.push_back((double)ty.GetSize()); + for (ULONG i = 0; i < ty.GetSize(); i++) + o.push_back((double)ty[i]); + o.push_back((double)dev.GetSize()); + for (ULONG i = 0; i < dev.GetSize(); i++) + o.push_back(dev[i]); +} + +// `has tol` and the optional tolerance. +const double* read_opt(Rd& rd, double& slot) +{ + bool has = rd.flag(); + slot = rd.num(); + return has ? &slot : NULL; +} + +void run_op(int32_t op, Rd& rd, const SmContext& ctx, std::vector& o) +{ + switch (op) + { + case OP_OFFSET: + { + SmPlane* a = read_plane(rd, ctx); + double dist = rd.num(); + if (a == NULL) + throw Bad(); + SmSurface* off = NULL; + SmStatus s = a->CreateOffsetSurface(ctx, dist, 0.0, off); + o.push_back(st(s)); + if (s == SM_SUCCESS) + { + if (off == NULL || !off->IsKindOf(SmPlane_TYPE)) + throw Bad(); + put_state(o, (const SmPlane*)off); + } + delete off; + delete a; + break; + } + case OP_TRANSFORM: + { + SmPlane* a = read_plane(rd, ctx); + SmPoint3d po = rd.vec(); + SmVector3d px = rd.vec(); + SmVector3d py = rd.vec(); + bool has_scale = rd.flag(); + SmVector3d sc = rd.vec(); + if (a == NULL) + throw Bad(); + SmAxis2Placement f(po, px, py); + SmStatus s = a->Transform(f, has_scale ? &sc : NULL); + o.push_back(st(s)); + put_state(o, a); + delete a; + break; + } + case OP_TRIM_DOMAIN: + { + SmPlane* a = read_plane(rd, ctx); + SmExtent2d d = rd.dom4(); + if (a == NULL) + throw Bad(); + SmStatus s = a->TrimWithDomain(d); + o.push_back(st(s)); + put_state(o, a); + delete a; + break; + } + case OP_IS_NURB_PLANE: + { + SmBSplineSurface* bs = read_bspline_surface(rd, ctx); + double scale = rd.num(); + SmPlane* p = NULL; + SmBoolean r = SmPlane::IsNurbSurfacePlane(ctx, bs, p, scale); + o.push_back(0.0); + o.push_back(r ? 1.0 : 0.0); + o.push_back(p ? 1.0 : 0.0); + if (p) + put_state(o, p); + delete p; + delete bs; + break; + } + case OP_INTERSECT: + case OP_GLOBAL: + { + SmPlane* a = read_plane(rd, ctx); + SmExtent2d da = rd.dom4(); + bool same = rd.flag(); + SmSurface* b = NULL; + if (!same) + { + int64_t kind = rd.idx(0, 1); + b = kind == 0 ? (SmSurface*)read_plane(rd, ctx) : (SmSurface*)read_bspline_surface(rd, ctx); + } + SmExtent2d db = rd.dom4(); + double tol_slot = 0.0; + const double* tol = read_opt(rd, tol_slot); + if (a == NULL || (!same && b == NULL)) + throw Bad(); + const SmSurface* other = same ? (const SmSurface*)a : b; + SmBoolean edges[2] = {TRUE, TRUE}; + SmTArray c3, uv1, uv2; + SmTArray ty; + SmTArray dev; + SmStatus s; + SmBoolean more = FALSE; + if (op == OP_INTERSECT) + { + if (!other->IsKindOf(SmPlane_TYPE)) + throw Bad(); + SmApproxTol3d t3 = tol ? *tol : 0.0; + s = a->IntersectWithPlane(ctx, da, *(const SmPlane*)other, db, edges, tol ? &t3 : NULL, NULL, + more, &c3, &uv1, &uv2, &ty, &dev); + } + else + { + SmApproxTol3d t3 = tol ? *tol : 0.0; + s = a->GlobalSurfaceIntersect(ctx, da, *other, db, edges, tol ? &t3 : NULL, NULL, &c3, &uv1, + &uv2, &ty, &dev); + } + o.push_back(st(s)); + if (s == SM_SUCCESS) + { + if (op == OP_INTERSECT) + o.push_back(flg(more)); + put_intersection(o, c3, uv1, uv2, ty, dev); + } + free_curves(c3); + free_curves(uv1); + free_curves(uv2); + delete b; + delete a; + break; + } + case OP_TRIM_CURVE: + { + SmPlane* a = read_plane(rd, ctx); + SmExtent2d d = rd.dom4(); + SmCurve* c = read_curve(rd, ctx); + double tol = rd.num(); + if (a == NULL) + throw Bad(); + SmTArray out; + SmStatus s = a->TrimCurveToPlaneDomain(d, *c, tol, out); + o.push_back(st(s)); + if (s == SM_SUCCESS) + { + o.push_back((double)out.GetSize()); + for (ULONG i = 0; i < out.GetSize(); i++) + put_curve(o, out[i]); + } + free_curves(out); + delete c; + delete a; + break; + } + case OP_LINE: + { + SmPlane* a = read_plane(rd, ctx); + SmExtent2d d = rd.dom4(); + SmPoint3d p0 = rd.vec(); + SmPoint3d p1 = rd.vec(); + double tol = rd.num(); + if (a == NULL) + throw Bad(); + SmBoolean found = FALSE; + SmBSplineCurve* c = a->MakeNewPlaneLine(ctx, d, p0, p1, tol, found); + o.push_back(0.0); + o.push_back(flg(found)); + put_curve(o, c); + delete c; + delete a; + break; + } + case OP_ELLIPSE: + { + SmPlane* a = read_plane(rd, ctx); + SmExtent2d d = rd.dom4(); + SmPoint3d c = rd.vec(); + double rx = rd.num(); + double ry = rd.num(); + SmVector3d x = rd.vec(); + SmVector3d y = rd.vec(); + double i0 = rd.num(); + double i1 = rd.num(); + double tol = rd.num(); + if (a == NULL) + throw Bad(); + SmTArray out; + SmStatus s = a->MakeNewPlaneEllipse(ctx, d, c, rx, ry, x, y, SmExtent1d(i0, i1), tol, out); + o.push_back(st(s)); + if (s == SM_SUCCESS) + { + o.push_back((double)out.GetSize()); + for (ULONG i = 0; i < out.GetSize(); i++) + put_curve(o, out[i]); + } + for (ULONG i = 0; i < out.GetSize(); i++) + delete out[i]; + delete a; + break; + } + case OP_READ_DB: + { + bool binary = rd.flag(); + ULONG version = (ULONG)rd.idx(0, 100); + int64_t nb = rd.idx(0, 1 << 20); + std::string bytes; + for (int64_t i = 0; i < nb; i++) + bytes.push_back((char)(unsigned char)rd.idx(0, 255)); + std::istringstream iss(bytes); + SmDatabaseIOStream db(binary ? SM_BINARY : SM_ASCII, &iss); + SmSurface* s = NULL; + SmStatus stt = SmPlane::ReadFromDB(SmPlane_TYPE, db, ctx, s, version); + o.push_back(st(stt)); + if (stt == SM_SUCCESS) + { + if (s == NULL || !s->IsKindOf(SmPlane_TYPE)) + throw Bad(); + put_state(o, (const SmPlane*)s); + } + delete s; + break; + } + default: throw Bad(); + } +} +} // namespace + +SC_EXPORT int32_t sc_surface_plane_p2_run(const double* in, int64_t n_in, double* out, int64_t cap, + int64_t* out_len) +{ + if (in == NULL || n_in < 1) + return SC_ERR_ARG; + try + { + SmContext ctx; + std::vector o; + Rd rd{in, n_in, 0}; + int32_t op = (int32_t)rd.idx(1, OP_LAST); + run_op(op, rd, ctx, o); + if (rd.at != rd.n) + return SC_ERR_ARG; + return sc_copy_out(o.data(), (int64_t)o.size(), out, cap, out_len); + } + catch (const Bad&) + { + return SC_ERR_ARG; + } + catch (...) + { + return SC_ERR_EXCEPTION; + } +} From 5188ce7b873c9aca9e4a215b65d47ea64a63ece8 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Tue, 13 Oct 2026 21:25:28 -0400 Subject: [PATCH 18/54] surface.plane_p2: wire back-edges, port SmSurfOfRevolution::IntersectWithPlane body, tests, guards surf_of_revolution_p1 goes green; plane_p2 partial (9 deferred, adv intersector). Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01FsWWaoeGNWKgzeGrF2Pkn5 --- .../units/surface_surf_of_revolution_p1.rs | 2 +- .../difftest/src/units/surface_surface_p2.rs | 7 +- .../src/units/surface_plane_p2.rs | 35 +- crates/solidcore/src/surface/plane/p2.rs | 237 ++++++++- .../src/surface/surf_of_revolution/p1.rs | 283 +++++++++-- crates/solidcore/src/surface/surface/p2.rs | 5 +- fixtures/surface.plane_p2/edge.json | 456 ++++++++++++++++++ plan/modules.toml | 12 +- 8 files changed, 947 insertions(+), 90 deletions(-) diff --git a/crates/difftest/src/units/surface_surf_of_revolution_p1.rs b/crates/difftest/src/units/surface_surf_of_revolution_p1.rs index 1e74c2e980..5a3e0cc538 100644 --- a/crates/difftest/src/units/surface_surf_of_revolution_p1.rs +++ b/crates/difftest/src/units/surface_surf_of_revolution_p1.rs @@ -665,7 +665,7 @@ fn rust_op( Ok(p) => p, }; let [a, b, c, d] = *dom; - s.intersect_with_plane(&plane, &Extent2d::from_bounds(a, b, c, d), *tol) + s.intersect_with_plane(k, &plane, &Extent2d::from_bounds(a, b, c, d), *tol) .map(|(more, x)| { o.extend([0.0, flag(more), x.curves_3d.len() as f64]); for c in &x.curves_3d { diff --git a/crates/difftest/src/units/surface_surface_p2.rs b/crates/difftest/src/units/surface_surface_p2.rs index b3228f5abe..e453765245 100644 --- a/crates/difftest/src/units/surface_surface_p2.rs +++ b/crates/difftest/src/units/surface_surface_p2.rs @@ -1072,12 +1072,15 @@ fn dump_bss(o: &mut Vec, s: &BSplineSurface) { } } -/// `put_state`: `0` for the base class, else the B-spline state. +/// `put_state`: `0` for the base class, else the B-spline state (of a plane's B-spline +/// part). fn dump_state(o: &mut Vec, s: Option<&Surface>) { match s.map(Surface::kind) { Some(sp2::SurfaceKind::BSpline(b)) => dump_bss(o, b), + // an SmPlane is an SmBSplineSurface: its B-spline part + Some(sp2::SurfaceKind::Plane(p)) => dump_bss(o, p.base()), // `put_state` of a surface that is not a B-spline - Some(sp2::SurfaceKind::CurveBounded(_) | sp2::SurfaceKind::Plane(_)) | None => o.push(0.0), + Some(sp2::SurfaceKind::CurveBounded(_)) | None => o.push(0.0), } } diff --git a/crates/solidcore-ffi/src/units/surface_plane_p2.rs b/crates/solidcore-ffi/src/units/surface_plane_p2.rs index 6797bca823..d2d3a8503e 100644 --- a/crates/solidcore-ffi/src/units/surface_plane_p2.rs +++ b/crates/solidcore-ffi/src/units/surface_plane_p2.rs @@ -28,10 +28,9 @@ //! //! [`run`] accepts only finite inputs of magnitude at most [`MAX_COORD`], well-formed //! clamped B-splines (at most [`MAX_INDEX`] + 1 control points per direction, degree at -//! most [`MAX_DEGREE`], positive weights or none), non-degenerate curve and plane -//! constructors and transform scales without a zero component (upstream collapses the -//! NURB, `IsNurbSurfacePlane` can then return `TRUE` without a plane and `Transform` -//! dereferences it). +//! most [`MAX_DEGREE`], positive weights or none), segments with distinct end points, +//! planes with a non-zero normal and ellipses and circles without a zero radius (the +//! upstream construction crashes). use crate::{call_with_buffer, FfiError}; @@ -422,7 +421,7 @@ impl Enc { self.nums(&d.knots) } CurveIn::Ellipse { c, x, y, dom, r } => { - Self::check_conic(x, y, dom, r[0].min(r[1]))?; + Self::check_radii(r)?; self.int(2); self.nums(c)?; self.nums(x)?; @@ -431,7 +430,7 @@ impl Enc { self.nums(r) } CurveIn::Circle { c, x, y, dom, r } => { - Self::check_conic(x, y, dom, *r)?; + Self::check_radii(&[*r])?; self.int(3); self.nums(c)?; self.nums(x)?; @@ -442,21 +441,10 @@ impl Enc { } } - /// An ellipse needs independent axes, positive radii and a non-empty domain within - /// one turn (the NURB construction divides by them). - fn check_conic(x: &[f64; 3], y: &[f64; 3], dom: &[f64; 2], r: f64) -> Result<(), FfiError> { - let cr = [ - x[1] * y[2] - x[2] * y[1], - x[2] * y[0] - x[0] * y[2], - x[0] * y[1] - x[1] * y[0], - ]; - if len_sq(x) < 1e-12 || len_sq(y) < 1e-12 || len_sq(&cr) < 1e-12 * len_sq(x) * len_sq(y) - { - return Err(bad("ellipse axes")); - } - if !(r > 1e-9) || !(dom[1] - dom[0] > 1e-6) || dom[1] - dom[0] > 360.0 || dom[0].abs() > 720.0 - { - return Err(bad("ellipse radii or domain")); + /// A zero radius crashes the ellipse construction upstream. + fn check_radii(r: &[f64]) -> Result<(), FfiError> { + if r.contains(&0.0) { + return Err(bad("zero ellipse radius")); } Ok(()) } @@ -503,11 +491,6 @@ impl Enc { self.num(*dist) } Op::Transform { a, frame, scale } => { - if let Some(s) = scale { - if s.iter().any(|&c| c == 0.0) { - return Err(bad("zero scale component")); - } - } self.int(2); self.plane(a)?; for v in frame { diff --git a/crates/solidcore/src/surface/plane/p2.rs b/crates/solidcore/src/surface/plane/p2.rs index 9db3672194..d3282d31be 100644 --- a/crates/solidcore/src/surface/plane/p2.rs +++ b/crates/solidcore/src/surface/plane/p2.rs @@ -456,7 +456,11 @@ impl Plane { /// The axis aligned and pseudo boxes of the plane (`CalculateBoundingBox(domain, /// &box, &pbox)`, the inherited `SmBSplineSurface` override with its default /// zone-tolerance expansion). - fn boxes(&self, uv_domain: &Extent2d, owned: bool) -> Result<(Extent3d, PseudoBox)> { + pub(crate) fn bounding_boxes( + &self, + uv_domain: &Extent2d, + owned: bool, + ) -> Result<(Extent3d, PseudoBox)> { let req = BoundingBoxRequest { normal: true, pseudo: true, @@ -554,8 +558,8 @@ impl Plane { } // get plane1 and plane2 bounding and pseudo boxes - let (bbox1, pbox1) = self.boxes(uv_domain, owned[0])?; - let (bbox2, pbox2) = other.boxes(other_uv_domain, owned[1])?; + let (bbox1, pbox1) = self.bounding_boxes(uv_domain, owned[0])?; + let (bbox2, pbox2) = other.bounding_boxes(other_uv_domain, owned[1])?; // no work - when bounding or pseudo boxes are disjoint if bbox1.are_disjoint(&bbox2, 0.0) || pbox1.are_disjoint(&pbox2, None) { @@ -639,7 +643,7 @@ impl Plane { // get size of bounded ThisPlane if this_bounded { - (bbox1, pbox1) = self.boxes(uv_domain, owned[0])?; + (bbox1, pbox1) = self.bounding_boxes(uv_domain, owned[0])?; let radius1 = bbox1.sphere_bound().radius; bbox1.expand_absolute(tol / 2.0); pbox1.expand_absolute(tol / 2.0); @@ -648,7 +652,7 @@ impl Plane { // get size of bounded OtherPlane if other_bounded { - (bbox2, pbox2) = other.boxes(other_uv_domain, owned[1])?; + (bbox2, pbox2) = other.bounding_boxes(other_uv_domain, owned[1])?; let radius2 = bbox2.sphere_bound().radius; bbox2.expand_absolute(tol / 2.0); pbox2.expand_absolute(tol / 2.0); @@ -1374,3 +1378,226 @@ pub(crate) fn global_surface_intersect( // all done Ok(out) } + +#[cfg(test)] +mod tests { + use super::*; + + fn rect() -> Plane { + let mut p = Plane::new( + Vec3::ZERO, + Vec3::X, + Vec3::Y, + Vec2::new(1.0, 1.0), + &Extent2d::from_bounds(-5.0, -3.0, 5.0, 3.0), + ); + p.make_nurb().unwrap(); + p + } + + fn dom() -> Extent2d { + Extent2d::from_bounds(-5.0, -3.0, 5.0, 3.0) + } + + #[test] + fn offset_moves_along_normal() { + let p = rect().create_offset_surface(2.0).unwrap(); + assert_eq!(p.position().origin(), Vec3::new(0.0, 0.0, 2.0)); + assert_eq!(p.step_uv_domain(), dom()); + } + + #[test] + fn transform_rejects_anisotropic_scale() { + let mut p = rect(); + let r = p.transform(&Axis2Placement::IDENTITY, Some(Vec3::new(2.0, 1.0, 1.0))); + assert!(r.is_err()); + let mut q = rect(); + q.transform(&Axis2Placement::IDENTITY, Some(Vec3::new(2.0, 2.0, 2.0))) + .unwrap(); + let o = q.evaluate_point(Point2::new(5.0, 3.0)); + assert!((o - Vec3::new(10.0, 6.0, 0.0)).length() < 1e-12); + } + + #[test] + fn trim_with_domain_checks_containment() { + let mut p = rect(); + assert!(p + .trim_with_domain(&Extent2d::from_bounds(-6.0, 0.0, 1.0, 1.0)) + .is_err()); + p.trim_with_domain(&Extent2d::from_bounds(-1.0, 0.0, 1.0, 1.0)) + .unwrap(); + assert_eq!( + p.step_uv_domain(), + Extent2d::from_bounds(-1.0, 0.0, 1.0, 1.0) + ); + } + + #[test] + fn recognises_bilinear_plane() { + let s = BSplineSurface::create_bilinear_surface( + Vec3::ZERO, + Vec3::new(2.0, 0.0, 0.0), + Vec3::new(0.0, 3.0, 0.0), + Vec3::new(2.0, 3.0, 0.0), + ) + .unwrap(); + let p = Plane::is_nurb_surface_plane(&s, 1.0).unwrap().unwrap(); + assert!(p.base().gw_nurb().is_some()); + let twisted = BSplineSurface::create_bilinear_surface( + Vec3::ZERO, + Vec3::new(2.0, 0.0, 0.0), + Vec3::new(0.0, 3.0, 0.0), + Vec3::new(2.0, 3.0, 1.0), + ) + .unwrap(); + assert!(Plane::is_nurb_surface_plane(&twisted, 1.0) + .unwrap() + .is_none()); + } + + #[test] + fn plane_plane_intersections() { + let a = Plane::from_normal(Vec3::ZERO, Vec3::Z); + let b = Plane::from_normal(Vec3::new(1.0, 0.0, 0.0), Vec3::X); + let d = Extent2d::from_bounds(-1.0, -1.0, 1.0, 1.0); + let (more, x) = a.intersect_with_plane(&d, &b, &d, None).unwrap(); + assert!(!more); + assert_eq!(x.curves_3d.len(), 1); + assert_eq!(x.curve_types, vec![TsectCurveType::Crossing]); + assert!(x.surface1_uv_curves.iter().all(Option::is_none)); + + // bounded crossing + let mut c = Plane::new( + Vec3::new(1.0, 0.0, 0.0), + Vec3::Y, + Vec3::Z, + Vec2::new(1.0, 1.0), + &Extent2d::from_bounds(-4.0, -2.0, 4.0, 2.0), + ); + c.make_nurb().unwrap(); + let (_, x) = rect() + .intersect_with_plane(&dom(), &c, &c.step_uv_domain(), None) + .unwrap(); + assert_eq!(x.curves_3d.len(), 1); + + // coincident planes need the general intersector, parallel ones give nothing + let (more, x) = rect() + .intersect_with_plane(&dom(), &rect(), &dom(), None) + .unwrap(); + assert!(more && x.curves_3d.is_empty()); + let r = rect(); + let (more, _) = r.intersect_with_plane(&dom(), &r, &dom(), None).unwrap(); + assert!(!more); + } + + #[test] + fn trims_curves_lines_and_ellipses() { + let k = Kernel::default(); + let p = rect(); + let seg = Curve::from( + Line::create_line_segment( + 3, + Vec3::new(-10.0, 0.0, 0.0), + Vec3::new(10.0, 0.0, 0.0), + None, + ) + .unwrap(), + ); + let cs = p + .trim_curve_to_plane_domain(&k, &dom(), &seg, 1e-6) + .unwrap(); + assert_eq!(cs.len(), 1); + + let (c, found) = p + .make_new_plane_line( + &dom(), + Vec3::new(-10.0, 1.0, 0.0), + Vec3::new(10.0, 1.0, 0.0), + 1e-6, + ) + .unwrap(); + assert!(found && c.is_some()); + let (c, found) = p + .make_new_plane_line( + &dom(), + Vec3::new(6.0, 1.0, 0.0), + Vec3::new(8.0, 1.0, 0.0), + 1e-6, + ) + .unwrap(); + assert!(!found && c.is_none()); + + let full = Extent1d::from_min_max(0.0, 360.0); + let inside = p + .make_new_plane_ellipse( + &k, + &dom(), + Vec3::ZERO, + 2.0, + 1.0, + Vec3::X, + Vec3::Y, + &full, + 1e-6, + ) + .unwrap(); + assert_eq!(inside.len(), 1); + let crossing = p + .make_new_plane_ellipse( + &k, + &dom(), + Vec3::new(4.0, 0.0, 0.0), + 2.0, + 2.0, + Vec3::X, + Vec3::Y, + &full, + 1e-6, + ) + .unwrap(); + assert!(!crossing.is_empty()); + let point = p + .make_new_plane_ellipse( + &k, + &dom(), + Vec3::ZERO, + 0.0, + 0.0, + Vec3::X, + Vec3::Y, + &full, + 1e-6, + ) + .unwrap(); + assert_eq!(point.len(), 1); + } + + #[test] + fn reads_binary_plane() { + let mut bytes = Vec::new(); + for x in [ + 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, -5.0, -3.0, 5.0, 3.0, 1.0, 1.0, + ] { + bytes.extend_from_slice(&f64::to_ne_bytes(x)); + } + for n in [1_i64, 1] { + bytes.extend_from_slice(&n.to_ne_bytes()); + } + for p in [1_i16, 1, 0] { + bytes.extend_from_slice(&p.to_ne_bytes()); + } + for x in [ + -5.0, -3.0, 0.0, -5.0, 3.0, 0.0, 5.0, -3.0, 0.0, 5.0, 3.0, 0.0, -5.0, -5.0, 5.0, 5.0, + -3.0, -3.0, 3.0, 3.0, + ] { + bytes.extend_from_slice(&f64::to_ne_bytes(x)); + } + let mut db = DatabaseReader::new(); + db.open_for_read(bytes.clone(), FileType::Binary); + let p = Plane::read_from_db(&mut db, 30).unwrap(); + assert_eq!(p.step_uv_domain(), dom()); + let mut db = DatabaseReader::new(); + db.open_for_read(bytes[..100].to_vec(), FileType::Binary); + assert!(Plane::read_from_db(&mut db, 30).is_err()); + } +} diff --git a/crates/solidcore/src/surface/surf_of_revolution/p1.rs b/crates/solidcore/src/surface/surf_of_revolution/p1.rs index a270bd7267..ffdd086646 100644 --- a/crates/solidcore/src/surface/surf_of_revolution/p1.rs +++ b/crates/solidcore/src/surface/surf_of_revolution/p1.rs @@ -67,18 +67,20 @@ //! upstream would read uninitialised (a failed generator or surface evaluation, a //! failed iso curve in `RebuildPolarConverter`) is returned. //! - **Unported callees.** `ConvertUVFromNURBSToSTEP` without exact polar conversion -//! needs `SmSTEPSurface` (unit `surface.surface_p1`). `IntersectWithPlane` of a -//! planar generator takes the plane's pseudo box, which upstream expands by the zone -//! tolerance of the plane's face (`SmSurface::GetFace`, unit `surface.surface_p1`), -//! and then trims curves to the plane domain (`SmPlane::TrimCurveToPlaneDomain`, unit -//! `surface.plane_p2`); the body below the plane box is ported with the latter. -//! Those return [`SolidError::Unported`]. +//! needs `SmSTEPSurface` (unit `surface.surface_p1`), which returns +//! [`SolidError::Unported`]. +//! - **`IntersectWithPlane`** (its body below the plane box ported by +//! `surface.plane_p2`) takes a bare [`Plane`], which has no owner: its pseudo box is +//! expanded by `SM_ZONE_TOL_3D` (upstream: the zone tolerance of the plane's face or +//! B-rep, `SmSurface::GetFace`, `NULL` for a plane without one). It takes a +//! [`Kernel`] for the curve operations. //! - **`sm_TestForIsoCircles`** returns its outputs in [`IsoCircles`]; the ones //! upstream leaves unwritten (no non-degenerate iso curve, no second plane) are //! `None`. With parallel iso planes `smgu_IntersectTwoPlanes` writes no line, so the //! common-axis test keeps comparing the last line found, as upstream. -use crate::curve::curve::{Curve, CurveKind}; +use crate::curve::curve::p7::PropertyAnalysisOptions; +use crate::curve::curve::{Curve, CurveKind, CurvePropertyType}; use crate::curve::ellipse::p2::set_up_polar_conversion; use crate::curve::ellipse::{Ellipse, EllipseOptions, PolarConversion}; use crate::error::{ignore_status, ignored, Result, SolidError, SM_ERR}; @@ -89,18 +91,20 @@ use crate::geom::geom_utility::p1::{ line_closest_point, line_point_distance, transform_point_to_start_plane, StartPlanePoint, }; use crate::geom::geom_utility::p2::{intersect_two_planes, PlanesIntersection}; -use crate::geom::tol::is_zero; +use crate::geom::pseudo_box::PseudoBox; +use crate::geom::solution_array::{ObjectKind, SolutionObject, SolutionType}; +use crate::geom::tol::{are_same, is_zero, ZONE_TOL_3D}; use crate::geom::vector2d::Point2; use crate::geom::vector3d::{sqrt, Point3, Vec3}; use crate::kernel::Kernel; -use crate::math::{EFF_ZERO, EFF_ZERO_SQRT, PI}; -use crate::nurbs::b_spline_curve::BSplineCurve; +use crate::math::{rad_to_deg, EFF_ZERO, EFF_ZERO_SQRT, PI}; +use crate::nurbs::b_spline_curve::{BSplineCurve, BoundingBoxRequest as CurveBoxRequest}; use crate::nurbs::b_spline_surface::{ - BSplineSurface, BSplineSurfaceForm, BoundingBoxRequest, IsoCurveOptions, SurfParamType, + BSplineSurface, BSplineSurfaceForm, IsoCurveOptions, SurfParamType, }; use crate::surface::plane::Plane; use crate::surface::surface::p2::{ - scale_step_angular_derivatives, SurfaceIntersection, SURF_OF_REVOLUTION_TYPE, + scale_step_angular_derivatives, SurfaceIntersection, TsectCurveType, SURF_OF_REVOLUTION_TYPE, }; const OP_GEN: &str = "surface::surf_of_revolution::p1::SurfOfRevolution::gen_curve"; @@ -111,6 +115,22 @@ const OP_DIRECTRIX: &str = "surface::surf_of_revolution::p1::SurfOfRevolution::create_directrix_at_generator_param"; const OP_EVAL_STEP: &str = "surface::surf_of_revolution::p1::SurfOfRevolution::evaluate_step"; const OP_ISO_CIRCLES: &str = "surface::surf_of_revolution::p1::test_for_iso_circles"; +const OP_XPLANE: &str = "surface::surf_of_revolution::p1::SurfOfRevolution::intersect_with_plane"; + +/// The generator's handle in `IntersectWithPlane`'s property analysis: its natural +/// interval (what upstream reads through the curve pointer). +#[derive(Debug, Clone, Copy, PartialEq)] +struct GenHandle(Extent1d); + +impl SolutionObject for GenHandle { + fn kind(&self) -> ObjectKind { + ObjectKind::Curve + } + + fn natural_interval(&self) -> Option { + Some(self.0) + } +} /// `ANALYTIC_TOL_SCALE` (`SmConfig.h`). const ANALYTIC_TOL_SCALE: f64 = 100.0; @@ -1258,52 +1278,207 @@ impl SurfOfRevolution { // ---- intersections and points ----------------------------------------------------- /// The special cases of the intersection with `plane` (`IntersectWithPlane`): - /// whether the general intersector is needed, and the curves found. A non-planar - /// generator always needs the general intersector. + /// whether the general intersector is needed, and the curves found (no UV curves, + /// deviations `0`, degenerate curves typed [`TsectCurveType::Touching`]). A + /// non-planar generator, a plane cutting the axis at an angle or one parallel to the + /// axis but not through it, and a tangent plane at a flat generator point need the + /// general intersector. A plane containing the axis gets the generator rotated into + /// it on either side (inside the sweep); a plane normal to the axis gets the sweep + /// iso circles at its intersections with the generator (tangent ones typed + /// [`TsectCurveType::Tangent`]); both are trimmed to `other_uv_domain` + /// ([`Plane::trim_curve_to_plane_domain`]). The plane is taken as without owner (its + /// box is expanded by `SM_ZONE_TOL_3D`, see `surface::plane::p2`). /// /// # Errors /// - /// For a planar generator, [`SolidError::Unported`]: the plane's pseudo box - /// (`SmBSplineSurface::CalculateBoundingBox`, expanded by the zone tolerance of the - /// plane's face, `SmSurface::GetFace`, unit `surface.surface_p1`), and the rest of - /// the body behind it (`SmPlane::TrimCurveToPlaneDomain`, unit `surface.plane_p2`). + /// Those of the angle measures, the generator transform, property analysis and + /// evaluation and of the iso curves (upstream `SER`); `SM_ERR_NULL_POINTER` without + /// generator. + #[allow(clippy::too_many_lines)] // one upstream function pub fn intersect_with_plane( &self, + k: &Kernel, plane: &Plane, other_uv_domain: &Extent2d, approx_tol_3d: Option, ) -> Result<(bool, SurfaceIntersection)> { - let _ = other_uv_domain; + let mut out = SurfaceIntersection::default(); // use general intersection for nonPlanar generators if !self.planar_generator { + return Ok((true, out)); + } + + // plane and RevolutionSurface locals + let plane_normal = plane.position().z_axis(); + let plane_origin = plane.position().origin(); + let axis = self.position.z_axis(); + let ang_tol_rad = EFF_ZERO_SQRT; + let tol = approx_tol_3d.unwrap_or(EFF_ZERO_SQRT); + + // the generator's out-of-bounds flag is the surface's during the call + // (SmTemporaryChangeValue) + let mut gen = self.gen()?.clone(); + if let Some(b) = gen_base_mut(&mut gen) { + b.set_out_of_bounds_enabled(self.base.is_out_of_bounds_enabled()); + } + + // get plane bounding box increased by tolerance (status ignored) + let mut plane_pbox = ignored(plane.bounding_boxes(&plane.natural_uv_domain(), false))? + .map(|(_, p)| p) + .unwrap_or_default(); + plane_pbox.expand_absolute(tol); + + let mut types: Vec = Vec::new(); + + // The curve pieces of `crv` inside the plane domain when its pseudo box meets + // the plane's (statuses ignored). + let trim = |crv: &Curve, plane_pbox: &PseudoBox| -> Result> { + let req = CurveBoxRequest { + pseudo: true, + ..CurveBoxRequest::default() + }; + let curve_pbox = + ignored(crv.calculate_bounding_box(k, &crv.natural_interval(), req, true))? + .and_then(|b| b.pseudo) + .unwrap_or_default(); + if plane_pbox.are_disjoint(&curve_pbox, None) { + return Ok(Vec::new()); + } + Ok( + ignored(plane.trim_curve_to_plane_domain(k, other_uv_domain, crv, tol))? + .unwrap_or_default(), + ) + }; + + // when RevolutionAxis is perpendicular to the plane normal + if axis.is_perpendicular_to(plane_normal, rad_to_deg(ang_tol_rad)) { + // when the plane does not contain the axis + let vec_between = self.position.origin() - plane_origin; + let dist_plane_to_center = vec_between.dot(plane_normal); + if dist_plane_to_center.abs() > tol { + return Ok((true, SurfaceIntersection::default())); + } + + let start_ang_rad = self.start_angle_deg() * PI / 180.0; + let end_ang_rad = self.end_angle_deg() * PI / 180.0; + + // the generator rotated into the plane on its positive, then negative side + let mut target_vec = axis.cross(plane_normal); + for side in 0..2 { + if side == 1 { + target_vec *= -1.0; + } + let mut angle_rad = axis + .ccw_angle_between(self.position.x_axis(), target_vec) + .map_err(|_| SolidError::sm_err(OP_XPLANE))?; + if angle_rad < 0.0 { + angle_rad += 2.0 * PI; + } + + if angle_rad > start_ang_rad - ang_tol_rad && angle_rad < end_ang_rad + ang_tol_rad + { + // the generator's SmBSplineCurve part, rotated about the axis + let mut crv = gen_base(&gen)?.copy(); + let rot_ang_rad = angle_rad; // was dAngleRad-dStartAngRad [B143] + let mut trans = Axis2Placement::IDENTITY; + trans.translate(-self.position.origin()); + trans.rotate_about_axis(rot_ang_rad, axis); + trans.translate(self.position.origin()); + crv.transform(&trans, None)?; + + if side == 1 { + // (upstream expands the plane box a second time here) + plane_pbox.expand_absolute(tol); + } + for c in trim(&Curve::from(crv), &plane_pbox)? { + out.curves_3d.push(c); + types.push(TsectCurveType::Crossing); + } + } + } + } + // when RevolutionAxis is parallel to the plane normal + else if axis.is_parallel_to(plane_normal, rad_to_deg(ang_tol_rad)) { + let surf_param = if self.swap_uv { + SurfParamType::U + } else { + SurfParamType::V + }; + + // the generator's intersections with the plane + let d = -plane_origin.dot(plane_normal); + let gen_ivl = gen.natural_interval(); + let normals = [plane_normal]; + let sols = gen + .global_property_analysis( + k, + &gen_ivl, + CurvePropertyType::PlaneIntersection, + ZONE_TOL_3D, + &PropertyAnalysisOptions { + property_value: Some(d), + opt_vectors: &normals, + want_comb: false, + handle: Some(GenHandle(gen_ivl)), + }, + )? + .solutions; + + let is_closed = gen.is_closed(&gen_ivl, 0.0)?; + + for sol in sols.as_slice() { + let iso_param = sol.start.param(0)?; + let mut is_tangent = false; + let pv = gen.evaluate(iso_param, 2, true, true)?; + let d1 = pv.get(1).copied().unwrap_or(Vec3::UNDEF); + let d2 = pv.get(2).copied().unwrap_or(Vec3::UNDEF); + + if sol.solution_type == SolutionType::RangeOfValues + || d1.is_perpendicular_to(plane_normal, rad_to_deg(ang_tol_rad)) + { + is_tangent = true; + // a flat tangency: the general surf/surf solver is needed (upstream + // empties only the 3D curves: the curve types found so far stay) + if d2.length() < EFF_ZERO_SQRT { + out.curves_3d.clear(); + out.curve_types = types; + return Ok((true, out)); + } + } + + if is_closed && are_same(iso_param, gen_ivl.max()) { + continue; + } + + let crv = self + .create_iso_parametric_curve(k, surf_param, iso_param, None)? + .curve; + for c in trim(&crv, &plane_pbox)? { + out.curves_3d.push(c); + types.push(if is_tangent { + TsectCurveType::Tangent + } else { + TsectCurveType::Crossing + }); + } + } + } + // Plane cuts RevolutionSurface at an angle + else { return Ok((true, SurfaceIntersection::default())); } - // plane and RevolutionSurface locals (the plane position and the axes are read - // by the branches below the plane box) - let tol = approx_tol_3d.unwrap_or(EFF_ZERO_SQRT); - - // get plane bounding box increased by tolerance (status ignored upstream; an - // unported callee still propagates) - let req = BoundingBoxRequest { - pseudo: true, - expand_by_zone_tol: true, - ..BoundingBoxRequest::default() - }; - let plane_nurb = plane.base_with_nurb()?; - let boxes = ignored(plane_nurb.calculate_bounding_box(&plane.natural_uv_domain(), &req))?; - let mut plane_pbox = boxes.and_then(|b| b.pseudo).unwrap_or_default(); - plane_pbox.expand_absolute(tol); - - // UNPORTED(surface.plane_p2): SmPlane::TrimCurveToPlaneDomain. The rest of the - // body (the perpendicular / parallel axis cases, which trim the rotated generator - // or the swept iso curves to the plane domain) is ported with it; it is - // unreachable until the plane box above is (SmSurface::GetFace, surface.surface_p1). - Err(SolidError::unported( - "SmPlane::TrimCurveToPlaneDomain", - "surface.plane_p2", - )) + for (c, t) in out.curves_3d.iter().zip(types.iter_mut()) { + out.surface1_uv_curves.push(None); + out.surface2_uv_curves.push(None); + if c.is_degenerate(EFF_ZERO, None)? { + *t = TsectCurveType::Touching; + } + out.deviations.push(0.0); + } + out.curve_types = types; + Ok((false, out)) } /// Rotates `point` about the axis onto the start (X/Z) half plane and returns the @@ -1672,14 +1847,24 @@ mod tests { // a non-planar generator needs the general intersector let plane = Plane::from_normal(Vec3::ZERO, Vec3::Z); let (more, x) = s - .intersect_with_plane(&plane, &Extent2d::from_bounds(-1.0, -1.0, 1.0, 1.0), None) + .intersect_with_plane( + &k, + &plane, + &Extent2d::from_bounds(-1.0, -1.0, 1.0, 1.0), + None, + ) .unwrap(); assert!(more && x.curves_3d.is_empty()); - // a planar one needs the plane box (SmSurface::GetFace) - assert!(cone() - .intersect_with_plane(&plane, &Extent2d::from_bounds(-1.0, -1.0, 1.0, 1.0), None) - .unwrap_err() - .is_unported()); + // a planar one is intersected here (the plane has no owner) + let mut plane = plane; + plane.make_nurb().unwrap(); + let r = cone().intersect_with_plane( + &k, + &plane, + &Extent2d::from_bounds(-1.0, -1.0, 1.0, 1.0), + None, + ); + assert!(r.is_ok_and(|(_, x)| x.curves_3d.len() == x.curve_types.len())); } #[test] diff --git a/crates/solidcore/src/surface/surface/p2.rs b/crates/solidcore/src/surface/surface/p2.rs index 29c0e47402..8a1238a3e0 100644 --- a/crates/solidcore/src/surface/surface/p2.rs +++ b/crates/solidcore/src/surface/surface/p2.rs @@ -3794,8 +3794,11 @@ mod tests { #[test] fn read_from_db_unported_types() { let mut db = DatabaseReader::default(); - let e = Surface::read_from_db(&Kernel::default(), PLANE_TYPE, &mut db, 1).unwrap_err(); + let e = Surface::read_from_db(&Kernel::default(), SPHERE_TYPE, &mut db, 1).unwrap_err(); assert!(e.is_unported()); + // a plane is read (an empty stream fails without Unported) + let e = Surface::read_from_db(&Kernel::default(), PLANE_TYPE, &mut db, 1).unwrap_err(); + assert!(!e.is_unported()); assert!( !Surface::read_from_db(&Kernel::default(), 12345, &mut db, 1) .unwrap_err() diff --git a/fixtures/surface.plane_p2/edge.json b/fixtures/surface.plane_p2/edge.json index 3ad1007d49..b238688b54 100644 --- a/fixtures/surface.plane_p2/edge.json +++ b/fixtures/surface.plane_p2/edge.json @@ -6180,6 +6180,462 @@ ] } } + }, + { + "name": "xf_scale_zero", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "frame": [ + [ + 0, + 0, + 0 + ], + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "scale": [ + 0, + 0, + 0 + ] + } + }, + { + "name": "xf_scale_negative", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "frame": [ + [ + 0, + 0, + 0 + ], + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "scale": [ + -2, + -2, + -2 + ] + } + }, + { + "name": "trim_circle_reversed_domain", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 10, + 5 + ], + "r": 4 + }, + "tol": 1e-06 + } + }, + { + "name": "trim_circle_negative_radius", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 360 + ], + "r": -2 + }, + "tol": 1e-06 + } + }, + { + "name": "trim_ellipse_parallel_axes", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "ellipse", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 1, + 0, + 0 + ], + "dom": [ + 0, + 360 + ], + "r": [ + 2, + 1 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "trim_circle_zero_axis", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 0, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 360 + ], + "r": 2 + }, + "tol": 1e-06 + } + }, + { + "name": "trim_circle_tiny", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "circle", + "c": [ + 5, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 360 + ], + "r": 1e-12 + }, + "tol": 1e-06 + } } ] } \ No newline at end of file diff --git a/plan/modules.toml b/plan/modules.toml index 52028ce13c..41bdd10b51 100644 --- a/plan/modules.toml +++ b/plan/modules.toml @@ -1428,7 +1428,7 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin status = "partial" claimed_by = "swarm-nurbs.b_spline_surface_p2-a1" claimed_at = "2026-10-13T02:06:41Z" -notes = "difftest: 763 cases, 718 pass, 45 deferred (curve.curve_p5 11, surface.surface_p1 20, surface.surface_p7 9, surface.plane_p2 5); 16 fns; largest: SmBSplineSurface::CreateSurfOfRevolution, SmBSplineSurface::CreateSphereFromArcs, SmBSplineSurface::CreateIsoParametricCurve, SmBSplineSurface::GetControlPointsExpert; cycle back-edges (call into later units; stub or co-port): curve.iso_curve(3), surface.plane_p1(3), curve.ellipse_p1(2), surface.surface_p1(2), surface.surface_p2(2), surface.surface_p7(2), curve.curve_p5(1), curve.ellipse_p2(1), curve.line(1), surface.cone_p2(1), surface.plane_p2(1), surface.sphere(1), surface.surf_of_extrusion_p2(1), surface.surf_of_revolution_p2(1), surface.surface_p6(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit" +notes = "After surface.plane_p2 (IsNurbSurfacePlane wired): 763 cases, 729 pass, 34 deferred (surface.surface_p1 29, surface.cone_p2 5). difftest: 763 cases, 718 pass, 45 deferred (curve.curve_p5 11, surface.surface_p1 20, surface.surface_p7 9, surface.plane_p2 5); 16 fns; largest: SmBSplineSurface::CreateSurfOfRevolution, SmBSplineSurface::CreateSphereFromArcs, SmBSplineSurface::CreateIsoParametricCurve, SmBSplineSurface::GetControlPointsExpert; cycle back-edges (call into later units; stub or co-port): curve.iso_curve(3), surface.plane_p1(3), curve.ellipse_p1(2), surface.surface_p1(2), surface.surface_p2(2), surface.surface_p7(2), curve.curve_p5(1), curve.ellipse_p2(1), curve.line(1), surface.cone_p2(1), surface.plane_p2(1), surface.sphere(1), surface.surf_of_extrusion_p2(1), surface.surf_of_revolution_p2(1), surface.surface_p6(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit" [[unit]] id = "curve.curve_p8" @@ -1484,7 +1484,7 @@ tests = ["SM_API_test:TestSmPrincipalDirectionPairing", "prog_test:my_test_exten status = "partial" claimed_by = "" claimed_at = "" -notes = "PARTIAL: difftest 869 cases (69 fixture: Surface.sms / DropCurveSurface.sms / offset_nurb.sms queries, evaluation, knots, edits, copies, SmSurfaceEval, ReadFromDB; base SmSurface() defaults; TestSmPrincipalDirectionPairing; + 800 generated), 756 pass bit-identical, 113 deferred (surface.surface_p5 36, curve.curve_p5 33, surface.surface_p7 18, surface.surface_p1 13, surface.plane_p2 11, intersect.adv_surface_intersector 1, topology.trimming_tools 1); wired UNPORTED(surface.surface_p2) in nurbs.b_spline_surface_p1 (IsKindOf), curve.curve_p2, curve.tangent_field, nurbs.b_spline_curve_n_lib, curve.iso_curve, curve.crv_on_surf (ReadFromDB, lift co-ports), nurbs.b_spline_surface_n_lib_p2 (GetDerivativeLimit co-port); geom.grid now blocked on surface.surface_cache_p1; geom.solution_array keeps 2 handle-lookup markers; 91 fns; largest: SmDerivSurfDefinition::CreateCrossSectionCurves, smsurf_EvaluateGeometric, smsurf_DropVectors, sm_CCLocalSolve; cycle back-edges (call into later units; stub or co-port): intersect.curve_class_p1(5), intersect.point_class(3), intersect.surface_intersector_p1(3), intersect.adv_surface_intersector(2), surface.cone_p1(2), surface.surface_cache_p1(2), topology.trimming_tools(2), intersect.curve_class_p2(1), intersect.curve_class_p8(1), intersect.surface_intersector_p4(1), intersect.surface_intersector_p5(1), surface.curve_bounded_surface(1), surface.offset_surface(1), surface.plane_p2(1), surface.sphere(1), surface.srf_in_volume(1), surface.surf_of_extrusion_p2(1), surface.surf_of_revolution_p3(1), surface.surface_p1(1), surface.torus(1); unit-SCC #22 (220 units); 320 upstream test entry points reach this unit" +notes = "After surface.plane_p2 (plane dispatch wired): 869 cases, 790 pass, 79 deferred (surface.surface_p5 36, surface.surface_p1 31, surface.cone_p2 10, intersect.adv_surface_intersector 1, topology.trimming_tools 1). PARTIAL: difftest 869 cases (69 fixture: Surface.sms / DropCurveSurface.sms / offset_nurb.sms queries, evaluation, knots, edits, copies, SmSurfaceEval, ReadFromDB; base SmSurface() defaults; TestSmPrincipalDirectionPairing; + 800 generated), 756 pass bit-identical, 113 deferred (surface.surface_p5 36, curve.curve_p5 33, surface.surface_p7 18, surface.surface_p1 13, surface.plane_p2 11, intersect.adv_surface_intersector 1, topology.trimming_tools 1); wired UNPORTED(surface.surface_p2) in nurbs.b_spline_surface_p1 (IsKindOf), curve.curve_p2, curve.tangent_field, nurbs.b_spline_curve_n_lib, curve.iso_curve, curve.crv_on_surf (ReadFromDB, lift co-ports), nurbs.b_spline_surface_n_lib_p2 (GetDerivativeLimit co-port); geom.grid now blocked on surface.surface_cache_p1; geom.solution_array keeps 2 handle-lookup markers; 91 fns; largest: SmDerivSurfDefinition::CreateCrossSectionCurves, smsurf_EvaluateGeometric, smsurf_DropVectors, sm_CCLocalSolve; cycle back-edges (call into later units; stub or co-port): intersect.curve_class_p1(5), intersect.point_class(3), intersect.surface_intersector_p1(3), intersect.adv_surface_intersector(2), surface.cone_p1(2), surface.surface_cache_p1(2), topology.trimming_tools(2), intersect.curve_class_p2(1), intersect.curve_class_p8(1), intersect.surface_intersector_p4(1), intersect.surface_intersector_p5(1), surface.curve_bounded_surface(1), surface.offset_surface(1), surface.plane_p2(1), surface.sphere(1), surface.srf_in_volume(1), surface.surf_of_extrusion_p2(1), surface.surf_of_revolution_p3(1), surface.surface_p1(1), surface.torus(1); unit-SCC #22 (220 units); 320 upstream test entry points reach this unit" [[unit]] id = "curve.composite_curve_p2" @@ -1579,10 +1579,10 @@ soft_depends_on = ["curve.curve_p4", "curve.curve_p5", "curve.curve_p6", "curve. est_lines = 1522 layer = 23 tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"] -status = "partial" +status = "green" claimed_by = "" claimed_at = "" -notes = "PARTIAL: difftest 807 cases (207 fixture + 600 generated), 776 bit-identical (max_rel_err 0), 0 failed, 31 deferred: surface.surface_p1 31 (IntersectWithPlane of a planar generator: SmPlane wired, the plane's pseudo box needs SmSurface::GetFace for the zone tolerance; the body below it waits on SmPlane::TrimCurveToPlaneDomain, surface.plane_p2). Perturbation: 776/776 detected. Co-ports CreateCanonical/MakeNurb (_p2) and MakeNurbWithSweepParams (_p3). The 4 UNPORTED(surface.surf_of_revolution_p1) stubs in line/ellipse/hyperbola/parabola MakeNurb stay: an owner ObjectRef cannot reach the surface (see findings.md). 31 fns; largest: SmSurfOfRevolution::IntersectWithPlane, sm_TestForIsoCircles, SmSurfOfRevolution::CreateIsoParametricCurve, SmSurfOfRevolution::EvaluateSTEP; cycle back-edges (call into later units; stub or co-port): surface.cone_p1(6), surface.sphere(3), surface.torus(3), surface.surface_p1(2), surface.plane_p1(1), surface.plane_p2(1), surface.surface_p5(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit" +notes = "GREEN (promoted by surface.plane_p2, which ported the IntersectWithPlane body below the plane box; a bare plane's zone tolerance is SM_ZONE_TOL_3D): difftest 807 cases (207 fixture + 600 generated), 807 bit-identical (max_rel_err 0), 0 deferred; 20k-seed run clean; perturbation 807/807 detected. Co-ports CreateCanonical/MakeNurb (_p2) and MakeNurbWithSweepParams (_p3). The 4 UNPORTED(surface.surf_of_revolution_p1) stubs in line/ellipse/hyperbola/parabola MakeNurb stay: an owner ObjectRef cannot reach the surface (see findings.md). 31 fns; largest: SmSurfOfRevolution::IntersectWithPlane, sm_TestForIsoCircles, SmSurfOfRevolution::CreateIsoParametricCurve, SmSurfOfRevolution::EvaluateSTEP; cycle back-edges (call into later units; stub or co-port): surface.cone_p1(6), surface.sphere(3), surface.torus(3), surface.surface_p1(2), surface.plane_p1(1), surface.plane_p2(1), surface.surface_p5(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit" [[unit]] id = "surface.surface_p9" @@ -1817,10 +1817,10 @@ soft_depends_on = ["curve.curve_p8", "curve.ellipse_p1", "geom.geom_utility_p2", est_lines = 1627 layer = 27 tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"] -status = "todo" +status = "partial" claimed_by = "" claimed_at = "" -notes = "10 fns; largest: SmPlane::MakeNewPlaneEllipse, SmPlane::IntersectWithPlane, SmPlane::TrimCurveToPlaneDomain, SmPlane::IsNurbSurfacePlane; cycle back-edges (call into later units; stub or co-port): surface.cone_p3(1), surface.sphere(1), surface.surf_of_extrusion_p2(1), surface.surface_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit" +notes = "PARTIAL: difftest 2127 cases (127 fixture: 25 derived from SM_API_test TestSmCreateRectangle / TestSmCreateRegularPolygon (rectangle/hexagon edges and circumcircle trimmed to the rectangle plane, the 1e10 far rectangle), 102 edge cases (plane/plane: infinite, bounded, touching, disjoint, parallel, coincident with/without NURB, near-parallel, huge/tiny, sub-domains; trim of segments/arcs/B-splines/rational arcs incl. along-edge and tangent cases; MakeNewPlaneEllipse zero radii/tangent/corner/opposite-normal/partial arcs; Transform identity/rotate/iso/aniso/zero scale; TrimWithDomain; IsNurbSurfacePlane flat/twisted/skewed/rational/cylinder; ReadFromDB ASCII+binary v30/v33/truncated/bad rat) + 2000 generated over 1e-4/1/1e5 scales), 2118 pass bit-identical (max_rel_err 0), 9 deferred (intersect.adv_surface_intersector 9: the general SmSurface::GlobalSurfaceIntersect after coincident planes or for a B-spline other); 60k-seed run clean; perturbation 2118/2118. Builds on PR #24 (surface.surface_p7: SmSurface::EvaluateNormal for IsNurbSurfacePlane). Wired UNPORTED(surface.plane_p2) in surface.surface_p2 (Transform/TrimWithDomain/ReadFromDB/IntersectWithPlane/GlobalSurfaceIntersect plane dispatch), nurbs.b_spline_surface_p2 (CopyAndAddAnalytics returns the recognised plane; the cone recogniser is UNPORTED(surface.cone_p2)) and surface.surf_of_revolution_p1 (ported the IntersectWithPlane body below the plane box: 31 deferred -> 0, GREEN). A bare Plane has no owner: its CalculateBoundingBox zone tolerance is SM_ZONE_TOL_3D (owned planes through Surface::global_surface_intersect return UNPORTED(surface.surface_p1) GetFace). 10 fns; largest: SmPlane::MakeNewPlaneEllipse, SmPlane::IntersectWithPlane, SmPlane::TrimCurveToPlaneDomain, SmPlane::IsNurbSurfacePlane; cycle back-edges (call into later units; stub or co-port): surface.cone_p3(1), surface.sphere(1), surface.surf_of_extrusion_p2(1), surface.surface_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit" [[unit]] id = "surface.surface_p4" From 995eccc1f0a728e9dc6c3abfec62e789e42a5af1 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Tue, 13 Oct 2026 21:32:11 -0400 Subject: [PATCH 19/54] port: intersect.adv_surface_intersector SmAdvSurfaceIntersector: singular point classification (Dupin indicatrices), MakeDupin, the interior-curve global solve (SolveBranch/LocalSolve/FindBestSubdivisionNode/BranchIsGaussSeparate) and FindInteriorCurves, with shim, ffi binding and difftest runner. Base SmGlobalSolver::SolveBranch is now a free function callable from overrides; surface p2 wires its two intersector stubs. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01FsWWaoeGNWKgzeGrF2Pkn5 --- .../intersect_adv_surface_intersector.rs | 1732 +++ .../intersect_adv_surface_intersector.rs | 487 + .../units/intersect_surface_intersector_p1.rs | 17 + crates/solidcore/src/geom/global_solver.rs | 62 +- crates/solidcore/src/intersect.rs | 1 + .../src/intersect/adv_surface_intersector.rs | 1618 ++ .../src/intersect/surface_intersector/p1.rs | 4 +- crates/solidcore/src/surface/surface/p2.rs | 46 +- .../intersect_adv_surface_intersector.cpp | 851 ++ plan/upstream-issues.md | 27 + .../intersect.adv_surface_intersector.json | 12300 ++++++++++++++++ reports/difftest/surface.surface_p2.json | 6 +- 12 files changed, 17105 insertions(+), 46 deletions(-) create mode 100644 crates/difftest/src/units/intersect_adv_surface_intersector.rs create mode 100644 crates/solidcore-ffi/src/units/intersect_adv_surface_intersector.rs create mode 100644 crates/solidcore/src/intersect/adv_surface_intersector.rs create mode 100644 harness/cpp/shim/intersect_adv_surface_intersector.cpp create mode 100644 reports/difftest/intersect.adv_surface_intersector.json diff --git a/crates/difftest/src/units/intersect_adv_surface_intersector.rs b/crates/difftest/src/units/intersect_adv_surface_intersector.rs new file mode 100644 index 0000000000..2e328e682d --- /dev/null +++ b/crates/difftest/src/units/intersect_adv_surface_intersector.rs @@ -0,0 +1,1732 @@ +//! Runner for unit `intersect.adv_surface_intersector`: `SmAdvSurfaceIntersector`. +//! +//! C++: `solidcore_ffi::units::intersect_adv_surface_intersector` (a real +//! `SmAdvSurfaceIntersector` on `SmPlane` / `SmBSplineSurface` objects with hand-built +//! decomposition trees in their surface caches). Rust: +//! `solidcore::intersect::adv_surface_intersector`. +//! +//! A case is two surfaces (B may be A itself), their domains, the fillet flag, optional +//! trees (one per surface cache), a point arena and a program of operations; both sides +//! produce the record documented in the ffi module (statuses `0` = `SM_SUCCESS`, else +//! the `SmStatus`; `1007` for a Rust `InvalidInput`, `-1` for a Rust error upstream +//! cannot return, [`ffi::REJECTED`] for an op upstream would crash on), reported as the +//! values `rec`. A case whose Rust side reaches an unported unit is deferred as a whole. +//! +//! Three kinds of programs are generated: singular points (local surface geometry +//! built from a shape tensor per surface: planar, parabolic, elliptic, hyperbolic, +//! umbilic, near-threshold curvatures, coincident or sharing a principal curvature, +//! opposite normals, previous directions, curve points, boundary UV positions, tiny +//! and huge scales), Dupin indicatrices (including degenerate evaluations) and global +//! solves over trees sampled from the surfaces (`SolveIt` for `SM_SO_INTERSECT`, +//! `SM_SO_INTERSECTION_TEST` and `SM_SO_MINIMIZE`, `LocalSolve`, `SolveBranch`, +//! `FindBestSubdivisionNode`, `BranchIsGaussSeparate`, `FindInteriorCurves`). +//! +//! Deferred cases: `LocalSolve` of leaf boxes more than four times apart in size +//! (`SmSurface::DropPointsToTangentPlane`, `surface.surface_p7`) and +//! `FindInteriorCurves` with a candidate pair on a B-spline (`SmSurface::EvaluateNormal`, +//! `surface.surface_p7`) or on planes more than 5 degrees apart +//! (`SmSurface::LocalSurfaceIntersect`, `surface.surface_p11`). + +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +use solidcore::geom::extent1d::{Extent1d, ExtentPointType}; +use solidcore::geom::extent2d::Extent2d; +use solidcore::geom::extent3d::Extent3d; +use solidcore::geom::global_solver::{ + GlobalSolve, SolutionRequested, SolveRequest, SolverOperation, MAX_SOLVER_TREES, +}; +use solidcore::geom::polar_box::PolarBox; +use solidcore::geom::pseudo_box::PseudoBox; +use solidcore::geom::solution_array::{ObjectKind, SolutionArray, SolutionObject}; +use solidcore::geom::tree::{ + AuxDataType, NodeData, NodeGeomType, NodeId, SurfaceAux, Tree, TreeNode, TreeOwner, +}; +use solidcore::geom::vector2d::{Point2, Vec2}; +use solidcore::geom::vector3d::Vec3; +use solidcore::intersect::adv_surface_intersector::{AdvSurfaceIntersector, InteriorCurves}; +use solidcore::intersect::surface_intersector::p1::{ + IntersectionPointType, SrfIndex, TsectId, TsectPnt, +}; +use solidcore::kernel::Kernel; +use solidcore::nurbs::b_spline_surface::BSplineSurface; +use solidcore::nurbs::math::CPoint; +use solidcore::nurbs::srf_basic::Surface as NurbSurface; +use solidcore::surface::plane::Plane; +use solidcore::surface::surface::Surface; +use solidcore::surface::surface_cache::p1::{ + BezierAux2d, BezierPatch, SurfaceCache, SurfaceCacheOptions, +}; +use solidcore::SolidError; +use solidcore_ffi::units::intersect_adv_surface_intersector::{self as ffi}; +use solidcore_ffi::units::intersect_surface_intersector_p1 as p1ffi; + +use crate::case::CaseContext; +use crate::runner::default_cases; +use crate::{Case, CaseSource, HarnessError, Output, Rng, UnitDiff}; + +/// Generated cases per run, whatever `--seeds` says (it can only raise this). +pub const MIN_GENERATED: usize = 1500; + +/// `intersect.adv_surface_intersector` runner. +pub struct Runner; + +fn harness(msg: impl Into) -> HarnessError { + HarnessError::new(msg) +} + +/// `NL_NOW`. +const NOW: f64 = -f64::MAX; + +/// `SM_BIG_DOUBLE`. +const BIG: f64 = 1.0e20; + +/// The surface handle type of the caches (`SmSurface*`). +#[derive(Debug, Clone, Copy, PartialEq, Default)] +struct H(i64); + +impl SolutionObject for H { + fn kind(&self) -> ObjectKind { + ObjectKind::Surface + } +} + +// ---- inputs --------------------------------------------------------------------------- + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", tag = "kind")] +enum SurfaceIn { + Plane { + o: [f64; 3], + x: [f64; 3], + y: [f64; 3], + scale: [f64; 2], + domain: [f64; 4], + }, + BSpline { + p: usize, + q: usize, + /// Rows (u index) of `[x, y, z, w]` (homogeneous); `w` = `null` when non-rational. + net: Vec; 4]>>, + u: Vec, + v: Vec, + }, +} + +/// Basis vectors and `[min, max]` intervals of a pseudo box. +type PseudoIn = ([[f64; 3]; 3], [[f64; 2]; 3]); + +/// A named singular point configuration: surface matrices and previous tangent. +type Config = (&'static str, [[V; 3]; 3], [[V; 3]; 3], Option); + +/// An evaluation matrix `[i][j]`. +type EvalIn = [[[f64; 3]; 3]; 3]; + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct NodeIn { + parent: i64, + c1: i64, + c2: i64, + aux: u8, + bbox: [f64; 6], + dom: [f64; 4], + polar: Vec<[f64; 3]>, + /// Basis vectors and `[min, max]` intervals (patches only). + pseudo: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", tag = "op")] +enum OpIn { + State, + Set { + dir: f64, + ang: f64, + approx: f64, + tol: f64, + sop: u8, + }, + Push { + i: usize, + }, + Sing { + i: usize, + prev: Option, + }, + Dupin { + eval: Box, + normal: [f64; 3], + }, + Solve { + sop: u8, + req: u8, + tol: f64, + best: f64, + }, + BestSub { + a: usize, + b: usize, + }, + Gauss { + a: usize, + b: usize, + }, + Local { + a: usize, + b: usize, + }, + Interior, + SolveBranch { + a: usize, + b: usize, + }, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct Inputs { + a: SurfaceIn, + /// `None`: B is A itself. + b: Option, + dom1: [f64; 4], + dom2: [f64; 4], + fillet: bool, + /// Tree of A and (unless B is A) of B. + trees: Option<(Vec, Option>)>, + /// [`p1ffi::POINT_LEN`] values each. + points: Vec>, + ops: Vec, +} + +fn cpt4(c: &[Option; 4]) -> [f64; 4] { + [ + c[0].unwrap_or(f64::NAN), + c[1].unwrap_or(f64::NAN), + c[2].unwrap_or(f64::NAN), + c[3].unwrap_or(NOW), + ] +} + +fn ffi_surface(s: &SurfaceIn) -> p1ffi::SurfaceIn { + match s { + SurfaceIn::Plane { + o, + x, + y, + scale, + domain, + } => p1ffi::SurfaceIn::Plane { + o: *o, + x: *x, + y: *y, + scale: *scale, + domain: *domain, + }, + SurfaceIn::BSpline { p, q, net, u, v } => p1ffi::SurfaceIn::BSpline { + p: *p, + q: *q, + net: net.iter().map(|r| r.iter().map(cpt4).collect()).collect(), + u: u.clone(), + v: v.clone(), + }, + } +} + +fn ffi_node(n: &NodeIn) -> ffi::NodeIn { + ffi::NodeIn { + parent: n.parent, + c1: n.c1, + c2: n.c2, + aux: n.aux, + bbox: n.bbox, + dom: n.dom, + polar: n.polar.clone(), + pseudo: n.pseudo, + } +} + +fn ffi_op(o: &OpIn) -> ffi::Op { + match o { + OpIn::State => ffi::Op::State, + OpIn::Set { + dir, + ang, + approx, + tol, + sop, + } => ffi::Op::Set { + dir: *dir, + ang: *ang, + approx: *approx, + tol: *tol, + op: *sop, + }, + OpIn::Push { i } => ffi::Op::Push(*i), + OpIn::Sing { i, prev } => ffi::Op::Sing { i: *i, prev: *prev }, + OpIn::Dupin { eval, normal } => ffi::Op::Dupin { + eval: eval.clone(), + normal: *normal, + }, + OpIn::Solve { sop, req, tol, best } => ffi::Op::Solve { + op: *sop, + req: *req, + tol: *tol, + best: *best, + }, + OpIn::BestSub { a, b } => ffi::Op::BestSub(*a, *b), + OpIn::Gauss { a, b } => ffi::Op::Gauss(*a, *b), + OpIn::Local { a, b } => ffi::Op::Local(*a, *b), + OpIn::Interior => ffi::Op::Interior, + OpIn::SolveBranch { a, b } => ffi::Op::SolveBranch(*a, *b), + } +} + +fn ffi_program(i: &Inputs) -> ffi::Program { + ffi::Program { + a: ffi_surface(&i.a), + b: i.b.as_ref().map(ffi_surface), + dom1: i.dom1, + dom2: i.dom2, + fillet: i.fillet, + trees: i.trees.as_ref().map(|(t0, t1)| { + ( + t0.iter().map(ffi_node).collect(), + t1.as_ref().map(|t| t.iter().map(ffi_node).collect()), + ) + }), + points: i.points.clone(), + ops: i.ops.iter().map(ffi_op).collect(), + } +} + +// ---- C++ side ----------------------------------------------------------------------------- + +fn cpp(i: &Inputs) -> Result { + match ffi::run(&ffi_program(i)) { + Ok(rec) => Ok(Output::new().values("rec", rec)), + Err(e) => Err(harness(format!("C++: {e}"))), + } +} + +// ---- Rust side ---------------------------------------------------------------------------- + +/// A failed Rust operation: the whole case is deferred, or the harness failed. +enum Fail { + Deferred(Box), + Harness(HarnessError), +} + +impl From for Fail { + fn from(e: HarnessError) -> Self { + Fail::Harness(e) + } +} + +/// The `SmStatus` of a Rust error; `1007` for `InvalidInput`, `-1` for one upstream +/// cannot return. +fn status(e: &SolidError) -> f64 { + match e { + SolidError::InvalidInput { .. } => 1007.0, + SolidError::Upstream { code, .. } => f64::from(*code), + _ => -1.0, + } +} + +/// `Ok(v)` or an op status (pushed), or a deferral. +fn st(o: &mut Vec, r: solidcore::Result) -> Result, Fail> { + match r { + Ok(v) => { + o.push(0.0); + Ok(Some(v)) + } + Err(e) => { + if let Some(d) = Output::unported(&e) { + return Err(Fail::Deferred(Box::new(d))); + } + o.push(status(&e)); + Ok(None) + } + } +} + +fn b(x: bool) -> f64 { + if x { + 1.0 + } else { + 0.0 + } +} + +fn v3(p: [f64; 3]) -> Vec3 { + Vec3::from_array(p) +} + +fn ext(d: [f64; 4]) -> Extent2d { + Extent2d::from_bounds(d[0], d[1], d[2], d[3]) +} + +fn rust_surface(s: &SurfaceIn) -> Result { + match s { + SurfaceIn::Plane { + o, + x, + y, + scale, + domain, + } => Ok(Surface::from(Plane::new( + v3(*o), + v3(*x), + v3(*y), + Vec2::new(scale[0], scale[1]), + &ext(*domain), + ))), + SurfaceIn::BSpline { p, q, net, u, v } => { + let net = net + .iter() + .map(|r| { + r.iter() + .map(|c| { + let [x, y, z, w] = cpt4(c); + CPoint::new(x, y, z, w) + }) + .collect() + }) + .collect(); + let sur = NurbSurface::new(net, *p, *q, u.clone(), v.clone()) + .map_err(|e| harness(format!("surface: {e}")))?; + Ok(Surface::from(BSplineSurface::from_nurb(sur, false))) + } + } +} + +fn link(i: i64) -> Option { + usize::try_from(i).ok().map(NodeId) +} + +/// The cache of `surface` over its natural domain with the hand-built tree `t`. +fn rust_cache( + surface: Surface, + t: Option<&[NodeIn]>, + handle: H, +) -> Result, HarnessError> { + let d = surface.natural_uv_domain(); + let mut cache = SurfaceCache::new(surface, d, SurfaceCacheOptions::default()); + cache.set_surface_handle(Some(handle)); + let Some(t) = t else { + return Ok(cache); + }; + let mut tree: Tree = Tree::new(Some(TreeOwner::SurfaceCache)); + let mut patches = Vec::new(); + let mut auxs = Vec::new(); + for (k, n) in t.iter().enumerate() { + let aux_type = AuxDataType::from_code(i32::from(n.aux)) + .ok_or_else(|| harness(format!("bad aux type {}", n.aux)))?; + let mut polar_box = PolarBox::new(); + for v in &n.polar { + polar_box.add_vector(v3(*v), None); + } + let data = BezierAux2d { + uv_domain: ext(n.dom), + polar_box, + owning_tree_node: Some(NodeId(k)), + ..BezierAux2d::default() + }; + let slot = if aux_type == AuxDataType::BezierSurface { + let (basis, ivls) = n.pseudo.ok_or_else(|| harness("patch without pseudo box"))?; + let mut pseudo_box = PseudoBox::new(); + pseudo_box + .set_basis(v3(basis[0]), v3(basis[1]), v3(basis[2])) + .map_err(|e| harness(format!("pseudo box: {e}")))?; + let iv = |i: [f64; 2]| Extent1d::from_min_max(i[0], i[1]); + pseudo_box.set_intervals(iv(ivls[0]), iv(ivls[1]), iv(ivls[2])); + patches.push(BezierPatch { + aux: data, + pseudo_box, + ..BezierPatch::default() + }); + patches.len() - 1 + } else { + auxs.push(data); + auxs.len() - 1 + }; + let [x0, y0, z0, x1, y1, z1] = n.bbox; + tree.add_node(TreeNode { + parent: link(n.parent), + child1: link(n.c1), + child2: link(n.c2), + bbox: Extent3d::from_points(Vec3::new(x0, y0, z0), Vec3::new(x1, y1, z1)), + aux_type, + data: NodeData::Surface(SurfaceAux { + surface: Some(handle), + slot: Some(slot), + ..SurfaceAux::default() + }), + geom_type: NodeGeomType::Default, + }); + } + tree.set_top_node(Some(NodeId(0))); + *cache.patches_mut() = patches; + *cache.auxs_mut() = auxs; + cache.set_tree(Some(tree)); + Ok(cache) +} + +fn ept(code: f64) -> Result { + Ok(match code as i64 { + 0 => ExtentPointType::Start, + 1 => ExtentPointType::Inside, + 2 => ExtentPointType::End, + 3 => ExtentPointType::Both, + 4 => ExtentPointType::Outside, + 5 => ExtentPointType::Unknown, + _ => return Err(harness("extent point type")), + }) +} + +fn rust_point(v: &[f64]) -> Result { + if v.len() != p1ffi::POINT_LEN { + return Err(harness("point length")); + } + let mut it = v.iter().copied(); + let mut g = || it.next().unwrap_or(f64::NAN); + let mut t = TsectPnt::new(); + t.point_type = + IntersectionPointType::from_code(g() as i32).ok_or_else(|| harness("point type"))?; + for pt in t.uv_param_type.iter_mut().flatten() { + *pt = ept(g())?; + } + for uv in t.uv_curve_pv.iter_mut().flatten() { + *uv = Vec2::new(g(), g()); + } + for vec in t.surface_pv.iter_mut().flatten().flatten() { + *vec = Vec3::new(g(), g(), g()); + } + for vec in &mut t.curve_pv { + *vec = Vec3::new(g(), g(), g()); + } + t.curve_parameter = g(); + t.tangent_plane_angle_rad = g(); + t.deviation = g(); + for u in &mut t.user_doubles { + *u = g(); + } + Ok(t) +} + +fn put_vec(o: &mut Vec, v: Vec3) { + o.extend([v.x, v.y, v.z]); +} + +fn put_uv(o: &mut Vec, v: Vec2) { + o.extend([v.x, v.y]); +} + +fn put_point(o: &mut Vec, t: &TsectPnt) { + o.push(f64::from(t.point_type.code())); + o.extend(t.uv_param_type.iter().flatten().map(|pt| f64::from(pt.code()))); + for uv in t.uv_curve_pv.iter().flatten() { + put_uv(o, *uv); + } + for vec in t.surface_pv.iter().flatten().flatten() { + put_vec(o, *vec); + } + put_vec(o, t.curve_pv[0]); + put_vec(o, t.curve_pv[1]); + o.extend([t.curve_parameter, t.tangent_plane_angle_rad, t.deviation]); + o.extend(t.user_doubles); +} + +fn node_index(n: Option) -> f64 { + n.map_or(-1.0, |id| id.0 as f64) +} + +fn put_solutions(o: &mut Vec, a: &SolutionArray) { + o.push(a.len() as f64); + for s in a.as_slice() { + o.push(f64::from(s.solution_type as i32)); + o.push(s.num_variables as f64); + o.push(s.start.solution_value); + o.extend(s.start.parameters); + o.push(s.end.solution_value); + o.extend(s.end.parameters); + o.push(node_index(s.nodes[0])); + o.push(node_index(s.nodes[1])); + } +} + +type Si<'a> = AdvSurfaceIntersector<'a, 'a, H>; + +fn put_state(o: &mut Vec, si: &Si<'_>) { + o.push(si.closest_value()); + let uvs = si.closest_uvs(); + put_uv(o, uvs[0]); + put_uv(o, uvs[1]); + let nodes = si.closest_nodes(); + o.push(node_index(nodes[0])); + o.push(node_index(nodes[1])); + o.extend([ + b(si.separate_gauss_maps()), + si.base.curve_trace_direction, + si.base.this_ang_tol_rad, + si.base.this_approx_tol_3d, + si.solver.tolerance_3d, + f64::from(si.solver.operation as i32), + si.base.curve_points().len() as f64, + ]); +} + +fn sop_of(code: u8) -> Result { + SolverOperation::from_code(i32::from(code)).ok_or_else(|| harness("solver operation")) +} + +fn branch(a: usize, b: usize) -> [Option; MAX_SOLVER_TREES] { + [Some(NodeId(a)), Some(NodeId(b)), None] +} + +/// True for the error `ComputeSingularityPoint` returns on a ninth singular direction. +fn is_sing_overflow(e: &SolidError) -> bool { + matches!(e, SolidError::InvalidInput { reason, .. } if reason.starts_with("more than 8 singular")) +} + +struct Ctx<'a> { + k: &'a Kernel, + aux: [Vec; 2], + sols: SolutionArray, +} + +#[allow(clippy::too_many_lines)] // one match over the ops +fn run_op(cx: &mut Ctx<'_>, si: &mut Si<'_>, op: &OpIn, o: &mut Vec) -> Result<(), Fail> { + match op { + OpIn::State => { + o.push(0.0); + put_state(o, si); + } + OpIn::Set { + dir, + ang, + approx, + tol, + sop, + } => { + si.base.curve_trace_direction = *dir; + si.base.this_ang_tol_rad = *ang; + si.base.this_approx_tol_3d = *approx; + si.solver.tolerance_3d = *tol; + si.solver.operation = sop_of(*sop)?; + o.push(0.0); + } + OpIn::Push { i } => { + if si.base.is_linked(TsectId(*i)) { + o.push(ffi::REJECTED); + } else { + st(o, si.base.add_point_to_curve(TsectId(*i)))?; + } + } + OpIn::Sing { i, prev } => { + let id = TsectId(*i); + let uvs = { + let p = si + .base + .point(id) + .map_err(|e| Fail::Harness(harness(format!("point: {e}"))))?; + [ + p.uv_pos(SrfIndex::First), + p.uv_pos(SrfIndex::Second), + ] + }; + let r = si.compute_singularity_point(uvs, id, prev.map(TsectId)); + if let Err(e) = &r { + if is_sing_overflow(e) { + o.push(ffi::REJECTED); + return Ok(()); + } + } + st(o, r)?; + let p = si + .base + .point(id) + .map_err(|e| Fail::Harness(harness(format!("point: {e}"))))?; + put_point(o, p); + } + OpIn::Dupin { eval, normal } => { + let mut m = [[Vec3::UNDEF; 3]; 3]; + for (row, src) in m.iter_mut().zip(eval.iter()) { + for (v, s) in row.iter_mut().zip(src) { + *v = v3(*s); + } + } + let r = si.make_dupin(&mut m, v3(*normal)); + let d = st(o, r)?; + for v in m.iter().flatten() { + put_vec(o, *v); + } + if let Some(d) = d { + put_vec(o, d.prin_k1_vec); + put_vec(o, d.prin_k2_vec); + o.extend([d.prin_k1, d.prin_k2]); + put_vec(o, d.efg); + put_vec(o, d.lmn); + for list in [&d.above, &d.below] { + o.push(list.len() as f64); + for c in list { + o.extend([c.conic_type().code() as f64, c.a(), c.b()]); + put_uv(o, c.origin()); + o.push(c.theta_rad()); + } + } + } + } + OpIn::Solve { sop, req, tol, best } => { + let mut a = SolutionArray::new(); + let request = SolveRequest { + operation: sop_of(*sop)?, + solution_requested: SolutionRequested::from_code(i32::from(*req)) + .ok_or_else(|| harness("solution requested"))?, + tolerance_3d: *tol, + best_answer_so_far_sq: *best, + opt_vectors: &[], + }; + let r = si.solve_it(&request, &mut a); + st(o, r)?; + put_solutions(o, &a); + } + OpIn::BestSub { a, b: bb } => { + let r = si.find_best_subdivision_node(&branch(*a, *bb)); + let v = st(o, r)?; + let (idx, swap) = v.unwrap_or((99, false)); + o.extend([idx as f64, b(swap)]); + } + OpIn::Gauss { a, b: bb } => { + let r = si.branch_is_gauss_separate(&branch(*a, *bb)); + let v = st(o, r)?; + o.push(b(v.unwrap_or(false))); + } + OpIn::Local { a, b: bb } => { + let is_patch = |t: usize, i: usize| { + cx.aux.get(t).and_then(|a| a.get(i)).copied() == Some(AuxDataType::BezierSurface) + }; + if !is_patch(0, *a) || !is_patch(1, *bb) { + o.push(ffi::REJECTED); + return Ok(()); + } + std::mem::swap(&mut si.solver.solutions, &mut cx.sols); + let r = si.local_solve(&branch(*a, *bb)); + std::mem::swap(&mut si.solver.solutions, &mut cx.sols); + let more = st(o, r)?; + o.push(b(more.unwrap_or(false))); + put_solutions(o, &cx.sols); + put_state(o, si); + } + OpIn::Interior => { + let mut out = InteriorCurves::default(); + let r = si.find_interior_curves(cx.k, &mut out); + st(o, r)?; + o.push(out.curves_3d.len() as f64); + put_state(o, si); + } + OpIn::SolveBranch { a, b: bb } => { + std::mem::swap(&mut si.solver.solutions, &mut cx.sols); + let r = si.solve_branch(&branch(*a, *bb)); + std::mem::swap(&mut si.solver.solutions, &mut cx.sols); + st(o, r)?; + put_solutions(o, &cx.sols); + put_state(o, si); + } + } + Ok(()) +} + +fn rust_inner(i: &Inputs) -> Result, Fail> { + let k = Kernel::default(); + let sa = rust_surface(&i.a)?; + let (t0, t1) = match &i.trees { + Some((t0, t1)) => (Some(t0.as_slice()), t1.as_deref()), + None => (None, None), + }; + let cache_a = rust_cache(sa, t0, H(0))?; + let cache_b = match &i.b { + Some(sb) => Some(rust_cache(rust_surface(sb)?, t1, H(1))?), + None => None, + }; + let cb = cache_b.as_ref().unwrap_or(&cache_a); + let aux_of = |t: Option<&[NodeIn]>| -> Vec { + t.unwrap_or(&[]) + .iter() + .filter_map(|n| AuxDataType::from_code(i32::from(n.aux))) + .collect() + }; + let mut cx = Ctx { + k: &k, + aux: [aux_of(t0), aux_of(if i.b.is_some() { t1 } else { t0 })], + sols: SolutionArray::new(), + }; + + let mut si: Si<'_> = match AdvSurfaceIntersector::new( + cache_a.surface(), + &ext(i.dom1), + cb.surface(), + &ext(i.dom2), + i.fillet, + ) { + Ok(si) => si, + Err(e) => { + return Err(match Output::unported(&e) { + Some(d) => Fail::Deferred(Box::new(d)), + None => Fail::Harness(harness(format!("constructor: {e}"))), + }) + } + }; + if i.trees.is_some() { + si.set_surface_caches(&cache_a, cb) + .map_err(|e| Fail::Harness(harness(format!("caches: {e}"))))?; + } + for p in &i.points { + si.base.alloc_point(rust_point(p)?); + } + let mut o = Vec::new(); + for op in &i.ops { + o.push(op_code(op)); + run_op(&mut cx, &mut si, op, &mut o)?; + } + put_state(&mut o, &si); + Ok(o) +} + +fn op_code(op: &OpIn) -> f64 { + match op { + OpIn::State => 1.0, + OpIn::Set { .. } => 2.0, + OpIn::Push { .. } => 3.0, + OpIn::Sing { .. } => 4.0, + OpIn::Dupin { .. } => 5.0, + OpIn::Solve { .. } => 6.0, + OpIn::BestSub { .. } => 7.0, + OpIn::Gauss { .. } => 8.0, + OpIn::Local { .. } => 9.0, + OpIn::Interior => 10.0, + OpIn::SolveBranch { .. } => 11.0, + } +} + +fn rust(i: &Inputs) -> Result { + match rust_inner(i) { + Ok(rec) => Ok(Output::new().values("rec", rec)), + Err(Fail::Deferred(d)) => Ok(*d), + Err(Fail::Harness(e)) => Err(e), + } +} + +// ---- generation ----------------------------------------------------------------------------- + +type V = [f64; 3]; + +fn add(a: V, c: V) -> V { + [a[0] + c[0], a[1] + c[1], a[2] + c[2]] +} + +fn mul(s: f64, a: V) -> V { + [s * a[0], s * a[1], s * a[2]] +} + +fn dot(a: V, c: V) -> f64 { + a[0] * c[0] + a[1] * c[1] + a[2] * c[2] +} + +fn cross(a: V, c: V) -> V { + [ + a[1] * c[2] - a[2] * c[1], + a[2] * c[0] - a[0] * c[2], + a[0] * c[1] - a[1] * c[0], + ] +} + +fn norm(a: V) -> V { + let l = dot(a, a).sqrt(); + if l > 0.0 { + mul(1.0 / l, a) + } else { + [0.0, 0.0, 1.0] + } +} + +fn unit_vec(rng: &mut Rng) -> V { + loop { + let v = rng.point3(-1.0, 1.0); + let l = dot(v, v).sqrt(); + if l > 0.2 { + return mul(1.0 / l, v); + } + } +} + +/// A unit vector, sometimes axis aligned. +fn direction(rng: &mut Rng) -> V { + if rng.chance(0.3) { + let sign = if rng.chance(0.5) { 1.0 } else { -1.0 }; + match rng.below(3) { + 0 => [sign, 0.0, 0.0], + 1 => [0.0, sign, 0.0], + _ => [0.0, 0.0, sign], + } + } else { + unit_vec(rng) + } +} + +/// A curvature magnitude: mostly moderate, sometimes tiny, huge or at a threshold. +fn curvature(rng: &mut Rng) -> f64 { + let m = match rng.below(12) { + 0 => 1e-7 * rng.uniform(0.5, 2.0), + 1 => 1e-6 * rng.uniform(0.9, 1.1), + 2 => 1e-12 * rng.uniform(0.5, 2.0), + 3 => 1e4 * rng.uniform(0.5, 2.0), + _ => 10f64.powf(rng.uniform(-2.0, 2.0)), + }; + if rng.chance(0.5) { + m + } else { + -m + } +} + +/// A symmetric shape tensor `[s11, s12, s22]` in the tangent frame. +fn shape(rng: &mut Rng) -> [f64; 3] { + let t = rng.uniform(0.0, core::f64::consts::PI); + let (c, s) = (t.cos(), t.sin()); + let (k1, k2) = match rng.below(7) { + 0 => (0.0, 0.0), + 1 => (curvature(rng), 0.0), + 2 => { + let k = curvature(rng); + (k, k) + } + 3 => { + let k = curvature(rng); + (k, -k * rng.uniform(0.2, 5.0)) + } + 4 => { + let k = curvature(rng); + (k, k * rng.uniform(0.2, 5.0)) + } + 5 => { + let k = curvature(rng); + (k, k * (1.0 + 1e-13)) + } + _ => (curvature(rng), curvature(rng)), + }; + [ + k1 * c * c + k2 * s * s, + (k1 - k2) * c * s, + k1 * s * s + k2 * c * c, + ] +} + +/// The evaluation matrix of a surface at `pos` with tangent frame `e1, e2`, normal `n` +/// (stored as `[2][2]`), shape tensor `sh` (relative to `n`) and parametrisation `jac` +/// (`du = j00 e1 + j10 e2`, `dv = j01 e1 + j11 e2`). +fn eval_matrix( + rng: &mut Rng, + pos: V, + e1: V, + e2: V, + n: V, + sh: [f64; 3], + jac: [[f64; 2]; 2], +) -> [[V; 3]; 3] { + let du2 = [jac[0][0], jac[1][0]]; + let dv2 = [jac[0][1], jac[1][1]]; + let form = |a: [f64; 2], c: [f64; 2]| { + a[0] * (sh[0] * c[0] + sh[1] * c[1]) + a[1] * (sh[1] * c[0] + sh[2] * c[1]) + }; + let l = form(du2, du2); + let m = form(du2, dv2); + let nn = form(dv2, dv2); + let du = add(mul(du2[0], e1), mul(du2[1], e2)); + let dv = add(mul(dv2[0], e1), mul(dv2[1], e2)); + let tang = |rng: &mut Rng| { + if rng.chance(0.4) { + [0.0; 3] + } else { + add(mul(rng.uniform(-1.0, 1.0), e1), mul(rng.uniform(-1.0, 1.0), e2)) + } + }; + let duu = add(tang(rng), mul(l, n)); + let duv = add(tang(rng), mul(m, n)); + let dvv = add(tang(rng), mul(nn, n)); + let undef = [solidcore::math::UNDEF_DOUBLE; 3]; + [[pos, dv, dvv], [du, duv, undef], [duu, undef, n]] +} + +fn jacobian(rng: &mut Rng) -> [[f64; 2]; 2] { + let s = 10f64.powf(rng.uniform(-2.0, 2.0)); + loop { + let j = if rng.chance(0.3) { + [[s, 0.0], [0.0, s * rng.uniform(0.5, 2.0)]] + } else { + [ + [s * rng.uniform(-1.0, 1.0), s * rng.uniform(-1.0, 1.0)], + [s * rng.uniform(-1.0, 1.0), s * rng.uniform(-1.0, 1.0)], + ] + }; + let det = j[0][0] * j[1][1] - j[0][1] * j[1][0]; + if det.abs() > 0.05 * s * s { + return j; + } + } +} + +/// 80 values of a point (layout of the ffi module). +fn point_values( + ptype: u8, + uvs: [[f64; 2]; 2], + srf: &[[[V; 3]; 3]; 2], + crv_pos: V, + crv_deriv: V, +) -> Vec { + let mut v = vec![f64::from(ptype), 1.0, 1.0, 1.0, 1.0]; + for uv in uvs { + v.extend(uv); + v.extend([0.0, 0.0]); + } + for s in srf { + for row in s { + for x in row { + v.extend(x); + } + } + } + v.extend(crv_pos); + v.extend(crv_deriv); + v.extend([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]); + v +} + +fn gen_plane(rng: &mut Rng, s: f64) -> SurfaceIn { + let o = rng.point3(-s, s); + let x = unit_vec(rng); + let y = norm(cross(cross(x, unit_vec(rng)), x)); + let y = if dot(y, y) > 0.5 { + y + } else { + norm(cross(x, [0.3, 0.1, 1.0])) + }; + SurfaceIn::Plane { + o, + x, + y, + scale: [1.0, 1.0], + domain: [0.0, 0.0, s, s], + } +} + +/// A plane through `o` with axes `x`, `y`. +fn plane_at(o: V, x: V, y: V, s: f64) -> SurfaceIn { + SurfaceIn::Plane { + o, + x, + y, + scale: [1.0, 1.0], + domain: [0.0, 0.0, s, s], + } +} + +fn gen_bspline(rng: &mut Rng, s: f64, origin: V) -> SurfaceIn { + let p = 1 + rng.below(2) as usize; + let q = 1 + rng.below(2) as usize; + let nu = p + 1 + rng.below(2) as usize; + let nv = q + 1 + rng.below(2) as usize; + let rational = rng.chance(0.15); + let ax = unit_vec(rng); + let ay = norm(cross(cross(ax, unit_vec(rng)), ax)); + let az = cross(ax, ay); + let mut net = Vec::new(); + for i in 0..nu { + let mut row = Vec::new(); + for j in 0..nv { + let pt = add( + origin, + add( + add( + mul(s * i as f64 / (nu - 1) as f64, ax), + mul(s * j as f64 / (nv - 1) as f64, ay), + ), + mul(s * rng.uniform(-0.3, 0.3), az), + ), + ); + let w = if rational { + Some(rng.uniform(0.5, 2.0)) + } else { + None + }; + let ww = w.unwrap_or(1.0); + row.push([Some(pt[0] * ww), Some(pt[1] * ww), Some(pt[2] * ww), w]); + } + net.push(row); + } + let knots = |n: usize, p: usize| { + let mut k = vec![0.0; p + 1]; + for i in 0..(n - p - 1) { + k.push((i as f64 + 1.0) / (n - p) as f64); + } + k.extend(vec![1.0; p + 1]); + k + }; + SurfaceIn::BSpline { + p, + q, + net, + u: knots(nu, p), + v: knots(nv, q), + } +} + +fn natural(s: &SurfaceIn) -> [f64; 4] { + match s { + SurfaceIn::Plane { domain, .. } => *domain, + SurfaceIn::BSpline { u, v, .. } => [ + u.first().copied().unwrap_or(0.0), + v.first().copied().unwrap_or(0.0), + u.last().copied().unwrap_or(1.0), + v.last().copied().unwrap_or(1.0), + ], + } +} + +fn gen_domain(rng: &mut Rng, nat: [f64; 4]) -> [f64; 4] { + let [a, c, e, d] = nat; + let (w, h) = (e - a, d - c); + match rng.below(6) { + 0 => [a + 0.1 * w, c + 0.2 * h, e - 0.3 * w, d - 0.1 * h], + 1 => [a + 0.5 * w, c, e, d], + 2 => [a - 0.2 * w, c - 0.1 * h, e + 0.2 * w, d], + _ => nat, + } +} + +// ---- singular point programs --------------------------------------------------------------- + +/// A surface pair at a point with parallel normals and its point values. +fn gen_sing_point(rng: &mut Rng, uvs: [[f64; 2]; 2]) -> Vec { + let scale = 10f64.powf(rng.uniform(-3.0, 3.0)); + let pos = mul(scale, rng.point3(-1.0, 1.0)); + let n = direction(rng); + let e1 = norm(cross(n, unit_vec(rng))); + let e2 = cross(n, e1); + let sh1 = shape(rng); + let flip = rng.chance(0.3); + let n2 = if flip { mul(-1.0, n) } else { n }; + let rel = |s: [f64; 3]| if flip { [-s[0], -s[1], -s[2]] } else { s }; + let sh2 = match rng.below(6) { + // geometrically coincident + 0 => rel(sh1), + // sharing the curvature along one principal direction (shift the other) + 1 => { + let t = rng.uniform(0.0, core::f64::consts::PI); + let d = curvature(rng); + let (c, s) = (t.cos(), t.sin()); + rel([sh1[0] + d * s * s, sh1[1] - d * c * s, sh1[2] + d * c * c]) + } + // the same tensor, rotated + 2 => { + let t = rng.uniform(0.0, core::f64::consts::PI); + let (c, s) = (t.cos(), t.sin()); + let [a, bb, d] = sh1; + rel([ + c * c * a + 2.0 * c * s * bb + s * s * d, + (d - a) * c * s + bb * (c * c - s * s), + s * s * a - 2.0 * c * s * bb + c * c * d, + ]) + } + _ => shape(rng), + }; + let j1 = jacobian(rng); + let m1 = eval_matrix(rng, pos, e1, e2, n, sh1, j1); + let j2 = jacobian(rng); + let m2 = eval_matrix(rng, pos, e1, e2, n2, sh2, j2); + let deriv = if rng.chance(0.5) { + unit_vec(rng) + } else { + [0.0, 0.0, 0.0] + }; + point_values( + if rng.chance(0.5) { 5 } else { 1 }, + uvs, + &[m1, m2], + pos, + deriv, + ) +} + +fn gen_carrier_planes(rng: &mut Rng) -> (SurfaceIn, Option, [f64; 4], [f64; 4]) { + let s = rng.uniform(0.5, 4.0); + let a = gen_plane(rng, s); + let bsurf = if rng.chance(0.2) { + None + } else { + Some(gen_plane(rng, s)) + }; + let d1 = gen_domain(rng, natural(&a)); + let d2 = gen_domain(rng, natural(bsurf.as_ref().unwrap_or(&a))); + (a, bsurf, d1, d2) +} + +fn gen_uv(rng: &mut Rng, d: [f64; 4]) -> [f64; 2] { + let pick = |rng: &mut Rng, lo: f64, hi: f64| match rng.below(5) { + 0 => lo, + 1 => hi, + _ => rng.uniform(lo, hi), + }; + [pick(rng, d[0], d[2]), pick(rng, d[1], d[3])] +} + +fn gen_set(rng: &mut Rng, sop: u8) -> OpIn { + OpIn::Set { + dir: if rng.chance(0.7) { 1.0 } else { -1.0 }, + ang: *rng + .choose(&[20.0f64.to_radians(), 0.01, 0.3, 1.0]) + .unwrap_or(&0.3), + approx: 10f64.powf(rng.uniform(-6.0, 0.0)), + tol: *rng.choose(&[0.0, 1e-6, 1e-3, 0.1]).unwrap_or(&0.0), + sop, + } +} + +fn gen_sing_case(rng: &mut Rng) -> Inputs { + let (a, bsurf, dom1, dom2) = gen_carrier_planes(rng); + let mut points = Vec::new(); + let mut ops = Vec::new(); + if rng.chance(0.6) { + ops.push(gen_set(rng, 0)); + } + let nsing = 1 + rng.below(3) as usize; + for _ in 0..nsing { + let uvs = [gen_uv(rng, dom1), gen_uv(rng, dom2)]; + let i = points.len(); + points.push(gen_sing_point(rng, uvs)); + let prev = match rng.below(4) { + 0 => { + // a previous point with a chosen tangent + let j = points.len(); + let mut pv = points.get(i).cloned().unwrap_or_default(); + let d = if rng.chance(0.15) { + [0.0, 0.0, 0.0] + } else { + unit_vec(rng) + }; + if let Some(slot) = pv.get_mut(70..73) { + slot.copy_from_slice(&d); + } + points.push(pv); + Some(j) + } + 1 => Some(i), + _ => None, + }; + if rng.chance(0.35) { + // a curve point before: GetLastNode() is set + let j = points.len(); + let mut pv = points.get(i).cloned().unwrap_or_default(); + let d = unit_vec(rng); + if let Some(slot) = pv.get_mut(70..73) { + slot.copy_from_slice(&d); + } + points.push(pv); + ops.push(OpIn::Push { i: j }); + } + ops.push(OpIn::Sing { i, prev }); + } + ops.push(OpIn::State); + Inputs { + a, + b: bsurf, + dom1, + dom2, + fillet: false, + trees: None, + points, + ops, + } +} + +// ---- Dupin programs --------------------------------------------------------------------------- + +fn gen_dupin_case(rng: &mut Rng) -> Inputs { + let (a, bsurf, dom1, dom2) = gen_carrier_planes(rng); + let mut ops = Vec::new(); + for _ in 0..=rng.below(4) { + let n = direction(rng); + let e1 = norm(cross(n, unit_vec(rng))); + let e2 = cross(n, e1); + let pos = rng.point3(-10.0, 10.0); + let sh = shape(rng); + let jac = jacobian(rng); + let mut m = eval_matrix(rng, pos, e1, e2, n, sh, jac); + match rng.below(10) { + 0 => m[1][0] = [0.0; 3], // zero du: rebuilt from dv and n + 1 => m[0][1] = mul(2.0, m[1][0]), // parallel tangents: n from [2][2] + 2 => { + m[0][1] = mul(2.0, m[1][0]); + m[2][2] = [0.0; 3]; // singular point + } + 3 => m[2][2] = mul(-1.0, m[2][2]), // stored normal opposite du x dv + _ => {} + } + let normal = match rng.below(4) { + 0 => mul(-1.0, n), + 1 => unit_vec(rng), + _ => n, + }; + ops.push(OpIn::Dupin { + eval: Box::new(m), + normal, + }); + } + Inputs { + a, + b: bsurf, + dom1, + dom2, + fillet: false, + trees: None, + points: Vec::new(), + ops, + } +} + +// ---- tree programs ------------------------------------------------------------------------------ + +/// Samples `s` on a 3 x 3 grid of `d`. +fn samples(s: &Surface, d: [f64; 4]) -> Vec { + let mut v = Vec::new(); + for i in 0..3 { + for j in 0..3 { + let uv = Point2::new( + d[0] + (d[2] - d[0]) * f64::from(i) / 2.0, + d[1] + (d[3] - d[1]) * f64::from(j) / 2.0, + ); + if let Ok(p) = s.evaluate_point(uv) { + v.push([p.x, p.y, p.z]); + } + } + } + v +} + +/// Approximate normals of `s` over `d` (finite differences). +fn normals(s: &Surface, d: [f64; 4], count: usize) -> Vec { + let mut out = Vec::new(); + let h = 1e-4 * ((d[2] - d[0]).abs() + (d[3] - d[1]).abs()).max(1e-9); + for k in 0..count { + let t = (k as f64 + 0.5) / count as f64; + let u = d[0] + (d[2] - d[0]) * t; + let v = d[1] + (d[3] - d[1]) * (1.0 - t); + let ev = |u: f64, v: f64| s.evaluate_point(Point2::new(u, v)).ok(); + if let (Some(p), Some(pu), Some(pv)) = (ev(u, v), ev(u + h, v), ev(u, v + h)) { + let n = cross( + [pu.x - p.x, pu.y - p.y, pu.z - p.z], + [pv.x - p.x, pv.y - p.y, pv.z - p.z], + ); + if dot(n, n) > 1e-30 { + out.push(norm(n)); + } + } + } + if out.is_empty() { + out.push([0.0, 0.0, 1.0]); + } + out +} + +fn bounds(pts: &[V], basis: &[V; 3], grow: f64) -> [[f64; 2]; 3] { + let mut r = [[f64::MAX, -f64::MAX]; 3]; + for p in pts { + for (iv, bv) in r.iter_mut().zip(basis) { + let x = dot(*p, *bv); + iv[0] = iv[0].min(x); + iv[1] = iv[1].max(x); + } + } + for iv in &mut r { + if iv[0] > iv[1] { + *iv = [0.0, 0.0]; + } + iv[0] -= grow; + iv[1] += grow; + } + r +} + +struct TreeGen<'a> { + s: &'a Surface, + nodes: Vec, + frame: [V; 3], +} + +impl TreeGen<'_> { + /// Adds the node of domain `d` under `parent` and its subtree; returns its index. + fn add(&mut self, rng: &mut Rng, parent: i64, d: [f64; 4], depth: u32, aux: u8) -> i64 { + let k = self.nodes.len(); + let pts = samples(self.s, d); + let ident = [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]; + let grow = 1e-3 * (1.0 + pts.iter().map(|p| dot(*p, *p).sqrt()).fold(0.0, f64::max)); + let bb = bounds(&pts, &ident, grow); + let basis = if rng.chance(0.5) { ident } else { self.frame }; + let pseudo = (aux == 3).then(|| (basis, bounds(&pts, &basis, grow))); + let polar = normals(self.s, d, 1 + rng.below(3) as usize); + self.nodes.push(NodeIn { + parent, + c1: -1, + c2: -1, + aux, + bbox: [bb[0][0], bb[1][0], bb[2][0], bb[0][1], bb[1][1], bb[2][1]], + dom: d, + polar, + pseudo, + }); + let leaf = depth == 0; + if !leaf { + let split_u = rng.chance(0.5); + let t = rng.uniform(0.3, 0.7); + let (da, db) = if split_u { + let m = d[0] + (d[2] - d[0]) * t; + ([d[0], d[1], m, d[3]], [m, d[1], d[2], d[3]]) + } else { + let m = d[1] + (d[3] - d[1]) * t; + ([d[0], d[1], d[2], m], [d[0], m, d[2], d[3]]) + }; + // children: patches, or (under a patch, sometimes) tessellation aux nodes + let child_aux = if aux == 3 && depth >= 2 && rng.chance(0.2) { + 6 + } else { + 3 + }; + let c1 = self.add(rng, k as i64, da, depth - 1, child_aux); + let c2 = self.add(rng, k as i64, db, depth - 1, child_aux); + if let Some(n) = self.nodes.get_mut(k) { + n.c1 = c1; + n.c2 = c2; + } + } else if aux != 3 { + // a leaf must be a patch + if let Some(n) = self.nodes.get_mut(k) { + n.aux = 3; + n.pseudo = Some((ident, bb)); + } + } + k as i64 + } +} + +fn gen_tree(rng: &mut Rng, s: &Surface, nat: [f64; 4], depth: u32) -> Vec { + let frame = { + let x = unit_vec(rng); + let y = norm(cross(cross(x, unit_vec(rng)), x)); + [x, y, cross(x, y)] + }; + let mut g = TreeGen { + s, + nodes: Vec::new(), + frame, + }; + let top_aux = if rng.chance(0.6) { 4 } else { 3 }; + g.add(rng, -1, nat, depth, top_aux); + g.nodes +} + +#[allow(clippy::too_many_lines)] // one generator +fn gen_tree_case(rng: &mut Rng) -> Option { + let s = rng.uniform(0.5, 4.0) * if rng.chance(0.1) { 1e-3 } else { 1.0 }; + let s = if rng.chance(0.05) { s * 1e4 } else { s }; + let kind = rng.below(5); + let (a, bsurf) = match kind { + // two planes crossing + 0 => (gen_plane(rng, s), Some(gen_plane(rng, s))), + // near-parallel overlapping planes (interior curves skip them) + 1 => { + let o = rng.point3(-s, s); + let x = unit_vec(rng); + let y = norm(cross(cross(x, unit_vec(rng)), x)); + let ang = rng.uniform(-4.0, 4.0).to_radians(); + let z = cross(x, y); + let y2 = add(mul(ang.cos(), y), mul(ang.sin(), z)); + let o2 = add(o, mul(s * rng.uniform(-1e-3, 1e-3), z)); + (plane_at(o, x, y, s), Some(plane_at(o2, x, y2, s))) + } + // a B-spline and a plane through it + 2 => { + let o = rng.point3(-s, s); + let bs = gen_bspline(rng, s, o); + (bs, Some(gen_plane(rng, s))) + } + // two B-splines + 3 => { + let o = rng.point3(-s, s); + let b1 = gen_bspline(rng, s, o); + let off = unit_vec(rng); + let b2 = gen_bspline(rng, s, add(o, mul(0.2 * s, off))); + (b1, Some(b2)) + } + // self intersection + _ => { + let o = rng.point3(-s, s); + if rng.chance(0.5) { + (gen_bspline(rng, s, o), None) + } else { + (gen_plane(rng, s), None) + } + } + }; + let ra = rust_surface(&a).ok()?; + let rb = match &bsurf { + Some(x) => Some(rust_surface(x).ok()?), + None => None, + }; + let na = natural(&a); + let depth_a = rng.below(4) as u32; + let depth_b = if rng.chance(0.7) { + depth_a + } else { + rng.below(4) as u32 + }; + let ta = gen_tree(rng, &ra, na, depth_a); + let tb = match (&rb, &bsurf) { + (Some(r), Some(x)) => Some(gen_tree(rng, r, natural(x), depth_b)), + _ => None, + }; + let dom1 = gen_domain(rng, na); + let dom2 = gen_domain(rng, natural(bsurf.as_ref().unwrap_or(&a))); + let n0 = ta.len(); + let n1 = tb.as_ref().map_or(n0, Vec::len); + let pick = |rng: &mut Rng, n: usize| rng.below(n as u64) as usize; + + let mut ops = Vec::new(); + if rng.chance(0.5) { + let sop = *rng.choose(&[0u8, 2, 3]).unwrap_or(&0); + ops.push(gen_set(rng, sop)); + } + let nops = 1 + rng.below(5); + for _ in 0..nops { + let op = match rng.below(12) { + 0..=3 => OpIn::Solve { + sop: *rng.choose(&[0u8, 0, 2, 3]).unwrap_or(&0), + req: rng.below(4) as u8, + tol: *rng.choose(&[0.0, 1e-6, 1e-3 * s, 0.1 * s]).unwrap_or(&0.0), + best: if rng.chance(0.8) { + BIG + } else { + rng.uniform(0.0, s) + }, + }, + 4 => OpIn::BestSub { + a: pick(rng, n0), + b: pick(rng, n1), + }, + 5 => OpIn::Gauss { + a: pick(rng, n0), + b: pick(rng, n1), + }, + 6 | 7 => OpIn::Local { + a: pick(rng, n0), + b: pick(rng, n1), + }, + 8 | 9 => OpIn::SolveBranch { + a: if rng.chance(0.5) { 0 } else { pick(rng, n0) }, + b: if rng.chance(0.5) { 0 } else { pick(rng, n1) }, + }, + 10 => { + if kind == 1 || rng.chance(0.3) { + OpIn::Interior + } else { + OpIn::State + } + } + _ => { + let sop = *rng.choose(&[0u8, 2, 3]).unwrap_or(&0); + gen_set(rng, sop) + } + }; + ops.push(op); + } + ops.push(OpIn::State); + Some(Inputs { + a, + b: bsurf, + dom1, + dom2, + fillet: rng.chance(0.1), + trees: Some((ta, tb)), + points: Vec::new(), + ops, + }) +} + +fn gen_case(rng: &mut Rng) -> Option { + match rng.below(20) { + 0..=7 => Some(gen_sing_case(rng)), + 8..=10 => Some(gen_dupin_case(rng)), + _ => gen_tree_case(rng), + } +} + +// ---- named edge cases ----------------------------------------------------------------------- + +fn inputs_json(i: &Inputs) -> Value { + serde_json::to_value(i).unwrap_or(Value::Null) +} + +/// The classic configurations of `ComputeSingularityPoint`'s documentation +/// (`source/SMLib/src/SmAdvSurfaceIntersector.cpp:86-111`): a hill touching a plane, a +/// cylinder touching a plane, a saddle on a plane, coincident spheres and two cylinders +/// tangent along a line; at the origin with normal `z`. +fn edge_cases() -> Vec<(String, Value)> { + let x = [1.0, 0.0, 0.0]; + let y = [0.0, 1.0, 0.0]; + let z = [0.0, 0.0, 1.0]; + let o = [0.0, 0.0, 0.0]; + let undef = [solidcore::math::UNDEF_DOUBLE; 3]; + // surface with du = x, dv = y and second derivatives (L, M, N) along z + let m = |l: f64, mm: f64, n: f64, nz: f64| -> [[V; 3]; 3] { + let nv = [0.0, 0.0, nz]; + [ + [o, y, mul(n, nv)], + [x, mul(mm, nv), undef], + [mul(l, nv), undef, nv], + ] + }; + let plane = plane_at([-1.0, -1.0, 0.0], x, y, 2.0); + let configs: Vec = vec![ + ("hill_on_plane", m(0.0, 0.0, 0.0, 1.0), m(1.0, 0.0, 2.0, 1.0), None), + ("cylinder_on_plane", m(0.0, 0.0, 0.0, 1.0), m(1.0, 0.0, 0.0, 1.0), None), + ( + "cylinder_on_plane_prev", + m(0.0, 0.0, 0.0, 1.0), + m(0.0, 0.0, 1.0, 1.0), + Some([0.0, -1.0, 0.0]), + ), + ("saddle_on_plane", m(0.0, 0.0, 0.0, 1.0), m(1.0, 0.0, -1.0, 1.0), None), + ( + "saddle_on_plane_opposite_normal", + m(0.0, 0.0, 0.0, 1.0), + m(1.0, 0.0, -2.0, -1.0), + Some([1.0, 1.0, 0.0]), + ), + ("plane_on_plane", m(0.0, 0.0, 0.0, 1.0), m(0.0, 0.0, 0.0, -1.0), None), + ("coincident_spheres", m(1.0, 0.0, 1.0, 1.0), m(1.0, 0.0, 1.0, 1.0), None), + ( + "coincident_saddles_prev", + m(1.0, 0.0, -1.0, 1.0), + m(1.0, 0.0, -1.0, 1.0), + Some([0.0, 1.0, 0.0]), + ), + ("cylinders_tangent_line", m(1.0, 0.0, 0.0, 1.0), m(2.0, 0.0, 0.0, 1.0), None), + ("nested_bowls", m(1.0, 0.0, 1.0, 1.0), m(2.0, 0.0, 3.0, 1.0), None), + ("saddle_on_bowl", m(1.0, 0.0, -1.0, 1.0), m(0.5, 0.0, 0.25, 1.0), None), + ("two_saddles", m(1.0, 0.0, -1.0, 1.0), m(-2.0, 0.5, 1.0, 1.0), None), + ("cylinder_on_saddle", m(0.0, 1.0, 0.0, 1.0), m(1.0, 0.0, 0.0, 1.0), None), + ]; + let mut out = Vec::new(); + for (name, m1, m2, prev) in configs { + for (sfx, last) in [("", false), ("_curve_point", true)] { + let mut points = vec![point_values(5, [[1.0, 1.0]; 2], &[m1, m2], o, [0.0; 3])]; + let mut ops = vec![]; + let prev_id = prev.map(|d| { + points.push(point_values(1, [[1.0, 1.0]; 2], &[m1, m2], o, d)); + 1 + }); + if last { + points.push(point_values(1, [[1.0, 1.0]; 2], &[m1, m2], o, [1.0, 0.2, 0.0])); + ops.push(OpIn::Push { + i: points.len() - 1, + }); + } + ops.push(OpIn::Sing { + i: 0, + prev: prev_id, + }); + ops.push(OpIn::State); + let i = Inputs { + a: plane.clone(), + b: Some(plane_at([-1.0, -1.0, 0.0], x, y, 2.0)), + dom1: [-1.0, -1.0, 1.0, 1.0], + dom2: [-1.0, -1.0, 1.0, 1.0], + fillet: false, + trees: None, + points, + ops, + }; + out.push((format!("edge_{name}{sfx}"), inputs_json(&i))); + } + } + // MakeDupin on the same surfaces, against both normals + let mut ops = Vec::new(); + for (m1, m2) in [ + (m(1.0, 0.0, 2.0, 1.0), m(1.0, 0.0, 0.0, 1.0)), + (m(1.0, 0.0, -1.0, 1.0), m(0.0, 0.0, 0.0, 1.0)), + (m(1e-13, 0.0, 1.0, 1.0), m(1.0, 0.0, 1e-4, 1.0)), + ] { + for nrm in [z, mul(-1.0, z)] { + ops.push(OpIn::Dupin { + eval: Box::new(m1), + normal: nrm, + }); + ops.push(OpIn::Dupin { + eval: Box::new(m2), + normal: nrm, + }); + } + } + out.push(( + "edge_dupin_kinds".into(), + inputs_json(&Inputs { + a: plane.clone(), + b: None, + dom1: [-1.0, -1.0, 1.0, 1.0], + dom2: [-1.0, -1.0, 1.0, 1.0], + fillet: false, + trees: None, + points: Vec::new(), + ops, + }), + )); + out +} + +impl UnitDiff for Runner { + fn id(&self) -> &'static str { + "intersect.adv_surface_intersector" + } + + fn generate(&self, rng: &mut Rng) -> Option { + for _ in 0..64 { + let Some(i) = gen_case(rng) else { continue }; + if ffi::encode(&ffi_program(&i)).is_ok() { + return serde_json::to_value(i).ok(); + } + } + None + } + + fn cases(&self, ctx: &CaseContext) -> Result, HarnessError> { + let ctx = CaseContext { + seeds: ctx.seeds.max(MIN_GENERATED), + ..ctx.clone() + }; + let mut v = default_cases(self, &ctx)?; + for (name, inputs) in edge_cases() { + v.push(Case { + unit: self.id().into(), + name, + source: CaseSource::Inline, + inputs, + }); + } + Ok(v) + } + + fn run_cpp(&self, case: &Case) -> Result { + cpp(&case.parse()?) + } + + fn run_rust(&self, case: &Case) -> Result { + rust(&case.parse()?) + } +} diff --git a/crates/solidcore-ffi/src/units/intersect_adv_surface_intersector.rs b/crates/solidcore-ffi/src/units/intersect_adv_surface_intersector.rs new file mode 100644 index 0000000000..bc089ce846 --- /dev/null +++ b/crates/solidcore-ffi/src/units/intersect_adv_surface_intersector.rs @@ -0,0 +1,487 @@ +//! FFI wrappers for unit `intersect.adv_surface_intersector`. +//! +//! Shim: `harness/cpp/shim/intersect_adv_surface_intersector.cpp` +//! (`sc_intersect_adv_surface_intersector_run`). Upstream: +//! `source/SMLib/src/SmAdvSurfaceIntersector.cpp`, +//! `source/SMLib/inc/SmAdvSurfaceIntersector.h`. +//! +//! [`run`] builds surfaces A and B (B may be A itself), optionally a hand-built +//! decomposition tree in a surface cache of each (one shared tree when B is A), the +//! intersector `SmAdvSurfaceIntersector(A, dom1, B, dom2, fillet)` with `m_apTrees` set to +//! those trees, and a point arena; then runs the [`Op`]s in order. The record is, per op, +//! `op status [values]`, then the state. +//! +//! The state is `closest uvs[0] uvs[1] node[0] node[1] separate trace_dir ang_tol +//! approx_tol tol3d operation ncurvepoints` (nodes as indices into tree 0 / tree 1, `-1` +//! null). A point is the 80 values of +//! [`super::intersect_surface_intersector_p1`]. A solution list is `n` then per solution +//! `type nvars start_value start[10] end_value end[10] node0 node1`. A conic is `type a b +//! origin(x y) theta`. +//! +//! | [`Op`] | upstream | values | +//! |---------------|-------------------------------------------------------|--------| +//! | `State` | the members | state | +//! | `Set` | `m_dCurveTraceDirection`, `m_dThisAngTolRad`, `m_dThisApproxTol3d`, `m_d3dTolerance`, `m_eSolverOperation` | | +//! | `Push` | `AddPointToCurve(point)` | | +//! | `Sing` | `ComputeSingularityPoint(uvs, point, prev or NULL)` | point | +//! | `Dupin` | `MakeDupin(eval, normal, ..)` | eval matrix; on success `k1vec k2vec k1 k2 efg lmn nabove conics nbelow conics` | +//! | `Solve` | `SolveIt(op, req, tol, best, NULL, array)` | solutions | +//! | `BestSub` | `FindBestSubdivisionNode(branch, ..)` | `index swap` | +//! | `Gauss` | `BranchIsGaussSeparate(branch, ..)` | flag | +//! | `Local` | `LocalSolve(branch, ..)` into the program's array | `more` solutions state | +//! | `Interior` | `FindInteriorCurves(..)` | `ncurves` state | +//! | `SolveBranch` | `SolveBranch(branch)` into the program's array | solutions state | +//! +//! [`run`] accepts only finite inputs of magnitude at most [`MAX_COORD`] (the `Solve` +//! best answer may be up to `1e20`), surfaces as in `intersect.surface_intersector_p1`, +//! trees of at most [`MAX_NODES`] nodes (node 0 the top, children both absent or two +//! distinct later nodes pointing back, leaves Bezier patches, patches and heads with a +//! polar box of non-zero vectors and patches with a pseudo box basis of determinant at +//! least `1e-6`, well clear of `SetBasis`' `1e-12` rejection), +//! at most [`MAX_POINTS`] points and [`MAX_OPS`] ops; tree ops need trees. Ops upstream +//! would crash on are not run (status [`REJECTED`]): `Push` of a linked point, `Local` +//! on a node that is not a patch, and `Sing` that would find more than 8 singular +//! directions. + +use super::intersect_surface_intersector_p1::{encode_surface, SurfaceIn, POINT_LEN}; +use crate::{call_with_buffer, FfiError}; + +mod sys { + extern "C" { + pub fn sc_intersect_adv_surface_intersector_run( + input: *const f64, + n_in: i64, + out: *mut f64, + cap: i64, + out_len: *mut i64, + ) -> i32; + } +} + +/// Largest input magnitude. +pub const MAX_COORD: f64 = 1e9; +/// Most points per program. +pub const MAX_POINTS: usize = 64; +/// Most ops per program. +pub const MAX_OPS: usize = 64; +/// Most nodes per tree. +pub const MAX_NODES: usize = 64; +/// Most polar box vectors per node. +pub const MAX_POLAR: usize = 8; +/// The op status of an op the shim does not run. +pub const REJECTED: f64 = -2.0; + +/// A pseudo box: basis vectors and `[min, max]` intervals. +pub type PseudoBoxIn = ([[f64; 3]; 3], [[f64; 2]; 3]); + +/// A tree node. +#[derive(Debug, Clone, PartialEq)] +pub struct NodeIn { + /// Parent index, `-1` for the top. + pub parent: i64, + /// First child index, `-1` for none. + pub c1: i64, + /// Second child index, `-1` for none. + pub c2: i64, + /// `SmAuxDataType`: 3 (patch), 4 (head) or 6 (aux data). + pub aux: u8, + /// `m_sBBox` as `min max`. + pub bbox: [f64; 6], + /// `m_sUVDomain`. + pub dom: [f64; 4], + /// Vectors added to the polar box (`AddVector3d`), in order. + pub polar: Vec<[f64; 3]>, + /// The patch's pseudo box: basis vectors and `[min, max]` intervals (patches only). + pub pseudo: Option, +} + +/// An op (see the module docs). +#[derive(Debug, Clone, PartialEq)] +pub enum Op { + /// The state. + State, + /// Sets the tracing direction, tolerances and solver operation (0, 2 or 3). + Set { + /// `m_dCurveTraceDirection`. + dir: f64, + /// `m_dThisAngTolRad`. + ang: f64, + /// `m_dThisApproxTol3d`. + approx: f64, + /// `m_d3dTolerance`. + tol: f64, + /// `m_eSolverOperation`. + op: u8, + }, + /// `AddPointToCurve(point i)`. + Push(usize), + /// `ComputeSingularityPoint` of point `i` with optional previous point. + Sing { + /// The point. + i: usize, + /// The previous point. + prev: Option, + }, + /// `MakeDupin`. + Dupin { + /// The evaluation matrix `[i][j]`. + eval: Box<[[[f64; 3]; 3]; 3]>, + /// The reference normal. + normal: [f64; 3], + }, + /// `SolveIt`. + Solve { + /// Operation (0, 2 or 3). + op: u8, + /// Solutions requested (0..=3). + req: u8, + /// 3D tolerance. + tol: f64, + /// Best answer so far (squared). + best: f64, + }, + /// `FindBestSubdivisionNode` of (node of tree 0, node of tree 1). + BestSub(usize, usize), + /// `BranchIsGaussSeparate`. + Gauss(usize, usize), + /// `LocalSolve`. + Local(usize, usize), + /// `FindInteriorCurves`. + Interior, + /// `SolveBranch`. + SolveBranch(usize, usize), +} + +/// A program (see the module docs). +#[derive(Debug, Clone, PartialEq)] +pub struct Program { + /// Surface A. + pub a: SurfaceIn, + /// Surface B, `None` for A itself. + pub b: Option, + /// Domain of A. + pub dom1: [f64; 4], + /// Domain of B. + pub dom2: [f64; 4], + /// `bFromFilletIntersector`. + pub fillet: bool, + /// Trees of A and B (`None` for B when B is A). + pub trees: Option<(Vec, Option>)>, + /// Points ([`POINT_LEN`] values each). + pub points: Vec>, + /// Ops. + pub ops: Vec, +} + +fn bad(msg: &str) -> FfiError { + FfiError::InvalidArgument(msg.into()) +} + +fn finite(x: f64) -> Result { + if x.is_finite() && x.abs() <= MAX_COORD { + Ok(x) + } else { + Err(bad("value not finite or too large")) + } +} + +/// Checks the shape rules of the module docs. +fn check_tree(t: &[NodeIn]) -> Result<(), FfiError> { + let n = t.len(); + if n == 0 || n > MAX_NODES { + return Err(bad("tree size")); + } + let idx = |i: i64| usize::try_from(i).ok().filter(|&k| k < n); + for (k, nd) in t.iter().enumerate() { + if !matches!(nd.aux, 3 | 4 | 6) { + return Err(bad("aux type")); + } + match (k, idx(nd.parent)) { + (0, None) if nd.parent == -1 => {} + (0, _) => return Err(bad("top node parent")), + (_, Some(p)) if p < k => { + let pn = t.get(p).ok_or_else(|| bad("parent"))?; + if pn.c1 != k as i64 && pn.c2 != k as i64 { + return Err(bad("parent does not point back")); + } + } + _ => return Err(bad("parent")), + } + match (nd.c1, nd.c2) { + (-1, -1) => { + if nd.aux != 3 { + return Err(bad("leaf is not a patch")); + } + } + (a, b) => { + let (Some(a), Some(b)) = (idx(a), idx(b)) else { + return Err(bad("child index")); + }; + if a <= k || b <= k || a == b { + return Err(bad("child order")); + } + let back = |c: usize| t.get(c).is_some_and(|cn| cn.parent == k as i64); + if !back(a) || !back(b) { + return Err(bad("child does not point back")); + } + } + } + if nd.polar.len() > MAX_POLAR || (nd.polar.is_empty() && nd.aux != 6) { + return Err(bad("polar box")); + } + if nd.polar.iter().any(|v| v.iter().all(|&x| x == 0.0)) { + return Err(bad("zero polar box vector")); + } + match (&nd.pseudo, nd.aux) { + (Some(([a, b, c], _)), 3) => { + // well clear of SetBasis' linear independence test (|det| < 1e-12) + let det = a[0] * (b[1] * c[2] - b[2] * c[1]) - a[1] * (b[0] * c[2] - b[2] * c[0]) + + a[2] * (b[0] * c[1] - b[1] * c[0]); + if det.is_nan() || det.abs() < 1e-6 { + return Err(bad("pseudo box basis not independent")); + } + } + (None, 3) => return Err(bad("patch without pseudo box")), + (Some(_), _) => return Err(bad("pseudo box on a non-patch")), + (None, _) => {} + } + } + Ok(()) +} + +struct Enc { + v: Vec, + npoints: usize, + sizes: Option<(usize, usize)>, +} + +impl Enc { + fn num(&mut self, x: f64) -> Result<(), FfiError> { + self.v.push(finite(x)?); + Ok(()) + } + fn nums(&mut self, xs: &[f64]) -> Result<(), FfiError> { + xs.iter().try_for_each(|&x| self.num(x)) + } + fn int(&mut self, x: usize) { + self.v.push(x as f64); + } + fn sint(&mut self, x: i64) { + self.v.push(x as f64); + } + fn flag(&mut self, b: bool) { + self.v.push(if b { 1.0 } else { 0.0 }); + } + fn pt(&mut self, i: usize) -> Result<(), FfiError> { + if i >= self.npoints { + return Err(bad("point index")); + } + self.int(i); + Ok(()) + } + fn branch(&mut self, a: usize, b: usize) -> Result<(), FfiError> { + let Some((n0, n1)) = self.sizes else { + return Err(bad("tree op without trees")); + }; + if a >= n0 || b >= n1 { + return Err(bad("node index")); + } + self.int(a); + self.int(b); + Ok(()) + } + fn sop(&mut self, op: u8) -> Result<(), FfiError> { + if !matches!(op, 0 | 2 | 3) { + return Err(bad("solver operation")); + } + self.int(usize::from(op)); + Ok(()) + } + + fn tree(&mut self, t: &[NodeIn]) -> Result<(), FfiError> { + check_tree(t)?; + self.int(t.len()); + for nd in t { + self.sint(nd.parent); + self.sint(nd.c1); + self.sint(nd.c2); + self.int(usize::from(nd.aux)); + self.nums(&nd.bbox)?; + self.nums(&nd.dom)?; + self.int(nd.polar.len()); + for v in &nd.polar { + self.nums(v)?; + } + if let Some((basis, ivls)) = &nd.pseudo { + for v in basis { + self.nums(v)?; + } + for i in ivls { + self.nums(i)?; + } + } + } + Ok(()) + } + + fn point(&mut self, p: &[f64]) -> Result<(), FfiError> { + if p.len() != POINT_LEN { + return Err(bad("point length")); + } + let code = |x: f64, hi: f64| x >= 0.0 && x <= hi && x.fract() == 0.0; + let ok = p + .iter() + .take(5) + .enumerate() + .all(|(k, &t)| code(t, if k == 0 { 7.0 } else { 5.0 })); + if !ok { + return Err(bad("point type codes")); + } + self.nums(p) + } + + fn op(&mut self, op: &Op) -> Result<(), FfiError> { + match op { + Op::State => self.int(1), + Op::Set { + dir, + ang, + approx, + tol, + op, + } => { + self.int(2); + self.nums(&[*dir, *ang, *approx, *tol])?; + self.sop(*op)?; + } + Op::Push(i) => { + self.int(3); + self.pt(*i)?; + } + Op::Sing { i, prev } => { + self.int(4); + self.pt(*i)?; + self.flag(prev.is_some()); + self.pt(prev.unwrap_or(*i))?; + } + Op::Dupin { eval, normal } => { + self.int(5); + for row in eval.iter() { + for v in row { + self.nums(v)?; + } + } + self.nums(normal)?; + } + Op::Solve { op, req, tol, best } => { + if self.sizes.is_none() { + return Err(bad("tree op without trees")); + } + if *req > 3 || !best.is_finite() || best.abs() > 1e20 { + return Err(bad("solve request")); + } + self.int(6); + self.sop(*op)?; + self.int(usize::from(*req)); + self.num(*tol)?; + self.v.push(*best); + } + Op::BestSub(a, b) => { + self.int(7); + self.branch(*a, *b)?; + } + Op::Gauss(a, b) => { + self.int(8); + self.branch(*a, *b)?; + } + Op::Local(a, b) => { + self.int(9); + self.branch(*a, *b)?; + } + Op::Interior => { + if self.sizes.is_none() { + return Err(bad("tree op without trees")); + } + self.int(10); + } + Op::SolveBranch(a, b) => { + self.int(11); + self.branch(*a, *b)?; + } + } + Ok(()) + } +} + +/// Encodes `prog` for the shim. +/// +/// # Errors +/// +/// [`FfiError::InvalidArgument`] for a rejected program. +pub fn encode(prog: &Program) -> Result, FfiError> { + if prog.ops.len() > MAX_OPS || prog.points.len() > MAX_POINTS { + return Err(bad("too many ops or points")); + } + let mut v = Vec::new(); + encode_surface(&mut v, &prog.a)?; + match &prog.b { + None => v.push(2.0), + Some(b) => encode_surface(&mut v, b)?, + } + let mut e = Enc { + v, + npoints: prog.points.len(), + sizes: None, + }; + e.nums(&prog.dom1)?; + e.nums(&prog.dom2)?; + e.flag(prog.fillet); + match &prog.trees { + None => e.flag(false), + Some((t0, t1)) => { + e.flag(true); + e.tree(t0)?; + match (t1, &prog.b) { + (None, None) => e.sizes = Some((t0.len(), t0.len())), + (Some(t1), Some(_)) => { + e.tree(t1)?; + e.sizes = Some((t0.len(), t1.len())); + } + _ => return Err(bad("tree B must be given exactly when B is not A")), + } + } + } + e.int(prog.points.len()); + for p in &prog.points { + e.point(p)?; + } + e.int(prog.ops.len()); + for op in &prog.ops { + e.op(op)?; + } + Ok(e.v) +} + +/// Runs `prog` (see the module docs) and returns the record. +/// +/// # Errors +/// +/// [`FfiError::InvalidArgument`] for rejected inputs; [`FfiError::Status`] for a shim +/// failure. +pub fn run(prog: &Program) -> Result, FfiError> { + let input = encode(prog)?; + let n_in = i64::try_from(input.len()).map_err(|_| bad("program too long"))?; + call_with_buffer(4096, |buf: &mut [f64], len| { + // SAFETY: `input` is valid for `n_in` reads; `buf` for `buf.len()` writes; `len` + // is a valid i64; nothing is retained. + unsafe { + sys::sc_intersect_adv_surface_intersector_run( + input.as_ptr(), + n_in, + buf.as_mut_ptr(), + buf.len() as i64, + &raw mut *len, + ) + } + }) +} diff --git a/crates/solidcore-ffi/src/units/intersect_surface_intersector_p1.rs b/crates/solidcore-ffi/src/units/intersect_surface_intersector_p1.rs index 749ba47203..3a4f1e2f5c 100644 --- a/crates/solidcore-ffi/src/units/intersect_surface_intersector_p1.rs +++ b/crates/solidcore-ffi/src/units/intersect_surface_intersector_p1.rs @@ -648,6 +648,23 @@ impl Enc { } } +/// Appends the shim encoding of surface `s` to `v` (shared with the +/// `intersect.adv_surface_intersector` shim, which reads surfaces the same way). +/// +/// # Errors +/// +/// [`FfiError::InvalidArgument`] for a rejected surface. +pub(crate) fn encode_surface(v: &mut Vec, s: &SurfaceIn) -> Result<(), FfiError> { + let mut e = Enc { + v: core::mem::take(v), + npoints: 0, + ncurves: 0, + }; + let r = e.surface(s); + *v = e.v; + r +} + /// Encodes `prog` for the shim. /// /// # Errors diff --git a/crates/solidcore/src/geom/global_solver.rs b/crates/solidcore/src/geom/global_solver.rs index 457592daf2..73c7c7a5d6 100644 --- a/crates/solidcore/src/geom/global_solver.rs +++ b/crates/solidcore/src/geom/global_solver.rs @@ -22,7 +22,7 @@ //! | [`GlobalSolver::set_solver_operation`] .. [`GlobalSolver::set_at_distance`] | `SetSolverOperation` .. `SetAtDistance` | //! | [`GlobalSolve`] | the virtual interface of `SmGlobalSolver` | //! | [`GlobalSolve::solve_it`], [`SolveRequest`] | `SmGlobalSolver::SolveIt` (and its arguments) | -//! | [`GlobalSolve::solve_branch`] | `SmGlobalSolver::SolveBranch` | +//! | [`GlobalSolve::solve_branch`], [`solve_branch`] | `SmGlobalSolver::SolveBranch` | //! | [`GlobalSolve::branch_may_contain_answers`], [`GlobalSolver::branch_may_contain_answers`] | `SmGlobalSolver::BranchMayContainAnswers` | //! | [`GlobalSolve::are_ready_for_local_solve`], [`GlobalSolver::are_ready_for_local_solve`] | `SmGlobalSolver::AreReadyForLocalSolve` | //! | `find_largest_non_leaf` (private) | `sm_FindLargestNonLeaf` | @@ -1378,6 +1378,43 @@ fn combine_min_max( Ok(None) } +/// `SmGlobalSolver::SolveBranch`, the base behaviour of +/// [`GlobalSolve::solve_branch`] (callable from an override): culls `branch`, +/// locally solves it when ready and recurses into its subdivisions, all through +/// `solver`'s hooks. +/// +/// # Errors +/// +/// Those of the hooks. +pub fn solve_branch<'t, O, S>(solver: &mut S, branch: &Branch) -> Result<()> +where + O: SolutionObject + 't, + S: GlobalSolve<'t, O> + ?Sized, +{ + // no more work - these nodes no longer contain possible answer + if !solver.branch_may_contain_answers(branch)? { + return Ok(()); + } + + // check for leaf nodes + if solver.are_ready_for_local_solve(branch)? { + // make the leafNode/leafNode call to Local solver. + let needs_more_subdivision = solver.local_solve(branch)?; + + // done with this branch when LocalSolver is done + if !needs_more_subdivision { + return Ok(()); + } + } + + // get the children to this solverNode + let (child1, child2) = solver.subdivide(branch)?; + + // recurse for each childNode + solver.solve_branch(&child1)?; + solver.solve_branch(&child2) +} + /// The overridable interface of a global solver (the virtual methods of /// `SmGlobalSolver`). Implementors expose their [`GlobalSolver`] state and /// override the hooks they specialise; the base behaviour of each hook is @@ -1431,28 +1468,7 @@ pub trait GlobalSolve<'t, O: SolutionObject + 't> { /// `SolveBranch`: recursively culls, subdivides and locally solves /// `branch`. fn solve_branch(&mut self, branch: &Branch) -> Result<()> { - // no more work - these nodes no longer contain possible answer - if !self.branch_may_contain_answers(branch)? { - return Ok(()); - } - - // check for leaf nodes - if self.are_ready_for_local_solve(branch)? { - // make the leafNode/leafNode call to Local solver. - let needs_more_subdivision = self.local_solve(branch)?; - - // done with this branch when LocalSolver is done - if !needs_more_subdivision { - return Ok(()); - } - } - - // get the children to this solverNode - let (child1, child2) = self.subdivide(branch)?; - - // recurse for each childNode - self.solve_branch(&child1)?; - self.solve_branch(&child2) + solve_branch(self, branch) } /// `SolveIt`: runs the solve described by `request` from the top nodes of diff --git a/crates/solidcore/src/intersect.rs b/crates/solidcore/src/intersect.rs index 1bc1be0b07..e46988577c 100644 --- a/crates/solidcore/src/intersect.rs +++ b/crates/solidcore/src/intersect.rs @@ -5,4 +5,5 @@ //! `SmPolyIntersector`, `SmSSIData` in `source/SMLib`, and //! `SM_API/SmApiIntersectors`. +pub mod adv_surface_intersector; pub mod surface_intersector; diff --git a/crates/solidcore/src/intersect/adv_surface_intersector.rs b/crates/solidcore/src/intersect/adv_surface_intersector.rs new file mode 100644 index 0000000000..4509c4d4bf --- /dev/null +++ b/crates/solidcore/src/intersect/adv_surface_intersector.rs @@ -0,0 +1,1618 @@ +//! The advanced surface/surface intersector (`SmAdvSurfaceIntersector`): the +//! basic intersector plus the tangency and singularity handling (the Dupin +//! indicatrix of both surfaces at a point where their normals are parallel) and a +//! global solve that finds interior intersection loops (one start point per +//! intersecting leaf pair). +//! +//! Upstream: `source/SMLib/src/SmAdvSurfaceIntersector.cpp`, +//! `source/SMLib/inc/SmAdvSurfaceIntersector.h`. +//! +//! | Rust | Upstream | +//! |----------------------------------------------------------|---------------------------------------------------| +//! | [`AdvSurfaceIntersector`], [`AdvSurfaceIntersector::new`] | `SmAdvSurfaceIntersector`, its constructor | +//! | `Drop` (implicit) | `~SmAdvSurfaceIntersector` | +//! | [`AdvSurfaceIntersector::set_surface_caches`] | `m_apTrees[i] = smsurf_GetSurfaceCache(..)->GetTree()` of the callers | +//! | `add_sing_dir` (private) | `sm_AddSingDir` (static) | +//! | [`AdvSurfaceIntersector::compute_singularity_point`], [`AdvSurfaceIntersector::compute_singularity_point_on`] | `ComputeSingularityPoint` | +//! | [`AdvSurfaceIntersector::make_dupin`], [`Dupin`] | `MakeDupin` | +//! | [`AdvSurfaceIntersector::find_interior_curves`], [`InteriorCurves`] | `FindInteriorCurves` | +//! | [`GlobalSolve::solve_branch`] (impl) | `SolveBranch` | +//! | [`GlobalSolve::local_solve`] (impl) | `LocalSolve` | +//! | [`AdvSurfaceIntersector::branch_is_gauss_separate`] | `BranchIsGaussSeparate` | +//! | `find_largest_non_leaf` (private) | `sm_FindLargestNonLeaf` (static) | +//! | [`GlobalSolve::find_best_subdivision_node`] (impl) | `FindBestSubdivisionNode` | +//! | [`AdvSurfaceIntersector::is_kind_of`], [`TYPE`] | `IsKindOf`, `SmAdvSurfaceIntersector_TYPE` | +//! | [`NoSurfaceHandle`] | (none: the handle type of an intersector without caches) | +//! +//! Deviations: +//! - **Bases.** The `SmSurfaceIntersector` base is the field +//! [`AdvSurfaceIntersector::base`] and the `SmGlobalSolver` base the field +//! [`AdvSurfaceIntersector::solver`], initialised as the `SmSurfaceIntersector` +//! constructor sets it (operation `SM_SO_INTERSECT`, `SM_SR_NODES`, two trees, +//! four variables, zero tolerance). The virtual solver hooks are the +//! [`GlobalSolve`] implementation; `SmSurfaceIntersector::SolveBranch` (not +//! overridden by that class) is [`crate::geom::global_solver::solve_branch`]. +//! - **Trees and node data.** Upstream reaches a node's `SmBezierPatch` through +//! `m_pData` and its surface through the tree's owner (asserted to be +//! `m_cpSurface[i]`). Here the trees are those of the two surface caches given to +//! [`AdvSurfaceIntersector::set_surface_caches`]; a node's patch is read from its +//! cache and its surface is [`SurfaceIntersector::surface`]. A cache without a +//! tree (upstream `GetTree` would build it) returns [`SolidError::Unported`] +//! (`surface.surface_cache_p3`). Without caches the nodes have no data +//! (`NER`, `SM_ERR_NULL_POINTER`). +//! - **Polar boxes.** `BranchIsGaussSeparate` builds a missing polar box lazily +//! (`GetPolarBox`); the caches are shared here, so a missing box is built on a +//! copy of the cache and not stored back. (`SolveBranch` resets +//! `m_bSeperateGaussMaps` to `TRUE` on entry, so it never calls it.) +//! - **Points.** `ComputeSingularityPoint` takes intersection point ids of the +//! base's arena ([`AdvSurfaceIntersector::compute_singularity_point`]) or a +//! detached point ([`AdvSurfaceIntersector::compute_singularity_point_on`]). +//! Its unused UV argument is kept. The fixed array of eight singular directions +//! is kept: a ninth direction (upstream writes past the array) is +//! [`SolidError::InvalidInput`]. +//! - **Arguments.** Out-params become return values ([`Dupin`], +//! [`InteriorCurves`], the `(index, swap)` pair). `MakeDupin`'s conics are owned +//! [`Conic`]s instead of context-allocated pointers. +//! - **Statuses.** Statuses upstream ignores are ignored, except +//! [`SolidError::Unported`], which always propagates (also where +//! `FindInteriorCurves` skips a node pair whose `ComputePointValues` fails). +//! - **Unported callees.** `SmSurface::EvaluateNormal` of a non-planar surface +//! (`surface.surface_p7`), `SmSurface::LocalSurfaceIntersect` +//! (`surface.surface_p11`), `SmSurface::DropPointsToTangentPlane` +//! (`surface.surface_p7`), `SmSurfaceIntersector::ComputePointValues` and +//! `FlushCurve` (`intersect.surface_intersector_p2`) and `TraceCurve` +//! (`intersect.surface_intersector_p4`) return [`SolidError::Unported`]. +//! - **Recursion.** `SolveBranch` nests at most once per tree node; deeper nesting +//! (cyclic tree links, which recurse forever upstream) is +//! [`SolidError::InvalidInput`]. +//! - **Not ported.** `Dump` and the `SM_DEBUG_CODE` drawing blocks; `SM_ASSERT`s. + +use crate::curve::conic::{Conic, ConicType}; +use crate::curve::curve::Curve; +use crate::error::{Result, SolidError}; +use crate::geom::extent2d::Extent2d; +use crate::geom::extent3d::Extent3d; +use crate::geom::geom_utility::p1::point_project_to_plane; +use crate::geom::global_solver::{ + self, Branch, GlobalSolve, GlobalSolver, SolutionRequested, SolveRequest, SolverOperation, +}; +use crate::geom::polar_box::{PolarBox, PolarBoxState}; +use crate::geom::solution_array::{Solution, SolutionArray, SolutionObject, SolutionType}; +use crate::geom::tree::{AuxDataType, NodeId, TreeNode}; +use crate::geom::vector2d::Point2; +use crate::geom::vector3d::{sqrt, Point3, Vec3}; +use crate::intersect::surface_intersector::p1::{ + surface_evaluate_normal, surface_local_surface_intersect, IntersectionPointType, SrfIndex, + SurfaceIntersector, TsectId, TsectPnt, +}; +use crate::kernel::Kernel; +use crate::math::{min2, BIG_DOUBLE, EFF_ZERO, EFF_ZERO_SQRT, PI}; +use crate::surface::surface::p2::{ + compute_surface_point_type, drop_vectors, evaluate_geometric, LocalSurfaceType, TsectCurveType, +}; +use crate::surface::surface::Surface; +use crate::surface::surface_cache::p1::{BezierPatch, SurfaceCache}; + +const OP_SING: &str = + "intersect::adv_surface_intersector::AdvSurfaceIntersector::compute_singularity_point"; +const OP_LOCAL: &str = "intersect::adv_surface_intersector::AdvSurfaceIntersector::local_solve"; +const OP_SOLVE: &str = "intersect::adv_surface_intersector::AdvSurfaceIntersector::solve_branch"; +const OP_GAUSS: &str = + "intersect::adv_surface_intersector::AdvSurfaceIntersector::branch_is_gauss_separate"; + +/// `SOLV_BASE_TYPE`. +const SOLV_BASE_TYPE: i64 = 19000; + +/// `SmAdvSurfaceIntersector_TYPE` (`SOLV_BASE_TYPE + 48`). +pub const TYPE: i64 = SOLV_BASE_TYPE + 48; + +/// `SmSurfaceIntersector_TYPE` (`SOLV_BASE_TYPE + 44`). +const SURFACE_INTERSECTOR_TYPE: i64 = SOLV_BASE_TYPE + 44; + +/// `SmGlobalSolver_TYPE` (`SOLV_BASE_TYPE + 4`). +const GLOBAL_SOLVER_TYPE: i64 = SOLV_BASE_TYPE + 4; + +/// Size of `aSingDirections` in `ComputeSingularityPoint`. +const MAX_SING_DIRS: usize = 8; + +/// The Dupin indicatrix of a surface point ([`AdvSurfaceIntersector::make_dupin`]). +#[derive(Debug, Clone, PartialEq)] +pub struct Dupin { + /// `crAboveDupinCurves`: the curves of the positive principal curvatures + /// (the side of the reference normal). + pub above: Vec, + /// `crBelowDupinCurves`: the curves of the negative principal curvatures. + pub below: Vec, + /// `rPrinK1Vec`: unit tangent in the first principal direction. + pub prin_k1_vec: Vec3, + /// `rPrinK2Vec`: unit tangent in the second principal direction. + pub prin_k2_vec: Vec3, + /// `rdPrinK1`: first principal curvature (signed by the reference normal, + /// zeroed when 1000 times smaller than the other). + pub prin_k1: f64, + /// `rdPrinK2`: second principal curvature. + pub prin_k2: f64, + /// `rEFG`: the first fundamental form. + pub efg: Vec3, + /// `rLMN`: the second fundamental form. + pub lmn: Vec3, +} + +/// The surface handle of an intersector built without surface caches (its solver +/// never runs over trees). +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub struct NoSurfaceHandle; + +impl SolutionObject for NoSurfaceHandle { + fn kind(&self) -> crate::geom::solution_array::ObjectKind { + crate::geom::solution_array::ObjectKind::Surface + } +} + +/// The outputs [`AdvSurfaceIntersector::find_interior_curves`] appends to. +#[derive(Debug, Clone, Default)] +pub struct InteriorCurves { + /// `r3DCurves`: the 3D intersection curves. + pub curves_3d: Vec, + /// `rSurface1UVCurves`: their UV curves on the first surface. + pub surface1_uv_curves: Vec, + /// `rSurface2UVCurves`: their UV curves on the second surface. + pub surface2_uv_curves: Vec, + /// `rCurveTypes`: the type of each curve. + pub curve_types: Vec, + /// `rDeviations`: the deviation of each curve. + pub deviations: Vec, +} + +/// The advanced surface/surface intersector (`SmAdvSurfaceIntersector`). +#[derive(Debug, Clone)] +pub struct AdvSurfaceIntersector<'s, 't, O> { + /// The `SmSurfaceIntersector` base. + pub base: SurfaceIntersector<'s>, + /// The `SmGlobalSolver` base. + pub solver: GlobalSolver<'t, O>, + /// The surface caches whose trees the solver traverses (the owners of + /// `m_apTrees[0]`, `m_apTrees[1]`). + caches: [Option<&'t SurfaceCache>; 2], + /// `m_dClosestValue`: closest leaf pair distance seen by the local solves. + closest_value: f64, + /// `m_sUVS`: the UV points of that pair. + uvs: [Point2; 2], + /// `m_apNodes`: the leaf nodes of that pair. + nodes: [Option; 2], + /// `m_bSeperateGaussMaps`. + separate_gauss_maps: bool, + /// Nesting depth of [`GlobalSolve::solve_branch`] (bounds the recursion on cyclic + /// tree links). + solve_depth: usize, +} + +/// `sm_AddSingDir`: appends `sing_vec` to `dirs[..count]` unless a stored direction +/// is within `acos(0.9)` of it. +fn add_sing_dir(sing_vec: Vec3, count: &mut usize, dirs: &mut [Vec3; MAX_SING_DIRS]) -> Result<()> { + // see if crSingVec is already in aSingDirections array + let found = dirs.iter().take(*count).any(|d| d.dot(sing_vec) > 0.9); + + // when crSingVec is not in aSingDirections - add it + if !found { + let slot = dirs.get_mut(*count).ok_or_else(|| { + SolidError::invalid_input( + OP_SING, + "more than 8 singular directions (upstream writes past its array)", + ) + })?; + *slot = sing_vec; + *count += 1; + } + Ok(()) +} + +/// `pPrev->CrvDeriv().AngleBetween(dir, angle)` under `SER`. +fn angle(prev: Vec3, dir: Vec3) -> Result { + prev.angle_between(dir) +} + +/// The `ALIGN_DIR_WITH_PREVIOUS_POINT` macro: flips the curve direction when it is +/// within `min(PI/30, 5 * ang_tol)` of opposite to the previous one. +fn align_with_previous(point: &mut TsectPnt, prev: Option, ang_tol_rad: f64) { + if let Some(p) = prev { + // status ignored: a zero vector reads as angle 0 + let angle_radians = point.crv_deriv().angle_between(p).unwrap_or(0.0); + if (angle_radians - PI).abs() < min2(PI / 30.0, 5.0 * ang_tol_rad) { + *point.crv_deriv_mut() = -point.crv_deriv(); + } + } +} + +/// `sm_FindLargestNonLeaf`: the tree to subdivide (`1` when the first node is a +/// leaf, else `0`). +fn find_largest_non_leaf( + node1: &TreeNode, + child1_of_1: Option<&TreeNode>, + node2: &TreeNode, + child1_of_2: Option<&TreeNode>, +) -> usize { + let leaf = |n: &TreeNode, c: Option<&TreeNode>| match c { + None => true, + Some(c) => { + n.aux_type == AuxDataType::BezierSurface && c.aux_type != AuxDataType::BezierSurface + } + }; + let leaf1 = leaf(node1, child1_of_1); + let leaf2 = leaf(node2, child1_of_2); + + // If either are leaf nodes than return the other node to be split + if leaf1 { + return 1; + } + if leaf2 { + return 0; + } + 0 +} + +impl<'s, 't, O: SolutionObject + 't> AdvSurfaceIntersector<'s, 't, O> { + /// The intersector of `surface1` over `uv_domain1` and `surface2` over + /// `uv_domain2` (`SmAdvSurfaceIntersector(...)`; upstream default + /// `from_fillet_intersector = FALSE`): the base intersector, no closest value + /// yet (`SM_BIG_DOUBLE`), Gauss map separation on. + /// + /// # Errors + /// + /// Those of [`SurfaceIntersector::new`]. + pub fn new( + surface1: &'s Surface, + uv_domain1: &Extent2d, + surface2: &'s Surface, + uv_domain2: &Extent2d, + from_fillet_intersector: bool, + ) -> Result { + let base = SurfaceIntersector::new( + surface1, + uv_domain1, + surface2, + uv_domain2, + from_fillet_intersector, + )?; + + // global solver members, as SmSurfaceIntersector's constructor sets them + let mut solver = GlobalSolver::new(); + solver.operation = SolverOperation::Intersect; + solver.projected_operation = false; + solver.solution_requested = SolutionRequested::Nodes; + solver.num_trees = 2; + solver.num_variables = 4; + solver.tolerance_3d = 0.0; + solver.best_answer_so_far_sq = 0.0; + solver.at_distance = 0.0; + solver.at_distance_sq = 0.0; + + Ok(Self { + base, + solver, + caches: [None, None], + closest_value: BIG_DOUBLE, + uvs: [Point2::UNDEF; 2], + nodes: [None, None], + separate_gauss_maps: true, + solve_depth: 0, + }) + } + + /// Uses the decomposition trees of `cache1` and `cache2` (the caches of the first + /// and second surface) as the solver trees (upstream `m_apTrees[i] = + /// smsurf_GetSurfaceCache(m_cpSurface[i])->GetTree()`). + /// + /// # Errors + /// + /// [`SolidError::Unported`] for a cache without tree (`SmSurfaceCache::GetTree` + /// would build it, `surface.surface_cache_p3`). + pub fn set_surface_caches( + &mut self, + cache1: &'t SurfaceCache, + cache2: &'t SurfaceCache, + ) -> Result<()> { + let tree = |c: &'t SurfaceCache| { + c.tree().ok_or_else(|| { + // UNPORTED(surface.surface_cache_p3): SmSurfaceCache::GetTree + SolidError::unported("SmSurfaceCache::GetTree", "surface.surface_cache_p3") + }) + }; + let t1 = tree(cache1)?; + let t2 = tree(cache2)?; + self.solver.trees[0] = Some(t1); + self.solver.trees[1] = Some(t2); + self.caches = [Some(cache1), Some(cache2)]; + Ok(()) + } + + /// `m_dClosestValue`. + #[must_use] + pub const fn closest_value(&self) -> f64 { + self.closest_value + } + + /// `m_sUVS`. + #[must_use] + pub const fn closest_uvs(&self) -> [Point2; 2] { + self.uvs + } + + /// `m_apNodes`. + #[must_use] + pub const fn closest_nodes(&self) -> [Option; 2] { + self.nodes + } + + /// `m_bSeperateGaussMaps`. + #[must_use] + pub const fn separate_gauss_maps(&self) -> bool { + self.separate_gauss_maps + } + + /// `IsKindOf`: `SmAdvSurfaceIntersector_TYPE`, `SmSurfaceIntersector_TYPE` or + /// `SmGlobalSolver_TYPE`. + #[must_use] + pub const fn is_kind_of(&self, t: i64) -> bool { + t == TYPE || t == SURFACE_INTERSECTOR_TYPE || t == GLOBAL_SOLVER_TYPE + } + + /// The node `id` of tree `index`. + fn node(&self, index: usize, id: Option) -> Result<&'t TreeNode> { + let mut branch: Branch = [None; global_solver::MAX_SOLVER_TREES]; + if let Some(slot) = branch.get_mut(index) { + *slot = id; + } + self.solver.branch_node(&branch, index) + } + + /// The `SmBezierPatch` of node `id` of tree `index` (`(SmBezierPatch*)m_pData`). + fn patch(&self, index: usize, id: Option) -> Result<&'t BezierPatch> { + let cache = self + .caches + .get(index) + .copied() + .flatten() + .ok_or(SolidError::null_pointer(OP_LOCAL))?; + let id = id.ok_or(SolidError::null_pointer(OP_LOCAL))?; + cache.patch(id) + } + + // ---- singular points ---------------------------------------------------------------- + + /// `ComputeSingularityPoint` on point `point` of the base's arena, with the + /// optional previous point `previous` (only its curve tangent is read): see + /// [`AdvSurfaceIntersector::compute_singularity_point_on`]. The point is + /// written back also when an error is returned (upstream works in place). + /// + /// # Errors + /// + /// Unknown ids ([`SolidError::InvalidInput`]) and those of + /// [`AdvSurfaceIntersector::compute_singularity_point_on`]. + pub fn compute_singularity_point( + &mut self, + uv_values: [Point2; 2], + point: TsectId, + previous: Option, + ) -> Result<()> { + let prev_deriv = match previous { + Some(id) => Some(self.base.point(id)?.crv_deriv()), + None => None, + }; + let mut pnt = self.base.point(point)?.clone(); + let result = self.compute_singularity_point_on(uv_values, &mut pnt, prev_deriv); + *self.base.point_mut(point)? = pnt; + result + } + + /// `ComputeSingularityPoint`: classifies `point`, an intersection point where + /// the surface normals are parallel (its surface evaluations, normals included, + /// are set), and sets its curve tangent to the direction to pursue. + /// `prev_crv_deriv` is the curve tangent of the optional previous point; without + /// it the last point of the curve being traced is used, if any. + /// + /// A planar point against a cylindrical one is a tangent curve along the + /// cylinder's flat direction; against a saddle a singularity with the four + /// asymptotic directions; else a tangent point. Otherwise the Dupin indicatrices + /// decide: equal umbilical curvatures are a coincidence, a shared principal + /// curvature (and direction) a tangent curve (or a singularity/coincidence when + /// both match), and else the directions are the intersections of the two + /// indicatrices: none is a tangent point, two a tangent curve, more a + /// singularity (preferring a direction into both domains when starting a curve, + /// else the one closest to the previous direction). + /// + /// # Errors + /// + /// Those of `smsurf_EvaluateGeometric`, [`Vec3::angle_between`], + /// `smsurf_DropVectors` and [`Vec3::unitize`] where upstream checks them; `SM_ERR` + /// for a single singular direction; [`SolidError::InvalidInput`] for more than + /// eight. + #[allow(clippy::too_many_lines)] // one upstream function + pub fn compute_singularity_point_on( + &self, + _uv_values: [Point2; 2], + point: &mut TsectPnt, + prev_crv_deriv: Option, + ) -> Result<()> { + let curve_trace_direction = self.base.curve_trace_direction; + let ang_tol_rad = self.base.this_ang_tol_rad; + + // init curve direction when possible - NULL when given a start point + if let Some(d) = prev_crv_deriv { + *point.crv_deriv_mut() = d; + } + + // The last node of m_vCurvePoints (point may be on that list itself). + let last_node = self.base.curve_points().last().copied(); + let last_node_deriv = match last_node { + Some(id) => Some(self.base.point(id)?.crv_deriv()), + None => None, + }; + + // classify surface shape at given points + let surf1_type = compute_surface_point_type( + point.srf_norm(SrfIndex::First), + point.srf_duu(SrfIndex::First), + point.srf_dvv(SrfIndex::First), + None, + false, + ); + let surf2_type = compute_surface_point_type( + point.srf_norm(SrfIndex::Second), + point.srf_duu(SrfIndex::Second), + point.srf_dvv(SrfIndex::Second), + None, + false, + ); + + // get planar surface index (if any) + let planar = if surf1_type == LocalSurfaceType::Planar { + Some(SrfIndex::First) + } else if surf2_type == LocalSurfaceType::Planar { + Some(SrfIndex::Second) + } else { + None + }; + + // locals for multiple intersection directions for singular points + let mut sing_dir_count = 0_usize; + let mut sing_directions = [Vec3::UNDEF; MAX_SING_DIRS]; + + // some cases project the previous point's CurveDir() to the current point's + // tangency plane (in a scratch copy) + let mut prev: Option = None; + if let Some(prev_deriv) = prev_crv_deriv.or(last_node_deriv) { + // project pPrev CrvDeriv() vector into rTsectPnt tangency plane + let end_pt = point.crv_pos() + prev_deriv; + let pt_on_plane = + point_project_to_plane(end_pt, point.crv_pos(), point.srf_norm(SrfIndex::First)); + let dir = pt_on_plane - point.crv_pos(); + + // when projection worked - update the pPrev->CrvDeriv direction to that + prev = Some(dir.unitize().unwrap_or(prev_deriv)); + } + + // Process planar case - + if let Some(srf) = planar { + // get other surface index + let other = match srf { + SrfIndex::First => SrfIndex::Second, + SrfIndex::Second => SrfIndex::First, + }; + + // get otherSurf curvature properties at point + let geom = evaluate_geometric(point.srf_eval_matrix_mut(other))?; + let prin_k1 = geom.principle_curvature1; + let prin_k2 = geom.principle_curvature2; + let mut prin_kv1 = geom.principle_curvature_vector1; + let mut prin_kv2 = geom.principle_curvature_vector2; + + // If the normals do not agree then reverse the curvatures + let mut opposite_normals = false; + if point.srf_norm(other).dot(point.srf_norm(srf)) < EFF_ZERO { + opposite_normals = true; + prin_kv1 = -prin_kv1; + prin_kv2 = -prin_kv2; + } + + if prin_k1.abs() < EFF_ZERO_SQRT && prin_k2.abs() > EFF_ZERO_SQRT { + // planar surfacePoint is kissing a cylindrical surfacePoint in 1st + // principal curvature direction + point.point_type = IntersectionPointType::TangentCurve; + *point.crv_deriv_mut() = prin_kv1 * curve_trace_direction; + align_with_previous(point, prev, ang_tol_rad); + return Ok(()); + } else if prin_k2.abs() < EFF_ZERO_SQRT && prin_k1.abs() > EFF_ZERO_SQRT { + // ... in 2nd principal curvature direction + point.point_type = IntersectionPointType::TangentCurve; + *point.crv_deriv_mut() = prin_kv2 * curve_trace_direction; + align_with_previous(point, prev, ang_tol_rad); + return Ok(()); + } else if prin_k1 * prin_k2 < 0.0 { + // planar surfacePoint is intersecting a saddle surfacePoint + point.point_type = IntersectionPointType::Singularity; + + // evaluate the hyperbola K1*x^2 + K2*y^2 = 1 at a large Y value + let y = 10000.0; + let mut tmp = (1.0 - prin_k1 * y * y) / prin_k2; + if tmp < 0.0 { + tmp = 0.0; + } + let x = sqrt(tmp); + + let mut asymp_dir1 = y * prin_kv1 + x * prin_kv2; + let mut asymp_dir_in1 = y * prin_kv1 - x * prin_kv2; + + // If the normals oppose then switch directions + if opposite_normals { + core::mem::swap(&mut asymp_dir1, &mut asymp_dir_in1); + } + + // unitize the assymptotic directions + asymp_dir1 = asymp_dir1.unitize_or_z(); + asymp_dir_in1 = asymp_dir_in1.unitize_or_z(); + + // the other start directions are in the negative assymptotic directions + let asymp_dir2 = -asymp_dir1; + let asymp_dir_in2 = -asymp_dir_in1; + + // Reverse vectors if tracing backwards + sing_dir_count = 4; + sing_directions[0] = asymp_dir1 * curve_trace_direction; + sing_directions[1] = asymp_dir2 * curve_trace_direction; + sing_directions[2] = asymp_dir_in1 * curve_trace_direction; + sing_directions[3] = asymp_dir_in2 * curve_trace_direction; + } else { + // plane is kissing a hill or bowl (or a plane) + point.point_type = IntersectionPointType::TangentPoint; + return Ok(()); + } + } else { + // No planar points branch + + // Dupin indicatrex curves for 1st surface + let normal0 = point.srf_norm(SrfIndex::First); + let d1 = self.make_dupin(point.srf_eval_matrix_mut(SrfIndex::First), normal0)?; + let (prin_k1, prin_k2, prin_kv1, prin_kv2) = + (d1.prin_k1, d1.prin_k2, d1.prin_k1_vec, d1.prin_k2_vec); + + // Compute values of second surface based upon the normal of the first + let normal0 = point.srf_norm(SrfIndex::First); + let mut d2 = self.make_dupin(point.srf_eval_matrix_mut(SrfIndex::Second), normal0)?; + let (prin_k1_2, prin_k2_2, prin_kv1_2, prin_kv2_2) = + (d2.prin_k1, d2.prin_k2, d2.prin_k1_vec, d2.prin_k2_vec); + + // if Surf1 has an Umbilical (Spherical) surfacePoint + let scale = EFF_ZERO * (1.0 + prin_k1.abs()); + if (prin_k1 - prin_k2).abs() < scale { + // if Surf2->k1 = Surf1->k1 + if (prin_k1 - prin_k1_2).abs() < EFF_ZERO_SQRT { + // and Surf2 k2 is the same - coincident surfacePoints + if (prin_k2 - prin_k2_2).abs() < EFF_ZERO_SQRT { + point.point_type = IntersectionPointType::Coincidence; + return Ok(()); + } + // only tangent in k1 direction + point.point_type = IntersectionPointType::TangentCurve; + *point.crv_deriv_mut() = prin_kv1_2 * curve_trace_direction; + align_with_previous(point, prev, ang_tol_rad); + return Ok(()); + } + + // else if Surf2->k2 = Surf1->k2 + if (prin_k2 - prin_k2_2).abs() < EFF_ZERO_SQRT { + // only tangent in k2 direction + point.point_type = IntersectionPointType::TangentCurve; + *point.crv_deriv_mut() = prin_kv2_2 * curve_trace_direction; + align_with_previous(point, prev, ang_tol_rad); + return Ok(()); + } + } + + // if Surf2 has an Umbilical (Spherical) surfacePoint + let scale = EFF_ZERO * (1.0 + prin_k1_2.abs()); + if (prin_k1_2 - prin_k2_2).abs() < scale { + if (prin_k1 - prin_k1_2).abs() < EFF_ZERO_SQRT { + if (prin_k2 - prin_k2_2).abs() < EFF_ZERO_SQRT { + point.point_type = IntersectionPointType::Coincidence; + return Ok(()); + } + point.point_type = IntersectionPointType::TangentCurve; + *point.crv_deriv_mut() = prin_kv1 * curve_trace_direction; + align_with_previous(point, prev, ang_tol_rad); + return Ok(()); + } + + // if Surf1->k2 == Surf2->k1 singular Point is TANGENT_CURVE + if (prin_k2 - prin_k2_2).abs() < EFF_ZERO_SQRT { + point.point_type = IntersectionPointType::TangentCurve; + *point.crv_deriv_mut() = prin_kv2 * curve_trace_direction; + align_with_previous(point, prev, ang_tol_rad); + return Ok(()); + } + } + + // when surf1->k1_Direction = surf2->k1_Direction + let cross = prin_kv1.cross(prin_kv1_2); + if cross.length() < EFF_ZERO_SQRT * 100.0 { + // when surf1->k1 == surf2->k1 + if (prin_k1 - prin_k1_2).abs() < EFF_ZERO_SQRT { + // and surf1->k2 == surf2->k2 + if (prin_k2 - prin_k2_2).abs() < EFF_ZERO_SQRT { + self.pick_matching_direction( + point, + prev, + [prin_kv1, -prin_kv1, prin_kv2, -prin_kv2], + (prin_k1, prin_k2, prin_kv1, prin_kv2), + )?; + return Ok(()); + } + point.point_type = IntersectionPointType::TangentCurve; + *point.crv_deriv_mut() = prin_kv1 * curve_trace_direction; + align_with_previous(point, prev, ang_tol_rad); + return Ok(()); + } + + // when surf1->k2 == surf2->k2 while surf1->k1 != surf2->k1 + if (prin_k2 - prin_k2_2).abs() < EFF_ZERO_SQRT { + point.point_type = IntersectionPointType::TangentCurve; + *point.crv_deriv_mut() = prin_kv2 * curve_trace_direction; + align_with_previous(point, prev, ang_tol_rad); + return Ok(()); + } + } + + // when surf1->k1_Direction = +/- surf2->k2_Direction + let cross2 = prin_kv1.cross(prin_kv2_2); + if cross2.length() < EFF_ZERO_SQRT * 100.0 { + // when surf1->k1 == surf2->k2 + if (prin_k1 - prin_k2_2).abs() < EFF_ZERO_SQRT { + // and when surf1->k2 == surf2->k1 + if (prin_k2 - prin_k1_2).abs() < EFF_ZERO_SQRT { + self.pick_matching_direction( + point, + prev, + [prin_kv1, -prin_kv1, prin_kv2, -prin_kv2], + (prin_k1, prin_k2, prin_kv1, prin_kv2), + )?; + return Ok(()); + } + point.point_type = IntersectionPointType::TangentCurve; + *point.crv_deriv_mut() = prin_kv1 * curve_trace_direction; + align_with_previous(point, prev, ang_tol_rad); + return Ok(()); + } + + // when surf1->k2 == surf2->k1 while surf1->k1 != surf2->k2 + if (prin_k2 - prin_k1_2).abs() < EFF_ZERO_SQRT { + point.point_type = IntersectionPointType::TangentCurve; + *point.crv_deriv_mut() = prin_kv2 * curve_trace_direction; + align_with_previous(point, prev, ang_tol_rad); + return Ok(()); + } + } + + // intersect the properly oriented Dupin indicatrix curves + + // angle between surface's natural coordinate systems + let angle_rad = point + .srf_norm(SrfIndex::First) + .ccw_angle_between(prin_kv1, prin_kv1_2)?; + + // Rotate curves from surface 2 into position on surface 1 + for c in d2.above.iter_mut().chain(d2.below.iter_mut()) { + c.transform_2d(angle_rad, Point2::new(0.0, 0.0)); + } + + // for every surf1->AboveCurves - intersect with surf2->AboveCurves, then + // the same for the BelowCurves + for (curves1, curves2) in [(&d1.above, &d2.above), (&d1.below, &d2.below)] { + for c1 in curves1 { + for c2 in curves2 { + // intersect the dupin indicatrix curves + let sols = c1.intersect_conic(c2, EFF_ZERO_SQRT * 100.0)?; + + // for every dupin indicatrix curve/curve xSect solution + for sol in &sols { + // xSect Point in Surface1 natural coordinate system + let p1 = c1.evaluate_point(sol.param).unitize()?; + + // 3D direction for vector = [sP1 - NaturalOrigin] = sP1 + let sing_dir = (p1.x * prin_kv1 + p1.y * prin_kv2).unitize()?; + + // add unique sSingDir vector to aSingDirections + add_sing_dir(sing_dir, &mut sing_dir_count, &mut sing_directions)?; + } + } + } + } + } + + let dirs = sing_directions; + let dir = |i: usize| dirs.get(i).copied().unwrap_or(Vec3::UNDEF); + + // no singular directions branch + if sing_dir_count == 0 { + point.point_type = IntersectionPointType::TangentPoint; + return Ok(()); + } + + // when number of singular directions is 2 + if sing_dir_count == 2 { + point.point_type = IntersectionPointType::TangentCurve; + + // set sing direct = 1st singDirection found + *point.crv_deriv_mut() = dir(0); + + // when there is a PreviousPoint - select best matching direction + if let Some(p) = prev { + let angle_min = angle(p, dir(0))?; + let angle_min2 = angle(p, dir(1))?; + if angle_min2 < angle_min { + *point.crv_deriv_mut() = dir(1); + } + } + + align_with_previous(point, prev, ang_tol_rad); + return Ok(()); + } + + // 3 or more singular directions branch + if sing_dir_count > 2 { + point.point_type = IntersectionPointType::Singularity; + + let used = dirs.get(..sing_dir_count).unwrap_or(&[]); + + if last_node.is_none() { + // starting a curve: seek a singularity direction inside the domains + + // drop SingDirectons into Surf1 and Surf2 parameter space + let sing_uv_surf1 = drop_vectors( + point.srf_du(SrfIndex::First), + point.srf_dv(SrfIndex::First), + used, + )?; + let sing_uv_surf2 = drop_vectors( + point.srf_du(SrfIndex::Second), + point.srf_dv(SrfIndex::Second), + used, + )?; + + // init output 3DCurveDirection = 1st SingDirection Vector + *point.crv_deriv_mut() = dir(0); + + // for every SingDirection vector - find those directions which point + // inside surf1 and surf2 + let mut inside: Vec = Vec::new(); + for (ii, (uv1, uv2)) in sing_uv_surf1.iter().zip(&sing_uv_surf2).enumerate() { + let delta1 = point.uv_pos(SrfIndex::First) + EFF_ZERO_SQRT * *uv1; + if self.base.uv_domains[0].contains_point(delta1, EFF_ZERO_SQRT / 100_000.0) { + let delta2 = point.uv_pos(SrfIndex::Second) + EFF_ZERO_SQRT * *uv2; + if self.base.uv_domains[1].contains_point(delta2, EFF_ZERO_SQRT / 100_000.0) + { + // found a singular direction inside both domains + inside.push(ii); + } + } + } + + // Decide which of the aSingDirections to use. + if let Some(p) = prev { + if let Some((&first, rest)) = inside.split_first() { + // Find the singDirection closest to Prev->3DCurve_Direction. + let mut angle_min = angle(p, dir(first))?; + for &ii in rest { + let angle_test = angle(p, dir(ii))?; + if angle_test < angle_min { + *point.crv_deriv_mut() = dir(ii); + angle_min = angle_test; + } + } + } else { + // None points inside both domains. Just use the prev direction. + *point.crv_deriv_mut() = p; + } + } else if let Some(&first) = inside.first() { + // one inside direction, or several: use the first one + *point.crv_deriv_mut() = dir(first); + } + // else: no direction was inside both; leave it as it is + } else { + // continuing the curve: the direction closest to the last one + let p = prev.unwrap_or(Vec3::UNDEF); + *point.crv_deriv_mut() = dir(0); + let mut angle_min = angle(p, dir(0))?; + for kk in 1..sing_dir_count { + // direction test + let angle_test = angle(p, dir(kk))?; + if angle_test < angle_min { + angle_min = angle_test; + *point.crv_deriv_mut() = dir(kk); + } + + // neg direction test + let angle_test = angle(p, -dir(kk))?; + if angle_test < angle_min { + angle_min = angle_test; + *point.crv_deriv_mut() = -dir(kk); + } + } + // (a minimum angle above 20 degrees is only reported upstream) + } + + return Ok(()); + } + + // a single singular direction is not a valid result + Err(SolidError::sm_err(OP_SING)) + } + + /// The singularity/coincidence case of matching principal curvatures and + /// directions: with a previous direction the closest of `dirs` + /// (`SM_IP_SINGULARITY`), else the direction of the smaller curvature + /// (`SM_IP_COINCIDENCE`). + fn pick_matching_direction( + &self, + point: &mut TsectPnt, + prev: Option, + dirs: [Vec3; 4], + (prin_k1, prin_k2, prin_kv1, prin_kv2): (f64, f64, Vec3, Vec3), + ) -> Result<()> { + let [d0, d1, d2, d3] = dirs; + *point.crv_deriv_mut() = d0; + + // when there is a prevPoint or a LastNode of m_vCurvePoints + if let Some(p) = prev { + // select the direction most like the previous point direction + let mut angle_min = angle(p, d0)?; + for d in [d1, d2, d3] { + let angle_test = angle(p, d)?; + if angle_test < angle_min { + angle_min = angle_test; + *point.crv_deriv_mut() = d; + } + } + point.point_type = IntersectionPointType::Singularity; + } else { + // select the direction with the smallest radius of curvature + *point.crv_deriv_mut() = if prin_k2.abs() < prin_k1.abs() { + prin_kv2 * self.base.curve_trace_direction + } else { + prin_kv1 * self.base.curve_trace_direction + }; + point.point_type = IntersectionPointType::Coincidence; + } + Ok(()) + } + + /// `MakeDupin`: the Dupin indicatrix curves of the surface point evaluated in + /// `surface_eval` (see [`TsectPnt::surface_pv`] for the layout; the matrix is + /// updated in place as `smsurf_EvaluateGeometric` does), with curvatures signed + /// by `reference_normal`. A planar point has no curves; a parabolic point two + /// half lines at `1/sqrt|k|` from the origin; an elliptic point one ellipse; a + /// hyperbolic point four hyperbolas (upstream's bottom hyperbola uses `k2` for + /// both axes). Curves go above for positive curvatures, below for negative. + /// + /// # Errors + /// + /// Those of `smsurf_EvaluateGeometric`. + pub fn make_dupin( + &self, + surface_eval: &mut [[Vec3; 3]; 3], + reference_normal: Vec3, + ) -> Result { + let geom = evaluate_geometric(surface_eval)?; + let mut out = Dupin { + above: Vec::new(), + below: Vec::new(), + prin_k1_vec: geom.principle_curvature_vector1, + prin_k2_vec: geom.principle_curvature_vector2, + prin_k1: geom.principle_curvature1, + prin_k2: geom.principle_curvature2, + efg: geom.efg_of_first_fund_form, + lmn: geom.lmn_of_second_fund_form, + }; + + // negate curvatures when surface normal is opposite reference normal + if reference_normal.dot(surface_eval[2][2]) < 0.0 { + out.prin_k1 = -out.prin_k1; + out.prin_k2 = -out.prin_k2; + } + + // no work - surfacePoint is planar + if out.prin_k1.abs() < EFF_ZERO && out.prin_k2.abs() < EFF_ZERO { + return Ok(out); + } + + // treat a curvature 1000 times smaller than the other as zero (a cylinder) + if out.prin_k1.abs() < out.prin_k2.abs() / 1000.00 { + out.prin_k1 = 0.0; + } + if out.prin_k2.abs() < out.prin_k1.abs() / 1000.00 { + out.prin_k2 = 0.0; + } + let (k1, k2) = (out.prin_k1, out.prin_k2); + + if k1.abs() < EFF_ZERO || k2.abs() < EFF_ZERO { + // We have a parabolic point - create two parallel lines + let mut prin_k = k1; + // 90 degree rotation because curves are parallel to the local Y axis. + let mut angle_rad = PI / 2.0; + if prin_k.abs() < EFF_ZERO { + prin_k = k2; + angle_rad = 0.0; + } + + // two lines leaving this point in opposite directions + let a = 1.0 / sqrt(prin_k.abs()); + let mut line1 = Conic::new(ConicType::Line, a, 0.0); + line1.transform_2d(angle_rad, Point2::new(0.0, 0.0)); + let mut line2 = Conic::new(ConicType::Line, a, 0.0); + line2.transform_2d(PI + angle_rad, Point2::new(0.0, 0.0)); + + if prin_k > 0.0 { + out.above.push(line1); + out.above.push(line2); + } else { + out.below.push(line1); + out.below.push(line2); + } + return Ok(out); + } else if k1 * k2 > 0.0 { + // We have an ellipse + let ellipse = Conic::new( + ConicType::Ellipse, + 1.0 / sqrt(k1.abs()), + 1.0 / sqrt(k2.abs()), + ); + if k1 > 0.0 { + out.above.push(ellipse); + } else { + out.below.push(ellipse); + } + } else if k1 * k2 < 0.0 { + // We have a hyperbolic point + let mut push = |c: Conic, k: f64| { + if k > 0.0 { + out.above.push(c); + } else { + out.below.push(c); + } + }; + + // First create hyperbola on right side + let hyp = Conic::new( + ConicType::Hyperbola, + 1.0 / sqrt(k1.abs()), + 1.0 / sqrt(k2.abs()), + ); + push(hyp, k1); + + // Now do left side hyperbola + let mut hyp = Conic::new( + ConicType::Hyperbola, + 1.0 / sqrt(k1.abs()), + 1.0 / sqrt(k2.abs()), + ); + hyp.transform_2d(PI, Point2::new(0.0, 0.0)); + push(hyp, k1); + + // Now do top hyperbola + let mut hyp = Conic::new( + ConicType::Hyperbola, + 1.0 / sqrt(k2.abs()), + 1.0 / sqrt(k1.abs()), + ); + hyp.transform_2d(PI / 2.0, Point2::new(0.0, 0.0)); + push(hyp, k2); + + // Now do bottom hyperbola + let mut hyp = Conic::new( + ConicType::Hyperbola, + 1.0 / sqrt(k2.abs()), + 1.0 / sqrt(k2.abs()), + ); + hyp.transform_2d(PI + PI / 2.0, Point2::new(0.0, 0.0)); + push(hyp, k2); + } + + Ok(out) + } + + // ---- interior curves ------------------------------------------------------------------- + + /// `FindInteriorCurves`: runs the global solve over the surface trees + /// ([`AdvSurfaceIntersector::set_surface_caches`]) for one candidate start point + /// per intersecting leaf pair, and traces a curve from each candidate whose + /// normals are at least 5 degrees apart, whose local intersection succeeds with + /// normals at least 2 degrees apart and which is not on a curve found already. + /// The curves are appended to `out`. + /// + /// # Errors + /// + /// Those of the solve and of the callees; [`SolidError::Unported`] (see the + /// module deviations). + pub fn find_interior_curves(&mut self, k: &Kernel, out: &mut InteriorCurves) -> Result<()> { + let mut solutions = SolutionArray::with_capacity(130); + + // Find node pairs in the tree where intersections might exist + let request = SolveRequest { + operation: SolverOperation::Intersect, + solution_requested: SolutionRequested::All, + tolerance_3d: self.base.this_approx_tol_3d, + best_answer_so_far_sq: BIG_DOUBLE, + opt_vectors: &[], + }; + self.solve_it(&request, &mut solutions)?; + + // Now for each node pair do a test to see if produces a unique start point + for sol in solutions.as_slice() { + let uv_guess1 = Point2::new(sol.start.parameters[0], sol.start.parameters[1]); + let uv_guess2 = Point2::new(sol.start.parameters[2], sol.start.parameters[3]); + let node1 = sol.nodes[0]; + let node2 = sol.nodes[1]; + self.patch(0, node1)?; + self.patch(1, node2)?; + let bss1 = self.base.surface(SrfIndex::First); + let bss2 = self.base.surface(SrfIndex::Second); + + // Skip cases where surface normals are very close + { + let norm1 = surface_evaluate_normal(bss1, uv_guess1)?; + let norm2 = surface_evaluate_normal(bss2, uv_guess2)?; + let mut angle_rad = norm1.angle_between(norm2)?; + if angle_rad > PI / 2.0 { + angle_rad = PI - angle_rad; + } + if angle_rad * (180.0 / PI) < 5.0 { + continue; + } + } + + // Get an intersection curve start point + let (found_answer, start) = surface_local_surface_intersect( + bss1, + &self.base.uv_domains[0], + bss2, + &self.base.uv_domains[1], + self.base.this_approx_tol_3d / 100.0, + uv_guess1, + uv_guess2, + None, + None, + false, + )?; + + // for nodes that do not intersect - skip to next node pair + if !found_answer { + continue; + } + + // Get solution 3d and UV points point + let uv = Point2::new(start[0], start[1]); + let uv2 = Point2::new(start[2], start[3]); + let surf_pnt = bss1.evaluate_point(uv)?; + + // Skip cases where surface normals are very close + { + let norm1 = surface_evaluate_normal(bss1, uv)?; + let norm2 = surface_evaluate_normal(bss2, uv2)?; + let mut angle_rad = norm1.angle_between(norm2)?; + if angle_rad > PI / 2.0 { + angle_rad = PI - angle_rad; + } + if angle_rad * (180.0 / PI) < 2.0 { + continue; + } + } + + // skip start points that are already on xsect curves + if self + .base + .is_point_on_curve(k, surf_pnt, &out.curves_3d, None)? + { + continue; + } + + // make a SmTSectPnt for the intersection solution + let uv_pts = [uv, Point2::new(start[2], start[3])]; + let start_tsp = self.base.alloc_point(TsectPnt::new()); + self.base.curve_trace_direction = 1.0; + match compute_point_values(&mut self.base, uv_pts, start_tsp) { + Err(e) if e.is_unported() => return Err(e), + Err(_) => continue, + Ok(()) => {} + } + + // init trace params + let input_trace_direction = self.base.curve_trace_direction; + self.base.start_point = Some(start_tsp); + + // do the trace + trace_curve(&mut self.base, start_tsp, &mut out.curves_3d)?; + + // when appropriate - trace in the other direction as well + if !self.base.curve_is_closed + && !self.base.point(start_tsp)?.is_bounded() + && input_trace_direction == self.base.curve_trace_direction + { + self.base.reverse_curve_direction()?; + self.base.curve_trace_direction *= -1.0; + trace_curve(&mut self.base, start_tsp, &mut out.curves_3d)?; + + // restore the curve direction (upstream multiplies by 1.0) + self.base.reverse_curve_direction()?; + } + + // turn m_vCurvePoints into an intersection curve + flush_curve(&mut self.base, out)?; + self.base.start_point = None; + } + + Ok(()) + } + + // ---- Gauss maps -------------------------------------------------------------------------- + + /// `BranchIsGaussSeparate`: true when both nodes of `branch` are surface + /// subdivision nodes (`SM_AD_BEZIER_SURFACE` or `_HEAD`) whose normal polar + /// boxes are disjoint. + /// + /// # Errors + /// + /// `SM_ERR_NULL_POINTER` without node data (no caches); those of the lazy polar + /// box build. + pub fn branch_is_gauss_separate(&self, branch: &Branch) -> Result { + let node1 = self.node(0, branch[0])?; + let node2 = self.node(1, branch[1])?; + let is_surface = |n: &TreeNode| { + n.aux_type == AuxDataType::BezierSurface || n.aux_type == AuxDataType::BezierSurfaceHead + }; + if is_surface(node1) && is_surface(node2) { + let box1 = self.polar_box(0, branch[0])?; + let box2 = self.polar_box(1, branch[1])?; + if box1.are_disjoint(&box2) { + return Ok(true); + } + } + Ok(false) + } + + /// `((SmBezierAux2d*)m_pData)->GetPolarBox()` of node `id` of tree `index`. + fn polar_box(&self, index: usize, id: Option) -> Result { + let cache = self + .caches + .get(index) + .copied() + .flatten() + .ok_or(SolidError::null_pointer(OP_GAUSS))?; + let id = id.ok_or(SolidError::null_pointer(OP_GAUSS))?; + let stored = cache.aux(id)?.polar_box; + if stored.state() != PolarBoxState::Uninitialized { + return Ok(stored); + } + // built lazily upstream; built on a copy here (the caches are shared) + let mut copy = cache.clone(); + copy.polar_box(id) + } + + /// The body of [`GlobalSolve::solve_branch`] (`SolveBranch`). + fn solve_branch_at_depth(&mut self, branch: &Branch) -> Result<()> { + self.separate_gauss_maps = true; + + if !self.branch_may_contain_answers(branch)? { + return Ok(()); + } + + // no work - SolverOperation != INTERSECT - pass the call along + if self.solver.operation != SolverOperation::Intersect { + return global_solver::solve_branch(self, branch); + } + + let mut save_answer = false; + + let mut achieved_seperability = false; + if !self.separate_gauss_maps { + achieved_seperability = self.branch_is_gauss_separate(branch)?; + } + + if achieved_seperability { + // separability at the top nodes of both trees: no interior curves + let node1 = self.node(0, branch[0])?; + let node2 = self.node(1, branch[1])?; + if node1.parent.is_none() && node2.parent.is_none() { + return Ok(()); + } + + let saved = core::mem::replace(&mut self.separate_gauss_maps, true); + self.closest_value = BIG_DOUBLE; + save_answer = true; + + let result = if self.are_ready_for_local_solve(branch)? { + self.local_solve(branch).map(|_| ()) + } else { + self.subdivide(branch).and_then(|(child1, child2)| { + self.solve_branch(&child1)?; + self.solve_branch(&child2) + }) + }; + self.separate_gauss_maps = saved; + result?; + } else if self.are_ready_for_local_solve(branch)? { + let saved = core::mem::replace(&mut self.separate_gauss_maps, true); + self.closest_value = BIG_DOUBLE; + // If we are unable to achieve seperability at the leaf level than we + // save the answer any how. + save_answer = true; + let result = self.local_solve(branch); + self.separate_gauss_maps = saved; + result?; + } else { + let (child1, child2) = self.subdivide(branch)?; + self.solve_branch(&child1)?; + self.solve_branch(&child2)?; + } + + // some leaf nodes intersected: save the best one as an answer + if save_answer && self.closest_value < BIG_DOUBLE { + let mut solution = Solution::new(); + solution.solution_type = SolutionType::SingleValue; + solution.num_variables = 4; + solution.start.parameters[0] = self.uvs[0].x; + solution.start.parameters[1] = self.uvs[0].y; + solution.start.parameters[2] = self.uvs[1].x; + solution.start.parameters[3] = self.uvs[1].y; + solution.nodes[0] = self.nodes[0]; + solution.nodes[1] = self.nodes[1]; + self.solver.solutions.add(&solution); + } + + Ok(()) + } +} + +impl<'t, O: SolutionObject + 't> GlobalSolve<'t, O> for AdvSurfaceIntersector<'_, 't, O> { + fn solver(&self) -> &GlobalSolver<'t, O> { + &self.solver + } + + fn solver_mut(&mut self) -> &mut GlobalSolver<'t, O> { + &mut self.solver + } + + /// `SolveBranch`: for `SM_SO_INTERSECT`, subdivides to the leaf pairs and saves + /// the closest midpoint pair of each leaf solve as a 4-variable single-value + /// solution (`m_vStart = [u1, v1, u2, v2]`, the two leaf nodes); other + /// operations run the base traversal. + fn solve_branch(&mut self, branch: &Branch) -> Result<()> { + // an acyclic pair of trees nests at most one level per node + let limit = self + .solver + .trees + .iter() + .flatten() + .map(|t| t.nodes().len()) + .sum::() + + 2; + if self.solve_depth > limit { + return Err(SolidError::invalid_input(OP_SOLVE, "tree links are cyclic")); + } + self.solve_depth += 1; + let result = self.solve_branch_at_depth(branch); + self.solve_depth -= 1; + result + } + + /// `LocalSolve`: for `SM_SO_INTERSECT`, when the patches' pseudo boxes (the + /// first grown by the solver tolerance) meet, compares the distance of the + /// patch midpoints (after one drop of the smaller patch's midpoint onto the + /// patch more than four times bigger) with the closest so far; for + /// `SM_SO_INTERSECTION_TEST`, accumulates the union of the overlapping leaf boxes + /// and patch domains in the first solution (`m_vStart` 3D box and count, + /// `m_vEnd` both UV domains). Never needs more subdivision. + #[allow(clippy::too_many_lines)] // one upstream function + fn local_solve(&mut self, branch: &Branch) -> Result { + let surface_node1 = self.node(0, branch[0])?; + let surface_node2 = self.node(1, branch[1])?; + let bez_patch1 = self.patch(0, branch[0])?; + let bez_patch2 = self.patch(1, branch[1])?; + let bsp1 = self.base.surface(SrfIndex::First); + let bsp2 = self.base.surface(SrfIndex::Second); + let mut uv_domain1 = *bez_patch1.aux.uv_domain(); + let mut uv_domain2 = *bez_patch2.aux.uv_domain(); + + // Do interval tests and reject if disjoint + if uv_domain1.are_disjoint(&self.base.uv_domains[0], 0.0) { + return Ok(false); + } + if uv_domain2.are_disjoint(&self.base.uv_domains[1], 0.0) { + return Ok(false); + } + + // If we are doing self intersection then reject case where domains are not + // disjoint. + if self.base.doing_self_intersection && !uv_domain1.are_disjoint(&uv_domain2, 0.0) { + return Ok(false); + } + + if self.solver.operation == SolverOperation::Intersect { + let mut tmp_pbox0 = *bez_patch1.pseudo_box(); + tmp_pbox0.expand_absolute(self.solver.tolerance_3d); + if !tmp_pbox0.are_disjoint(bez_patch2.pseudo_box(), None) { + let size1 = surface_node1.bbox.size(); + let size2 = surface_node2.bbox.size(); + let mut uv1 = uv_domain1.evaluate(0.5, 0.5); + let mut uv2 = uv_domain2.evaluate(0.5, 0.5); + let p1 = bsp1.evaluate_point(uv1)?; + let p2 = bsp2.evaluate_point(uv2)?; + let mut dist = p1.distance(p2); + + // If the sizes are very different - try taking one Newton step to + // get a closer guess point on the big surface. + if size1.length() > 4.0 * size2.length() { + let uv_points = drop_points_to_tangent_plane(bsp1, uv1, &[p2])?; + let uv1_new = uv_domain1.clamp_point(uv_points.first().copied().unwrap_or(uv1)); + let p1_new = bsp1.evaluate_point(uv1_new)?; + let new_dist = p1_new.distance(p2); + if new_dist < dist { + uv1 = uv1_new; + dist = new_dist; + } + } else if size2.length() > 4.0 * size1.length() { + let uv_points = drop_points_to_tangent_plane(bsp2, uv2, &[p1])?; + let uv2_new = uv_domain2.clamp_point(uv_points.first().copied().unwrap_or(uv2)); + let p2_new = bsp2.evaluate_point(uv2_new)?; + let new_dist = p2_new.distance(p1); + if new_dist < dist { + uv2 = uv2_new; + dist = new_dist; + } + } + + if dist < self.closest_value { + self.closest_value = dist; + self.uvs = [uv1, uv2]; + self.nodes = [branch[0], branch[1]]; + } + } + } else if self.solver.operation == SolverOperation::IntersectionTest { + let mut tmp_pbox0 = *bez_patch1.pseudo_box(); + let tmp_pbox1 = *bez_patch2.pseudo_box(); + tmp_pbox0.expand_absolute(self.solver.tolerance_3d); + + // when Patch1 and Patch2 PseudoBoxes intersect + if !tmp_pbox0.are_disjoint(&tmp_pbox1, None) { + // Update the bounding box information in the solution. + let mut bbox = surface_node1.bbox; + bbox.expand_absolute(self.solver.tolerance_3d); + let mut result = bbox + .intersect(&surface_node2.bbox) + .unwrap_or_else(|_| Extent3d::new()); + + let solutions = &mut self.solver.solutions; + if solutions.is_empty() { + // the first solution + let mut sol = Solution::new(); + sol.nodes[0] = branch[0]; + sol.nodes[1] = branch[1]; + sol.num_variables = 7; + sol.solution_type = SolutionType::SingleValue; + let (mn, mx) = (result.min(), result.max()); + sol.start.parameters[..7] + .copy_from_slice(&[mn.x, mn.y, mn.z, mx.x, mx.y, mx.z, 1.0]); + let (a, b) = (uv_domain1.min(), uv_domain1.max()); + let (c, d) = (uv_domain2.min(), uv_domain2.max()); + sol.end.parameters[..8] + .copy_from_slice(&[a.x, a.y, b.x, b.y, c.x, c.y, d.x, d.y]); + solutions.add(&sol); + } else if let Some(sol) = solutions.get_mut(0) { + // add this solution to the previous solutions + let s = &mut sol.start.parameters; + s[6] += 1.0; // Number of contributors to intersection + + let old_box = Extent3d::from_points( + Vec3::new(s[0], s[1], s[2]), + Vec3::new(s[3], s[4], s[5]), + ); + result = result.union(&old_box); + let (mn, mx) = (result.min(), result.max()); + s[..6].copy_from_slice(&[mn.x, mn.y, mn.z, mx.x, mx.y, mx.z]); + + let e = &mut sol.end.parameters; + let old_uv1 = + Extent2d::from_points(Point2::new(e[0], e[1]), Point2::new(e[2], e[3])); + let old_uv2 = + Extent2d::from_points(Point2::new(e[4], e[5]), Point2::new(e[6], e[7])); + uv_domain1 = old_uv1.union(&uv_domain1); + uv_domain2 = old_uv2.union(&uv_domain2); + let (a, b) = (uv_domain1.min(), uv_domain1.max()); + let (c, d) = (uv_domain2.min(), uv_domain2.max()); + e[..8].copy_from_slice(&[a.x, a.y, b.x, b.y, c.x, c.y, d.x, d.y]); + } + } + } + + Ok(false) + } + + /// `FindBestSubdivisionNode`: `sm_FindLargestNonLeaf` (subdivide the second + /// tree when the first node is a leaf, else the first), never swapping. + fn find_best_subdivision_node(&self, branch: &Branch) -> Result<(usize, bool)> { + let node1 = self.node(0, branch[0])?; + let node2 = self.node(1, branch[1])?; + let child = |index: usize, n: &TreeNode| -> Result>> { + match n.child1 { + None => Ok(None), + Some(c) => self.node(index, Some(c)).map(Some), + } + }; + let c1 = child(0, node1)?; + let c2 = child(1, node2)?; + Ok((find_largest_non_leaf(node1, c1, node2, c2), false)) + } +} + +// ---- unported callees --------------------------------------------------------------------- + +/// `pSrf->DropPointsToTangentPlane(uv, TRUE, TRUE, n, points, uvs)`. +fn drop_points_to_tangent_plane( + _surface: &Surface, + _uv: Point2, + _points: &[Point3], +) -> Result> { + // UNPORTED(surface.surface_p7): SmSurface::DropPointsToTangentPlane + Err(SolidError::unported( + "SmSurface::DropPointsToTangentPlane", + "surface.surface_p7", + )) +} + +/// `ComputePointValues(uv_pts, *point, NULL)`. +fn compute_point_values( + _si: &mut SurfaceIntersector<'_>, + _uv_pts: [Point2; 2], + _point: TsectId, +) -> Result<()> { + // UNPORTED(intersect.surface_intersector_p2): SmSurfaceIntersector::ComputePointValues + Err(SolidError::unported( + "SmSurfaceIntersector::ComputePointValues", + "intersect.surface_intersector_p2", + )) +} + +/// `TraceCurve(*start, r3DCurves)`. +fn trace_curve( + _si: &mut SurfaceIntersector<'_>, + _start: TsectId, + _curves_3d: &mut Vec, +) -> Result<()> { + // UNPORTED(intersect.surface_intersector_p4): SmSurfaceIntersector::TraceCurve + Err(SolidError::unported( + "SmSurfaceIntersector::TraceCurve", + "intersect.surface_intersector_p4", + )) +} + +/// `FlushCurve(r3DCurves, rSurface1UVCurves, rSurface2UVCurves, rCurveTypes, +/// rDeviations)`. +fn flush_curve(_si: &mut SurfaceIntersector<'_>, _out: &mut InteriorCurves) -> Result<()> { + // UNPORTED(intersect.surface_intersector_p2): SmSurfaceIntersector::FlushCurve + Err(SolidError::unported( + "SmSurfaceIntersector::FlushCurve", + "intersect.surface_intersector_p2", + )) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::geom::vector2d::Vec2; + use crate::surface::plane::Plane; + + #[derive(Debug, Clone, Copy, PartialEq)] + struct H; + impl SolutionObject for H { + fn kind(&self) -> crate::geom::solution_array::ObjectKind { + crate::geom::solution_array::ObjectKind::Surface + } + } + + fn plane() -> Surface { + Surface::from(Plane::new( + Vec3::new(0.0, 0.0, 0.0), + Vec3::new(1.0, 0.0, 0.0), + Vec3::new(0.0, 1.0, 0.0), + Vec2::new(1.0, 1.0), + &Extent2d::from_bounds(0.0, 0.0, 1.0, 1.0), + )) + } + + fn eval(du: Vec3, dv: Vec3, duu: Vec3, duv: Vec3, dvv: Vec3) -> [[Vec3; 3]; 3] { + let n = du.cross(dv).unitize().unwrap(); + let z = Vec3::new(0.0, 0.0, 0.0); + [[z, dv, dvv], [du, duv, Vec3::UNDEF], [duu, Vec3::UNDEF, n]] + } + + #[test] + fn construct_defaults() { + let s = plane(); + let d = Extent2d::from_bounds(0.0, 0.0, 1.0, 1.0); + let si: AdvSurfaceIntersector<'_, '_, H> = + AdvSurfaceIntersector::new(&s, &d, &s, &d, false).unwrap(); + assert_eq!(si.closest_value(), BIG_DOUBLE); + assert!(si.separate_gauss_maps()); + assert_eq!(si.solver.num_trees, 2); + assert_eq!(si.solver.solution_requested, SolutionRequested::Nodes); + assert!(si.is_kind_of(TYPE)); + assert!(!si.is_kind_of(7)); + } + + #[test] + fn dupin_kinds() { + let s = plane(); + let d = Extent2d::from_bounds(0.0, 0.0, 1.0, 1.0); + let si: AdvSurfaceIntersector<'_, '_, H> = + AdvSurfaceIntersector::new(&s, &d, &s, &d, false).unwrap(); + let x = Vec3::new(1.0, 0.0, 0.0); + let y = Vec3::new(0.0, 1.0, 0.0); + let z = Vec3::new(0.0, 0.0, 1.0); + let zero = Vec3::new(0.0, 0.0, 0.0); + // bowl: one ellipse above + let mut e = eval(x, y, z, zero, z * 2.0); + let dp = si.make_dupin(&mut e, z).unwrap(); + assert_eq!(dp.above.len(), 1); + assert!(dp.below.is_empty()); + // saddle: 2 above, 2 below + let mut e = eval(x, y, z, zero, -z); + let dp = si.make_dupin(&mut e, z).unwrap(); + assert_eq!((dp.above.len(), dp.below.len()), (2, 2)); + // cylinder: two lines + let mut e = eval(x, y, z, zero, zero); + let dp = si.make_dupin(&mut e, -z).unwrap(); + assert_eq!((dp.above.len(), dp.below.len()), (0, 2)); + // plane: nothing + let mut e = eval(x, y, zero, zero, zero); + let dp = si.make_dupin(&mut e, z).unwrap(); + assert!(dp.above.is_empty() && dp.below.is_empty()); + } + + #[test] + fn plane_against_saddle_is_singular() { + let s = plane(); + let d = Extent2d::from_bounds(-1.0, -1.0, 1.0, 1.0); + let mut si: AdvSurfaceIntersector<'_, '_, H> = + AdvSurfaceIntersector::new(&s, &d, &s, &d, false).unwrap(); + let x = Vec3::new(1.0, 0.0, 0.0); + let y = Vec3::new(0.0, 1.0, 0.0); + let z = Vec3::new(0.0, 0.0, 1.0); + let zero = Vec3::new(0.0, 0.0, 0.0); + let mut p = TsectPnt::new(); + p.surface_pv[0] = eval(x, y, zero, zero, zero); + p.surface_pv[1] = eval(x, y, z, zero, -z); + *p.crv_pos_mut() = zero; + *p.uv_pos_mut(SrfIndex::First) = Point2::new(0.0, 0.0); + *p.uv_pos_mut(SrfIndex::Second) = Point2::new(0.0, 0.0); + let id = si.base.alloc_point(p); + si.compute_singularity_point([Point2::new(0.0, 0.0); 2], id, None) + .unwrap(); + let p = si.base.point(id).unwrap(); + assert_eq!(p.point_type, IntersectionPointType::Singularity); + assert!((p.crv_deriv().length() - 1.0).abs() < 1e-12); + } + + #[test] + fn add_sing_dir_dedupes_and_bounds() { + let mut dirs = [Vec3::UNDEF; MAX_SING_DIRS]; + let mut n = 0; + let x = Vec3::new(1.0, 0.0, 0.0); + add_sing_dir(x, &mut n, &mut dirs).unwrap(); + add_sing_dir(x, &mut n, &mut dirs).unwrap(); + assert_eq!(n, 1); + for i in 1..8 { + let a = f64::from(i) * 0.7; + add_sing_dir(Vec3::new(a.cos(), a.sin(), 0.0), &mut n, &mut dirs).unwrap(); + } + assert_eq!(n, 8); + assert!(add_sing_dir(Vec3::new(0.0, 0.0, 1.0), &mut n, &mut dirs).is_err()); + } +} diff --git a/crates/solidcore/src/intersect/surface_intersector/p1.rs b/crates/solidcore/src/intersect/surface_intersector/p1.rs index 43d2fcf53f..aaa0e24dfb 100644 --- a/crates/solidcore/src/intersect/surface_intersector/p1.rs +++ b/crates/solidcore/src/intersect/surface_intersector/p1.rs @@ -1888,7 +1888,7 @@ fn evaluate_1st_derivatives(surface: &Surface, uv: Point2) -> Result<(Point3, Ve /// `crSurface.EvaluateNormal(uv, TRUE, TRUE, ..)`: the plane override; other kinds /// run `SmSurface::EvaluateNormal`. -fn surface_evaluate_normal(surface: &Surface, _uv: Point2) -> Result { +pub(crate) fn surface_evaluate_normal(surface: &Surface, _uv: Point2) -> Result { match surface.kind() { SurfaceKind::Plane(p) => Ok(p.evaluate_normal()), SurfaceKind::BSpline(_) | SurfaceKind::CurveBounded(_) => { @@ -1974,7 +1974,7 @@ fn surface_drop_point( /// `m_cpSurface[0]->LocalSurfaceIntersect(..)`: found flag and the solution's start /// parameters `[u0, v0, u1, v1]`. -fn surface_local_surface_intersect( +pub(crate) fn surface_local_surface_intersect( _surface: &Surface, _domain: &Extent2d, _other: &Surface, diff --git a/crates/solidcore/src/surface/surface/p2.rs b/crates/solidcore/src/surface/surface/p2.rs index 8861311960..d5a3e2f7b8 100644 --- a/crates/solidcore/src/surface/surface/p2.rs +++ b/crates/solidcore/src/surface/surface/p2.rs @@ -160,6 +160,7 @@ use crate::geom::tol::{are_same, eff_zero_param, scaled_zero2, tol3d}; use crate::geom::tree::{AuxDataType, Tree, TreeNode, TreeOwner}; use crate::geom::vector2d::{Point2, Vec2}; use crate::geom::vector3d::{sqrt, Point3, Vec3}; +use crate::intersect::adv_surface_intersector::{AdvSurfaceIntersector, NoSurfaceHandle}; use crate::intersect::surface_intersector::p1::{SrfIndex, TsectPnt}; use crate::kernel::Kernel; use crate::math::{EFF_ZERO, EFF_ZERO_SQ, EFF_ZERO_SQRT, PI, UNDEF_DOUBLE}; @@ -962,21 +963,26 @@ impl Surface { /// /// # Errors /// - /// [`SolidError::Unported`]: `SmAdvSurfaceIntersector` - /// (`intersect.adv_surface_intersector`). + /// Those of the intersector's construction; [`SolidError::Unported`]: + /// `SmSurfaceIntersector::DoIntersection` (`intersect.surface_intersector_p5`). pub fn global_surface_intersect( &self, - _uv_domain: &Extent2d, - _other: &Self, - _other_uv_domain: &Extent2d, - _use_surface_edges: [bool; 2], + uv_domain: &Extent2d, + other: &Self, + other_uv_domain: &Extent2d, + use_surface_edges: [bool; 2], _approx_tol_3d: Option, _ang_tol_rad: Option, ) -> Result { - // UNPORTED(intersect.adv_surface_intersector): SmAdvSurfaceIntersector::SmAdvSurfaceIntersector + let mut ssi: AdvSurfaceIntersector<'_, '_, NoSurfaceHandle> = + AdvSurfaceIntersector::new(self, uv_domain, other, other_uv_domain, false)?; + ssi.base + .set_use_surface_edges(use_surface_edges[0], use_surface_edges[1]); + + // UNPORTED(intersect.surface_intersector_p5): SmSurfaceIntersector::DoIntersection Err(SolidError::unported( - "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", - "intersect.adv_surface_intersector", + "SmSurfaceIntersector::DoIntersection", + "intersect.surface_intersector_p5", )) } @@ -987,14 +993,14 @@ impl Surface { /// # Errors /// /// [`SolidError::InvalidInput`] for point lists of different lengths or of 20 - /// points or more (upstream writes past its arrays); - /// [`SolidError::Unported`]: `SmAdvSurfaceIntersector` - /// (`intersect.adv_surface_intersector`). + /// points or more (upstream writes past its arrays); those of the intersector's + /// construction; [`SolidError::Unported`]: `SmSurfaceIntersector::DoPointIntersection` + /// (`intersect.surface_intersector_p4`). pub fn point_based_surface_intersect( &self, - _uv_domain: &Extent2d, - _other: &Self, - _other_uv_domain: &Extent2d, + uv_domain: &Extent2d, + other: &Self, + other_uv_domain: &Extent2d, surface1_points: &[Point2], surface2_points: &[Point2], _extend: [bool; 2], @@ -1021,10 +1027,14 @@ impl Surface { }) .collect(); - // UNPORTED(intersect.adv_surface_intersector): SmAdvSurfaceIntersector::DoPointIntersection + // allocate the surf/surf intersector + let _ssi: AdvSurfaceIntersector<'_, '_, NoSurfaceHandle> = + AdvSurfaceIntersector::new(self, uv_domain, other, other_uv_domain, false)?; + + // UNPORTED(intersect.surface_intersector_p4): SmSurfaceIntersector::DoPointIntersection Err(SolidError::unported( - "SmAdvSurfaceIntersector::DoPointIntersection", - "intersect.adv_surface_intersector", + "SmSurfaceIntersector::DoPointIntersection", + "intersect.surface_intersector_p4", )) } diff --git a/harness/cpp/shim/intersect_adv_surface_intersector.cpp b/harness/cpp/shim/intersect_adv_surface_intersector.cpp new file mode 100644 index 0000000000..8d902a2298 --- /dev/null +++ b/harness/cpp/shim/intersect_adv_surface_intersector.cpp @@ -0,0 +1,851 @@ +// SPDX-License-Identifier: Apache-2.0 +// difftest shim for unit `intersect.adv_surface_intersector`: the SmAdvSurfaceIntersector +// members (source/SMLib/src/SmAdvSurfaceIntersector.cpp, source/SMLib/inc/SmAdvSurfaceIntersector.h) +// run on a real SmAdvSurfaceIntersector over SmPlane / SmBSplineSurface objects. A derived class +// reaches the protected state; the private state (m_dClosestValue, m_sUVS, m_apNodes, +// m_bSeperateGaussMaps) is read through member pointers obtained by explicit template +// instantiation. The decomposition trees are built by hand in SmSurfaceCache objects of the +// two surfaces (the tree construction belongs to unit surface.surface_cache_p3); the solver +// trees m_apTrees are set to them, as SmSurfaceIntersector::Intersect does. +// +// One entry point, sc_intersect_adv_surface_intersector_run(in, n_in, out, cap, out_len). `in` +// is a program (layout in crates/solidcore-ffi/src/units/intersect_adv_surface_intersector.rs); +// every read is bounds checked here (a bad program is SC_ERR_ARG). Inputs upstream would crash +// on are not run: a tree whose leaves are not Bezier patches, a patch or head node without a +// polar box, a LocalSolve on a node that is not a patch, a point linked twice, and a +// ComputeSingularityPoint that would find more than 8 singular directions (upstream writes +// past aSingDirections[8]; the count is predicted by `sing_overflow` below, which repeats the +// upstream steps up to that point). +#include "sc_shim.h" + +#include "StdAfx.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace +{ +// Ops (keep in sync with crates/solidcore-ffi/src/units/intersect_adv_surface_intersector.rs). +enum : int32_t +{ + OP_STATE = 1, + OP_SET = 2, + OP_PUSH = 3, + OP_SING = 4, + OP_DUPIN = 5, + OP_SOLVE = 6, + OP_BEST_SUB = 7, + OP_GAUSS = 8, + OP_LOCAL = 9, + OP_INTERIOR = 10, + OP_SOLVE_BRANCH = 11, + OP_LAST = 11, +}; + +// Op status of an op the shim does not run (upstream would crash). +const double REJECTED = -2.0; + +struct Bad : std::runtime_error +{ + Bad() : std::runtime_error("bad program") {} +}; + +// ---- private member access (explicit instantiation may name private members) ---------- +template +struct Rob +{ + friend typename Tag::type get(Tag) { return M; } +}; +struct TagClosest +{ + typedef double SmAdvSurfaceIntersector::*type; + friend type get(TagClosest); +}; +struct TagUVS +{ + typedef SmPoint2d (SmAdvSurfaceIntersector::*type)[2]; + friend type get(TagUVS); +}; +struct TagNodes +{ + typedef SmTreeNode* (SmAdvSurfaceIntersector::*type)[2]; + friend type get(TagNodes); +}; +struct TagSep +{ + typedef SmBoolean SmAdvSurfaceIntersector::*type; + friend type get(TagSep); +}; +template struct Rob; +template struct Rob; +template struct Rob; +template struct Rob; +struct TagCType +{ + typedef SmConicType SmConic::*type; + friend type get(TagCType); +}; +struct TagCA +{ + typedef double SmConic::*type; + friend type get(TagCA); +}; +struct TagCB +{ + typedef double SmConic::*type; + friend type get(TagCB); +}; +struct TagCOrigin +{ + typedef SmPoint2d SmConic::*type; + friend type get(TagCOrigin); +}; +struct TagCTheta +{ + typedef double SmConic::*type; + friend type get(TagCTheta); +}; +template struct Rob; +template struct Rob; +template struct Rob; +template struct Rob; +template struct Rob; + +struct Rd +{ + const double* in; + int64_t n; + int64_t at; + double num() + { + if (at >= n) + throw Bad(); + return in[at++]; + } + int64_t idx(int64_t lo, int64_t hi) + { + double d = num(); + if (!(d >= (double)lo && d <= (double)hi) || d != (double)(int64_t)d) + throw Bad(); + return (int64_t)d; + } + bool flag() { return idx(0, 1) != 0; } + SmVector3d vec() + { + double x = num(); + double y = num(); + double z = num(); + return SmVector3d(x, y, z); + } + SmPoint2d uv() + { + double x = num(); + double y = num(); + return SmPoint2d(x, y); + } + SmExtent2d dom4() + { + double a = num(); + double b = num(); + double c = num(); + double d = num(); + return SmExtent2d(a, b, c, d); + } +}; + +double st(SmStatus s) +{ + return s == SM_SUCCESS ? 0.0 : (double)s; +} + +double flg(SmBoolean b) +{ + return b ? 1.0 : 0.0; +} + +void put_vec(std::vector& o, const SmVector3d& v) +{ + o.push_back(v.x); + o.push_back(v.y); + o.push_back(v.z); +} + +void put_uv(std::vector& o, const SmVector2d& v) +{ + o.push_back(v.x); + o.push_back(v.y); +} + +// `0 o x y scale dom` (SmPlane) or `1 p q nu nv net(x y z w) u v` (SmBSplineSurface). +SmSurface* read_surface(Rd& rd, const SmContext& ctx) +{ + int64_t kind = rd.idx(0, 1); + if (kind == 0) + { + SmPoint3d o = rd.vec(); + SmVector3d x = rd.vec(); + SmVector3d y = rd.vec(); + SmVector2d s = rd.uv(); + SmExtent2d d = rd.dom4(); + return new (ctx) SmPlane(o, x, y, s, d, &ctx); + } + gw_DEGREE p = (gw_DEGREE)rd.idx(1, 8); + gw_DEGREE q = (gw_DEGREE)rd.idx(1, 8); + gw_INDEX nu = (gw_INDEX)rd.idx(2, 17); + gw_INDEX nv = (gw_INDEX)rd.idx(2, 17); + if (p >= nu || q >= nv) + throw Bad(); + gw_INDEX n = nu - 1; + gw_INDEX m = nv - 1; + gw_INDEX r = n + p + 1; + gw_INDEX s = m + q + 1; + std::vector v; + for (int64_t i = 0; i < 4 * (int64_t)nu * nv + r + 1 + s + 1; i++) + v.push_back(rd.num()); + gw_SURFACE* sur = sm_AllocateNurbSurface(n, m, p, q, r, s); + size_t k = 0; + for (gw_INDEX i = 0; i <= n; i++) + for (gw_INDEX j = 0; j <= m; j++) + { + sur->net->Pw[i][j].x = v[k++]; + sur->net->Pw[i][j].y = v[k++]; + sur->net->Pw[i][j].z = v[k++]; + sur->net->Pw[i][j].w = v[k++]; + } + for (gw_INDEX i = 0; i <= r; i++) + sur->knu->U[i] = v[k++]; + for (gw_INDEX i = 0; i <= s; i++) + sur->knv->U[i] = v[k++]; + return new (ctx) SmBSplineSurface(sur, FALSE, &ctx); +} + +// A point: `type ptype[4] uv0 duv0 uv1 duv1 srf0[3][3] srf1[3][3] crv_pos crv_deriv param +// angle deviation user[4]` (80 values). +void read_point(Rd& rd, SmTsectPnt& t) +{ + t.m_ePointType = (SmIntersectionPointType)rd.idx(0, 7); + for (int s = 0; s < 2; s++) + for (int d = 0; d < 2; d++) + t.m_eUVParamType[s][d] = (SmExtentPointType)rd.idx(0, 5); + for (int s = 0; s < 2; s++) + for (int d = 0; d < 2; d++) + t.m_vUVCurvePV[s][d] = rd.uv(); + for (int s = 0; s < 2; s++) + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + t.m_vSurfacePV[s][i][j] = rd.vec(); + t.m_v3DCurvePV[0] = rd.vec(); + t.m_v3DCurvePV[1] = rd.vec(); + t.m_dCurveParameter = rd.num(); + t.m_dTangentPlaneAngleRad = rd.num(); + t.m_dDeviation = rd.num(); + for (int i = 0; i < SM_MAX_USER_DOUBLES; i++) + t.m_adUserDoubles[i] = rd.num(); +} + +void put_point(std::vector& o, const SmTsectPnt& t) +{ + o.push_back((double)t.m_ePointType); + for (int s = 0; s < 2; s++) + for (int d = 0; d < 2; d++) + o.push_back((double)t.m_eUVParamType[s][d]); + for (int s = 0; s < 2; s++) + for (int d = 0; d < 2; d++) + put_uv(o, t.m_vUVCurvePV[s][d]); + for (int s = 0; s < 2; s++) + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + put_vec(o, t.m_vSurfacePV[s][i][j]); + put_vec(o, t.m_v3DCurvePV[0]); + put_vec(o, t.m_v3DCurvePV[1]); + o.push_back(t.m_dCurveParameter); + o.push_back(t.m_dTangentPlaneAngleRad); + o.push_back(t.m_dDeviation); + for (int i = 0; i < SM_MAX_USER_DOUBLES; i++) + o.push_back(t.m_adUserDoubles[i]); +} + +void put_conic(std::vector& o, const SmConic& c) +{ + o.push_back((double)(c.*get(TagCType()))); + o.push_back(c.*get(TagCA())); + o.push_back(c.*get(TagCB())); + put_uv(o, c.*get(TagCOrigin())); + o.push_back(c.*get(TagCTheta())); +} + +// ---- hand-built decomposition trees ---------------------------------------------------- + +struct TreePeek : SmTree +{ + explicit TreePeek(SmObject* owner) : SmTree(owner) {} + SmMemBlockMgr& node_mgr() { return m_sNodeMgr; } + SmTreeNode*& top() { return m_pTopNode; } +}; + +struct CachePeek : SmSurfaceCache +{ + CachePeek(const SmSurface& s, const SmExtent2d& d) : SmSurfaceCache(s, d) {} + SmTree*& tree() { return m_pTree; } + SmMemBlockMgr& bez() { return m_sBezMgr; } + SmMemBlockMgr& aux() { return m_sAuxMgr; } +}; + +// Tree: `n` then per node `parent c1 c2 aux bbox[6] dom[4] npolar polar_vecs[3 npolar]` and, +// for aux 3 (SM_AD_BEZIER_SURFACE), `pseudo_basis[9] pseudo_intervals[6]`. Node 0 is the top +// (parent -1); children are both -1 or two distinct later nodes whose parent is the node; aux is +// 3, 4 (SM_AD_BEZIER_SURFACE_HEAD) or 6 (SM_AD_AUX_DATA); leaves are patches; patches and heads +// have at least one polar box vector. +struct Tree +{ + CachePeek* cache = nullptr; + std::vector nodes; + SmTreeNode* node(int64_t i) const { return nodes[(size_t)i]; } + int64_t index_of(const SmTreeNode* p) const + { + if (p == nullptr) + return -1; + for (size_t i = 0; i < nodes.size(); i++) + if (nodes[i] == p) + return (int64_t)i; + return -2; + } +}; + +void read_tree(Rd& rd, Tree& t, const SmSurface* s, const SmContext& ctx) +{ + int64_t n = rd.idx(1, 64); + CachePeek* cache = new (ctx) CachePeek(*s, s->GetNaturalUVDomain()); + t.cache = cache; + TreePeek* tree = new (ctx) TreePeek(cache); + tree->node_mgr().Initialize(ALIGN_SIZE(sizeof(SmTreeNode)), 25); + cache->bez().Initialize(ALIGN_SIZE(sizeof(SmBezierPatch)), 25); + cache->aux().Initialize(ALIGN_SIZE(sizeof(SmBezierAux2d)), 25); + cache->tree() = tree; + for (int64_t k = 0; k < n; k++) + t.nodes.push_back((SmTreeNode*)tree->node_mgr().GetNewElement()); + std::vector par((size_t)n), c1((size_t)n), c2((size_t)n); + for (int64_t k = 0; k < n; k++) + { + SmTreeNode* nd = t.node(k); + par[(size_t)k] = rd.idx(-1, n - 1); + c1[(size_t)k] = rd.idx(-1, n - 1); + c2[(size_t)k] = rd.idx(-1, n - 1); + int64_t aux = rd.idx(3, 6); + if (aux == 5) + throw Bad(); + nd->m_pTree = tree; + nd->m_pParent = par[(size_t)k] < 0 ? nullptr : t.node(par[(size_t)k]); + nd->m_pChild1 = c1[(size_t)k] < 0 ? nullptr : t.node(c1[(size_t)k]); + nd->m_pChild2 = c2[(size_t)k] < 0 ? nullptr : t.node(c2[(size_t)k]); + nd->m_eAuxDataType = (SmAuxDataType)aux; + nd->m_eGeomType = SM_NG_DEFAULT; + SmVector3d lo = rd.vec(); + SmVector3d hi = rd.vec(); + nd->m_sBBox = SmExtent3d(lo, hi); + SmBezierAux2d* a = aux == 3 ? (SmBezierAux2d*)cache->bez().GetNewElement() + : (SmBezierAux2d*)cache->aux().GetNewElement(); + a->m_sUVDomain = rd.dom4(); + a->mBA_pSurface = s; + a->m_pOwningTreeNode = nd; + int64_t npolar = rd.idx(0, 8); + if (npolar == 0 && aux != 6) + throw Bad(); + // (GetPolarBox() would build the box from the surface: add to the stored one) + SmPolarBox* pb = const_cast(a->GetPolarBoxPtr()); + for (int64_t i = 0; i < npolar; i++) + pb->AddVector3d(rd.vec(), NULL); + if (aux == 3) + { + SmBezierPatch* p = (SmBezierPatch*)a; + SmVector3d b0 = rd.vec(); + SmVector3d b1 = rd.vec(); + SmVector3d b2 = rd.vec(); + double i0 = rd.num(), i1 = rd.num(), i2 = rd.num(), i3 = rd.num(), i4 = rd.num(), i5 = rd.num(); + if (p->GetPseudoBox().SetBasis(b0, b1, b2) != SM_SUCCESS) + throw Bad(); + p->GetPseudoBox().SetIntervals(SmExtent1d(i0, i1), SmExtent1d(i2, i3), SmExtent1d(i4, i5)); + } + nd->m_pData = a; + } + // shape checks + for (int64_t k = 0; k < n; k++) + { + int64_t p = par[(size_t)k], a = c1[(size_t)k], b = c2[(size_t)k]; + if ((k == 0) != (p < 0)) + throw Bad(); + if (p >= 0 && !(p < k && (c1[(size_t)p] == k || c2[(size_t)p] == k))) + throw Bad(); + if ((a < 0) != (b < 0)) + throw Bad(); + if (a >= 0 && !(a > k && b > k && a != b && par[(size_t)a] == k && par[(size_t)b] == k)) + throw Bad(); + if (a < 0 && t.node(k)->m_eAuxDataType != SM_AD_BEZIER_SURFACE) + throw Bad(); + } + tree->top() = t.node(0); +} + +// The intersector with its protected state reachable. +struct Peek : SmAdvSurfaceIntersector +{ + Peek(const SmSurface& a, const SmExtent2d& da, const SmSurface& b, const SmExtent2d& db, SmBoolean f) + : SmAdvSurfaceIntersector(a, da, b, db, f) + { + } + void set_trees(SmTree* t0, SmTree* t1) + { + m_apTrees[0] = t0; + m_apTrees[1] = t1; + } + SmTList& curve_points() { return m_vCurvePoints; } + const SmExtent2d& domain(int i) const { return m_vUVDomain[i]; } + double trace_dir() const { return m_dCurveTraceDirection; } + void set(double dir, double ang, double approx, double tol, int64_t op) + { + m_dCurveTraceDirection = dir; + m_dThisAngTolRad = ang; + m_dThisApproxTol3d = approx; + m_d3dTolerance = tol; + m_eSolverOperation = (SmSolverOperationType)op; + } + double ang_tol() const { return m_dThisAngTolRad; } + double approx_tol() const { return m_dThisApproxTol3d; } + double tol3d() const { return m_d3dTolerance; } + int64_t op() const { return (int64_t)m_eSolverOperation; } + SmTsectPnt* last_node() const { return m_vCurvePoints.GetLastNode(); } + SmBoolean self_isect() const { return m_bDoingSelfIntersection; } +}; + +// True when ComputeSingularityPoint(t, prev) would add a 9th singular direction. Repeats the +// upstream steps that lead there (non-planar points, no early return, every status checked) +// on copies; any other outcome is false. +bool sing_overflow(const Peek& si, const SmTsectPnt& t0) +{ + SmTsectPnt t = t0; + SmLocalSurfaceType e1 = smsurf_ComputeSurfacePointType(t.SrfNorm(0), t.SrfDuu(0), t.SrfDvv(0)); + SmLocalSurfaceType e2 = smsurf_ComputeSurfacePointType(t.SrfNorm(1), t.SrfDuu(1), t.SrfDvv(1)); + if (e1 == SM_LS_PLANAR || e2 == SM_LS_PLANAR) + return false; + SmTsectPnt& c = t; + SmTArray a1, b1, a2, b2; + SmObjsDelete d1(&a1), d2(&b1), d3(&a2), d4(&b2); + double k1 = 0, k2 = 0, k1_2 = 0, k2_2 = 0; + SmVector3d v1, v2, v1_2, v2_2, efg, lmn; + if (si.MakeDupin(c.m_vSurfacePV[0], c.SrfNorm(0), a1, b1, v1, v2, k1, k2, efg, lmn) != SM_SUCCESS) + return false; + if (si.MakeDupin(c.m_vSurfacePV[1], c.SrfNorm(0), a2, b2, v1_2, v2_2, k1_2, k2_2, efg, lmn) != SM_SUCCESS) + return false; + const double Z = SM_EFF_ZERO_SQRT; + if (smos_Fabs(k1 - k2) < SM_EFF_ZERO * (1.0 + smos_Fabs(k1))) + { + if (smos_Fabs(k1 - k1_2) < Z || smos_Fabs(k2 - k2_2) < Z) + return false; + } + if (smos_Fabs(k1_2 - k2_2) < SM_EFF_ZERO * (1.0 + smos_Fabs(k1_2))) + { + if (smos_Fabs(k1 - k1_2) < Z || smos_Fabs(k2 - k2_2) < Z) + return false; + } + if ((v1 * v1_2).Length() < Z * 100.0) + { + if (smos_Fabs(k1 - k1_2) < Z || smos_Fabs(k2 - k2_2) < Z) + return false; + } + if ((v1 * v2_2).Length() < Z * 100.0) + { + if (smos_Fabs(k1 - k2_2) < Z || smos_Fabs(k2 - k1_2) < Z) + return false; + } + double ang = 0.0; + if (c.SrfNorm(0).CCWAngleBetween(v1, v1_2, ang) != SM_SUCCESS) + return false; + for (ULONG i = 0; i < a2.GetSize(); i++) + if (a2[i]->Transform2D(ang, SmPoint2d(0, 0)) != SM_SUCCESS) + return false; + for (ULONG i = 0; i < b2.GetSize(); i++) + if (b2[i]->Transform2D(ang, SmPoint2d(0, 0)) != SM_SUCCESS) + return false; + std::vector dirs; + SmSolutionArray sols; + for (int side = 0; side < 2; side++) + { + SmTArray& c1 = side == 0 ? a1 : b1; + SmTArray& c2 = side == 0 ? a2 : b2; + for (ULONG i = 0; i < c1.GetSize(); i++) + for (ULONG j = 0; j < c2.GetSize(); j++) + { + if (c1[i]->IntersectConic(c1[i]->GetNaturalInterval(), *c2[j], c2[j]->GetNaturalInterval(), + Z * 100.0, sols) != SM_SUCCESS) + return false; + for (ULONG k = 0; k < sols.GetSize(); k++) + { + SmPoint3d p; + if (c1[i]->EvaluatePoint(sols[k].m_vStart[0], p) != SM_SUCCESS) + return false; + if (p.Unitize() != SM_SUCCESS) + return false; + SmVector3d d = p.x * v1 + p.y * v2; + if (d.Unitize() != SM_SUCCESS) + return false; + bool found = false; + for (const SmVector3d& e : dirs) + if (e.Dot(d) > 0.9) + { + found = true; + break; + } + if (!found) + { + if (dirs.size() >= 8) + return true; + dirs.push_back(d); + } + } + } + } + return false; +} + +struct Prog +{ + std::vector pts; + Tree trees[2]; + bool has_trees = false; + bool same = false; + SmSolutionArray sols; // the solution array of OP_LOCAL / OP_SOLVE_BRANCH + ~Prog() + { + for (SmTsectPnt* p : pts) + delete p; + delete trees[0].cache; + if (!same) + delete trees[1].cache; + } + SmTsectPnt* pt(Rd& rd) + { + int64_t i = rd.idx(0, (int64_t)pts.size() - 1); + return pts[(size_t)i]; + } + static bool linked(const SmTsectPnt* p) { return p->m_pNext != NULL || p->m_pPrev != NULL; } + const Tree& tree(int i) const { return trees[i]; } +}; + +void put_solutions(std::vector& o, const Prog& pr, SmSolutionArray& a) +{ + o.push_back((double)a.GetSize()); + for (ULONG i = 0; i < a.GetSize(); i++) + { + SmSolution& s = a[i]; + o.push_back((double)s.m_eSolutionType); + o.push_back((double)s.m_lNumVariables); + o.push_back(s.m_vStart.m_dSolutionValue); + for (int k = 0; k < SM_SA_MAX_TREES * 2; k++) + o.push_back(s.m_vStart[k]); + o.push_back(s.m_vEnd.m_dSolutionValue); + for (int k = 0; k < SM_SA_MAX_TREES * 2; k++) + o.push_back(s.m_vEnd[k]); + o.push_back((double)pr.tree(0).index_of(s.m_apNodes[0])); + o.push_back((double)pr.tree(1).index_of(s.m_apNodes[1])); + } +} + +void put_state(std::vector& o, const Prog& pr, Peek& si) +{ + o.push_back(si.*get(TagClosest())); + put_uv(o, (si.*get(TagUVS()))[0]); + put_uv(o, (si.*get(TagUVS()))[1]); + o.push_back((double)pr.tree(0).index_of((si.*get(TagNodes()))[0])); + o.push_back((double)pr.tree(1).index_of((si.*get(TagNodes()))[1])); + o.push_back(flg(si.*get(TagSep()))); + o.push_back(si.trace_dir()); + o.push_back(si.ang_tol()); + o.push_back(si.approx_tol()); + o.push_back(si.tol3d()); + o.push_back((double)si.op()); + SmTArray pts; + si.curve_points().GetAllNodes(pts); + o.push_back((double)pts.GetSize()); +} + +void read_branch(Rd& rd, const Prog& pr, SmTreeNode* b[SM_GS_MAX_TREES]) +{ + if (!pr.has_trees) + throw Bad(); + b[0] = pr.tree(0).node(rd.idx(0, (int64_t)pr.tree(0).nodes.size() - 1)); + b[1] = pr.tree(1).node(rd.idx(0, (int64_t)pr.tree(1).nodes.size() - 1)); + b[2] = nullptr; +} + +void run_op(int32_t op, Rd& rd, Prog& pr, Peek& si, std::vector& o) +{ + switch (op) + { + case OP_STATE: + o.push_back(0.0); + put_state(o, pr, si); + return; + case OP_SET: + { + double dir = rd.num(); + double ang = rd.num(); + double approx = rd.num(); + double tol = rd.num(); + int64_t sop = rd.idx(0, 3); + if (sop == 1) + throw Bad(); + si.set(dir, ang, approx, tol, sop); + o.push_back(0.0); + return; + } + case OP_PUSH: + { + SmTsectPnt* p = pr.pt(rd); + if (Prog::linked(p)) + { + o.push_back(REJECTED); + return; + } + o.push_back(st(si.AddPointToCurve(*p))); + return; + } + case OP_SING: + { + SmTsectPnt* p = pr.pt(rd); + bool has_prev = rd.flag(); + SmTsectPnt* prev = pr.pt(rd); + if (sing_overflow(si, *p)) + { + o.push_back(REJECTED); + return; + } + SmPoint2d uvs[2]; + uvs[0] = p->UVPos(0); + uvs[1] = p->UVPos(1); + o.push_back(st(si.ComputeSingularityPoint(uvs, *p, has_prev ? prev : NULL))); + put_point(o, *p); + return; + } + case OP_DUPIN: + { + SmVector3d m[3][3]; + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + m[i][j] = rd.vec(); + SmVector3d nrm = rd.vec(); + SmTArray above, below; + SmObjsDelete d1(&above), d2(&below); + SmVector3d v1, v2, efg, lmn; + double k1 = 0.0, k2 = 0.0; + SmStatus s = si.MakeDupin(m, nrm, above, below, v1, v2, k1, k2, efg, lmn); + o.push_back(st(s)); + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + put_vec(o, m[i][j]); + if (s != SM_SUCCESS) + return; + put_vec(o, v1); + put_vec(o, v2); + o.push_back(k1); + o.push_back(k2); + put_vec(o, efg); + put_vec(o, lmn); + o.push_back((double)above.GetSize()); + for (ULONG i = 0; i < above.GetSize(); i++) + put_conic(o, *above[i]); + o.push_back((double)below.GetSize()); + for (ULONG i = 0; i < below.GetSize(); i++) + put_conic(o, *below[i]); + return; + } + case OP_SOLVE: + { + if (!pr.has_trees) + throw Bad(); + int64_t sop = rd.idx(0, 3); + if (sop == 1) + throw Bad(); + int64_t req = rd.idx(0, 3); + double tol = rd.num(); + double best = rd.num(); + SmSolutionArray a; + SmStatus s = si.SolveIt((SmSolverOperationType)sop, (SmSolutionRequestedType)req, tol, best, NULL, a); + o.push_back(st(s)); + put_solutions(o, pr, a); + return; + } + case OP_BEST_SUB: + { + SmTreeNode* b[SM_GS_MAX_TREES]; + read_branch(rd, pr, b); + ULONG idx = 99; + SmBoolean swap = FALSE; + SmStatus s = si.FindBestSubdivisionNode(b, idx, swap); + o.push_back(st(s)); + o.push_back((double)idx); + o.push_back(flg(swap)); + return; + } + case OP_GAUSS: + { + SmTreeNode* b[SM_GS_MAX_TREES]; + read_branch(rd, pr, b); + SmBoolean sep = FALSE; + SmStatus s = si.BranchIsGaussSeparate(b, sep); + o.push_back(st(s)); + o.push_back(flg(sep)); + return; + } + case OP_LOCAL: + { + SmTreeNode* b[SM_GS_MAX_TREES]; + read_branch(rd, pr, b); + if (b[0]->m_eAuxDataType != SM_AD_BEZIER_SURFACE || b[1]->m_eAuxDataType != SM_AD_BEZIER_SURFACE) + { + o.push_back(REJECTED); + return; + } + si.SetSolutions(&pr.sols); + SmBoolean more = TRUE; + SmStatus s = si.LocalSolve(b, more); + si.SetSolutions(NULL); + o.push_back(st(s)); + o.push_back(flg(more)); + put_solutions(o, pr, pr.sols); + put_state(o, pr, si); + return; + } + case OP_INTERIOR: + { + if (!pr.has_trees) + throw Bad(); + SmTArray c3, u1, u2; + SmTArray types; + SmTArray devs; + SmStatus s = si.FindInteriorCurves(c3, u1, u2, types, devs); + o.push_back(st(s)); + o.push_back((double)c3.GetSize()); + for (ULONG i = 0; i < c3.GetSize(); i++) + delete c3[i]; + for (ULONG i = 0; i < u1.GetSize(); i++) + delete u1[i]; + for (ULONG i = 0; i < u2.GetSize(); i++) + delete u2[i]; + put_state(o, pr, si); + return; + } + case OP_SOLVE_BRANCH: + { + SmTreeNode* b[SM_GS_MAX_TREES]; + read_branch(rd, pr, b); + si.SetSolutions(&pr.sols); + SmStatus s = si.SolveBranch(b); + si.SetSolutions(NULL); + o.push_back(st(s)); + put_solutions(o, pr, pr.sols); + put_state(o, pr, si); + return; + } + default: + throw Bad(); + } +} +} // namespace + +// Program: `surfA surfB` (surfB `2` = the same object as A), `dom1[4] dom2[4] fillet`, `trees` +// (0, or 1 then tree A and, unless B is A, tree B), `npoints points`, `nops ops`. Output: per op +// `op status [values]`, then the final state. +SC_EXPORT int32_t sc_intersect_adv_surface_intersector_run(const double* in, int64_t n_in, double* out, + int64_t cap, int64_t* out_len) +{ + if (in == NULL || n_in < 2) + return SC_ERR_ARG; + try + { + SmContext ctx; + std::vector o; + Rd rd{in, n_in, 0}; + SmSurface* a = read_surface(rd, ctx); + SmSurface* b = NULL; + bool same = false; + if (rd.at < rd.n && rd.in[rd.at] == 2.0) + { + rd.at++; + same = true; + b = a; + } + else + b = read_surface(rd, ctx); + SmExtent2d d1 = rd.dom4(); + SmExtent2d d2 = rd.dom4(); + bool fillet = rd.flag(); + { + Prog pr; + pr.same = same; + if (rd.flag()) + { + pr.has_trees = true; + read_tree(rd, pr.trees[0], a, ctx); + if (same) + pr.trees[1] = pr.trees[0]; + else + read_tree(rd, pr.trees[1], b, ctx); + } + int64_t np = rd.idx(0, 64); + for (int64_t i = 0; i < np; i++) + { + SmTsectPnt* t = new SmTsectPnt(); + pr.pts.push_back(t); + read_point(rd, *t); + } + int64_t nops = rd.idx(0, 64); + { + Peek si(*a, d1, *b, d2, fillet ? TRUE : FALSE); + if (pr.has_trees) + si.set_trees(pr.trees[0].cache->tree(), pr.trees[1].cache->tree()); + for (int64_t i = 0; i < nops; i++) + { + int32_t op = (int32_t)rd.idx(1, OP_LAST); + o.push_back((double)op); + run_op(op, rd, pr, si, o); + } + put_state(o, pr, si); + // unlink every point before the lists go away + for (SmTsectPnt* t : pr.pts) + t->ReSet(); + } + } + if (!same) + delete b; + delete a; + return sc_copy_out(o.data(), (int64_t)o.size(), out, cap, out_len); + } + catch (const Bad&) + { + return SC_ERR_ARG; + } + catch (...) + { + return SC_ERR_EXCEPTION; + } +} diff --git a/plan/upstream-issues.md b/plan/upstream-issues.md index d06e99a69d..f5fe53ffa4 100644 --- a/plan/upstream-issues.md +++ b/plan/upstream-issues.md @@ -750,6 +750,15 @@ by area within each severity. - **Severity:** crash/UB. - **Rust port:** `Surface::point_based_surface_intersect` returns `InvalidInput` for those inputs. +#### UB-75. `ComputeSingularityPoint` can write past `aSingDirections[8]` +- **Location:** `source/SMLib/src/SmAdvSurfaceIntersector.cpp:164` (`SmVector3d aSingDirections[8]`), filled by `sm_AddSingDir` (`:54`) from the Dupin indicatrix intersections at `:616`-`:685`; `aSingUVSurf1/2[8]` and `lInsideIndex[8]` at `:775`-`:776`. +- **What happens:** Every intersection of the above (and below) indicatrix curves of the two surfaces adds a direction unless one within `acos(0.9)` (about 26 degrees) is stored already. Up to 13 directions pass that test, but the array holds 8 and `sm_AddSingDir` does not check the count (upstream's own comment: "we have experienced examples with 8 vectors"). Saddle points generate four hyperbolas per surface, two of which are different conics (see WR-54), so the count is not bounded by the 4 + 4 of two central conics. +- **Trigger:** Two non-planar surface points with parallel normals, no shared principal curvature, whose indicatrices meet in more than 8 directions more than 26 degrees apart. +- **How found:** read during porting. +- **Confirmed:** no (the difftest shim predicts the count and does not run such inputs; no generated case reached it). +- **Severity:** crash/UB. +- **Rust port:** the array keeps 8 slots; a ninth direction is `InvalidInput`. + ## Hang #### HANG-1. `SmExtent1d::PeriodicWrap` steps one period per iteration @@ -1377,6 +1386,24 @@ by area within each severity. - **Severity:** wrong result (unit mix-up). - **Rust port:** Faithful. +#### WR-54. `MakeDupin`'s bottom hyperbola uses `k2` for both axes +- **Location:** `source/SMLib/src/SmAdvSurfaceIntersector.cpp:1120`-`1122` `SmAdvSurfaceIntersector::MakeDupin`. +- **What happens:** The four hyperbolas of a saddle point should be one indicatrix branch pair `(1/sqrt|k1|, 1/sqrt|k2|)` and its conjugate pair `(1/sqrt|k2|, 1/sqrt|k1|)`. The top hyperbola uses the latter, the bottom one `(1/sqrt|k2|, 1/sqrt|k2|)`, so the bottom curve is a different conic and the singular directions found from it are wrong unless `|k1| == |k2|`. +- **Trigger:** `MakeDupin` (or `ComputeSingularityPoint`) at a hyperbolic point with `|k1| != |k2|`. +- **How found:** read during porting. +- **Confirmed:** yes (`intersect.adv_surface_intersector` difftest: generated `dupin` ops and `edge_dupin_kinds` compare the conics). +- **Severity:** wrong result. +- **Rust port:** Faithful. + +#### WR-55. `SmAdvSurfaceIntersector::SolveBranch` never tests Gauss map separation +- **Location:** `source/SMLib/src/SmAdvSurfaceIntersector.cpp:1383` and `:1401` `SmAdvSurfaceIntersector::SolveBranch`. +- **What happens:** The method sets `m_bSeperateGaussMaps = TRUE` on entry and then calls `BranchIsGaussSeparate` only `if (!m_bSeperateGaussMaps)`, so the polar box test and the whole "separable" branch (one start point per separable sub-tree pair, the documented purpose of the class) are dead code: every intersecting leaf pair gives its own candidate. +- **Trigger:** Any `SolveIt(SM_SO_INTERSECT, ..)` on an `SmAdvSurfaceIntersector`. +- **How found:** read during porting. +- **Confirmed:** yes (`intersect.adv_surface_intersector` difftest: `solve` and `solve_branch` ops agree on one solution per intersecting leaf pair). +- **Severity:** wrong result (performance and duplicate start points). +- **Rust port:** Faithful. + ## Docs #### DOC-1. `NL_LEFT` / `NL_RIGHT` documentation is swapped diff --git a/reports/difftest/intersect.adv_surface_intersector.json b/reports/difftest/intersect.adv_surface_intersector.json new file mode 100644 index 0000000000..ca2a98319c --- /dev/null +++ b/reports/difftest/intersect.adv_surface_intersector.json @@ -0,0 +1,12300 @@ +{ + "abs_floors": [], + "cases": [ + { + "max_rel_err": 0.0, + "name": "gen0000", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951802", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0001", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951803", + "values_compared": 69 + }, + { + "max_rel_err": 0.0, + "name": "gen0002", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951804", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0003", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951805", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0004", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951806", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "gen0005", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951807", + "values_compared": 84 + }, + { + "max_rel_err": 0.0, + "name": "gen0006", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951808", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0007", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951809", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0008", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951810", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0009", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951811", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0010", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951812", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0011", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951813", + "values_compared": 200 + }, + { + "max_rel_err": 0.0, + "name": "gen0012", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951814", + "values_compared": 174 + }, + { + "max_rel_err": 0.0, + "name": "gen0013", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951815", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0014", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951816", + "values_compared": 117 + }, + { + "max_rel_err": 0.0, + "name": "gen0015", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951817", + "values_compared": 60 + }, + { + "max_rel_err": 0.0, + "name": "gen0016", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951818", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0017", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951819", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0018", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951820", + "values_compared": 172 + }, + { + "max_rel_err": 0.0, + "name": "gen0019", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951821", + "values_compared": 332 + }, + { + "max_rel_err": 0.0, + "name": "gen0020", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951822", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0021", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951823", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0022", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951824", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0023", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951825", + "values_compared": 38 + }, + { + "max_rel_err": 0.0, + "name": "gen0024", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951826", + "values_compared": 73 + }, + { + "max_rel_err": 0.0, + "name": "gen0025", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951827", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0026", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951828", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0027", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951829", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0028", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951830", + "values_compared": 744 + }, + { + "max_rel_err": 0.0, + "name": "gen0029", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951831", + "values_compared": 123 + }, + { + "max_rel_err": 0.0, + "name": "gen0030", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951832", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen0031", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951833", + "values_compared": 57 + }, + { + "max_rel_err": 0.0, + "name": "gen0032", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951834", + "values_compared": 79 + }, + { + "max_rel_err": 0.0, + "name": "gen0033", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951835", + "values_compared": 66 + }, + { + "max_rel_err": 0.0, + "name": "gen0034", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951836", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0035", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951837", + "values_compared": 203 + }, + { + "max_rel_err": 0.0, + "name": "gen0036", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951838", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0037", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951839", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0038", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951840", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0039", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951841", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0040", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951842", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0041", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951843", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen0042", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951844", + "values_compared": 87 + }, + { + "max_rel_err": 0.0, + "name": "gen0043", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951845", + "values_compared": 37 + }, + { + "max_rel_err": 0.0, + "name": "gen0044", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951846", + "values_compared": 94 + }, + { + "max_rel_err": 0.0, + "name": "gen0045", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951847", + "values_compared": 69 + }, + { + "max_rel_err": 0.0, + "name": "gen0046", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951848", + "values_compared": 145 + }, + { + "max_rel_err": 0.0, + "name": "gen0047", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951849", + "values_compared": 119 + }, + { + "max_rel_err": 0.0, + "name": "gen0048", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951850", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0049", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951851", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0050", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951852", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0051", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951853", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0052", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951854", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0053", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951855", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0054", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951856", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0055", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951857", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen0056", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951858", + "values_compared": 53 + }, + { + "max_rel_err": 0.0, + "name": "gen0057", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951859", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0058", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951860", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0059", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951861", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0060", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951862", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen0061", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951863", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0062", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951864", + "values_compared": 121 + }, + { + "max_rel_err": 0.0, + "name": "gen0063", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951865", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0064", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951866", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "gen0065", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951867", + "values_compared": 4595 + }, + { + "max_rel_err": 0.0, + "name": "gen0066", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951868", + "values_compared": 200 + }, + { + "max_rel_err": 0.0, + "name": "gen0067", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951869", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0068", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951870", + "values_compared": 42 + }, + { + "max_rel_err": 0.0, + "name": "gen0069", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951871", + "values_compared": 154 + }, + { + "max_rel_err": 0.0, + "name": "gen0070", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951872", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0071", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951873", + "values_compared": 60 + }, + { + "max_rel_err": 0.0, + "name": "gen0072", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951874", + "values_compared": 51 + }, + { + "max_rel_err": 0.0, + "name": "gen0073", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951875", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0074", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951876", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen0075", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951877", + "values_compared": 85 + }, + { + "max_rel_err": 0.0, + "name": "gen0076", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951878", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen0077", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951879", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen0078", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951880", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0079", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951881", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "gen0080", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951882", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0081", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951883", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0082", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951884", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0083", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951885", + "values_compared": 73 + }, + { + "max_rel_err": 0.0, + "name": "gen0084", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951886", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0085", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951887", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0086", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951888", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0087", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951889", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen0088", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951890", + "values_compared": 178 + }, + { + "max_rel_err": 0.0, + "name": "gen0089", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951891", + "values_compared": 74 + }, + { + "max_rel_err": 0.0, + "name": "gen0090", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951892", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen0091", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951893", + "values_compared": 46 + }, + { + "max_rel_err": 0.0, + "name": "gen0092", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951894", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0093", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951895", + "values_compared": 200 + }, + { + "max_rel_err": 0.0, + "name": "gen0094", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951896", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0095", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951897", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0096", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951898", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen0097", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951899", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0098", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951900", + "values_compared": 200 + }, + { + "max_rel_err": 0.0, + "name": "gen0099", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951901", + "values_compared": 74 + }, + { + "max_rel_err": 0.0, + "name": "gen0100", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951902", + "values_compared": 119 + }, + { + "max_rel_err": 0.0, + "name": "gen0101", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951903", + "values_compared": 161 + }, + { + "max_rel_err": 0.0, + "name": "gen0102", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951904", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0103", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951905", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0104", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951906", + "values_compared": 35 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0105", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581951907", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0106", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951908", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0107", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951909", + "values_compared": 66 + }, + { + "max_rel_err": 0.0, + "name": "gen0108", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951910", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0109", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951911", + "values_compared": 62 + }, + { + "max_rel_err": 0.0, + "name": "gen0110", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951912", + "values_compared": 53 + }, + { + "max_rel_err": 0.0, + "name": "gen0111", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951913", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0112", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951914", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0113", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951915", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "gen0114", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951916", + "values_compared": 284 + }, + { + "max_rel_err": 0.0, + "name": "gen0115", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951917", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0116", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951918", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0117", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951919", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0118", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951920", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0119", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951921", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0120", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951922", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0121", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951923", + "values_compared": 51 + }, + { + "max_rel_err": 0.0, + "name": "gen0122", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951924", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen0123", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951925", + "values_compared": 137 + }, + { + "max_rel_err": 0.0, + "name": "gen0124", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951926", + "values_compared": 122 + }, + { + "max_rel_err": 0.0, + "name": "gen0125", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951927", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen0126", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951928", + "values_compared": 51 + }, + { + "max_rel_err": 0.0, + "name": "gen0127", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951929", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0128", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951930", + "values_compared": 110 + }, + { + "max_rel_err": 0.0, + "name": "gen0129", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951931", + "values_compared": 90 + }, + { + "max_rel_err": 0.0, + "name": "gen0130", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951932", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "gen0131", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951933", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "gen0132", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951934", + "values_compared": 242 + }, + { + "max_rel_err": 0.0, + "name": "gen0133", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951935", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0134", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951936", + "values_compared": 191 + }, + { + "max_rel_err": 0.0, + "name": "gen0135", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951937", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0136", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951938", + "values_compared": 47 + }, + { + "max_rel_err": 0.0, + "name": "gen0137", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951939", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0138", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951940", + "values_compared": 126 + }, + { + "max_rel_err": 0.0, + "name": "gen0139", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951941", + "values_compared": 254 + }, + { + "max_rel_err": 0.0, + "name": "gen0140", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951942", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0141", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951943", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen0142", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951944", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0143", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951945", + "values_compared": 53 + }, + { + "max_rel_err": 0.0, + "name": "gen0144", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951946", + "values_compared": 151 + }, + { + "max_rel_err": 0.0, + "name": "gen0145", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951947", + "values_compared": 51 + }, + { + "max_rel_err": 0.0, + "name": "gen0146", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951948", + "values_compared": 349 + }, + { + "max_rel_err": 0.0, + "name": "gen0147", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951949", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0148", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951950", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen0149", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951951", + "values_compared": 47 + }, + { + "max_rel_err": 0.0, + "name": "gen0150", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951952", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0151", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951953", + "values_compared": 226 + }, + { + "max_rel_err": 0.0, + "name": "gen0152", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951954", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0153", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951955", + "values_compared": 38 + }, + { + "max_rel_err": 0.0, + "name": "gen0154", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951956", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen0155", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951957", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0156", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951958", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0157", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951959", + "values_compared": 63 + }, + { + "max_rel_err": 0.0, + "name": "gen0158", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951960", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0159", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951961", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0160", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951962", + "values_compared": 69 + }, + { + "max_rel_err": 0.0, + "name": "gen0161", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951963", + "values_compared": 122 + }, + { + "max_rel_err": 0.0, + "name": "gen0162", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951964", + "values_compared": 208 + }, + { + "max_rel_err": 0.0, + "name": "gen0163", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951965", + "values_compared": 47 + }, + { + "max_rel_err": 0.0, + "name": "gen0164", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951966", + "values_compared": 110 + }, + { + "max_rel_err": 0.0, + "name": "gen0165", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951967", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0166", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951968", + "values_compared": 73 + }, + { + "max_rel_err": 0.0, + "name": "gen0167", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951969", + "values_compared": 202 + }, + { + "max_rel_err": 0.0, + "name": "gen0168", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951970", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0169", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951971", + "values_compared": 116 + }, + { + "deferred": { + "symbol": "SmSurface::EvaluateNormal", + "unit": "surface.surface_p7" + }, + "max_rel_err": 0.0, + "name": "gen0170", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581951972", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0171", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951973", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0172", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951974", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen0173", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951975", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0174", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951976", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0175", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951977", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "gen0176", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951978", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0177", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951979", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0178", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951980", + "values_compared": 83 + }, + { + "max_rel_err": 0.0, + "name": "gen0179", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951981", + "values_compared": 208 + }, + { + "max_rel_err": 0.0, + "name": "gen0180", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951982", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0181", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951983", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0182", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951984", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0183", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951985", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0184", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951986", + "values_compared": 443 + }, + { + "max_rel_err": 0.0, + "name": "gen0185", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951987", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0186", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951988", + "values_compared": 2136 + }, + { + "max_rel_err": 0.0, + "name": "gen0187", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951989", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0188", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951990", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0189", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951991", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0190", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951992", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0191", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951993", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen0192", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951994", + "values_compared": 67 + }, + { + "max_rel_err": 0.0, + "name": "gen0193", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951995", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0194", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951996", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0195", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951997", + "values_compared": 134 + }, + { + "max_rel_err": 0.0, + "name": "gen0196", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951998", + "values_compared": 99 + }, + { + "max_rel_err": 0.0, + "name": "gen0197", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581951999", + "values_compared": 39 + }, + { + "max_rel_err": 0.0, + "name": "gen0198", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952000", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0199", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952001", + "values_compared": 140 + }, + { + "max_rel_err": 0.0, + "name": "gen0200", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952002", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0201", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952003", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0202", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952004", + "values_compared": 72 + }, + { + "max_rel_err": 0.0, + "name": "gen0203", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952005", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0204", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952006", + "values_compared": 297 + }, + { + "max_rel_err": 0.0, + "name": "gen0205", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952007", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0206", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952008", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0207", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952009", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0208", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952010", + "values_compared": 162 + }, + { + "max_rel_err": 0.0, + "name": "gen0209", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952011", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0210", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952012", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0211", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952013", + "values_compared": 117 + }, + { + "max_rel_err": 0.0, + "name": "gen0212", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952014", + "values_compared": 93 + }, + { + "max_rel_err": 0.0, + "name": "gen0213", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952015", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0214", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952016", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0215", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952017", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0216", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952018", + "values_compared": 37 + }, + { + "max_rel_err": 0.0, + "name": "gen0217", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952019", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen0218", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952020", + "values_compared": 51 + }, + { + "max_rel_err": 0.0, + "name": "gen0219", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952021", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen0220", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952022", + "values_compared": 100 + }, + { + "max_rel_err": 0.0, + "name": "gen0221", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952023", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0222", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952024", + "values_compared": 152 + }, + { + "max_rel_err": 0.0, + "name": "gen0223", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952025", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0224", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952026", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0225", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952027", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0226", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952028", + "values_compared": 214 + }, + { + "max_rel_err": 0.0, + "name": "gen0227", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952029", + "values_compared": 67 + }, + { + "max_rel_err": 0.0, + "name": "gen0228", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952030", + "values_compared": 140 + }, + { + "max_rel_err": 0.0, + "name": "gen0229", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952031", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0230", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952032", + "values_compared": 89 + }, + { + "max_rel_err": 0.0, + "name": "gen0231", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952033", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0232", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952034", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0233", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952035", + "values_compared": 527 + }, + { + "max_rel_err": 0.0, + "name": "gen0234", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952036", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen0235", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952037", + "values_compared": 83 + }, + { + "max_rel_err": 0.0, + "name": "gen0236", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952038", + "values_compared": 94 + }, + { + "max_rel_err": 0.0, + "name": "gen0237", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952039", + "values_compared": 55 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0238", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581952040", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0239", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952041", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0240", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952042", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0241", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952043", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0242", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952044", + "values_compared": 473 + }, + { + "max_rel_err": 0.0, + "name": "gen0243", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952045", + "values_compared": 73 + }, + { + "max_rel_err": 0.0, + "name": "gen0244", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952046", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0245", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952047", + "values_compared": 212 + }, + { + "max_rel_err": 0.0, + "name": "gen0246", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952048", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen0247", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952049", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0248", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952050", + "values_compared": 41 + }, + { + "deferred": { + "symbol": "SmSurface::EvaluateNormal", + "unit": "surface.surface_p7" + }, + "max_rel_err": 0.0, + "name": "gen0249", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581952051", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0250", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952052", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0251", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952053", + "values_compared": 145 + }, + { + "max_rel_err": 0.0, + "name": "gen0252", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952054", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0253", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952055", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0254", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952056", + "values_compared": 115 + }, + { + "max_rel_err": 0.0, + "name": "gen0255", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952057", + "values_compared": 101 + }, + { + "max_rel_err": 0.0, + "name": "gen0256", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952058", + "values_compared": 38 + }, + { + "max_rel_err": 0.0, + "name": "gen0257", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952059", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0258", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952060", + "values_compared": 200 + }, + { + "max_rel_err": 0.0, + "name": "gen0259", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952061", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0260", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952062", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0261", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952063", + "values_compared": 87 + }, + { + "max_rel_err": 0.0, + "name": "gen0262", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952064", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0263", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952065", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0264", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952066", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0265", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952067", + "values_compared": 53 + }, + { + "max_rel_err": 0.0, + "name": "gen0266", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952068", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0267", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952069", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0268", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952070", + "values_compared": 66 + }, + { + "max_rel_err": 0.0, + "name": "gen0269", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952071", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0270", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952072", + "values_compared": 232 + }, + { + "max_rel_err": 0.0, + "name": "gen0271", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952073", + "values_compared": 94 + }, + { + "max_rel_err": 0.0, + "name": "gen0272", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952074", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0273", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952075", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0274", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952076", + "values_compared": 266 + }, + { + "max_rel_err": 0.0, + "name": "gen0275", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952077", + "values_compared": 74 + }, + { + "max_rel_err": 0.0, + "name": "gen0276", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952078", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0277", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952079", + "values_compared": 38 + }, + { + "max_rel_err": 0.0, + "name": "gen0278", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952080", + "values_compared": 212 + }, + { + "max_rel_err": 0.0, + "name": "gen0279", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952081", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0280", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952082", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0281", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952083", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0282", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952084", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0283", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952085", + "values_compared": 64 + }, + { + "max_rel_err": 0.0, + "name": "gen0284", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952086", + "values_compared": 58 + }, + { + "max_rel_err": 0.0, + "name": "gen0285", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952087", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0286", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952088", + "values_compared": 69 + }, + { + "max_rel_err": 0.0, + "name": "gen0287", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952089", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0288", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952090", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0289", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952091", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0290", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952092", + "values_compared": 101 + }, + { + "max_rel_err": 0.0, + "name": "gen0291", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952093", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0292", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952094", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0293", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952095", + "values_compared": 90 + }, + { + "max_rel_err": 0.0, + "name": "gen0294", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952096", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0295", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952097", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0296", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952098", + "values_compared": 84 + }, + { + "max_rel_err": 0.0, + "name": "gen0297", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952099", + "values_compared": 53 + }, + { + "max_rel_err": 0.0, + "name": "gen0298", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952100", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen0299", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952101", + "values_compared": 42 + }, + { + "max_rel_err": 0.0, + "name": "gen0300", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952102", + "values_compared": 53 + }, + { + "max_rel_err": 0.0, + "name": "gen0301", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952103", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen0302", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952104", + "values_compared": 202 + }, + { + "max_rel_err": 0.0, + "name": "gen0303", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952105", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0304", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952106", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0305", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952107", + "values_compared": 218 + }, + { + "max_rel_err": 0.0, + "name": "gen0306", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952108", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0307", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952109", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0308", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952110", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0309", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952111", + "values_compared": 38 + }, + { + "max_rel_err": 0.0, + "name": "gen0310", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952112", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0311", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952113", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "gen0312", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952114", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0313", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952115", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "gen0314", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952116", + "values_compared": 78 + }, + { + "max_rel_err": 0.0, + "name": "gen0315", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952117", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0316", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952118", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0317", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952119", + "values_compared": 62 + }, + { + "max_rel_err": 0.0, + "name": "gen0318", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952120", + "values_compared": 40 + }, + { + "max_rel_err": 0.0, + "name": "gen0319", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952121", + "values_compared": 93 + }, + { + "max_rel_err": 0.0, + "name": "gen0320", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952122", + "values_compared": 191 + }, + { + "max_rel_err": 0.0, + "name": "gen0321", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952123", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0322", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952124", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0323", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952125", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0324", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952126", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0325", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952127", + "values_compared": 160 + }, + { + "max_rel_err": 0.0, + "name": "gen0326", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952128", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0327", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952129", + "values_compared": 40 + }, + { + "max_rel_err": 0.0, + "name": "gen0328", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952130", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0329", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952131", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen0330", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952132", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "gen0331", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952133", + "values_compared": 40 + }, + { + "max_rel_err": 0.0, + "name": "gen0332", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952134", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0333", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952135", + "values_compared": 157 + }, + { + "max_rel_err": 0.0, + "name": "gen0334", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952136", + "values_compared": 320 + }, + { + "max_rel_err": 0.0, + "name": "gen0335", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952137", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen0336", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952138", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "gen0337", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952139", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen0338", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952140", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0339", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952141", + "values_compared": 73 + }, + { + "max_rel_err": 0.0, + "name": "gen0340", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952142", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0341", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952143", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0342", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952144", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0343", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952145", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0344", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952146", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "gen0345", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952147", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "gen0346", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952148", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0347", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952149", + "values_compared": 67 + }, + { + "max_rel_err": 0.0, + "name": "gen0348", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952150", + "values_compared": 122 + }, + { + "max_rel_err": 0.0, + "name": "gen0349", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952151", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0350", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952152", + "values_compared": 110 + }, + { + "max_rel_err": 0.0, + "name": "gen0351", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952153", + "values_compared": 61 + }, + { + "max_rel_err": 0.0, + "name": "gen0352", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952154", + "values_compared": 72 + }, + { + "max_rel_err": 0.0, + "name": "gen0353", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952155", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0354", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952156", + "values_compared": 40 + }, + { + "max_rel_err": 0.0, + "name": "gen0355", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952157", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0356", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952158", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0357", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952159", + "values_compared": 36 + }, + { + "deferred": { + "symbol": "SmSurface::EvaluateNormal", + "unit": "surface.surface_p7" + }, + "max_rel_err": 0.0, + "name": "gen0358", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581952160", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0359", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952161", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0360", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952162", + "values_compared": 124 + }, + { + "max_rel_err": 0.0, + "name": "gen0361", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952163", + "values_compared": 91 + }, + { + "max_rel_err": 0.0, + "name": "gen0362", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952164", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen0363", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952165", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0364", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952166", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0365", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952167", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0366", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952168", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0367", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952169", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0368", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952170", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "gen0369", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952171", + "values_compared": 242 + }, + { + "max_rel_err": 0.0, + "name": "gen0370", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952172", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen0371", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952173", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0372", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952174", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0373", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952175", + "values_compared": 83 + }, + { + "max_rel_err": 0.0, + "name": "gen0374", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952176", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0375", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952177", + "values_compared": 345 + }, + { + "max_rel_err": 0.0, + "name": "gen0376", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952178", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0377", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952179", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0378", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952180", + "values_compared": 202 + }, + { + "max_rel_err": 0.0, + "name": "gen0379", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952181", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0380", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952182", + "values_compared": 103 + }, + { + "max_rel_err": 0.0, + "name": "gen0381", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952183", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0382", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952184", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0383", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952185", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "gen0384", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952186", + "values_compared": 222 + }, + { + "max_rel_err": 0.0, + "name": "gen0385", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952187", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0386", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952188", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0387", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952189", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0388", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952190", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "gen0389", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952191", + "values_compared": 83 + }, + { + "max_rel_err": 0.0, + "name": "gen0390", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952192", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "gen0391", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952193", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0392", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952194", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0393", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952195", + "values_compared": 74 + }, + { + "deferred": { + "symbol": "SmSurface::EvaluateNormal", + "unit": "surface.surface_p7" + }, + "max_rel_err": 0.0, + "name": "gen0394", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581952196", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0395", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952197", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0396", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952198", + "values_compared": 90 + }, + { + "max_rel_err": 0.0, + "name": "gen0397", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952199", + "values_compared": 51 + }, + { + "max_rel_err": 0.0, + "name": "gen0398", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952200", + "values_compared": 125 + }, + { + "max_rel_err": 0.0, + "name": "gen0399", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952201", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0400", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952202", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0401", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952203", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "gen0402", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952204", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0403", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952205", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen0404", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952206", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0405", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952207", + "values_compared": 86 + }, + { + "max_rel_err": 0.0, + "name": "gen0406", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952208", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0407", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952209", + "values_compared": 297 + }, + { + "max_rel_err": 0.0, + "name": "gen0408", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952210", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0409", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952211", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0410", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952212", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0411", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952213", + "values_compared": 397 + }, + { + "max_rel_err": 0.0, + "name": "gen0412", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952214", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen0413", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952215", + "values_compared": 58 + }, + { + "max_rel_err": 0.0, + "name": "gen0414", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952216", + "values_compared": 208 + }, + { + "max_rel_err": 0.0, + "name": "gen0415", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952217", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0416", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952218", + "values_compared": 155 + }, + { + "max_rel_err": 0.0, + "name": "gen0417", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952219", + "values_compared": 69 + }, + { + "max_rel_err": 0.0, + "name": "gen0418", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952220", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0419", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952221", + "values_compared": 80 + }, + { + "max_rel_err": 0.0, + "name": "gen0420", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952222", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0421", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952223", + "values_compared": 38 + }, + { + "deferred": { + "symbol": "SmSurface::EvaluateNormal", + "unit": "surface.surface_p7" + }, + "max_rel_err": 0.0, + "name": "gen0422", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581952224", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0423", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952225", + "values_compared": 94 + }, + { + "max_rel_err": 0.0, + "name": "gen0424", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952226", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0425", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952227", + "values_compared": 131 + }, + { + "max_rel_err": 0.0, + "name": "gen0426", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952228", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0427", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952229", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "gen0428", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952230", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0429", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952231", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0430", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952232", + "values_compared": 205 + }, + { + "max_rel_err": 0.0, + "name": "gen0431", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952233", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0432", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952234", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen0433", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952235", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0434", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952236", + "values_compared": 230 + }, + { + "max_rel_err": 0.0, + "name": "gen0435", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952237", + "values_compared": 454 + }, + { + "max_rel_err": 0.0, + "name": "gen0436", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952238", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0437", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952239", + "values_compared": 122 + }, + { + "max_rel_err": 0.0, + "name": "gen0438", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952240", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen0439", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952241", + "values_compared": 214 + }, + { + "max_rel_err": 0.0, + "name": "gen0440", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952242", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0441", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952243", + "values_compared": 465 + }, + { + "max_rel_err": 0.0, + "name": "gen0442", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952244", + "values_compared": 76 + }, + { + "max_rel_err": 0.0, + "name": "gen0443", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952245", + "values_compared": 89 + }, + { + "max_rel_err": 0.0, + "name": "gen0444", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952246", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "gen0445", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952247", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0446", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952248", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0447", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952249", + "values_compared": 76 + }, + { + "max_rel_err": 0.0, + "name": "gen0448", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952250", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0449", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952251", + "values_compared": 60 + }, + { + "max_rel_err": 0.0, + "name": "gen0450", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952252", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0451", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952253", + "values_compared": 200 + }, + { + "max_rel_err": 0.0, + "name": "gen0452", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952254", + "values_compared": 46 + }, + { + "max_rel_err": 0.0, + "name": "gen0453", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952255", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0454", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952256", + "values_compared": 103 + }, + { + "max_rel_err": 0.0, + "name": "gen0455", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952257", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0456", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952258", + "values_compared": 109 + }, + { + "max_rel_err": 0.0, + "name": "gen0457", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952259", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0458", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952260", + "values_compared": 82 + }, + { + "max_rel_err": 0.0, + "name": "gen0459", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952261", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0460", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952262", + "values_compared": 72 + }, + { + "max_rel_err": 0.0, + "name": "gen0461", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952263", + "values_compared": 134 + }, + { + "max_rel_err": 0.0, + "name": "gen0462", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952264", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0463", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952265", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0464", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952266", + "values_compared": 204 + }, + { + "max_rel_err": 0.0, + "name": "gen0465", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952267", + "values_compared": 53 + }, + { + "max_rel_err": 0.0, + "name": "gen0466", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952268", + "values_compared": 310 + }, + { + "max_rel_err": 0.0, + "name": "gen0467", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952269", + "values_compared": 72 + }, + { + "max_rel_err": 0.0, + "name": "gen0468", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952270", + "values_compared": 411 + }, + { + "max_rel_err": 0.0, + "name": "gen0469", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952271", + "values_compared": 83 + }, + { + "max_rel_err": 0.0, + "name": "gen0470", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952272", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0471", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952273", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0472", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952274", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0473", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952275", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0474", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952276", + "values_compared": 1148 + }, + { + "max_rel_err": 0.0, + "name": "gen0475", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952277", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0476", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952278", + "values_compared": 94 + }, + { + "max_rel_err": 0.0, + "name": "gen0477", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952279", + "values_compared": 67 + }, + { + "max_rel_err": 0.0, + "name": "gen0478", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952280", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0479", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952281", + "values_compared": 3592 + }, + { + "max_rel_err": 0.0, + "name": "gen0480", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952282", + "values_compared": 147 + }, + { + "max_rel_err": 0.0, + "name": "gen0481", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952283", + "values_compared": 51 + }, + { + "max_rel_err": 0.0, + "name": "gen0482", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952284", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0483", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952285", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0484", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952286", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0485", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952287", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0486", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952288", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0487", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952289", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0488", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952290", + "values_compared": 87 + }, + { + "max_rel_err": 0.0, + "name": "gen0489", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952291", + "values_compared": 40 + }, + { + "max_rel_err": 0.0, + "name": "gen0490", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952292", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0491", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952293", + "values_compared": 145 + }, + { + "max_rel_err": 0.0, + "name": "gen0492", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952294", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0493", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952295", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0494", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952296", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0495", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952297", + "values_compared": 82 + }, + { + "max_rel_err": 0.0, + "name": "gen0496", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952298", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen0497", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952299", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0498", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952300", + "values_compared": 891 + }, + { + "max_rel_err": 0.0, + "name": "gen0499", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952301", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0500", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952302", + "values_compared": 145 + }, + { + "max_rel_err": 0.0, + "name": "gen0501", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952303", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "gen0502", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952304", + "values_compared": 128 + }, + { + "max_rel_err": 0.0, + "name": "gen0503", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952305", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0504", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952306", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0505", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952307", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0506", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952308", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0507", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952309", + "values_compared": 95 + }, + { + "max_rel_err": 0.0, + "name": "gen0508", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952310", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0509", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952311", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0510", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952312", + "values_compared": 121 + }, + { + "max_rel_err": 0.0, + "name": "gen0511", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952313", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0512", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952314", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0513", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952315", + "values_compared": 66 + }, + { + "max_rel_err": 0.0, + "name": "gen0514", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952316", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen0515", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952317", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0516", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952318", + "values_compared": 37 + }, + { + "max_rel_err": 0.0, + "name": "gen0517", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952319", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0518", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952320", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0519", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952321", + "values_compared": 102 + }, + { + "max_rel_err": 0.0, + "name": "gen0520", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952322", + "values_compared": 192 + }, + { + "max_rel_err": 0.0, + "name": "gen0521", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952323", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0522", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952324", + "values_compared": 279 + }, + { + "max_rel_err": 0.0, + "name": "gen0523", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952325", + "values_compared": 91 + }, + { + "max_rel_err": 0.0, + "name": "gen0524", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952326", + "values_compared": 230 + }, + { + "max_rel_err": 0.0, + "name": "gen0525", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952327", + "values_compared": 94 + }, + { + "max_rel_err": 0.0, + "name": "gen0526", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952328", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0527", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952329", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0528", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952330", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0529", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952331", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "gen0530", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952332", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0531", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952333", + "values_compared": 212 + }, + { + "max_rel_err": 0.0, + "name": "gen0532", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952334", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0533", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952335", + "values_compared": 40 + }, + { + "max_rel_err": 0.0, + "name": "gen0534", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952336", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0535", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952337", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen0536", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952338", + "values_compared": 52 + }, + { + "deferred": { + "symbol": "SmSurface::EvaluateNormal", + "unit": "surface.surface_p7" + }, + "max_rel_err": 0.0, + "name": "gen0537", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581952339", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0538", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952340", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0539", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952341", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0540", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952342", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0541", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952343", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "gen0542", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952344", + "values_compared": 229 + }, + { + "max_rel_err": 0.0, + "name": "gen0543", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952345", + "values_compared": 77 + }, + { + "max_rel_err": 0.0, + "name": "gen0544", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952346", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0545", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952347", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0546", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952348", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen0547", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952349", + "values_compared": 47 + }, + { + "max_rel_err": 0.0, + "name": "gen0548", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952350", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen0549", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952351", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0550", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952352", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0551", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952353", + "values_compared": 254 + }, + { + "max_rel_err": 0.0, + "name": "gen0552", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952354", + "values_compared": 83 + }, + { + "max_rel_err": 0.0, + "name": "gen0553", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952355", + "values_compared": 64 + }, + { + "max_rel_err": 0.0, + "name": "gen0554", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952356", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0555", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952357", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0556", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952358", + "values_compared": 38 + }, + { + "max_rel_err": 0.0, + "name": "gen0557", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952359", + "values_compared": 78 + }, + { + "max_rel_err": 0.0, + "name": "gen0558", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952360", + "values_compared": 40 + }, + { + "max_rel_err": 0.0, + "name": "gen0559", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952361", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0560", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952362", + "values_compared": 123 + }, + { + "max_rel_err": 0.0, + "name": "gen0561", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952363", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0562", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952364", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0563", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952365", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0564", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952366", + "values_compared": 62 + }, + { + "max_rel_err": 0.0, + "name": "gen0565", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952367", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0566", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952368", + "values_compared": 46 + }, + { + "max_rel_err": 0.0, + "name": "gen0567", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952369", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0568", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952370", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0569", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952371", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen0570", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952372", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0571", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952373", + "values_compared": 261 + }, + { + "max_rel_err": 0.0, + "name": "gen0572", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952374", + "values_compared": 93 + }, + { + "max_rel_err": 0.0, + "name": "gen0573", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952375", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen0574", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952376", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen0575", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952377", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0576", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952378", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0577", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952379", + "values_compared": 68 + }, + { + "max_rel_err": 0.0, + "name": "gen0578", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952380", + "values_compared": 77 + }, + { + "max_rel_err": 0.0, + "name": "gen0579", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952381", + "values_compared": 103 + }, + { + "max_rel_err": 0.0, + "name": "gen0580", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952382", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0581", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952383", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0582", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952384", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0583", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952385", + "values_compared": 318 + }, + { + "max_rel_err": 0.0, + "name": "gen0584", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952386", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0585", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952387", + "values_compared": 72 + }, + { + "max_rel_err": 0.0, + "name": "gen0586", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952388", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0587", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952389", + "values_compared": 67 + }, + { + "max_rel_err": 0.0, + "name": "gen0588", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952390", + "values_compared": 84 + }, + { + "max_rel_err": 0.0, + "name": "gen0589", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952391", + "values_compared": 1658 + }, + { + "max_rel_err": 0.0, + "name": "gen0590", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952392", + "values_compared": 203 + }, + { + "max_rel_err": 0.0, + "name": "gen0591", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952393", + "values_compared": 72 + }, + { + "max_rel_err": 0.0, + "name": "gen0592", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952394", + "values_compared": 147 + }, + { + "max_rel_err": 0.0, + "name": "gen0593", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952395", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "gen0594", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952396", + "values_compared": 76 + }, + { + "max_rel_err": 0.0, + "name": "gen0595", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952397", + "values_compared": 983 + }, + { + "max_rel_err": 0.0, + "name": "gen0596", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952398", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0597", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952399", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen0598", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952400", + "values_compared": 212 + }, + { + "max_rel_err": 0.0, + "name": "gen0599", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952401", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen0600", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952402", + "values_compared": 200 + }, + { + "max_rel_err": 0.0, + "name": "gen0601", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952403", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0602", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952404", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0603", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952405", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen0604", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952406", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0605", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952407", + "values_compared": 126 + }, + { + "max_rel_err": 0.0, + "name": "gen0606", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952408", + "values_compared": 58 + }, + { + "max_rel_err": 0.0, + "name": "gen0607", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952409", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0608", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952410", + "values_compared": 38 + }, + { + "max_rel_err": 0.0, + "name": "gen0609", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952411", + "values_compared": 37 + }, + { + "max_rel_err": 0.0, + "name": "gen0610", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952412", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0611", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952413", + "values_compared": 155 + }, + { + "max_rel_err": 0.0, + "name": "gen0612", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952414", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0613", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952415", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0614", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952416", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0615", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952417", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0616", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952418", + "values_compared": 84 + }, + { + "max_rel_err": 0.0, + "name": "gen0617", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952419", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0618", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952420", + "values_compared": 62 + }, + { + "max_rel_err": 0.0, + "name": "gen0619", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952421", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0620", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952422", + "values_compared": 179 + }, + { + "max_rel_err": 0.0, + "name": "gen0621", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952423", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0622", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952424", + "values_compared": 145 + }, + { + "max_rel_err": 0.0, + "name": "gen0623", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952425", + "values_compared": 67 + }, + { + "max_rel_err": 0.0, + "name": "gen0624", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952426", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0625", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952427", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0626", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952428", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen0627", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952429", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0628", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952430", + "values_compared": 89 + }, + { + "max_rel_err": 0.0, + "name": "gen0629", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952431", + "values_compared": 73 + }, + { + "max_rel_err": 0.0, + "name": "gen0630", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952432", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0631", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952433", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0632", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952434", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0633", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952435", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0634", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952436", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0635", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952437", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0636", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952438", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0637", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952439", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0638", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952440", + "values_compared": 83 + }, + { + "max_rel_err": 0.0, + "name": "gen0639", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952441", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0640", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952442", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0641", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952443", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0642", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952444", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0643", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952445", + "values_compared": 67 + }, + { + "max_rel_err": 0.0, + "name": "gen0644", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952446", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0645", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952447", + "values_compared": 57 + }, + { + "max_rel_err": 0.0, + "name": "gen0646", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952448", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0647", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952449", + "values_compared": 178 + }, + { + "max_rel_err": 0.0, + "name": "gen0648", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952450", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0649", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952451", + "values_compared": 42 + }, + { + "max_rel_err": 0.0, + "name": "gen0650", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952452", + "values_compared": 230 + }, + { + "max_rel_err": 0.0, + "name": "gen0651", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952453", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0652", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952454", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0653", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952455", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0654", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952456", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0655", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952457", + "values_compared": 179 + }, + { + "max_rel_err": 0.0, + "name": "gen0656", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952458", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0657", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952459", + "values_compared": 226 + }, + { + "max_rel_err": 0.0, + "name": "gen0658", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952460", + "values_compared": 178 + }, + { + "max_rel_err": 0.0, + "name": "gen0659", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952461", + "values_compared": 119 + }, + { + "max_rel_err": 0.0, + "name": "gen0660", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952462", + "values_compared": 246 + }, + { + "max_rel_err": 0.0, + "name": "gen0661", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952463", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen0662", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952464", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen0663", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952465", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0664", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952466", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0665", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952467", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0666", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952468", + "values_compared": 200 + }, + { + "max_rel_err": 0.0, + "name": "gen0667", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952469", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0668", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952470", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0669", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952471", + "values_compared": 89 + }, + { + "max_rel_err": 0.0, + "name": "gen0670", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952472", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0671", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952473", + "values_compared": 151 + }, + { + "max_rel_err": 0.0, + "name": "gen0672", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952474", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0673", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952475", + "values_compared": 200 + }, + { + "max_rel_err": 0.0, + "name": "gen0674", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952476", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen0675", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952477", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen0676", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952478", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0677", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952479", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0678", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952480", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0679", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952481", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen0680", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952482", + "values_compared": 151 + }, + { + "max_rel_err": 0.0, + "name": "gen0681", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952483", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0682", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952484", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0683", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952485", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0684", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952486", + "values_compared": 246 + }, + { + "max_rel_err": 0.0, + "name": "gen0685", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952487", + "values_compared": 68 + }, + { + "max_rel_err": 0.0, + "name": "gen0686", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952488", + "values_compared": 155 + }, + { + "max_rel_err": 0.0, + "name": "gen0687", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952489", + "values_compared": 106 + }, + { + "max_rel_err": 0.0, + "name": "gen0688", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952490", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen0689", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952491", + "values_compared": 60 + }, + { + "max_rel_err": 0.0, + "name": "gen0690", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952492", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen0691", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952493", + "values_compared": 93 + }, + { + "max_rel_err": 0.0, + "name": "gen0692", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952494", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0693", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952495", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0694", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952496", + "values_compared": 38 + }, + { + "max_rel_err": 0.0, + "name": "gen0695", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952497", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0696", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952498", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen0697", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952499", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0698", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952500", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0699", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952501", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0700", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952502", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0701", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952503", + "values_compared": 85 + }, + { + "max_rel_err": 0.0, + "name": "gen0702", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952504", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen0703", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952505", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0704", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952506", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0705", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952507", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen0706", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952508", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0707", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952509", + "values_compared": 180 + }, + { + "max_rel_err": 0.0, + "name": "gen0708", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952510", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0709", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952511", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen0710", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952512", + "values_compared": 74 + }, + { + "max_rel_err": 0.0, + "name": "gen0711", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952513", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0712", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952514", + "values_compared": 72 + }, + { + "max_rel_err": 0.0, + "name": "gen0713", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952515", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0714", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952516", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0715", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952517", + "values_compared": 168 + }, + { + "max_rel_err": 0.0, + "name": "gen0716", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952518", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0717", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952519", + "values_compared": 145 + }, + { + "max_rel_err": 0.0, + "name": "gen0718", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952520", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0719", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952521", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0720", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952522", + "values_compared": 168 + }, + { + "max_rel_err": 0.0, + "name": "gen0721", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952523", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0722", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952524", + "values_compared": 74 + }, + { + "max_rel_err": 0.0, + "name": "gen0723", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952525", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0724", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952526", + "values_compared": 254 + }, + { + "max_rel_err": 0.0, + "name": "gen0725", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952527", + "values_compared": 140 + }, + { + "max_rel_err": 0.0, + "name": "gen0726", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952528", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0727", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952529", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0728", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952530", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen0729", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952531", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0730", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952532", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0731", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952533", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0732", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952534", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen0733", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952535", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0734", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952536", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0735", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952537", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0736", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952538", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0737", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952539", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0738", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952540", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0739", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952541", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0740", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952542", + "values_compared": 1555 + }, + { + "max_rel_err": 0.0, + "name": "gen0741", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952543", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0742", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952544", + "values_compared": 487 + }, + { + "max_rel_err": 0.0, + "name": "gen0743", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952545", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0744", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952546", + "values_compared": 47 + }, + { + "max_rel_err": 0.0, + "name": "gen0745", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952547", + "values_compared": 123 + }, + { + "max_rel_err": 0.0, + "name": "gen0746", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952548", + "values_compared": 332 + }, + { + "max_rel_err": 0.0, + "name": "gen0747", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952549", + "values_compared": 149 + }, + { + "max_rel_err": 0.0, + "name": "gen0748", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952550", + "values_compared": 85 + }, + { + "max_rel_err": 0.0, + "name": "gen0749", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952551", + "values_compared": 145 + }, + { + "max_rel_err": 0.0, + "name": "gen0750", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952552", + "values_compared": 124 + }, + { + "max_rel_err": 0.0, + "name": "gen0751", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952553", + "values_compared": 63 + }, + { + "max_rel_err": 0.0, + "name": "gen0752", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952554", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0753", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952555", + "values_compared": 276 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0754", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581952556", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0755", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952557", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0756", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952558", + "values_compared": 61 + }, + { + "max_rel_err": 0.0, + "name": "gen0757", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952559", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "gen0758", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952560", + "values_compared": 144 + }, + { + "max_rel_err": 0.0, + "name": "gen0759", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952561", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0760", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952562", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0761", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952563", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0762", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952564", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen0763", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952565", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen0764", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952566", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen0765", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952567", + "values_compared": 123 + }, + { + "max_rel_err": 0.0, + "name": "gen0766", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952568", + "values_compared": 235 + }, + { + "max_rel_err": 0.0, + "name": "gen0767", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952569", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0768", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952570", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen0769", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952571", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0770", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952572", + "values_compared": 85 + }, + { + "max_rel_err": 0.0, + "name": "gen0771", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952573", + "values_compared": 192 + }, + { + "max_rel_err": 0.0, + "name": "gen0772", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952574", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0773", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952575", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0774", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952576", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0775", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952577", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0776", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952578", + "values_compared": 58 + }, + { + "max_rel_err": 0.0, + "name": "gen0777", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952579", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0778", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952580", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen0779", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952581", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0780", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952582", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0781", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952583", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0782", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952584", + "values_compared": 41 + }, + { + "max_rel_err": 0.0, + "name": "gen0783", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952585", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0784", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952586", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0785", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952587", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0786", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952588", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0787", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952589", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0788", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952590", + "values_compared": 72 + }, + { + "max_rel_err": 0.0, + "name": "gen0789", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952591", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0790", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952592", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0791", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952593", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0792", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952594", + "values_compared": 134 + }, + { + "max_rel_err": 0.0, + "name": "gen0793", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952595", + "values_compared": 451 + }, + { + "max_rel_err": 0.0, + "name": "gen0794", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952596", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen0795", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952597", + "values_compared": 174 + }, + { + "max_rel_err": 0.0, + "name": "gen0796", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952598", + "values_compared": 73 + }, + { + "max_rel_err": 0.0, + "name": "gen0797", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952599", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0798", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952600", + "values_compared": 76 + }, + { + "max_rel_err": 0.0, + "name": "gen0799", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952601", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0800", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952602", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0801", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952603", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0802", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952604", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0803", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952605", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0804", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952606", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen0805", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952607", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "gen0806", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952608", + "values_compared": 69 + }, + { + "max_rel_err": 0.0, + "name": "gen0807", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952609", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0808", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952610", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0809", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952611", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0810", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952612", + "values_compared": 74 + }, + { + "max_rel_err": 0.0, + "name": "gen0811", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952613", + "values_compared": 236 + }, + { + "max_rel_err": 0.0, + "name": "gen0812", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952614", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0813", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952615", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen0814", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952616", + "values_compared": 264 + }, + { + "max_rel_err": 0.0, + "name": "gen0815", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952617", + "values_compared": 72 + }, + { + "max_rel_err": 0.0, + "name": "gen0816", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952618", + "values_compared": 122 + }, + { + "max_rel_err": 0.0, + "name": "gen0817", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952619", + "values_compared": 592 + }, + { + "max_rel_err": 0.0, + "name": "gen0818", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952620", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0819", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952621", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0820", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952622", + "values_compared": 79 + }, + { + "deferred": { + "symbol": "SmSurface::EvaluateNormal", + "unit": "surface.surface_p7" + }, + "max_rel_err": 0.0, + "name": "gen0821", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581952623", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0822", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952624", + "values_compared": 104 + }, + { + "max_rel_err": 0.0, + "name": "gen0823", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952625", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0824", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952626", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0825", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952627", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen0826", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952628", + "values_compared": 179 + }, + { + "max_rel_err": 0.0, + "name": "gen0827", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952629", + "values_compared": 107 + }, + { + "max_rel_err": 0.0, + "name": "gen0828", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952630", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0829", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952631", + "values_compared": 208 + }, + { + "max_rel_err": 0.0, + "name": "gen0830", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952632", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0831", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952633", + "values_compared": 92 + }, + { + "max_rel_err": 0.0, + "name": "gen0832", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952634", + "values_compared": 38 + }, + { + "max_rel_err": 0.0, + "name": "gen0833", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952635", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0834", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952636", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0835", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952637", + "values_compared": 93 + }, + { + "max_rel_err": 0.0, + "name": "gen0836", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952638", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0837", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952639", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0838", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952640", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0839", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952641", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen0840", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952642", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0841", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952643", + "values_compared": 163 + }, + { + "max_rel_err": 0.0, + "name": "gen0842", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952644", + "values_compared": 169 + }, + { + "max_rel_err": 0.0, + "name": "gen0843", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952645", + "values_compared": 38 + }, + { + "max_rel_err": 0.0, + "name": "gen0844", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952646", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0845", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952647", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0846", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952648", + "values_compared": 406 + }, + { + "max_rel_err": 0.0, + "name": "gen0847", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952649", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen0848", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952650", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0849", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952651", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0850", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952652", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen0851", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952653", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0852", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952654", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0853", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952655", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0854", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952656", + "values_compared": 57 + }, + { + "max_rel_err": 0.0, + "name": "gen0855", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952657", + "values_compared": 140 + }, + { + "max_rel_err": 0.0, + "name": "gen0856", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952658", + "values_compared": 174 + }, + { + "max_rel_err": 0.0, + "name": "gen0857", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952659", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0858", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952660", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0859", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952661", + "values_compared": 103 + }, + { + "max_rel_err": 0.0, + "name": "gen0860", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952662", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0861", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952663", + "values_compared": 149 + }, + { + "max_rel_err": 0.0, + "name": "gen0862", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952664", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0863", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952665", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0864", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952666", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0865", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952667", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0866", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952668", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "gen0867", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952669", + "values_compared": 117 + }, + { + "max_rel_err": 0.0, + "name": "gen0868", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952670", + "values_compared": 99 + }, + { + "max_rel_err": 0.0, + "name": "gen0869", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952671", + "values_compared": 164 + }, + { + "max_rel_err": 0.0, + "name": "gen0870", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952672", + "values_compared": 67 + }, + { + "max_rel_err": 0.0, + "name": "gen0871", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952673", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0872", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952674", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0873", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952675", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "gen0874", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952676", + "values_compared": 858 + }, + { + "max_rel_err": 0.0, + "name": "gen0875", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952677", + "values_compared": 38 + }, + { + "max_rel_err": 0.0, + "name": "gen0876", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952678", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0877", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952679", + "values_compared": 191 + }, + { + "max_rel_err": 0.0, + "name": "gen0878", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952680", + "values_compared": 100 + }, + { + "max_rel_err": 0.0, + "name": "gen0879", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952681", + "values_compared": 164 + }, + { + "max_rel_err": 0.0, + "name": "gen0880", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952682", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen0881", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952683", + "values_compared": 244 + }, + { + "max_rel_err": 0.0, + "name": "gen0882", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952684", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0883", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952685", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen0884", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952686", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0885", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952687", + "values_compared": 64 + }, + { + "max_rel_err": 0.0, + "name": "gen0886", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952688", + "values_compared": 144 + }, + { + "max_rel_err": 0.0, + "name": "gen0887", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952689", + "values_compared": 373 + }, + { + "max_rel_err": 0.0, + "name": "gen0888", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952690", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0889", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952691", + "values_compared": 200 + }, + { + "max_rel_err": 0.0, + "name": "gen0890", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952692", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0891", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952693", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen0892", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952694", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0893", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952695", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0894", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952696", + "values_compared": 103 + }, + { + "max_rel_err": 0.0, + "name": "gen0895", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952697", + "values_compared": 200 + }, + { + "max_rel_err": 0.0, + "name": "gen0896", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952698", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0897", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952699", + "values_compared": 41 + }, + { + "max_rel_err": 0.0, + "name": "gen0898", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952700", + "values_compared": 46 + }, + { + "max_rel_err": 0.0, + "name": "gen0899", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952701", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen0900", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952702", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0901", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952703", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen0902", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952704", + "values_compared": 47 + }, + { + "max_rel_err": 0.0, + "name": "gen0903", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952705", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0904", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952706", + "values_compared": 101 + }, + { + "max_rel_err": 0.0, + "name": "gen0905", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952707", + "values_compared": 232 + }, + { + "max_rel_err": 0.0, + "name": "gen0906", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952708", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0907", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952709", + "values_compared": 66 + }, + { + "max_rel_err": 0.0, + "name": "gen0908", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952710", + "values_compared": 51 + }, + { + "max_rel_err": 0.0, + "name": "gen0909", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952711", + "values_compared": 397 + }, + { + "max_rel_err": 0.0, + "name": "gen0910", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952712", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0911", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952713", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0912", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952714", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0913", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952715", + "values_compared": 224 + }, + { + "max_rel_err": 0.0, + "name": "gen0914", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952716", + "values_compared": 186 + }, + { + "max_rel_err": 0.0, + "name": "gen0915", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952717", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0916", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952718", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0917", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952719", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0918", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952720", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen0919", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952721", + "values_compared": 66 + }, + { + "max_rel_err": 0.0, + "name": "gen0920", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952722", + "values_compared": 101 + }, + { + "max_rel_err": 0.0, + "name": "gen0921", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952723", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "gen0922", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952724", + "values_compared": 57 + }, + { + "max_rel_err": 0.0, + "name": "gen0923", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952725", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "gen0924", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952726", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0925", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952727", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "gen0926", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952728", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0927", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952729", + "values_compared": 47 + }, + { + "max_rel_err": 0.0, + "name": "gen0928", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952730", + "values_compared": 110 + }, + { + "max_rel_err": 0.0, + "name": "gen0929", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952731", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0930", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952732", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0931", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952733", + "values_compared": 53 + }, + { + "max_rel_err": 0.0, + "name": "gen0932", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952734", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0933", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952735", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0934", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952736", + "values_compared": 123 + }, + { + "max_rel_err": 0.0, + "name": "gen0935", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952737", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "gen0936", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952738", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0937", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952739", + "values_compared": 38 + }, + { + "max_rel_err": 0.0, + "name": "gen0938", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952740", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0939", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952741", + "values_compared": 69 + }, + { + "max_rel_err": 0.0, + "name": "gen0940", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952742", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0941", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952743", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen0942", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952744", + "values_compared": 37 + }, + { + "max_rel_err": 0.0, + "name": "gen0943", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952745", + "values_compared": 162 + }, + { + "max_rel_err": 0.0, + "name": "gen0944", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952746", + "values_compared": 200 + }, + { + "max_rel_err": 0.0, + "name": "gen0945", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952747", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0946", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952748", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0947", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952749", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0948", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952750", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0949", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952751", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0950", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952752", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0951", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952753", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen0952", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952754", + "values_compared": 179 + }, + { + "max_rel_err": 0.0, + "name": "gen0953", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952755", + "values_compared": 113 + }, + { + "max_rel_err": 0.0, + "name": "gen0954", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952756", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen0955", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952757", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen0956", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952758", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0957", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952759", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "gen0958", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952760", + "values_compared": 168 + }, + { + "max_rel_err": 0.0, + "name": "gen0959", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952761", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0960", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952762", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0961", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952763", + "values_compared": 242 + }, + { + "max_rel_err": 0.0, + "name": "gen0962", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952764", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen0963", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952765", + "values_compared": 69 + }, + { + "max_rel_err": 0.0, + "name": "gen0964", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952766", + "values_compared": 160 + }, + { + "max_rel_err": 0.0, + "name": "gen0965", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952767", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0966", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952768", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen0967", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952769", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0968", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952770", + "values_compared": 913 + }, + { + "max_rel_err": 0.0, + "name": "gen0969", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952771", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0970", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952772", + "values_compared": 380 + }, + { + "max_rel_err": 0.0, + "name": "gen0971", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952773", + "values_compared": 220 + }, + { + "max_rel_err": 0.0, + "name": "gen0972", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952774", + "values_compared": 39 + }, + { + "max_rel_err": 0.0, + "name": "gen0973", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952775", + "values_compared": 104 + }, + { + "max_rel_err": 0.0, + "name": "gen0974", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952776", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0975", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952777", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0976", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952778", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0977", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952779", + "values_compared": 140 + }, + { + "max_rel_err": 0.0, + "name": "gen0978", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952780", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0979", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952781", + "values_compared": 137 + }, + { + "max_rel_err": 0.0, + "name": "gen0980", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952782", + "values_compared": 96 + }, + { + "max_rel_err": 0.0, + "name": "gen0981", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952783", + "values_compared": 209 + }, + { + "max_rel_err": 0.0, + "name": "gen0982", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952784", + "values_compared": 61 + }, + { + "max_rel_err": 0.0, + "name": "gen0983", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952785", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen0984", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952786", + "values_compared": 139 + }, + { + "max_rel_err": 0.0, + "name": "gen0985", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952787", + "values_compared": 156 + }, + { + "max_rel_err": 0.0, + "name": "gen0986", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952788", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen0987", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952789", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen0988", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952790", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0989", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952791", + "values_compared": 179 + }, + { + "max_rel_err": 0.0, + "name": "gen0990", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952792", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen0991", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952793", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen0992", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952794", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0993", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952795", + "values_compared": 53 + }, + { + "max_rel_err": 0.0, + "name": "gen0994", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952796", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen0995", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952797", + "values_compared": 157 + }, + { + "max_rel_err": 0.0, + "name": "gen0996", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952798", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen0997", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952799", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen0998", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952800", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen0999", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952801", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1000", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952802", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1001", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952803", + "values_compared": 74 + }, + { + "max_rel_err": 0.0, + "name": "gen1002", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952804", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen1003", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952805", + "values_compared": 101 + }, + { + "max_rel_err": 0.0, + "name": "gen1004", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952806", + "values_compared": 107 + }, + { + "max_rel_err": 0.0, + "name": "gen1005", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952807", + "values_compared": 103 + }, + { + "max_rel_err": 0.0, + "name": "gen1006", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952808", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1007", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952809", + "values_compared": 104 + }, + { + "max_rel_err": 0.0, + "name": "gen1008", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952810", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1009", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952811", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1010", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952812", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "gen1011", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952813", + "values_compared": 90 + }, + { + "max_rel_err": 0.0, + "name": "gen1012", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952814", + "values_compared": 51 + }, + { + "max_rel_err": 0.0, + "name": "gen1013", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952815", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1014", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952816", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen1015", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952817", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1016", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952818", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1017", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952819", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1018", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952820", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1019", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952821", + "values_compared": 502 + }, + { + "max_rel_err": 0.0, + "name": "gen1020", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952822", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1021", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952823", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1022", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952824", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1023", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952825", + "values_compared": 348 + }, + { + "max_rel_err": 0.0, + "name": "gen1024", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952826", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen1025", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952827", + "values_compared": 226 + }, + { + "max_rel_err": 0.0, + "name": "gen1026", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952828", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1027", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952829", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1028", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952830", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen1029", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952831", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1030", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952832", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1031", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952833", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1032", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952834", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1033", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952835", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1034", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952836", + "values_compared": 40 + }, + { + "max_rel_err": 0.0, + "name": "gen1035", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952837", + "values_compared": 258 + }, + { + "max_rel_err": 0.0, + "name": "gen1036", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952838", + "values_compared": 127 + }, + { + "max_rel_err": 0.0, + "name": "gen1037", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952839", + "values_compared": 322 + }, + { + "max_rel_err": 0.0, + "name": "gen1038", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952840", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1039", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952841", + "values_compared": 101 + }, + { + "max_rel_err": 0.0, + "name": "gen1040", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952842", + "values_compared": 47 + }, + { + "max_rel_err": 0.0, + "name": "gen1041", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952843", + "values_compared": 134 + }, + { + "max_rel_err": 0.0, + "name": "gen1042", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952844", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1043", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952845", + "values_compared": 87 + }, + { + "max_rel_err": 0.0, + "name": "gen1044", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952846", + "values_compared": 57 + }, + { + "max_rel_err": 0.0, + "name": "gen1045", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952847", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1046", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952848", + "values_compared": 39 + }, + { + "max_rel_err": 0.0, + "name": "gen1047", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952849", + "values_compared": 73 + }, + { + "max_rel_err": 0.0, + "name": "gen1048", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952850", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1049", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952851", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1050", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952852", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1051", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952853", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen1052", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952854", + "values_compared": 61 + }, + { + "max_rel_err": 0.0, + "name": "gen1053", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952855", + "values_compared": 64 + }, + { + "max_rel_err": 0.0, + "name": "gen1054", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952856", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1055", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952857", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1056", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952858", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "gen1057", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952859", + "values_compared": 61 + }, + { + "max_rel_err": 0.0, + "name": "gen1058", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952860", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen1059", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952861", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen1060", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952862", + "values_compared": 51 + }, + { + "max_rel_err": 0.0, + "name": "gen1061", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952863", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "gen1062", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952864", + "values_compared": 72 + }, + { + "max_rel_err": 0.0, + "name": "gen1063", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952865", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1064", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952866", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1065", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952867", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1066", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952868", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1067", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952869", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen1068", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952870", + "values_compared": 139 + }, + { + "max_rel_err": 0.0, + "name": "gen1069", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952871", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1070", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952872", + "values_compared": 221 + }, + { + "max_rel_err": 0.0, + "name": "gen1071", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952873", + "values_compared": 95 + }, + { + "max_rel_err": 0.0, + "name": "gen1072", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952874", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen1073", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952875", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1074", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952876", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen1075", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952877", + "values_compared": 122 + }, + { + "max_rel_err": 0.0, + "name": "gen1076", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952878", + "values_compared": 42 + }, + { + "max_rel_err": 0.0, + "name": "gen1077", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952879", + "values_compared": 90 + }, + { + "max_rel_err": 0.0, + "name": "gen1078", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952880", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1079", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952881", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1080", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952882", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1081", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952883", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1082", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952884", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1083", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952885", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen1084", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952886", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1085", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952887", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1086", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952888", + "values_compared": 73 + }, + { + "max_rel_err": 0.0, + "name": "gen1087", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952889", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen1088", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952890", + "values_compared": 61 + }, + { + "max_rel_err": 0.0, + "name": "gen1089", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952891", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "gen1090", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952892", + "values_compared": 428 + }, + { + "max_rel_err": 0.0, + "name": "gen1091", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952893", + "values_compared": 134 + }, + { + "max_rel_err": 0.0, + "name": "gen1092", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952894", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1093", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952895", + "values_compared": 74 + }, + { + "max_rel_err": 0.0, + "name": "gen1094", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952896", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen1095", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952897", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1096", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952898", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1097", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952899", + "values_compared": 200 + }, + { + "max_rel_err": 0.0, + "name": "gen1098", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952900", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1099", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952901", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen1100", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952902", + "values_compared": 206 + }, + { + "max_rel_err": 0.0, + "name": "gen1101", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952903", + "values_compared": 178 + }, + { + "max_rel_err": 0.0, + "name": "gen1102", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952904", + "values_compared": 34 + }, + { + "deferred": { + "symbol": "SmSurface::EvaluateNormal", + "unit": "surface.surface_p7" + }, + "max_rel_err": 0.0, + "name": "gen1103", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581952905", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1104", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952906", + "values_compared": 128 + }, + { + "max_rel_err": 0.0, + "name": "gen1105", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952907", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1106", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952908", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1107", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952909", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1108", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952910", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1109", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952911", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen1110", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952912", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1111", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952913", + "values_compared": 815 + }, + { + "max_rel_err": 0.0, + "name": "gen1112", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952914", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1113", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952915", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1114", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952916", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen1115", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952917", + "values_compared": 255 + }, + { + "max_rel_err": 0.0, + "name": "gen1116", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952918", + "values_compared": 150 + }, + { + "max_rel_err": 0.0, + "name": "gen1117", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952919", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1118", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952920", + "values_compared": 218 + }, + { + "max_rel_err": 0.0, + "name": "gen1119", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952921", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1120", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952922", + "values_compared": 163 + }, + { + "max_rel_err": 0.0, + "name": "gen1121", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952923", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen1122", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952924", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1123", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952925", + "values_compared": 218 + }, + { + "max_rel_err": 0.0, + "name": "gen1124", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952926", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1125", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952927", + "values_compared": 105 + }, + { + "max_rel_err": 0.0, + "name": "gen1126", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952928", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen1127", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952929", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1128", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952930", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1129", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952931", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1130", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952932", + "values_compared": 73 + }, + { + "max_rel_err": 0.0, + "name": "gen1131", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952933", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1132", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952934", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1133", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952935", + "values_compared": 53 + }, + { + "max_rel_err": 0.0, + "name": "gen1134", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952936", + "values_compared": 220 + }, + { + "max_rel_err": 0.0, + "name": "gen1135", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952937", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1136", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952938", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen1137", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952939", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1138", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952940", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen1139", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952941", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen1140", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952942", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen1141", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952943", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen1142", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952944", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1143", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952945", + "values_compared": 179 + }, + { + "max_rel_err": 0.0, + "name": "gen1144", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952946", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1145", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952947", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1146", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952948", + "values_compared": 174 + }, + { + "max_rel_err": 0.0, + "name": "gen1147", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952949", + "values_compared": 72 + }, + { + "max_rel_err": 0.0, + "name": "gen1148", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952950", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1149", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952951", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen1150", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952952", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1151", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952953", + "values_compared": 899 + }, + { + "max_rel_err": 0.0, + "name": "gen1152", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952954", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1153", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952955", + "values_compared": 1079 + }, + { + "max_rel_err": 0.0, + "name": "gen1154", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952956", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1155", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952957", + "values_compared": 202 + }, + { + "max_rel_err": 0.0, + "name": "gen1156", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952958", + "values_compared": 198 + }, + { + "deferred": { + "symbol": "SmSurface::EvaluateNormal", + "unit": "surface.surface_p7" + }, + "max_rel_err": 0.0, + "name": "gen1157", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581952959", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1158", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952960", + "values_compared": 61 + }, + { + "max_rel_err": 0.0, + "name": "gen1159", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952961", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen1160", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952962", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1161", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952963", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1162", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952964", + "values_compared": 94 + }, + { + "max_rel_err": 0.0, + "name": "gen1163", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952965", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen1164", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952966", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1165", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952967", + "values_compared": 179 + }, + { + "max_rel_err": 0.0, + "name": "gen1166", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952968", + "values_compared": 230 + }, + { + "max_rel_err": 0.0, + "name": "gen1167", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952969", + "values_compared": 214 + }, + { + "max_rel_err": 0.0, + "name": "gen1168", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952970", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1169", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952971", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1170", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952972", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1171", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952973", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen1172", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952974", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen1173", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952975", + "values_compared": 62 + }, + { + "max_rel_err": 0.0, + "name": "gen1174", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952976", + "values_compared": 174 + }, + { + "max_rel_err": 0.0, + "name": "gen1175", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952977", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1176", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952978", + "values_compared": 1479 + }, + { + "max_rel_err": 0.0, + "name": "gen1177", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952979", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1178", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952980", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1179", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952981", + "values_compared": 46 + }, + { + "max_rel_err": 0.0, + "name": "gen1180", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952982", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1181", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952983", + "values_compared": 135 + }, + { + "max_rel_err": 0.0, + "name": "gen1182", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952984", + "values_compared": 74 + }, + { + "max_rel_err": 0.0, + "name": "gen1183", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952985", + "values_compared": 145 + }, + { + "max_rel_err": 0.0, + "name": "gen1184", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952986", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen1185", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952987", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1186", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952988", + "values_compared": 359 + }, + { + "max_rel_err": 0.0, + "name": "gen1187", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952989", + "values_compared": 145 + }, + { + "max_rel_err": 0.0, + "name": "gen1188", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952990", + "values_compared": 200 + }, + { + "max_rel_err": 0.0, + "name": "gen1189", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952991", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1190", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952992", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1191", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952993", + "values_compared": 53 + }, + { + "max_rel_err": 0.0, + "name": "gen1192", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952994", + "values_compared": 47 + }, + { + "max_rel_err": 0.0, + "name": "gen1193", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952995", + "values_compared": 128 + }, + { + "max_rel_err": 0.0, + "name": "gen1194", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952996", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1195", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952997", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1196", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952998", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1197", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581952999", + "values_compared": 138 + }, + { + "max_rel_err": 0.0, + "name": "gen1198", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953000", + "values_compared": 74 + }, + { + "max_rel_err": 0.0, + "name": "gen1199", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953001", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen1200", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953002", + "values_compared": 1700 + }, + { + "max_rel_err": 0.0, + "name": "gen1201", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953003", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1202", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953004", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1203", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953005", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1204", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953006", + "values_compared": 281 + }, + { + "max_rel_err": 0.0, + "name": "gen1205", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953007", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1206", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953008", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "gen1207", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953009", + "values_compared": 37 + }, + { + "max_rel_err": 0.0, + "name": "gen1208", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953010", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1209", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953011", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen1210", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953012", + "values_compared": 57 + }, + { + "max_rel_err": 0.0, + "name": "gen1211", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953013", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1212", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953014", + "values_compared": 158 + }, + { + "max_rel_err": 0.0, + "name": "gen1213", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953015", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1214", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953016", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen1215", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953017", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1216", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953018", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1217", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953019", + "values_compared": 230 + }, + { + "max_rel_err": 0.0, + "name": "gen1218", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953020", + "values_compared": 147 + }, + { + "max_rel_err": 0.0, + "name": "gen1219", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953021", + "values_compared": 905 + }, + { + "max_rel_err": 0.0, + "name": "gen1220", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953022", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1221", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953023", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1222", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953024", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1223", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953025", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen1224", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953026", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1225", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953027", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1226", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953028", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1227", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953029", + "values_compared": 53 + }, + { + "max_rel_err": 0.0, + "name": "gen1228", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953030", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1229", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953031", + "values_compared": 85 + }, + { + "max_rel_err": 0.0, + "name": "gen1230", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953032", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1231", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953033", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "gen1232", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953034", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1233", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953035", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1234", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953036", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1235", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953037", + "values_compared": 68 + }, + { + "max_rel_err": 0.0, + "name": "gen1236", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953038", + "values_compared": 61 + }, + { + "max_rel_err": 0.0, + "name": "gen1237", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953039", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen1238", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953040", + "values_compared": 39 + }, + { + "max_rel_err": 0.0, + "name": "gen1239", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953041", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen1240", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953042", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1241", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953043", + "values_compared": 41 + }, + { + "max_rel_err": 0.0, + "name": "gen1242", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953044", + "values_compared": 94 + }, + { + "max_rel_err": 0.0, + "name": "gen1243", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953045", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1244", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953046", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1245", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953047", + "values_compared": 295 + }, + { + "max_rel_err": 0.0, + "name": "gen1246", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953048", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen1247", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953049", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1248", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953050", + "values_compared": 191 + }, + { + "max_rel_err": 0.0, + "name": "gen1249", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953051", + "values_compared": 174 + }, + { + "max_rel_err": 0.0, + "name": "gen1250", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953052", + "values_compared": 87 + }, + { + "max_rel_err": 0.0, + "name": "gen1251", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953053", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "gen1252", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953054", + "values_compared": 57 + }, + { + "max_rel_err": 0.0, + "name": "gen1253", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953055", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen1254", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953056", + "values_compared": 122 + }, + { + "max_rel_err": 0.0, + "name": "gen1255", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953057", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1256", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953058", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen1257", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953059", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1258", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953060", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1259", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953061", + "values_compared": 560 + }, + { + "max_rel_err": 0.0, + "name": "gen1260", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953062", + "values_compared": 223 + }, + { + "max_rel_err": 0.0, + "name": "gen1261", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953063", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1262", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953064", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1263", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953065", + "values_compared": 66 + }, + { + "max_rel_err": 0.0, + "name": "gen1264", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953066", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1265", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953067", + "values_compared": 118 + }, + { + "max_rel_err": 0.0, + "name": "gen1266", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953068", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen1267", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953069", + "values_compared": 161 + }, + { + "max_rel_err": 0.0, + "name": "gen1268", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953070", + "values_compared": 73 + }, + { + "max_rel_err": 0.0, + "name": "gen1269", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953071", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1270", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953072", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1271", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953073", + "values_compared": 61 + }, + { + "max_rel_err": 0.0, + "name": "gen1272", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953074", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen1273", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953075", + "values_compared": 477 + }, + { + "max_rel_err": 0.0, + "name": "gen1274", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953076", + "values_compared": 206 + }, + { + "max_rel_err": 0.0, + "name": "gen1275", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953077", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "gen1276", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953078", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1277", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953079", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1278", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953080", + "values_compared": 139 + }, + { + "max_rel_err": 0.0, + "name": "gen1279", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953081", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1280", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953082", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen1281", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953083", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen1282", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953084", + "values_compared": 109 + }, + { + "max_rel_err": 0.0, + "name": "gen1283", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953085", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1284", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953086", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1285", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953087", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1286", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953088", + "values_compared": 83 + }, + { + "max_rel_err": 0.0, + "name": "gen1287", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953089", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1288", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953090", + "values_compared": 67 + }, + { + "max_rel_err": 0.0, + "name": "gen1289", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953091", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1290", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953092", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1291", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953093", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen1292", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953094", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen1293", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953095", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1294", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953096", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1295", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953097", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen1296", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953098", + "values_compared": 154 + }, + { + "max_rel_err": 0.0, + "name": "gen1297", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953099", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1298", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953100", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen1299", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953101", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1300", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953102", + "values_compared": 136 + }, + { + "max_rel_err": 0.0, + "name": "gen1301", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953103", + "values_compared": 119 + }, + { + "max_rel_err": 0.0, + "name": "gen1302", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953104", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1303", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953105", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1304", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953106", + "values_compared": 160 + }, + { + "max_rel_err": 0.0, + "name": "gen1305", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953107", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1306", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953108", + "values_compared": 51 + }, + { + "max_rel_err": 0.0, + "name": "gen1307", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953109", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen1308", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953110", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1309", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953111", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1310", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953112", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1311", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953113", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1312", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953114", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen1313", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953115", + "values_compared": 91 + }, + { + "max_rel_err": 0.0, + "name": "gen1314", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953116", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1315", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953117", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1316", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953118", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "gen1317", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953119", + "values_compared": 61 + }, + { + "max_rel_err": 0.0, + "name": "gen1318", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953120", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1319", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953121", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1320", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953122", + "values_compared": 64 + }, + { + "max_rel_err": 0.0, + "name": "gen1321", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953123", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1322", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953124", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1323", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953125", + "values_compared": 155 + }, + { + "max_rel_err": 0.0, + "name": "gen1324", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953126", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1325", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953127", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1326", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953128", + "values_compared": 347 + }, + { + "max_rel_err": 0.0, + "name": "gen1327", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953129", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "gen1328", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953130", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1329", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953131", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen1330", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953132", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1331", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953133", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1332", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953134", + "values_compared": 138 + }, + { + "max_rel_err": 0.0, + "name": "gen1333", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953135", + "values_compared": 60 + }, + { + "max_rel_err": 0.0, + "name": "gen1334", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953136", + "values_compared": 122 + }, + { + "max_rel_err": 0.0, + "name": "gen1335", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953137", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen1336", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953138", + "values_compared": 51 + }, + { + "max_rel_err": 0.0, + "name": "gen1337", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953139", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1338", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953140", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1339", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953141", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "gen1340", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953142", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen1341", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953143", + "values_compared": 731 + }, + { + "max_rel_err": 0.0, + "name": "gen1342", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953144", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1343", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953145", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen1344", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953146", + "values_compared": 73 + }, + { + "max_rel_err": 0.0, + "name": "gen1345", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953147", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1346", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953148", + "values_compared": 180 + }, + { + "max_rel_err": 0.0, + "name": "gen1347", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953149", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1348", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953150", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1349", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953151", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1350", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953152", + "values_compared": 192 + }, + { + "max_rel_err": 0.0, + "name": "gen1351", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953153", + "values_compared": 94 + }, + { + "max_rel_err": 0.0, + "name": "gen1352", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953154", + "values_compared": 83 + }, + { + "max_rel_err": 0.0, + "name": "gen1353", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953155", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen1354", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953156", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1355", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953157", + "values_compared": 151 + }, + { + "deferred": { + "symbol": "SmSurface::EvaluateNormal", + "unit": "surface.surface_p7" + }, + "max_rel_err": 0.0, + "name": "gen1356", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581953158", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1357", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953159", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1358", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953160", + "values_compared": 37 + }, + { + "max_rel_err": 0.0, + "name": "gen1359", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953161", + "values_compared": 100 + }, + { + "max_rel_err": 0.0, + "name": "gen1360", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953162", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1361", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953163", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1362", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953164", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1363", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953165", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen1364", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953166", + "values_compared": 60 + }, + { + "max_rel_err": 0.0, + "name": "gen1365", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953167", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen1366", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953168", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1367", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953169", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen1368", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953170", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen1369", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953171", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1370", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953172", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1371", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953173", + "values_compared": 58 + }, + { + "max_rel_err": 0.0, + "name": "gen1372", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953174", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1373", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953175", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1374", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953176", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1375", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953177", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "gen1376", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953178", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1377", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953179", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen1378", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953180", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1379", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953181", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen1380", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953182", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1381", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953183", + "values_compared": 51 + }, + { + "max_rel_err": 0.0, + "name": "gen1382", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953184", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen1383", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953185", + "values_compared": 140 + }, + { + "max_rel_err": 0.0, + "name": "gen1384", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953186", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen1385", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953187", + "values_compared": 89 + }, + { + "max_rel_err": 0.0, + "name": "gen1386", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953188", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1387", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953189", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1388", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953190", + "values_compared": 584 + }, + { + "max_rel_err": 0.0, + "name": "gen1389", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953191", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1390", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953192", + "values_compared": 122 + }, + { + "max_rel_err": 0.0, + "name": "gen1391", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953193", + "values_compared": 187 + }, + { + "max_rel_err": 0.0, + "name": "gen1392", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953194", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1393", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953195", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen1394", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953196", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1395", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953197", + "values_compared": 83 + }, + { + "max_rel_err": 0.0, + "name": "gen1396", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953198", + "values_compared": 155 + }, + { + "max_rel_err": 0.0, + "name": "gen1397", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953199", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1398", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953200", + "values_compared": 273 + }, + { + "max_rel_err": 0.0, + "name": "gen1399", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953201", + "values_compared": 208 + }, + { + "max_rel_err": 0.0, + "name": "gen1400", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953202", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "gen1401", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953203", + "values_compared": 61 + }, + { + "max_rel_err": 0.0, + "name": "gen1402", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953204", + "values_compared": 194 + }, + { + "max_rel_err": 0.0, + "name": "gen1403", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953205", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1404", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953206", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1405", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953207", + "values_compared": 141 + }, + { + "max_rel_err": 0.0, + "name": "gen1406", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953208", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1407", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953209", + "values_compared": 230 + }, + { + "max_rel_err": 0.0, + "name": "gen1408", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953210", + "values_compared": 181 + }, + { + "max_rel_err": 0.0, + "name": "gen1409", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953211", + "values_compared": 276 + }, + { + "max_rel_err": 0.0, + "name": "gen1410", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953212", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1411", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953213", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1412", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953214", + "values_compared": 212 + }, + { + "max_rel_err": 0.0, + "name": "gen1413", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953215", + "values_compared": 282 + }, + { + "max_rel_err": 0.0, + "name": "gen1414", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953216", + "values_compared": 262 + }, + { + "max_rel_err": 0.0, + "name": "gen1415", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953217", + "values_compared": 100 + }, + { + "max_rel_err": 0.0, + "name": "gen1416", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953218", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1417", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953219", + "values_compared": 69 + }, + { + "max_rel_err": 0.0, + "name": "gen1418", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953220", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "gen1419", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953221", + "values_compared": 55 + }, + { + "deferred": { + "symbol": "SmSurface::EvaluateNormal", + "unit": "surface.surface_p7" + }, + "max_rel_err": 0.0, + "name": "gen1420", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581953222", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1421", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953223", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1422", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953224", + "values_compared": 506 + }, + { + "max_rel_err": 0.0, + "name": "gen1423", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953225", + "values_compared": 33 + }, + { + "max_rel_err": 0.0, + "name": "gen1424", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953226", + "values_compared": 140 + }, + { + "max_rel_err": 0.0, + "name": "gen1425", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953227", + "values_compared": 128 + }, + { + "max_rel_err": 0.0, + "name": "gen1426", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953228", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1427", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953229", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1428", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953230", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1429", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953231", + "values_compared": 117 + }, + { + "max_rel_err": 0.0, + "name": "gen1430", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953232", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1431", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953233", + "values_compared": 218 + }, + { + "max_rel_err": 0.0, + "name": "gen1432", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953234", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1433", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953235", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1434", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953236", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1435", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953237", + "values_compared": 404 + }, + { + "max_rel_err": 0.0, + "name": "gen1436", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953238", + "values_compared": 284 + }, + { + "max_rel_err": 0.0, + "name": "gen1437", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953239", + "values_compared": 47 + }, + { + "max_rel_err": 0.0, + "name": "gen1438", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953240", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen1439", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953241", + "values_compared": 94 + }, + { + "max_rel_err": 0.0, + "name": "gen1440", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953242", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1441", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953243", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1442", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953244", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1443", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953245", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1444", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953246", + "values_compared": 64 + }, + { + "max_rel_err": 0.0, + "name": "gen1445", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953247", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1446", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953248", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1447", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953249", + "values_compared": 123 + }, + { + "max_rel_err": 0.0, + "name": "gen1448", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953250", + "values_compared": 59 + }, + { + "max_rel_err": 0.0, + "name": "gen1449", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953251", + "values_compared": 39 + }, + { + "max_rel_err": 0.0, + "name": "gen1450", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953252", + "values_compared": 51 + }, + { + "max_rel_err": 0.0, + "name": "gen1451", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953253", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1452", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953254", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1453", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953255", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1454", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953256", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "gen1455", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953257", + "values_compared": 46 + }, + { + "max_rel_err": 0.0, + "name": "gen1456", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953258", + "values_compared": 131 + }, + { + "max_rel_err": 0.0, + "name": "gen1457", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953259", + "values_compared": 73 + }, + { + "max_rel_err": 0.0, + "name": "gen1458", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953260", + "values_compared": 38 + }, + { + "max_rel_err": 0.0, + "name": "gen1459", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953261", + "values_compared": 92 + }, + { + "max_rel_err": 0.0, + "name": "gen1460", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953262", + "values_compared": 157 + }, + { + "max_rel_err": 0.0, + "name": "gen1461", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953263", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1462", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953264", + "values_compared": 145 + }, + { + "max_rel_err": 0.0, + "name": "gen1463", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953265", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen1464", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953266", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen1465", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953267", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1466", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953268", + "values_compared": 214 + }, + { + "max_rel_err": 0.0, + "name": "gen1467", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953269", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1468", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953270", + "values_compared": 94 + }, + { + "max_rel_err": 0.0, + "name": "gen1469", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953271", + "values_compared": 38 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1470", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581953272", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1471", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953273", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "gen1472", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953274", + "values_compared": 280 + }, + { + "max_rel_err": 0.0, + "name": "gen1473", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953275", + "values_compared": 152 + }, + { + "max_rel_err": 0.0, + "name": "gen1474", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953276", + "values_compared": 54 + }, + { + "deferred": { + "symbol": "SmSurface::EvaluateNormal", + "unit": "surface.surface_p7" + }, + "max_rel_err": 0.0, + "name": "gen1475", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12494169295581953277", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1476", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953278", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1477", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953279", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1478", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953280", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1479", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953281", + "values_compared": 196 + }, + { + "max_rel_err": 0.0, + "name": "gen1480", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953282", + "values_compared": 110 + }, + { + "max_rel_err": 0.0, + "name": "gen1481", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953283", + "values_compared": 94 + }, + { + "max_rel_err": 0.0, + "name": "gen1482", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953284", + "values_compared": 164 + }, + { + "max_rel_err": 0.0, + "name": "gen1483", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953285", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1484", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953286", + "values_compared": 78 + }, + { + "max_rel_err": 0.0, + "name": "gen1485", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953287", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1486", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953288", + "values_compared": 116 + }, + { + "max_rel_err": 0.0, + "name": "gen1487", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953289", + "values_compared": 269 + }, + { + "max_rel_err": 0.0, + "name": "gen1488", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953290", + "values_compared": 163 + }, + { + "max_rel_err": 0.0, + "name": "gen1489", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953291", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1490", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953292", + "values_compared": 198 + }, + { + "max_rel_err": 0.0, + "name": "gen1491", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953293", + "values_compared": 230 + }, + { + "max_rel_err": 0.0, + "name": "gen1492", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953294", + "values_compared": 50 + }, + { + "max_rel_err": 0.0, + "name": "gen1493", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953295", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1494", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953296", + "values_compared": 37 + }, + { + "max_rel_err": 0.0, + "name": "gen1495", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953297", + "values_compared": 61 + }, + { + "max_rel_err": 0.0, + "name": "gen1496", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953298", + "values_compared": 281 + }, + { + "max_rel_err": 0.0, + "name": "gen1497", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953299", + "values_compared": 61 + }, + { + "max_rel_err": 0.0, + "name": "gen1498", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953300", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "gen1499", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12494169295581953301", + "values_compared": 278 + }, + { + "max_rel_err": 0.0, + "name": "edge_hill_on_plane", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "edge_hill_on_plane_curve_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "edge_cylinder_on_plane", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "edge_cylinder_on_plane_curve_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "edge_cylinder_on_plane_prev", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "edge_cylinder_on_plane_prev_curve_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "edge_saddle_on_plane", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "edge_saddle_on_plane_curve_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "edge_saddle_on_plane_opposite_normal", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "edge_saddle_on_plane_opposite_normal_curve_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "edge_plane_on_plane", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "edge_plane_on_plane_curve_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "edge_coincident_spheres", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "edge_coincident_spheres_curve_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "edge_coincident_saddles_prev", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "edge_coincident_saddles_prev_curve_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "edge_cylinders_tangent_line", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "edge_cylinders_tangent_line_curve_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "edge_nested_bowls", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "edge_nested_bowls_curve_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "edge_saddle_on_bowl", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "edge_saddle_on_bowl_curve_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "edge_two_saddles", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "edge_two_saddles_curve_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "edge_cylinder_on_saddle", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 112 + }, + { + "max_rel_err": 0.0, + "name": "edge_cylinder_on_saddle_curve_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "edge_dupin_kinds", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 686 + } + ], + "cases_both_errored": 0, + "cases_deferred": 16, + "cases_failed": 0, + "cases_passed": 1511, + "cases_total": 1527, + "deferred_by_unit": { + "surface.surface_p11": 4, + "surface.surface_p7": 12 + }, + "max_rel_err": 0.0, + "pass": true, + "rel_tol": 1e-9, + "seeds": 16, + "status": "partial", + "unit": "intersect.adv_surface_intersector" +} diff --git a/reports/difftest/surface.surface_p2.json b/reports/difftest/surface.surface_p2.json index f49a0f0e24..cfe73363a8 100644 --- a/reports/difftest/surface.surface_p2.json +++ b/reports/difftest/surface.surface_p2.json @@ -575,8 +575,8 @@ }, { "deferred": { - "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", - "unit": "intersect.adv_surface_intersector" + "symbol": "SmSurfaceIntersector::DoIntersection", + "unit": "intersect.surface_intersector_p5" }, "max_rel_err": 0.0, "name": "gssi_crossing_planes", @@ -7280,7 +7280,7 @@ "cases_passed": 789, "cases_total": 869, "deferred_by_unit": { - "intersect.adv_surface_intersector": 1, + "intersect.surface_intersector_p5": 1, "surface.plane_p2": 11, "surface.surface_p1": 13, "surface.surface_p5": 36, From aa451a0ff9831f10c6c931bc5f1e5546ea87ba72 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Tue, 13 Oct 2026 21:32:19 -0400 Subject: [PATCH 20/54] surface.plane_p2: difftest reports (partial, 2127 cases); surf_of_revolution_p1 green Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01FsWWaoeGNWKgzeGrF2Pkn5 --- reports/difftest/surface.plane_p2.json | 17071 ++++++++++++++++ .../surface.surf_of_revolution_p1.json | 320 +- 2 files changed, 17168 insertions(+), 223 deletions(-) create mode 100644 reports/difftest/surface.plane_p2.json diff --git a/reports/difftest/surface.plane_p2.json b/reports/difftest/surface.plane_p2.json new file mode 100644 index 0000000000..1583ce9407 --- /dev/null +++ b/reports/difftest/surface.plane_p2.json @@ -0,0 +1,17071 @@ +{ + "abs_floors": [], + "cases": [ + { + "max_rel_err": 0.0, + "name": "pp_infinite_perp", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#0", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "pp_infinite_oblique_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#1", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "pp_bounded_cross", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#2", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "pp_bounded_one_infinite", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#3", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "pp_infinite_one_bounded", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#4", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "pp_touch_edge", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#5", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "pp_touch_corner_point", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#6", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "pp_disjoint", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#7", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "pp_miss_domain", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#8", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "pp_parallel_offset_nurb", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#9", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "pp_coincident_nurb", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#10", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "pp_coincident_within_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#11", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "pp_coincident_no_nurb", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#12", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "pp_near_parallel", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#13", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "pp_slightly_tilted", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#14", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "pp_same_object", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#15", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "pp_huge", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#16", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "pp_tiny", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#17", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "pp_sub_domain", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#18", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gsi_plane_cross", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#19", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gsi_plane_parallel", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#20", + "values_compared": 6 + }, + { + "deferred": { + "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", + "unit": "intersect.adv_surface_intersector" + }, + "max_rel_err": 0.0, + "name": "gsi_plane_coincident", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.plane_p2/edge.json#21", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", + "unit": "intersect.adv_surface_intersector" + }, + "max_rel_err": 0.0, + "name": "gsi_bspline", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.plane_p2/edge.json#22", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "trim_segment_inside", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#23", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "trim_segment_outside", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#24", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "trim_segment_through_corners", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#25", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "trim_segment_off_plane", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#26", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "trim_segment_piercing", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#27", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "trim_circle_tangent_inside", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#28", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "trim_circle_tangent_outside", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#29", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "trim_ellipse_arc", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#30", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "trim_ellipse_big_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#31", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "trim_bspline_wiggle", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#32", + "values_compared": 42 + }, + { + "max_rel_err": 0.0, + "name": "trim_bspline_along_edge", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#33", + "values_compared": 31 + }, + { + "max_rel_err": 0.0, + "name": "trim_rational_arc", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#34", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "line_degenerate", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#35", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "line_short", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#36", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "line_zero_tol_zero_len", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#37", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "line_outside", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#38", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "line_touch_corner", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#39", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "ell_zero_radii_in", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#40", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "ell_zero_radii_out", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#41", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "ell_zero_rx", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#42", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "ell_zero_ry", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#43", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "ell_inside_full", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#44", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "ell_outside", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#45", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "ell_contains_rect", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#46", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "circ_tangent_inside", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#47", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "circ_tangent_outside", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#48", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "circ_cross_right", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#49", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "circ_cross_right_opposite", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#50", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "circ_cross_right_arc", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#51", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "circ_cross_right_arc2", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#52", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "circ_cross_all_sides", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#53", + "values_compared": 174 + }, + { + "max_rel_err": 0.0, + "name": "ell_cross_all_sides", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#54", + "values_compared": 174 + }, + { + "max_rel_err": 0.0, + "name": "ell_rotated", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#55", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "circ_corner", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#56", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "circ_through_corner", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#57", + "values_compared": 94 + }, + { + "max_rel_err": 0.0, + "name": "circ_big_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#58", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "circ_tiny", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#59", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "circ_huge_plane", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#60", + "values_compared": 131 + }, + { + "max_rel_err": 0.0, + "name": "xf_identity", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#61", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "xf_identity_unit_scale", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#62", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "xf_translate", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#63", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "xf_rotate", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#64", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "xf_scale_iso", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#65", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "xf_scale_iso_rot", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#66", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "xf_scale_aniso", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#67", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "xf_no_nurb", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#68", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "xf_infinite", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#69", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "off_pos", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#70", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "off_neg", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#71", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "off_zero", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#72", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "off_canonical", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#73", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "trimdom_sub", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#74", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "trimdom_same", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#75", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "trimdom_tol_edge", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#76", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "trimdom_outside", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#77", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "trimdom_no_nurb", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#78", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "isplane_bilinear_flat", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#79", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "isplane_bilinear_twisted", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#80", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "isplane_skewed", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#81", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "isplane_nearly_flat_scale", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#82", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "isplane_quadratic_flat", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#83", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "isplane_rational_flat", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#84", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "isplane_cylinder_patch", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#85", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "db_bin_30", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#86", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "db_bin_33", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#87", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "db_ascii_30", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#88", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "db_ascii_33", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#89", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "db_ascii_cut_points", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#90", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "db_ascii_cut_knot", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#91", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "db_bin_bad_rat", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#92", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "db_bin_skew_axes", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#93", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "db_bin_inverted_domain", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#94", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "xf_scale_zero", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#95", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "xf_scale_negative", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#96", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "trim_circle_reversed_domain", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#97", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "trim_circle_negative_radius", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#98", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "trim_ellipse_parallel_axes", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#99", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "trim_circle_zero_axis", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#100", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "trim_circle_tiny", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/edge.json#101", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "rect_edge_0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#0 (upstream tests/SM_API_test/src/TestSmCurves.cpp:424)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "rect_edge_line_0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#1 (upstream tests/SM_API_test/src/TestSmCurves.cpp:424)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "rect_edge_1", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#2 (upstream tests/SM_API_test/src/TestSmCurves.cpp:424)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "rect_edge_line_1", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#3 (upstream tests/SM_API_test/src/TestSmCurves.cpp:424)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "rect_edge_2", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#4 (upstream tests/SM_API_test/src/TestSmCurves.cpp:424)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "rect_edge_line_2", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#5 (upstream tests/SM_API_test/src/TestSmCurves.cpp:424)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "rect_edge_3", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#6 (upstream tests/SM_API_test/src/TestSmCurves.cpp:424)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "rect_edge_line_3", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#7 (upstream tests/SM_API_test/src/TestSmCurves.cpp:424)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "hex_edge_0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#8 (upstream tests/SM_API_test/src/TestSmCurves.cpp:462)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "hex_edge_line_0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#9 (upstream tests/SM_API_test/src/TestSmCurves.cpp:462)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "hex_edge_1", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#10 (upstream tests/SM_API_test/src/TestSmCurves.cpp:462)", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "hex_edge_line_1", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#11 (upstream tests/SM_API_test/src/TestSmCurves.cpp:462)", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "hex_edge_2", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#12 (upstream tests/SM_API_test/src/TestSmCurves.cpp:462)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "hex_edge_line_2", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#13 (upstream tests/SM_API_test/src/TestSmCurves.cpp:462)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "hex_edge_3", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#14 (upstream tests/SM_API_test/src/TestSmCurves.cpp:462)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "hex_edge_line_3", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#15 (upstream tests/SM_API_test/src/TestSmCurves.cpp:462)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "hex_edge_4", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#16 (upstream tests/SM_API_test/src/TestSmCurves.cpp:462)", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "hex_edge_line_4", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#17 (upstream tests/SM_API_test/src/TestSmCurves.cpp:462)", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "hex_edge_5", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#18 (upstream tests/SM_API_test/src/TestSmCurves.cpp:462)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "hex_edge_line_5", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#19 (upstream tests/SM_API_test/src/TestSmCurves.cpp:462)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "hex_circle_trim", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#20 (upstream tests/SM_API_test/src/TestSmCurves.cpp:462)", + "values_compared": 141 + }, + { + "max_rel_err": 0.0, + "name": "hex_circle_ellipse", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#21 (upstream tests/SM_API_test/src/TestSmCurves.cpp:462)", + "values_compared": 131 + }, + { + "max_rel_err": 0.0, + "name": "far_rect_line", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#22 (upstream tests/SM_API_test/src/TestSmCurves.cpp:424)", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "far_rect_trim_width", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#23 (upstream tests/SM_API_test/src/TestSmCurves.cpp:424)", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "far_rect_offset", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/upstream.json#24 (upstream tests/SM_API_test/src/TestSmCurves.cpp:424)", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0000", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465399", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0001", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465400", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0002", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465401", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0003", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465402", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0004", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465403", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0005", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465404", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0006", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465405", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0007", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465406", + "values_compared": 157 + }, + { + "max_rel_err": 0.0, + "name": "gen0008", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465407", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0009", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465408", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0010", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465409", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0011", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465410", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0012", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465411", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0013", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465412", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0014", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465413", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0015", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465414", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0016", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465415", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0017", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465416", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0018", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465417", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0019", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465418", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0020", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465419", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0021", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465420", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0022", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465421", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0023", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465422", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0024", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465423", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0025", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465424", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0026", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465425", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0027", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465426", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0028", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465427", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0029", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465428", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0030", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465429", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0031", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465430", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0032", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465431", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0033", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465432", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0034", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465433", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0035", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465434", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0036", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465435", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0037", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465436", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0038", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465437", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0039", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465438", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0040", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465439", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0041", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465440", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0042", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465441", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0043", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465442", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0044", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465443", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0045", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465444", + "values_compared": 111 + }, + { + "max_rel_err": 0.0, + "name": "gen0046", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465445", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0047", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465446", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0048", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465447", + "values_compared": 141 + }, + { + "max_rel_err": 0.0, + "name": "gen0049", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465448", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0050", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465449", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0051", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465450", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0052", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465451", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0053", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465452", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0054", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465453", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0055", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465454", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0056", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465455", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0057", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465456", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0058", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465457", + "values_compared": 68 + }, + { + "max_rel_err": 0.0, + "name": "gen0059", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465458", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0060", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465459", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0061", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465460", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0062", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465461", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0063", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465462", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0064", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465463", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0065", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465464", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0066", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465465", + "values_compared": 148 + }, + { + "max_rel_err": 0.0, + "name": "gen0067", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465466", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0068", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465467", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0069", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465468", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0070", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465469", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0071", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465470", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0072", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465471", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0073", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465472", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0074", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465473", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0075", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465474", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0076", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465475", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0077", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465476", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0078", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465477", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0079", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465478", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0080", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465479", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0081", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465480", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0082", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465481", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0083", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465482", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0084", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465483", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0085", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465484", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0086", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465485", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0087", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465486", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0088", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465487", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0089", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465488", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0090", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465489", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0091", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465490", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0092", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465491", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0093", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465492", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0094", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465493", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0095", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465494", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0096", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465495", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0097", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465496", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0098", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465497", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0099", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465498", + "values_compared": 53 + }, + { + "max_rel_err": 0.0, + "name": "gen0100", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465499", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0101", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465500", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0102", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465501", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0103", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465502", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0104", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465503", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0105", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465504", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0106", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465505", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0107", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465506", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0108", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465507", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0109", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465508", + "values_compared": 98 + }, + { + "max_rel_err": 0.0, + "name": "gen0110", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465509", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0111", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465510", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0112", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465511", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0113", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465512", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0114", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465513", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0115", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465514", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0116", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465515", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0117", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465516", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0118", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465517", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0119", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465518", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0120", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465519", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0121", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465520", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0122", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465521", + "values_compared": 98 + }, + { + "max_rel_err": 0.0, + "name": "gen0123", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465522", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0124", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465523", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0125", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465524", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0126", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465525", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0127", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465526", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0128", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465527", + "values_compared": 37 + }, + { + "max_rel_err": 0.0, + "name": "gen0129", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465528", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0130", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465529", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0131", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465530", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0132", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465531", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0133", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465532", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0134", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465533", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0135", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465534", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0136", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465535", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0137", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465536", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0138", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465537", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0139", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465538", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0140", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465539", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0141", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465540", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0142", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465541", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0143", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465542", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0144", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465543", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0145", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465544", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0146", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465545", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0147", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465546", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0148", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465547", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0149", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465548", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0150", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465549", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0151", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465550", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0152", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465551", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0153", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465552", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0154", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465553", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0155", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465554", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0156", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465555", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0157", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465556", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0158", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465557", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0159", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465558", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0160", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465559", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0161", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465560", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0162", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465561", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0163", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465562", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0164", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465563", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0165", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465564", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0166", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465565", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0167", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465566", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0168", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465567", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0169", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465568", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0170", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465569", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0171", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465570", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0172", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465571", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0173", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465572", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0174", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465573", + "values_compared": 131 + }, + { + "max_rel_err": 0.0, + "name": "gen0175", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465574", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0176", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465575", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0177", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465576", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0178", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465577", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0179", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465578", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0180", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465579", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0181", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465580", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0182", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465581", + "values_compared": 98 + }, + { + "max_rel_err": 0.0, + "name": "gen0183", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465582", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0184", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465583", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0185", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465584", + "values_compared": 118 + }, + { + "max_rel_err": 0.0, + "name": "gen0186", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465585", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0187", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465586", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0188", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465587", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0189", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465588", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0190", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465589", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0191", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465590", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0192", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465591", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0193", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465592", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0194", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465593", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0195", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465594", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0196", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465595", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0197", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465596", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0198", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465597", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0199", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465598", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0200", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465599", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0201", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465600", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0202", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465601", + "values_compared": 98 + }, + { + "max_rel_err": 0.0, + "name": "gen0203", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465602", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0204", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465603", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0205", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465604", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0206", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465605", + "values_compared": 68 + }, + { + "max_rel_err": 0.0, + "name": "gen0207", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465606", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0208", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465607", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0209", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465608", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0210", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465609", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0211", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465610", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0212", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465611", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0213", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465612", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0214", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465613", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0215", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465614", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0216", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465615", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0217", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465616", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0218", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465617", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0219", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465618", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0220", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465619", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0221", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465620", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0222", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465621", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0223", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465622", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0224", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465623", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0225", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465624", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0226", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465625", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0227", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465626", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0228", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465627", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0229", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465628", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0230", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465629", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0231", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465630", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0232", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465631", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0233", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465632", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0234", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465633", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0235", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465634", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0236", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465635", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0237", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465636", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0238", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465637", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0239", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465638", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0240", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465639", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0241", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465640", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0242", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465641", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0243", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465642", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0244", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465643", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0245", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465644", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0246", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465645", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0247", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465646", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0248", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465647", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0249", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465648", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0250", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465649", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0251", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465650", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0252", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465651", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0253", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465652", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0254", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465653", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0255", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465654", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0256", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465655", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0257", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465656", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0258", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465657", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0259", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465658", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0260", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465659", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0261", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465660", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0262", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465661", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0263", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465662", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0264", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465663", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0265", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465664", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0266", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465665", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0267", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465666", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0268", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465667", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0269", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465668", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0270", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465669", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0271", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465670", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0272", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465671", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0273", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465672", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0274", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465673", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0275", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465674", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0276", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465675", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0277", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465676", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0278", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465677", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0279", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465678", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0280", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465679", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0281", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465680", + "values_compared": 108 + }, + { + "max_rel_err": 0.0, + "name": "gen0282", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465681", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0283", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465682", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0284", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465683", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0285", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465684", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0286", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465685", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0287", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465686", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0288", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465687", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0289", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465688", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0290", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465689", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0291", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465690", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0292", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465691", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0293", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465692", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0294", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465693", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0295", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465694", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0296", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465695", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0297", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465696", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0298", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465697", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0299", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465698", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0300", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465699", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0301", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465700", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0302", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465701", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0303", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465702", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0304", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465703", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0305", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465704", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0306", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465705", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0307", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465706", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0308", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465707", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0309", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465708", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0310", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465709", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0311", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465710", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0312", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465711", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0313", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465712", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0314", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465713", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0315", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465714", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0316", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465715", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0317", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465716", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0318", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465717", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0319", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465718", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0320", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465719", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0321", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465720", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0322", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465721", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0323", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465722", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0324", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465723", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0325", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465724", + "values_compared": 37 + }, + { + "max_rel_err": 0.0, + "name": "gen0326", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465725", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0327", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465726", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0328", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465727", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0329", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465728", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0330", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465729", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0331", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465730", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0332", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465731", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0333", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465732", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0334", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465733", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0335", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465734", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0336", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465735", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0337", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465736", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0338", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465737", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0339", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465738", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0340", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465739", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0341", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465740", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0342", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465741", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0343", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465742", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0344", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465743", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0345", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465744", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0346", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465745", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0347", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465746", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0348", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465747", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0349", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465748", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0350", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465749", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0351", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465750", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0352", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465751", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0353", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465752", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0354", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465753", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0355", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465754", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0356", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465755", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "gen0357", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465756", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0358", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465757", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0359", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465758", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0360", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465759", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0361", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465760", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0362", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465761", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0363", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465762", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0364", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465763", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0365", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465764", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0366", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465765", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0367", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465766", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0368", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465767", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0369", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465768", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0370", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465769", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0371", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465770", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0372", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465771", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0373", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465772", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0374", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465773", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0375", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465774", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0376", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465775", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0377", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465776", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0378", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465777", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0379", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465778", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0380", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465779", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0381", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465780", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0382", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465781", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0383", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465782", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0384", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465783", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0385", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465784", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0386", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465785", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0387", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465786", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0388", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465787", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0389", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465788", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0390", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465789", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0391", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465790", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0392", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465791", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0393", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465792", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0394", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465793", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0395", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465794", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0396", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465795", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0397", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465796", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0398", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465797", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0399", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465798", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0400", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465799", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0401", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465800", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0402", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465801", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0403", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465802", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0404", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465803", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0405", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465804", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0406", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465805", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0407", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465806", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0408", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465807", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0409", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465808", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0410", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465809", + "values_compared": 108 + }, + { + "max_rel_err": 0.0, + "name": "gen0411", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465810", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0412", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465811", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0413", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465812", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0414", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465813", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0415", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465814", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0416", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465815", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0417", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465816", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0418", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465817", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0419", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465818", + "values_compared": 47 + }, + { + "max_rel_err": 0.0, + "name": "gen0420", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465819", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0421", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465820", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0422", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465821", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0423", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465822", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0424", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465823", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0425", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465824", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0426", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465825", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0427", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465826", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0428", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465827", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0429", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465828", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0430", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465829", + "values_compared": 68 + }, + { + "max_rel_err": 0.0, + "name": "gen0431", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465830", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0432", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465831", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0433", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465832", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0434", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465833", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0435", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465834", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0436", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465835", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0437", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465836", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0438", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465837", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0439", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465838", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0440", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465839", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0441", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465840", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0442", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465841", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0443", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465842", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0444", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465843", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0445", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465844", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0446", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465845", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0447", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465846", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0448", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465847", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0449", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465848", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0450", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465849", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0451", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465850", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0452", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465851", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0453", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465852", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0454", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465853", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0455", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465854", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0456", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465855", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0457", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465856", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0458", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465857", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0459", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465858", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0460", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465859", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0461", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465860", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0462", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465861", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0463", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465862", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0464", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465863", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0465", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465864", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0466", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465865", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0467", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465866", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0468", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465867", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0469", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465868", + "values_compared": 108 + }, + { + "max_rel_err": 0.0, + "name": "gen0470", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465869", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0471", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465870", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0472", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465871", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0473", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465872", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0474", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465873", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0475", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465874", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0476", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465875", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0477", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465876", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0478", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465877", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0479", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465878", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0480", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465879", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0481", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465880", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0482", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465881", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0483", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465882", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0484", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465883", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0485", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465884", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0486", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465885", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0487", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465886", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0488", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465887", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0489", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465888", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0490", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465889", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0491", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465890", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0492", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465891", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0493", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465892", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0494", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465893", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0495", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465894", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0496", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465895", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0497", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465896", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0498", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465897", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0499", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465898", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0500", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465899", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0501", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465900", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0502", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465901", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0503", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465902", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0504", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465903", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0505", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465904", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0506", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465905", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0507", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465906", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0508", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465907", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0509", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465908", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0510", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465909", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0511", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465910", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0512", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465911", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0513", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465912", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0514", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465913", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0515", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465914", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "gen0516", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465915", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0517", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465916", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0518", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465917", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0519", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465918", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0520", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465919", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0521", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465920", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0522", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465921", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0523", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465922", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0524", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465923", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0525", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465924", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0526", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465925", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0527", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465926", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0528", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465927", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0529", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465928", + "values_compared": 78 + }, + { + "max_rel_err": 0.0, + "name": "gen0530", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465929", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "gen0531", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465930", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0532", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465931", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0533", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465932", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0534", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465933", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0535", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465934", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0536", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465935", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0537", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465936", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0538", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465937", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0539", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465938", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0540", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465939", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0541", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465940", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0542", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465941", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0543", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465942", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0544", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465943", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0545", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465944", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0546", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465945", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0547", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465946", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0548", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465947", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0549", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465948", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0550", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465949", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0551", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465950", + "values_compared": 46 + }, + { + "max_rel_err": 0.0, + "name": "gen0552", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465951", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0553", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465952", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0554", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465953", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0555", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465954", + "values_compared": 68 + }, + { + "max_rel_err": 0.0, + "name": "gen0556", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465955", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0557", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465956", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0558", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465957", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0559", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465958", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0560", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465959", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0561", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465960", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0562", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465961", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0563", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465962", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0564", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465963", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0565", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465964", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0566", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465965", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0567", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465966", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0568", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465967", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0569", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465968", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0570", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465969", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0571", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465970", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0572", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465971", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0573", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465972", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0574", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465973", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0575", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465974", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0576", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465975", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0577", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465976", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0578", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465977", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0579", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465978", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0580", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465979", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0581", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465980", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0582", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465981", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0583", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465982", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0584", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465983", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0585", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465984", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0586", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465985", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "gen0587", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465986", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0588", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465987", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0589", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465988", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0590", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465989", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0591", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465990", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0592", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465991", + "values_compared": 68 + }, + { + "max_rel_err": 0.0, + "name": "gen0593", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465992", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0594", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465993", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0595", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465994", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0596", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465995", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0597", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465996", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0598", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465997", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0599", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465998", + "values_compared": 99 + }, + { + "max_rel_err": 0.0, + "name": "gen0600", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493465999", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0601", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466000", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0602", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466001", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0603", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466002", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0604", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466003", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0605", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466004", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0606", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466005", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0607", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466006", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0608", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466007", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0609", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466008", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0610", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466009", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0611", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466010", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0612", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466011", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0613", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466012", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0614", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466013", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0615", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466014", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0616", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466015", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0617", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466016", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0618", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466017", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0619", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466018", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0620", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466019", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0621", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466020", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0622", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466021", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0623", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466022", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0624", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466023", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0625", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466024", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0626", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466025", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0627", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466026", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0628", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466027", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0629", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466028", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0630", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466029", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0631", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466030", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0632", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466031", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0633", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466032", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0634", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466033", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0635", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466034", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0636", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466035", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0637", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466036", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0638", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466037", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0639", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466038", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0640", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466039", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0641", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466040", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0642", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466041", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0643", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466042", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0644", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466043", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0645", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466044", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0646", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466045", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0647", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466046", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0648", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466047", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0649", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466048", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0650", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466049", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0651", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466050", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0652", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466051", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0653", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466052", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0654", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466053", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0655", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466054", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0656", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466055", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0657", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466056", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0658", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466057", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0659", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466058", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0660", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466059", + "values_compared": 41 + }, + { + "max_rel_err": 0.0, + "name": "gen0661", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466060", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0662", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466061", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0663", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466062", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0664", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466063", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0665", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466064", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0666", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466065", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0667", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466066", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0668", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466067", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0669", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466068", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0670", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466069", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0671", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466070", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0672", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466071", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0673", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466072", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0674", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466073", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0675", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466074", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0676", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466075", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0677", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466076", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0678", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466077", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0679", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466078", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0680", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466079", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0681", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466080", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0682", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466081", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0683", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466082", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0684", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466083", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0685", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466084", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0686", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466085", + "values_compared": 151 + }, + { + "max_rel_err": 0.0, + "name": "gen0687", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466086", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0688", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466087", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0689", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466088", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0690", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466089", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0691", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466090", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0692", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466091", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0693", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466092", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0694", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466093", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen0695", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466094", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "gen0696", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466095", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0697", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466096", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0698", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466097", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0699", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466098", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0700", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466099", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0701", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466100", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0702", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466101", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0703", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466102", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0704", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466103", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0705", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466104", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0706", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466105", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0707", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466106", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0708", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466107", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0709", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466108", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0710", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466109", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0711", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466110", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0712", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466111", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0713", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466112", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0714", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466113", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0715", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466114", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0716", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466115", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0717", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466116", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0718", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466117", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0719", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466118", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0720", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466119", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0721", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466120", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0722", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466121", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0723", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466122", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0724", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466123", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0725", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466124", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0726", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466125", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0727", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466126", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0728", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466127", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0729", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466128", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0730", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466129", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0731", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466130", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0732", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466131", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0733", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466132", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0734", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466133", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0735", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466134", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0736", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466135", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0737", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466136", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0738", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466137", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0739", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466138", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0740", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466139", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0741", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466140", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0742", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466141", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0743", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466142", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0744", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466143", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0745", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466144", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0746", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466145", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0747", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466146", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0748", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466147", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0749", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466148", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0750", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466149", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0751", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466150", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0752", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466151", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0753", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466152", + "values_compared": 41 + }, + { + "max_rel_err": 0.0, + "name": "gen0754", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466153", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0755", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466154", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0756", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466155", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0757", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466156", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0758", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466157", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0759", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466158", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0760", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466159", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0761", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466160", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0762", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466161", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0763", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466162", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0764", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466163", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0765", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466164", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0766", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466165", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0767", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466166", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0768", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466167", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0769", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466168", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0770", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466169", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0771", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466170", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0772", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466171", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0773", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466172", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0774", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466173", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0775", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466174", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0776", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466175", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0777", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466176", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0778", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466177", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0779", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466178", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0780", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466179", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0781", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466180", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0782", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466181", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0783", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466182", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0784", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466183", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0785", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466184", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0786", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466185", + "values_compared": 108 + }, + { + "max_rel_err": 0.0, + "name": "gen0787", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466186", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0788", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466187", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0789", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466188", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0790", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466189", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0791", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466190", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0792", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466191", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0793", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466192", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0794", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466193", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0795", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466194", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0796", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466195", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0797", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466196", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0798", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466197", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0799", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466198", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0800", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466199", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0801", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466200", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0802", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466201", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0803", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466202", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0804", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466203", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0805", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466204", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0806", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466205", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen0807", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466206", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0808", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466207", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0809", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466208", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0810", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466209", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0811", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466210", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0812", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466211", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0813", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466212", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0814", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466213", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0815", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466214", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0816", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466215", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0817", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466216", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0818", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466217", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0819", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466218", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0820", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466219", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0821", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466220", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0822", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466221", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0823", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466222", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0824", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466223", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0825", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466224", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0826", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466225", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0827", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466226", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0828", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466227", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0829", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466228", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0830", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466229", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0831", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466230", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0832", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466231", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0833", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466232", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0834", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466233", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0835", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466234", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0836", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466235", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0837", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466236", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0838", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466237", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0839", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466238", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0840", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466239", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0841", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466240", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0842", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466241", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0843", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466242", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0844", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466243", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0845", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466244", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0846", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466245", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0847", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466246", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0848", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466247", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0849", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466248", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0850", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466249", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0851", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466250", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0852", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466251", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0853", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466252", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0854", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466253", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0855", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466254", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0856", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466255", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0857", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466256", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0858", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466257", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0859", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466258", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0860", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466259", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0861", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466260", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0862", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466261", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0863", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466262", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0864", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466263", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0865", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466264", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0866", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466265", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0867", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466266", + "values_compared": 53 + }, + { + "max_rel_err": 0.0, + "name": "gen0868", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466267", + "values_compared": 7 + }, + { + "deferred": { + "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", + "unit": "intersect.adv_surface_intersector" + }, + "max_rel_err": 0.0, + "name": "gen0869", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12145709258493466268", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0870", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466269", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0871", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466270", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0872", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466271", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0873", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466272", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0874", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466273", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0875", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466274", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen0876", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466275", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0877", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466276", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0878", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466277", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0879", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466278", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0880", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466279", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0881", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466280", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0882", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466281", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0883", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466282", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0884", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466283", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0885", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466284", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0886", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466285", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0887", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466286", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0888", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466287", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0889", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466288", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0890", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466289", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0891", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466290", + "values_compared": 2 + }, + { + "deferred": { + "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", + "unit": "intersect.adv_surface_intersector" + }, + "max_rel_err": 0.0, + "name": "gen0892", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12145709258493466291", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0893", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466292", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0894", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466293", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0895", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466294", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0896", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466295", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0897", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466296", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0898", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466297", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0899", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466298", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0900", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466299", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0901", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466300", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0902", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466301", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0903", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466302", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0904", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466303", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0905", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466304", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0906", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466305", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0907", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466306", + "values_compared": 131 + }, + { + "max_rel_err": 0.0, + "name": "gen0908", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466307", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0909", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466308", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0910", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466309", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0911", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466310", + "values_compared": 30 + }, + { + "max_rel_err": 0.0, + "name": "gen0912", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466311", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0913", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466312", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0914", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466313", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0915", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466314", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0916", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466315", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0917", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466316", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0918", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466317", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0919", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466318", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0920", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466319", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0921", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466320", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0922", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466321", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0923", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466322", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0924", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466323", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0925", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466324", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0926", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466325", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0927", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466326", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0928", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466327", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0929", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466328", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0930", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466329", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0931", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466330", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0932", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466331", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0933", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466332", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0934", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466333", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0935", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466334", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0936", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466335", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0937", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466336", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0938", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466337", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0939", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466338", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0940", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466339", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0941", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466340", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0942", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466341", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0943", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466342", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0944", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466343", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0945", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466344", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen0946", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466345", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0947", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466346", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0948", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466347", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0949", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466348", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0950", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466349", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0951", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466350", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0952", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466351", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0953", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466352", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0954", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466353", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0955", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466354", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0956", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466355", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0957", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466356", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0958", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466357", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0959", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466358", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0960", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466359", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0961", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466360", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0962", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466361", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0963", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466362", + "values_compared": 72 + }, + { + "max_rel_err": 0.0, + "name": "gen0964", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466363", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0965", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466364", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0966", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466365", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0967", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466366", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0968", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466367", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0969", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466368", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0970", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466369", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0971", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466370", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen0972", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466371", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0973", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466372", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0974", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466373", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0975", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466374", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0976", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466375", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0977", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466376", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0978", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466377", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0979", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466378", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen0980", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466379", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0981", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466380", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0982", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466381", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0983", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466382", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen0984", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466383", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0985", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466384", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0986", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466385", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0987", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466386", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0988", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466387", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0989", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466388", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen0990", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466389", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen0991", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466390", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0992", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466391", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen0993", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466392", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0994", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466393", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0995", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466394", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0996", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466395", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen0997", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466396", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0998", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466397", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0999", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466398", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1000", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466399", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1001", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466400", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1002", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466401", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1003", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466402", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1004", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466403", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1005", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466404", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1006", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466405", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1007", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466406", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1008", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466407", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1009", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466408", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1010", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466409", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1011", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466410", + "values_compared": 37 + }, + { + "max_rel_err": 0.0, + "name": "gen1012", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466411", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen1013", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466412", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1014", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466413", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1015", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466414", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1016", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466415", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1017", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466416", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1018", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466417", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1019", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466418", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1020", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466419", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1021", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466420", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1022", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466421", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1023", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466422", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1024", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466423", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1025", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466424", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1026", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466425", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1027", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466426", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1028", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466427", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1029", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466428", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1030", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466429", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1031", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466430", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1032", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466431", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1033", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466432", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1034", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466433", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1035", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466434", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1036", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466435", + "values_compared": 108 + }, + { + "max_rel_err": 0.0, + "name": "gen1037", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466436", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1038", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466437", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1039", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466438", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1040", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466439", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1041", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466440", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "gen1042", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466441", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1043", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466442", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1044", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466443", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1045", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466444", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1046", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466445", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1047", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466446", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1048", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466447", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1049", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466448", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1050", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466449", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1051", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466450", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1052", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466451", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1053", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466452", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1054", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466453", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1055", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466454", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1056", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466455", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1057", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466456", + "values_compared": 81 + }, + { + "max_rel_err": 0.0, + "name": "gen1058", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466457", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1059", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466458", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1060", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466459", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1061", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466460", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1062", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466461", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1063", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466462", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1064", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466463", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1065", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466464", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1066", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466465", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1067", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466466", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1068", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466467", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1069", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466468", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1070", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466469", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1071", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466470", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1072", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466471", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1073", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466472", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1074", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466473", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1075", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466474", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1076", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466475", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1077", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466476", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1078", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466477", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1079", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466478", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1080", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466479", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1081", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466480", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1082", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466481", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1083", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466482", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1084", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466483", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1085", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466484", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1086", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466485", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1087", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466486", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1088", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466487", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1089", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466488", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1090", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466489", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen1091", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466490", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1092", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466491", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1093", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466492", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1094", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466493", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1095", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466494", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1096", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466495", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1097", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466496", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1098", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466497", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1099", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466498", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1100", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466499", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1101", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466500", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1102", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466501", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1103", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466502", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1104", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466503", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1105", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466504", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1106", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466505", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1107", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466506", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1108", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466507", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1109", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466508", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1110", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466509", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1111", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466510", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1112", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466511", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1113", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466512", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1114", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466513", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1115", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466514", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1116", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466515", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1117", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466516", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1118", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466517", + "values_compared": 98 + }, + { + "max_rel_err": 0.0, + "name": "gen1119", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466518", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1120", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466519", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen1121", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466520", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1122", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466521", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1123", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466522", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1124", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466523", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1125", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466524", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1126", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466525", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1127", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466526", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1128", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466527", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1129", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466528", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1130", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466529", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1131", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466530", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen1132", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466531", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1133", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466532", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1134", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466533", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1135", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466534", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1136", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466535", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1137", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466536", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1138", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466537", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1139", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466538", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1140", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466539", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1141", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466540", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1142", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466541", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1143", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466542", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1144", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466543", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1145", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466544", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1146", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466545", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1147", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466546", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1148", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466547", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1149", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466548", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1150", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466549", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1151", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466550", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen1152", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466551", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1153", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466552", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1154", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466553", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1155", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466554", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1156", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466555", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1157", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466556", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1158", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466557", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1159", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466558", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1160", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466559", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1161", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466560", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1162", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466561", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1163", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466562", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1164", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466563", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1165", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466564", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1166", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466565", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1167", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466566", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1168", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466567", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1169", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466568", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1170", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466569", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1171", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466570", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1172", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466571", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1173", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466572", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1174", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466573", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1175", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466574", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1176", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466575", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1177", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466576", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1178", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466577", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1179", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466578", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1180", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466579", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1181", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466580", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1182", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466581", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1183", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466582", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1184", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466583", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1185", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466584", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1186", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466585", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1187", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466586", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1188", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466587", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1189", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466588", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1190", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466589", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen1191", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466590", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1192", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466591", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1193", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466592", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1194", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466593", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1195", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466594", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1196", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466595", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1197", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466596", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1198", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466597", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1199", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466598", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1200", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466599", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen1201", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466600", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1202", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466601", + "values_compared": 145 + }, + { + "max_rel_err": 0.0, + "name": "gen1203", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466602", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1204", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466603", + "values_compared": 98 + }, + { + "max_rel_err": 0.0, + "name": "gen1205", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466604", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1206", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466605", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1207", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466606", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1208", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466607", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1209", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466608", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1210", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466609", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1211", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466610", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1212", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466611", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1213", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466612", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1214", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466613", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1215", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466614", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1216", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466615", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1217", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466616", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1218", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466617", + "values_compared": 30 + }, + { + "max_rel_err": 0.0, + "name": "gen1219", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466618", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1220", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466619", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1221", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466620", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1222", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466621", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1223", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466622", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1224", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466623", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1225", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466624", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1226", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466625", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1227", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466626", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1228", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466627", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1229", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466628", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1230", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466629", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1231", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466630", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1232", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466631", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1233", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466632", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1234", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466633", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1235", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466634", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1236", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466635", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1237", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466636", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1238", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466637", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1239", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466638", + "values_compared": 98 + }, + { + "max_rel_err": 0.0, + "name": "gen1240", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466639", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen1241", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466640", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1242", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466641", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1243", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466642", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1244", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466643", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1245", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466644", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1246", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466645", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1247", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466646", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1248", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466647", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1249", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466648", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1250", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466649", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1251", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466650", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1252", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466651", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1253", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466652", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1254", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466653", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1255", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466654", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1256", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466655", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1257", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466656", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1258", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466657", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1259", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466658", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1260", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466659", + "values_compared": 98 + }, + { + "max_rel_err": 0.0, + "name": "gen1261", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466660", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1262", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466661", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1263", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466662", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1264", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466663", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1265", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466664", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1266", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466665", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1267", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466666", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1268", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466667", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1269", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466668", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1270", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466669", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1271", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466670", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1272", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466671", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1273", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466672", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1274", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466673", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1275", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466674", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1276", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466675", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1277", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466676", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1278", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466677", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1279", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466678", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1280", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466679", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1281", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466680", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1282", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466681", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1283", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466682", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1284", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466683", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1285", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466684", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1286", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466685", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1287", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466686", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1288", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466687", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1289", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466688", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1290", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466689", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1291", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466690", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1292", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466691", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1293", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466692", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1294", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466693", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1295", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466694", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1296", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466695", + "values_compared": 98 + }, + { + "max_rel_err": 0.0, + "name": "gen1297", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466696", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1298", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466697", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1299", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466698", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen1300", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466699", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1301", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466700", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1302", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466701", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1303", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466702", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1304", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466703", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1305", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466704", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1306", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466705", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1307", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466706", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1308", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466707", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1309", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466708", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1310", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466709", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1311", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466710", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1312", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466711", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1313", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466712", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1314", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466713", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1315", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466714", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1316", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466715", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1317", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466716", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1318", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466717", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1319", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466718", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1320", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466719", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1321", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466720", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1322", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466721", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1323", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466722", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1324", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466723", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1325", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466724", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1326", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466725", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1327", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466726", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1328", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466727", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1329", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466728", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1330", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466729", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1331", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466730", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1332", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466731", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1333", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466732", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1334", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466733", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1335", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466734", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1336", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466735", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1337", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466736", + "values_compared": 98 + }, + { + "max_rel_err": 0.0, + "name": "gen1338", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466737", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1339", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466738", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "gen1340", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466739", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen1341", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466740", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1342", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466741", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1343", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466742", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1344", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466743", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1345", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466744", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1346", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466745", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1347", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466746", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1348", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466747", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen1349", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466748", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1350", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466749", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1351", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466750", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1352", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466751", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1353", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466752", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1354", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466753", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1355", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466754", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1356", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466755", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1357", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466756", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1358", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466757", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1359", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466758", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1360", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466759", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1361", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466760", + "values_compared": 31 + }, + { + "max_rel_err": 0.0, + "name": "gen1362", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466761", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1363", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466762", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1364", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466763", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1365", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466764", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1366", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466765", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "gen1367", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466766", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1368", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466767", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1369", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466768", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1370", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466769", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1371", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466770", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1372", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466771", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1373", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466772", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1374", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466773", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1375", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466774", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1376", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466775", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1377", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466776", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1378", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466777", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1379", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466778", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1380", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466779", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen1381", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466780", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1382", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466781", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1383", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466782", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1384", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466783", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1385", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466784", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1386", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466785", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1387", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466786", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1388", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466787", + "values_compared": 141 + }, + { + "max_rel_err": 0.0, + "name": "gen1389", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466788", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1390", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466789", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1391", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466790", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1392", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466791", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1393", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466792", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1394", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466793", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1395", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466794", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1396", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466795", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1397", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466796", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen1398", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466797", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1399", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466798", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1400", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466799", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1401", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466800", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1402", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466801", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1403", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466802", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1404", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466803", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1405", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466804", + "values_compared": 24 + }, + { + "max_rel_err": 0.0, + "name": "gen1406", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466805", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1407", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466806", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1408", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466807", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1409", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466808", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1410", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466809", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1411", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466810", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1412", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466811", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1413", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466812", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1414", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466813", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1415", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466814", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1416", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466815", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1417", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466816", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1418", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466817", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1419", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466818", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1420", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466819", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1421", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466820", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1422", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466821", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1423", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466822", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1424", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466823", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1425", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466824", + "values_compared": 108 + }, + { + "max_rel_err": 0.0, + "name": "gen1426", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466825", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1427", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466826", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1428", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466827", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1429", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466828", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1430", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466829", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1431", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466830", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1432", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466831", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1433", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466832", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1434", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466833", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1435", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466834", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1436", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466835", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1437", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466836", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1438", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466837", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1439", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466838", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1440", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466839", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1441", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466840", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1442", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466841", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1443", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466842", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1444", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466843", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1445", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466844", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen1446", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466845", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1447", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466846", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1448", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466847", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1449", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466848", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1450", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466849", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1451", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466850", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1452", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466851", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1453", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466852", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1454", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466853", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1455", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466854", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1456", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466855", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1457", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466856", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1458", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466857", + "values_compared": 93 + }, + { + "max_rel_err": 0.0, + "name": "gen1459", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466858", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1460", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466859", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1461", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466860", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1462", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466861", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1463", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466862", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1464", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466863", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1465", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466864", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1466", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466865", + "values_compared": 45 + }, + { + "deferred": { + "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", + "unit": "intersect.adv_surface_intersector" + }, + "max_rel_err": 0.0, + "name": "gen1467", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12145709258493466866", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1468", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466867", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1469", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466868", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1470", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466869", + "values_compared": 108 + }, + { + "max_rel_err": 0.0, + "name": "gen1471", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466870", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1472", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466871", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1473", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466872", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1474", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466873", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1475", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466874", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1476", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466875", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1477", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466876", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1478", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466877", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1479", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466878", + "values_compared": 6 + }, + { + "deferred": { + "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", + "unit": "intersect.adv_surface_intersector" + }, + "max_rel_err": 0.0, + "name": "gen1480", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12145709258493466879", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1481", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466880", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1482", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466881", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1483", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466882", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1484", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466883", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1485", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466884", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1486", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466885", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1487", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466886", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1488", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466887", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1489", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466888", + "values_compared": 72 + }, + { + "max_rel_err": 0.0, + "name": "gen1490", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466889", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen1491", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466890", + "values_compared": 141 + }, + { + "max_rel_err": 0.0, + "name": "gen1492", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466891", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1493", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466892", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1494", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466893", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1495", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466894", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1496", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466895", + "values_compared": 47 + }, + { + "max_rel_err": 0.0, + "name": "gen1497", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466896", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1498", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466897", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1499", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466898", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1500", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466899", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1501", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466900", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen1502", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466901", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1503", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466902", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1504", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466903", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1505", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466904", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1506", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466905", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1507", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466906", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1508", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466907", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1509", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466908", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1510", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466909", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1511", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466910", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1512", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466911", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1513", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466912", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1514", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466913", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1515", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466914", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1516", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466915", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1517", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466916", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1518", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466917", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1519", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466918", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1520", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466919", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1521", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466920", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1522", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466921", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1523", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466922", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1524", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466923", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1525", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466924", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1526", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466925", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1527", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466926", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1528", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466927", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1529", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466928", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1530", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466929", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1531", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466930", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1532", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466931", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1533", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466932", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1534", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466933", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1535", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466934", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1536", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466935", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1537", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466936", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1538", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466937", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1539", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466938", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1540", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466939", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1541", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466940", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1542", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466941", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1543", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466942", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1544", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466943", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1545", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466944", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1546", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466945", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1547", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466946", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1548", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466947", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1549", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466948", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1550", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466949", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1551", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466950", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1552", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466951", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1553", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466952", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1554", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466953", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1555", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466954", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1556", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466955", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen1557", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466956", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1558", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466957", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1559", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466958", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1560", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466959", + "values_compared": 54 + }, + { + "deferred": { + "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", + "unit": "intersect.adv_surface_intersector" + }, + "max_rel_err": 0.0, + "name": "gen1561", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12145709258493466960", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1562", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466961", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1563", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466962", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1564", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466963", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1565", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466964", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1566", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466965", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1567", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466966", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1568", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466967", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1569", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466968", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1570", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466969", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1571", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466970", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1572", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466971", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen1573", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466972", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen1574", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466973", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1575", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466974", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1576", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466975", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1577", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466976", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1578", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466977", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1579", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466978", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1580", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466979", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1581", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466980", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1582", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466981", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1583", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466982", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1584", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466983", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1585", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466984", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1586", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466985", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1587", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466986", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1588", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466987", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1589", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466988", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1590", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466989", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1591", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466990", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1592", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466991", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1593", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466992", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1594", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466993", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1595", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466994", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1596", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466995", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1597", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466996", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1598", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466997", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1599", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466998", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1600", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493466999", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1601", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467000", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1602", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467001", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1603", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467002", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1604", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467003", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1605", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467004", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1606", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467005", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1607", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467006", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1608", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467007", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1609", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467008", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1610", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467009", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1611", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467010", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1612", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467011", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1613", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467012", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1614", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467013", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1615", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467014", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1616", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467015", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1617", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467016", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen1618", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467017", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1619", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467018", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1620", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467019", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1621", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467020", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1622", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467021", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1623", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467022", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1624", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467023", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1625", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467024", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1626", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467025", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1627", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467026", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1628", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467027", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1629", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467028", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1630", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467029", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1631", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467030", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1632", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467031", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen1633", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467032", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1634", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467033", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1635", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467034", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1636", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467035", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1637", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467036", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1638", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467037", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1639", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467038", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1640", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467039", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1641", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467040", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1642", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467041", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1643", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467042", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1644", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467043", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1645", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467044", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1646", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467045", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1647", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467046", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1648", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467047", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1649", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467048", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1650", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467049", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1651", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467050", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1652", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467051", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1653", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467052", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1654", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467053", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1655", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467054", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1656", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467055", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1657", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467056", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1658", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467057", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1659", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467058", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1660", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467059", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1661", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467060", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1662", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467061", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1663", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467062", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1664", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467063", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1665", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467064", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1666", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467065", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1667", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467066", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1668", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467067", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1669", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467068", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1670", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467069", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1671", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467070", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1672", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467071", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1673", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467072", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1674", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467073", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1675", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467074", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1676", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467075", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1677", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467076", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1678", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467077", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1679", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467078", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1680", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467079", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1681", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467080", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1682", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467081", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1683", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467082", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1684", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467083", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1685", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467084", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1686", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467085", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1687", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467086", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1688", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467087", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1689", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467088", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1690", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467089", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1691", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467090", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1692", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467091", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1693", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467092", + "values_compared": 98 + }, + { + "max_rel_err": 0.0, + "name": "gen1694", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467093", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1695", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467094", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1696", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467095", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1697", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467096", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1698", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467097", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1699", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467098", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1700", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467099", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1701", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467100", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1702", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467101", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1703", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467102", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1704", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467103", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1705", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467104", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1706", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467105", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1707", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467106", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1708", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467107", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1709", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467108", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1710", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467109", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1711", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467110", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1712", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467111", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1713", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467112", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1714", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467113", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1715", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467114", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1716", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467115", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1717", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467116", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1718", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467117", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1719", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467118", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1720", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467119", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1721", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467120", + "values_compared": 3 + }, + { + "deferred": { + "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", + "unit": "intersect.adv_surface_intersector" + }, + "max_rel_err": 0.0, + "name": "gen1722", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12145709258493467121", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1723", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467122", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1724", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467123", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1725", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467124", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1726", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467125", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1727", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467126", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1728", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467127", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1729", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467128", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1730", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467129", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1731", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467130", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1732", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467131", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1733", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467132", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1734", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467133", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1735", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467134", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1736", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467135", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1737", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467136", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1738", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467137", + "values_compared": 101 + }, + { + "max_rel_err": 0.0, + "name": "gen1739", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467138", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1740", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467139", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1741", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467140", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1742", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467141", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1743", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467142", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1744", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467143", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1745", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467144", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1746", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467145", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1747", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467146", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1748", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467147", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1749", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467148", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1750", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467149", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1751", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467150", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen1752", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467151", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1753", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467152", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1754", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467153", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1755", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467154", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1756", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467155", + "values_compared": 36 + }, + { + "max_rel_err": 0.0, + "name": "gen1757", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467156", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1758", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467157", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1759", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467158", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1760", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467159", + "values_compared": 71 + }, + { + "max_rel_err": 0.0, + "name": "gen1761", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467160", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1762", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467161", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1763", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467162", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1764", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467163", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1765", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467164", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1766", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467165", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1767", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467166", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1768", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467167", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1769", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467168", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1770", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467169", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1771", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467170", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1772", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467171", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1773", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467172", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1774", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467173", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1775", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467174", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1776", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467175", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1777", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467176", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1778", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467177", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1779", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467178", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen1780", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467179", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1781", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467180", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1782", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467181", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1783", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467182", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1784", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467183", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1785", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467184", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1786", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467185", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen1787", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467186", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1788", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467187", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1789", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467188", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1790", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467189", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1791", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467190", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1792", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467191", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1793", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467192", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1794", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467193", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1795", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467194", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1796", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467195", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1797", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467196", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1798", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467197", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1799", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467198", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1800", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467199", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1801", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467200", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1802", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467201", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1803", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467202", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1804", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467203", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1805", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467204", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1806", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467205", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1807", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467206", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1808", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467207", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1809", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467208", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1810", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467209", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "gen1811", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467210", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1812", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467211", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1813", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467212", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1814", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467213", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1815", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467214", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1816", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467215", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1817", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467216", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1818", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467217", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1819", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467218", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen1820", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467219", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1821", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467220", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1822", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467221", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1823", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467222", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1824", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467223", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1825", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467224", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1826", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467225", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1827", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467226", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1828", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467227", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1829", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467228", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1830", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467229", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1831", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467230", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1832", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467231", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1833", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467232", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1834", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467233", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1835", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467234", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1836", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467235", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1837", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467236", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1838", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467237", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1839", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467238", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "gen1840", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467239", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1841", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467240", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1842", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467241", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1843", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467242", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1844", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467243", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1845", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467244", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1846", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467245", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1847", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467246", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1848", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467247", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1849", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467248", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1850", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467249", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen1851", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467250", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1852", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467251", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1853", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467252", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1854", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467253", + "values_compared": 65 + }, + { + "max_rel_err": 0.0, + "name": "gen1855", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467254", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1856", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467255", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1857", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467256", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1858", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467257", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1859", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467258", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1860", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467259", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1861", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467260", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1862", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467261", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1863", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467262", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1864", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467263", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1865", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467264", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1866", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467265", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1867", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467266", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1868", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467267", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1869", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467268", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1870", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467269", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1871", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467270", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1872", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467271", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1873", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467272", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1874", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467273", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1875", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467274", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1876", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467275", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1877", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467276", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1878", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467277", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1879", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467278", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1880", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467279", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1881", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467280", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1882", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467281", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1883", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467282", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1884", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467283", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1885", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467284", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1886", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467285", + "values_compared": 31 + }, + { + "max_rel_err": 0.0, + "name": "gen1887", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467286", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1888", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467287", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1889", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467288", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1890", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467289", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1891", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467290", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1892", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467291", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1893", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467292", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1894", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467293", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1895", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467294", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1896", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467295", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1897", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467296", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1898", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467297", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1899", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467298", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1900", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467299", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1901", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467300", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1902", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467301", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1903", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467302", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1904", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467303", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1905", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467304", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1906", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467305", + "values_compared": 98 + }, + { + "max_rel_err": 0.0, + "name": "gen1907", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467306", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1908", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467307", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1909", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467308", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1910", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467309", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1911", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467310", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1912", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467311", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1913", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467312", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1914", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467313", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1915", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467314", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1916", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467315", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1917", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467316", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1918", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467317", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1919", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467318", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1920", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467319", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1921", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467320", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1922", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467321", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1923", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467322", + "values_compared": 6 + }, + { + "deferred": { + "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", + "unit": "intersect.adv_surface_intersector" + }, + "max_rel_err": 0.0, + "name": "gen1924", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12145709258493467323", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1925", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467324", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1926", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467325", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1927", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467326", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1928", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467327", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1929", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467328", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1930", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467329", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1931", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467330", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1932", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467331", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1933", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467332", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1934", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467333", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1935", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467334", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1936", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467335", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1937", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467336", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1938", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467337", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1939", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467338", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1940", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467339", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1941", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467340", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1942", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467341", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1943", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467342", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1944", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467343", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1945", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467344", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1946", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467345", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1947", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467346", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1948", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467347", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1949", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467348", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1950", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467349", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1951", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467350", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1952", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467351", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1953", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467352", + "values_compared": 101 + }, + { + "max_rel_err": 0.0, + "name": "gen1954", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467353", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1955", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467354", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1956", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467355", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1957", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467356", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1958", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467357", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1959", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467358", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen1960", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467359", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1961", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467360", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1962", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467361", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1963", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467362", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1964", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467363", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1965", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467364", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1966", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467365", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1967", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467366", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1968", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467367", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1969", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467368", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1970", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467369", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1971", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467370", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "gen1972", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467371", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1973", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467372", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "gen1974", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467373", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1975", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467374", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1976", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467375", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1977", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467376", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1978", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467377", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1979", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467378", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1980", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467379", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "gen1981", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467380", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "gen1982", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467381", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1983", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467382", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1984", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467383", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1985", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467384", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1986", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467385", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen1987", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467386", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1988", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467387", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1989", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467388", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "gen1990", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467389", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1991", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467390", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1992", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467391", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1993", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467392", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1994", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467393", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen1995", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467394", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen1996", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467395", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1997", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467396", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1998", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467397", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "gen1999", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12145709258493467398", + "values_compared": 7 + } + ], + "cases_both_errored": 0, + "cases_deferred": 9, + "cases_failed": 0, + "cases_passed": 2118, + "cases_total": 2127, + "deferred_by_unit": { + "intersect.adv_surface_intersector": 9 + }, + "max_rel_err": 0.0, + "pass": true, + "rel_tol": 1e-9, + "seeds": 16, + "status": "partial", + "unit": "surface.plane_p2" +} diff --git a/reports/difftest/surface.surf_of_revolution_p1.json b/reports/difftest/surface.surf_of_revolution_p1.json index 9c4bcfae5a..8de9189ba1 100644 --- a/reports/difftest/surface.surf_of_revolution_p1.json +++ b/reports/difftest/surface.surf_of_revolution_p1.json @@ -226,16 +226,12 @@ "values_compared": 8 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "surfaces_line_plane_normal", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/surface.surf_of_revolution_p1/cases.json#28 (upstream tests/SM_API_test/src/TestSmSurfaces.cpp:787 (line from base to top radius revolved about the Z axis))", - "values_compared": 0 + "values_compared": 62 }, { "max_rel_err": 0.0, @@ -374,16 +370,12 @@ "values_compared": 8 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "edge_partial_plane_axis", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/surface.surf_of_revolution_p1/cases.json#46 (upstream edge case)", - "values_compared": 0 + "values_compared": 38 }, { "max_rel_err": 0.0, @@ -442,16 +434,12 @@ "values_compared": 58 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "edge_circle_gen_plane_normal", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/surface.surf_of_revolution_p1/cases.json#54 (upstream edge case)", - "values_compared": 0 + "values_compared": 120 }, { "max_rel_err": 0.0, @@ -2134,16 +2122,12 @@ "values_compared": 44 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0058", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578476", - "values_compared": 0 + "values_compared": 4 }, { "max_rel_err": 0.0, @@ -2274,16 +2258,12 @@ "values_compared": 4 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0075", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578493", - "values_compared": 0 + "values_compared": 4 }, { "max_rel_err": 0.0, @@ -2454,16 +2434,12 @@ "values_compared": 33 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0097", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578515", - "values_compared": 0 + "values_compared": 58 }, { "max_rel_err": 0.0, @@ -2498,16 +2474,12 @@ "values_compared": 48 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0102", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578520", - "values_compared": 0 + "values_compared": 80 }, { "max_rel_err": 0.0, @@ -2550,16 +2522,12 @@ "values_compared": 4 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0108", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578526", - "values_compared": 0 + "values_compared": 4 }, { "max_rel_err": 0.0, @@ -2658,28 +2626,20 @@ "values_compared": 9 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0121", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578539", - "values_compared": 0 + "values_compared": 4 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0122", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578540", - "values_compared": 0 + "values_compared": 41 }, { "max_rel_err": 0.0, @@ -2938,16 +2898,12 @@ "values_compared": 62 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0155", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578573", - "values_compared": 0 + "values_compared": 4 }, { "max_rel_err": 0.0, @@ -2974,16 +2930,12 @@ "values_compared": 42 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0159", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578577", - "values_compared": 0 + "values_compared": 80 }, { "max_rel_err": 0.0, @@ -3026,16 +2978,12 @@ "values_compared": 4 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0165", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578583", - "values_compared": 0 + "values_compared": 62 }, { "max_rel_err": 0.0, @@ -3366,16 +3314,12 @@ "values_compared": 8 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0207", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578625", - "values_compared": 0 + "values_compared": 42 }, { "max_rel_err": 0.0, @@ -3426,16 +3370,12 @@ "values_compared": 5 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0214", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578632", - "values_compared": 0 + "values_compared": 4 }, { "max_rel_err": 0.0, @@ -3478,16 +3418,12 @@ "values_compared": 4 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0220", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578638", - "values_compared": 0 + "values_compared": 52 }, { "max_rel_err": 0.0, @@ -3698,28 +3634,20 @@ "values_compared": 62 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0247", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578665", - "values_compared": 0 + "values_compared": 62 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0248", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578666", - "values_compared": 0 + "values_compared": 78 }, { "max_rel_err": 0.0, @@ -3730,16 +3658,12 @@ "values_compared": 25 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0250", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578668", - "values_compared": 0 + "values_compared": 4 }, { "max_rel_err": 0.0, @@ -3894,16 +3818,12 @@ "values_compared": 204 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0270", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578688", - "values_compared": 0 + "values_compared": 4 }, { "max_rel_err": 0.0, @@ -3954,28 +3874,20 @@ "values_compared": 14 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0277", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578695", - "values_compared": 0 + "values_compared": 4 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0278", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578696", - "values_compared": 0 + "values_compared": 32 }, { "max_rel_err": 0.0, @@ -4346,16 +4258,12 @@ "values_compared": 8 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0325", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578743", - "values_compared": 0 + "values_compared": 62 }, { "max_rel_err": 0.0, @@ -4670,16 +4578,12 @@ "values_compared": 62 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0365", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578783", - "values_compared": 0 + "values_compared": 4 }, { "max_rel_err": 0.0, @@ -4858,16 +4762,12 @@ "values_compared": 54 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0388", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578806", - "values_compared": 0 + "values_compared": 4 }, { "max_rel_err": 0.0, @@ -5662,16 +5562,12 @@ "values_compared": 32 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0488", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578906", - "values_compared": 0 + "values_compared": 48 }, { "max_rel_err": 0.0, @@ -6026,16 +5922,12 @@ "values_compared": 38 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0533", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578951", - "values_compared": 0 + "values_compared": 100 }, { "max_rel_err": 0.0, @@ -6078,16 +5970,12 @@ "values_compared": 25 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0539", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578957", - "values_compared": 0 + "values_compared": 62 }, { "max_rel_err": 0.0, @@ -6106,16 +5994,12 @@ "values_compared": 25 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0542", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578960", - "values_compared": 0 + "values_compared": 62 }, { "max_rel_err": 0.0, @@ -6150,16 +6034,12 @@ "values_compared": 4 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0547", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578965", - "values_compared": 0 + "values_compared": 4 }, { "max_rel_err": 0.0, @@ -6234,16 +6114,12 @@ "values_compared": 25 }, { - "deferred": { - "symbol": "SmSurface::GetFace", - "unit": "surface.surface_p1" - }, "max_rel_err": 0.0, "name": "gen0557", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=4440998236234578975", - "values_compared": 0 + "values_compared": 4 }, { "max_rel_err": 0.0, @@ -6583,17 +6459,15 @@ } ], "cases_both_errored": 0, - "cases_deferred": 31, + "cases_deferred": 0, "cases_failed": 0, - "cases_passed": 776, + "cases_passed": 807, "cases_total": 807, - "deferred_by_unit": { - "surface.surface_p1": 31 - }, + "deferred_by_unit": {}, "max_rel_err": 0.0, "pass": true, "rel_tol": 1e-9, "seeds": 16, - "status": "partial", + "status": "green", "unit": "surface.surf_of_revolution_p1" } From 590db4bfe0981b887824afc69f517165c49a74d4 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Tue, 13 Oct 2026 21:39:24 -0400 Subject: [PATCH 21/54] intersect.adv_surface_intersector: partial (1527 cases, 16 deferred) Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01FsWWaoeGNWKgzeGrF2Pkn5 --- plan/modules.toml | 4 ++-- plan/upstream-issues.md | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plan/modules.toml b/plan/modules.toml index 645a2764d2..706e45c111 100644 --- a/plan/modules.toml +++ b/plan/modules.toml @@ -2195,10 +2195,10 @@ soft_depends_on = ["geom.geom_utility_p1", "geom.object", "geom.polar_box", "geo est_lines = 1646 layer = 33 tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"] -status = "todo" +status = "partial" claimed_by = "" claimed_at = "" -notes = "11 fns; largest: SmAdvSurfaceIntersector::ComputeSingularityPoint, SmAdvSurfaceIntersector::FindInteriorCurves, SmAdvSurfaceIntersector::LocalSolve, SmAdvSurfaceIntersector::MakeDupin; cycle back-edges (call into later units; stub or co-port): intersect.surface_intersector_p2(2), blend.fillet_intersector(1), intersect.surface_intersector_p4(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit" +notes = "PARTIAL: difftest 1527 cases (27 inline edge cases from the ComputeSingularityPoint docs + 1500 generated programs: singular points with shape-tensor geometry, Dupin indicatrices, SolveIt/LocalSolve/SolveBranch/FindBestSubdivisionNode/BranchIsGaussSeparate/FindInteriorCurves over hand-built surface cache trees), 1511 pass bit-identical, 16 deferred (surface.surface_p7 12: DropPointsToTangentPlane in LocalSolve, EvaluateNormal of B-splines in FindInteriorCurves; surface.surface_p11 4: LocalSurfaceIntersect in FindInteriorCurves); wired UNPORTED(intersect.adv_surface_intersector) in surface.surface_p2 (GlobalSurfaceIntersect, PointBasedSurfaceIntersect now stop at intersect.surface_intersector_p5 / _p4); base SolveBranch exposed as geom::global_solver::solve_branch; 11 fns; largest: SmAdvSurfaceIntersector::ComputeSingularityPoint, SmAdvSurfaceIntersector::FindInteriorCurves, SmAdvSurfaceIntersector::LocalSolve, SmAdvSurfaceIntersector::MakeDupin; cycle back-edges (call into later units; stub or co-port): intersect.surface_intersector_p2(2), blend.fillet_intersector(1), intersect.surface_intersector_p4(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit" [[unit]] id = "intersect.curve_class_p2" diff --git a/plan/upstream-issues.md b/plan/upstream-issues.md index b99dd8400a..7f949bca44 100644 --- a/plan/upstream-issues.md +++ b/plan/upstream-issues.md @@ -778,9 +778,9 @@ by area within each severity. - **Severity:** crash/UB. - **Rust port:** `Surface::point_based_surface_intersect` returns `InvalidInput` for those inputs. -#### UB-75. `ComputeSingularityPoint` can write past `aSingDirections[8]` +#### UB-78. `ComputeSingularityPoint` can write past `aSingDirections[8]` - **Location:** `source/SMLib/src/SmAdvSurfaceIntersector.cpp:164` (`SmVector3d aSingDirections[8]`), filled by `sm_AddSingDir` (`:54`) from the Dupin indicatrix intersections at `:616`-`:685`; `aSingUVSurf1/2[8]` and `lInsideIndex[8]` at `:775`-`:776`. -- **What happens:** Every intersection of the above (and below) indicatrix curves of the two surfaces adds a direction unless one within `acos(0.9)` (about 26 degrees) is stored already. Up to 13 directions pass that test, but the array holds 8 and `sm_AddSingDir` does not check the count (upstream's own comment: "we have experienced examples with 8 vectors"). Saddle points generate four hyperbolas per surface, two of which are different conics (see WR-54), so the count is not bounded by the 4 + 4 of two central conics. +- **What happens:** Every intersection of the above (and below) indicatrix curves of the two surfaces adds a direction unless one within `acos(0.9)` (about 26 degrees) is stored already. Up to 13 directions pass that test, but the array holds 8 and `sm_AddSingDir` does not check the count (upstream's own comment: "we have experienced examples with 8 vectors"). Saddle points generate four hyperbolas per surface, two of which are different conics (see WR-56), so the count is not bounded by the 4 + 4 of two central conics. - **Trigger:** Two non-planar surface points with parallel normals, no shared principal curvature, whose indicatrices meet in more than 8 directions more than 26 degrees apart. - **How found:** read during porting. - **Confirmed:** no (the difftest shim predicts the count and does not run such inputs; no generated case reached it). @@ -1423,7 +1423,7 @@ by area within each severity. - **Severity:** wrong result (unit mix-up). - **Rust port:** Faithful. -#### WR-54. `MakeDupin`'s bottom hyperbola uses `k2` for both axes +#### WR-56. `MakeDupin`'s bottom hyperbola uses `k2` for both axes - **Location:** `source/SMLib/src/SmAdvSurfaceIntersector.cpp:1120`-`1122` `SmAdvSurfaceIntersector::MakeDupin`. - **What happens:** The four hyperbolas of a saddle point should be one indicatrix branch pair `(1/sqrt|k1|, 1/sqrt|k2|)` and its conjugate pair `(1/sqrt|k2|, 1/sqrt|k1|)`. The top hyperbola uses the latter, the bottom one `(1/sqrt|k2|, 1/sqrt|k2|)`, so the bottom curve is a different conic and the singular directions found from it are wrong unless `|k1| == |k2|`. - **Trigger:** `MakeDupin` (or `ComputeSingularityPoint`) at a hyperbolic point with `|k1| != |k2|`. @@ -1432,7 +1432,7 @@ by area within each severity. - **Severity:** wrong result. - **Rust port:** Faithful. -#### WR-55. `SmAdvSurfaceIntersector::SolveBranch` never tests Gauss map separation +#### WR-57. `SmAdvSurfaceIntersector::SolveBranch` never tests Gauss map separation - **Location:** `source/SMLib/src/SmAdvSurfaceIntersector.cpp:1383` and `:1401` `SmAdvSurfaceIntersector::SolveBranch`. - **What happens:** The method sets `m_bSeperateGaussMaps = TRUE` on entry and then calls `BranchIsGaussSeparate` only `if (!m_bSeperateGaussMaps)`, so the polar box test and the whole "separable" branch (one start point per separable sub-tree pair, the documented purpose of the class) are dead code: every intersecting leaf pair gives its own candidate. - **Trigger:** Any `SolveIt(SM_SO_INTERSECT, ..)` on an `SmAdvSurfaceIntersector`. From 76e80b3c96167ddce33d9b0b199a37d90bafaf67 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Tue, 13 Oct 2026 22:27:47 -0400 Subject: [PATCH 22/54] surface.plane_p2: merge origin/main, refresh reports and counts surface.surface_cache_p2 749 pass / 156 deferred (EvaluateNormal now ported); topology.brep_data 2324 pass / 55 deferred (SmPlane::ReadFromDB wired). Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01MNGVDsEXPdxtFSUKma3wKs --- plan/modules.toml | 4 +- .../difftest/nurbs.b_spline_surface_p2.json | 22 +- .../difftest/surface.surface_cache_p2.json | 285 ++++++------------ reports/difftest/surface.surface_p2.json | 56 ++-- reports/difftest/topology.brep_data.json | 87 ++---- 5 files changed, 156 insertions(+), 298 deletions(-) diff --git a/plan/modules.toml b/plan/modules.toml index c6cfe12573..40a83d483d 100644 --- a/plan/modules.toml +++ b/plan/modules.toml @@ -1694,7 +1694,7 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin status = "partial" claimed_by = "swarm-surface.surface_cache_p2" claimed_at = "2026-10-13T22:42:47Z" -notes = "PARTIAL: difftest 905 cases (105 fixture + 800 generated), 721 pass bit-identical, 184 deferred (surface.plane_p1 53: SmPlane::CreateIsoParametricCurve in bounding planes and size tolerances; surface.surface_p1 47: SmSurface::GetFace in the B-spline bounding box of SM_AD_AUX_DATA nodes; surface.surface_p5 43: SmSurface::IsSingularity 35 in the Bezier approximation of B-splines, SmSurface::CreateIsoParametricCurve 8 of curve-bounded surfaces; surface.surface_p7 28: SmSurface::EvaluateNormal in bounding planes; surface.surface_p9 13: SmSurface::FindTessellationSplits in every SubdivideByBlock with a surface); --perturb SENSITIVE 721/721; wired the SmPlane override of IsSingularity into the surface cache Bezier approximation (p1 helper); no co-ports; 7 fns; largest: SmSurfaceCache::TestAgainstTolerances, SmSurfaceCache::SubdivideByBlock, sm_CreateApproximateBezierPatchBlock, sm_CreateBezierPatchBlock; cycle back-edges (call into later units; stub or co-port): surface.surface_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit" +notes = "PARTIAL: difftest 905 cases (105 fixture + 800 generated), 749 pass bit-identical, 156 deferred (surface.plane_p1 53: SmPlane::CreateIsoParametricCurve in bounding planes and size tolerances; surface.surface_p1 47: SmSurface::GetFace in the B-spline bounding box of SM_AD_AUX_DATA nodes; surface.surface_p5 43: SmSurface::IsSingularity 35 in the Bezier approximation of B-splines, SmSurface::CreateIsoParametricCurve 8 of curve-bounded surfaces; surface.surface_p9 13: SmSurface::FindTessellationSplits in every SubdivideByBlock with a surface); --perturb SENSITIVE 749/749; 28 EvaluateNormal cases un-deferred by surface.surface_p7 via surface.plane_p2 (PR #40); wired the SmPlane override of IsSingularity into the surface cache Bezier approximation (p1 helper); no co-ports; 7 fns; largest: SmSurfaceCache::TestAgainstTolerances, SmSurfaceCache::SubdivideByBlock, sm_CreateApproximateBezierPatchBlock, sm_CreateBezierPatchBlock; cycle back-edges (call into later units; stub or co-port): surface.surface_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit" [[unit]] id = "surface.torus" @@ -2170,7 +2170,7 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin status = "partial" claimed_by = "" claimed_at = "" -notes = "17 fns; largest: SmBrepData::ReadFromDB, SmBrepData::ReadCurveFromDB, SmBrepData::ReadSurfaceFromDB, SmEUData::ReadFromDB; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; PARTIAL (PR #25): difftest 2379 cases (358 upstream .smb fixtures: 186 ReadFromFile, 170 ReadFromDB v30, 2 part-file B-reps at v32; 21 edge-case fixtures; 2000 generated ASCII/binary B-rep, curve, surface, file and constructor cases for versions 29-50), 2318 pass bit-identical, 61 deferred (surface.offset_surface 46, surface.plane_p2 11, surface.cone_p1 2, surface.surf_of_extrusion_p2 2); --perturb SENSITIVE" +notes = "17 fns; largest: SmBrepData::ReadFromDB, SmBrepData::ReadCurveFromDB, SmBrepData::ReadSurfaceFromDB, SmEUData::ReadFromDB; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; PARTIAL (PR #25): difftest 2379 cases (358 upstream .smb fixtures: 186 ReadFromFile, 170 ReadFromDB v30, 2 part-file B-reps at v32; 21 edge-case fixtures; 2000 generated ASCII/binary B-rep, curve, surface, file and constructor cases for versions 29-50), 2324 pass bit-identical, 55 deferred (surface.offset_surface 46, surface.cone_p1 7, surface.surf_of_extrusion_p2 2; SmPlane::ReadFromDB wired by surface.plane_p2 PR #40); --perturb SENSITIVE" [[unit]] id = "topology.proto_topology_p1" diff --git a/reports/difftest/nurbs.b_spline_surface_p2.json b/reports/difftest/nurbs.b_spline_surface_p2.json index 7852aaa899..b87da39bae 100644 --- a/reports/difftest/nurbs.b_spline_surface_p2.json +++ b/reports/difftest/nurbs.b_spline_surface_p2.json @@ -215,8 +215,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "surf1_analytics", @@ -2007,8 +2007,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "gen0181", @@ -2967,8 +2967,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "gen0300", @@ -4303,8 +4303,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "gen0464", @@ -6079,8 +6079,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "gen0681", @@ -6248,7 +6248,7 @@ "cases_passed": 729, "cases_total": 763, "deferred_by_unit": { - "surface.plane_p2": 5, + "surface.cone_p2": 5, "surface.surface_p1": 29 }, "max_rel_err": 0.0, diff --git a/reports/difftest/surface.surface_cache_p2.json b/reports/difftest/surface.surface_cache_p2.json index 3d26fd2379..68215cdcb0 100644 --- a/reports/difftest/surface.surface_cache_p2.json +++ b/reports/difftest/surface.surface_cache_p2.json @@ -10,28 +10,20 @@ "values_compared": 554 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "Surface_nth_all", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/surface.surface_cache_p2/cases.json#1 (upstream prog_test smSurfaceTest.cpp:4117 (my_test_surface_closest_point, my_test_drop_point: surface cache of Surface.sms))", - "values_compared": 0 + "values_compared": 16 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "Surface_nth_sub", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/surface.surface_cache_p2/cases.json#2 (upstream prog_test smSurfaceTest.cpp:4117 (my_test_surface_closest_point, my_test_drop_point: surface cache of Surface.sms))", - "values_compared": 0 + "values_compared": 10 }, { "deferred": { @@ -254,28 +246,20 @@ "values_compared": 154 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "offset_nurb_nth_all", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/surface.surface_cache_p2/cases.json#28 (upstream prog_test smFilletTest.cpp:3769 (offset_nurb.sms))", - "values_compared": 0 + "values_compared": 126 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "offset_nurb_nth_sub", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/surface.surface_cache_p2/cases.json#29 (upstream prog_test smFilletTest.cpp:3769 (offset_nurb.sms))", - "values_compared": 0 + "values_compared": 10 }, { "deferred": { @@ -498,28 +482,20 @@ "values_compared": 34 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "DropCurveSurface_nth_all", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/surface.surface_cache_p2/cases.json#55 (upstream pt_TestFiles/DropCurveSurface.sms (planar bilinear patch; my_test_drop_point family))", - "values_compared": 0 + "values_compared": 126 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "DropCurveSurface_nth_sub", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/surface.surface_cache_p2/cases.json#56 (upstream pt_TestFiles/DropCurveSurface.sms (planar bilinear patch; my_test_drop_point family))", - "values_compared": 0 + "values_compared": 10 }, { "deferred": { @@ -1042,16 +1018,12 @@ "values_compared": 0 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0012", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313452999", - "values_compared": 0 + "values_compared": 82 }, { "max_rel_err": 0.0, @@ -1446,16 +1418,12 @@ "values_compared": 244 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0057", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453044", - "values_compared": 0 + "values_compared": 51 }, { "max_rel_err": 0.0, @@ -1514,16 +1482,12 @@ "values_compared": 12 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0065", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453052", - "values_compared": 0 + "values_compared": 76 }, { "max_rel_err": 0.0, @@ -1574,16 +1538,12 @@ "values_compared": 12 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0072", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453059", - "values_compared": 0 + "values_compared": 7 }, { "deferred": { @@ -1758,16 +1718,12 @@ "values_compared": 124 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0093", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453080", - "values_compared": 0 + "values_compared": 10 }, { "max_rel_err": 0.0, @@ -2754,16 +2710,12 @@ "values_compared": 101 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0207", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453194", - "values_compared": 0 + "values_compared": 16 }, { "max_rel_err": 0.0, @@ -3010,16 +2962,12 @@ "values_compared": 0 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0237", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453224", - "values_compared": 0 + "values_compared": 13 }, { "max_rel_err": 0.0, @@ -3210,16 +3158,12 @@ "values_compared": 10 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0260", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453247", - "values_compared": 0 + "values_compared": 54 }, { "max_rel_err": 0.0, @@ -3482,16 +3426,12 @@ "values_compared": 12 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0291", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453278", - "values_compared": 0 + "values_compared": 151 }, { "max_rel_err": 0.0, @@ -3510,16 +3450,12 @@ "values_compared": 12 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0294", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453281", - "values_compared": 0 + "values_compared": 51 }, { "max_rel_err": 0.0, @@ -3766,16 +3702,12 @@ "values_compared": 19 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0324", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453311", - "values_compared": 0 + "values_compared": 4 }, { "max_rel_err": 0.0, @@ -4226,16 +4158,12 @@ "values_compared": 17 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0377", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453364", - "values_compared": 0 + "values_compared": 54 }, { "deferred": { @@ -5210,16 +5138,12 @@ "values_compared": 20 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0488", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453475", - "values_compared": 0 + "values_compared": 101 }, { "max_rel_err": 0.0, @@ -5254,16 +5178,12 @@ "values_compared": 12 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0493", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453480", - "values_compared": 0 + "values_compared": 76 }, { "max_rel_err": 0.0, @@ -5382,16 +5302,12 @@ "values_compared": 0 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0507", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453494", - "values_compared": 0 + "values_compared": 151 }, { "max_rel_err": 0.0, @@ -5922,16 +5838,12 @@ "values_compared": 12 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0569", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453556", - "values_compared": 0 + "values_compared": 51 }, { "max_rel_err": 0.0, @@ -6070,16 +5982,12 @@ "values_compared": 12 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0586", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453573", - "values_compared": 0 + "values_compared": 151 }, { "max_rel_err": 0.0, @@ -6926,16 +6834,12 @@ "values_compared": 12 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0682", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453669", - "values_compared": 0 + "values_compared": 13 }, { "max_rel_err": 0.0, @@ -7194,16 +7098,12 @@ "values_compared": 0 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0710", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453697", - "values_compared": 0 + "values_compared": 7 }, { "max_rel_err": 0.0, @@ -7302,16 +7202,12 @@ "values_compared": 13 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0722", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453709", - "values_compared": 0 + "values_compared": 10 }, { "max_rel_err": 0.0, @@ -7650,28 +7546,20 @@ "values_compared": 30 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0764", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453751", - "values_compared": 0 + "values_compared": 7 }, { - "deferred": { - "symbol": "SmSurface::EvaluateNormal", - "unit": "surface.surface_p7" - }, "max_rel_err": 0.0, "name": "gen0765", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "generated:seed=17500106336313453752", - "values_compared": 0 + "values_compared": 10 }, { "deferred": { @@ -7979,15 +7867,14 @@ } ], "cases_both_errored": 0, - "cases_deferred": 184, + "cases_deferred": 156, "cases_failed": 0, - "cases_passed": 721, + "cases_passed": 749, "cases_total": 905, "deferred_by_unit": { "surface.plane_p1": 53, "surface.surface_p1": 47, "surface.surface_p5": 43, - "surface.surface_p7": 28, "surface.surface_p9": 13 }, "max_rel_err": 0.0, diff --git a/reports/difftest/surface.surface_p2.json b/reports/difftest/surface.surface_p2.json index 24a1633fe8..20c46d3276 100644 --- a/reports/difftest/surface.surface_p2.json +++ b/reports/difftest/surface.surface_p2.json @@ -59,8 +59,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "Surface_copy_anal", @@ -190,16 +190,12 @@ "values_compared": 38 }, { - "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" - }, "max_rel_err": 0.0, "name": "DropCurveSurface_copy_anal", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/surface.surface_p2/cases.json#22 (upstream pt_TestFiles/DropCurveSurface.sms (prog_test drop-curve surface input))", - "values_compared": 0 + "values_compared": 38 }, { "deferred": { @@ -323,8 +319,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "offset_nurb_copy_anal", @@ -1079,8 +1075,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "gen0058", @@ -2199,8 +2195,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "gen0191", @@ -2423,8 +2419,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "gen0218", @@ -2467,8 +2463,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "gen0223", @@ -3879,8 +3875,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "gen0393", @@ -4475,8 +4471,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "gen0465", @@ -4651,8 +4647,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "gen0485", @@ -6227,8 +6223,8 @@ }, { "deferred": { - "symbol": "SmPlane::IsNurbSurfacePlane", - "unit": "surface.plane_p2" + "symbol": "SmCone::IsNurbSurfaceCone", + "unit": "surface.cone_p2" }, "max_rel_err": 0.0, "name": "gen0673", @@ -7275,13 +7271,13 @@ } ], "cases_both_errored": 0, - "cases_deferred": 80, + "cases_deferred": 79, "cases_failed": 0, - "cases_passed": 789, + "cases_passed": 790, "cases_total": 869, "deferred_by_unit": { "intersect.adv_surface_intersector": 1, - "surface.plane_p2": 11, + "surface.cone_p2": 10, "surface.surface_p1": 31, "surface.surface_p5": 36, "topology.trimming_tools": 1 diff --git a/reports/difftest/topology.brep_data.json b/reports/difftest/topology.brep_data.json index d5a53ff3a4..662776da79 100644 --- a/reports/difftest/topology.brep_data.json +++ b/reports/difftest/topology.brep_data.json @@ -239,8 +239,8 @@ }, { "deferred": { - "symbol": "SmPlane::ReadFromDB", - "unit": "surface.plane_p2" + "symbol": "SmCone::ReadFromDB", + "unit": "surface.cone_p1" }, "max_rel_err": 0.0, "name": "file_Defeature_LShape_I", @@ -251,8 +251,8 @@ }, { "deferred": { - "symbol": "SmPlane::ReadFromDB", - "unit": "surface.plane_p2" + "symbol": "SmCone::ReadFromDB", + "unit": "surface.cone_p1" }, "max_rel_err": 0.0, "name": "file_Defeature_LShape_II", @@ -274,16 +274,12 @@ "values_compared": 0 }, { - "deferred": { - "symbol": "SmPlane::ReadFromDB", - "unit": "surface.plane_p2" - }, "max_rel_err": 0.0, "name": "file_Defeature_brep1", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/topology.brep_data/upstream_files.json#11 (upstream tests/prog_test/src/smFeatureTest.cpp (SmBrep::ReadFromFile))", - "values_compared": 0 + "values_compared": 1919 }, { "deferred": { @@ -315,8 +311,8 @@ }, { "deferred": { - "symbol": "SmPlane::ReadFromDB", - "unit": "surface.plane_p2" + "symbol": "SmCone::ReadFromDB", + "unit": "surface.cone_p1" }, "max_rel_err": 0.0, "name": "file_Defeature_flathead_screw_top", @@ -326,64 +322,44 @@ "values_compared": 0 }, { - "deferred": { - "symbol": "SmPlane::ReadFromDB", - "unit": "surface.plane_p2" - }, "max_rel_err": 0.0, "name": "file_Defeature_inset_cube", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/topology.brep_data/upstream_files.json#16 (upstream tests/prog_test/src/smFeatureTest.cpp (SmBrep::ReadFromFile))", - "values_compared": 0 + "values_compared": 915 }, { - "deferred": { - "symbol": "SmPlane::ReadFromDB", - "unit": "surface.plane_p2" - }, "max_rel_err": 0.0, "name": "file_Defeature_inset_cube_1x1fillet", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/topology.brep_data/upstream_files.json#17 (upstream tests/prog_test/src/smFeatureTest.cpp (SmBrep::ReadFromFile))", - "values_compared": 0 + "values_compared": 1049 }, { - "deferred": { - "symbol": "SmPlane::ReadFromDB", - "unit": "surface.plane_p2" - }, "max_rel_err": 0.0, "name": "file_Defeature_inset_cube_1x2fillet", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/topology.brep_data/upstream_files.json#18 (upstream tests/prog_test/src/smFeatureTest.cpp (SmBrep::ReadFromFile))", - "values_compared": 0 + "values_compared": 1183 }, { - "deferred": { - "symbol": "SmPlane::ReadFromDB", - "unit": "surface.plane_p2" - }, "max_rel_err": 0.0, "name": "file_Defeature_inset_cube_1x3fillet", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/topology.brep_data/upstream_files.json#19 (upstream tests/prog_test/src/smFeatureTest.cpp (SmBrep::ReadFromFile))", - "values_compared": 0 + "values_compared": 1317 }, { - "deferred": { - "symbol": "SmPlane::ReadFromDB", - "unit": "surface.plane_p2" - }, "max_rel_err": 0.0, "name": "file_Defeature_inset_cube_3x1fillet", - "outcome": "deferred", - "pass": false, + "outcome": "pass", + "pass": true, "source": "fixture:fixtures/topology.brep_data/upstream_files.json#20 (upstream tests/prog_test/src/smFeatureTest.cpp (SmBrep::ReadFromFile))", - "values_compared": 0 + "values_compared": 1317 }, { "max_rel_err": 0.0, @@ -2443,8 +2419,8 @@ }, { "deferred": { - "symbol": "SmPlane::ReadFromDB", - "unit": "surface.plane_p2" + "symbol": "SmCone::ReadFromDB", + "unit": "surface.cone_p1" }, "max_rel_err": 0.0, "name": "file_Solids_OffsetBoxCylOnCorner_edited", @@ -2455,8 +2431,8 @@ }, { "deferred": { - "symbol": "SmPlane::ReadFromDB", - "unit": "surface.plane_p2" + "symbol": "SmCone::ReadFromDB", + "unit": "surface.cone_p1" }, "max_rel_err": 0.0, "name": "file_Solids_OffsetBoxCylOnCorner_healed", @@ -19279,14 +19255,13 @@ } ], "cases_both_errored": 0, - "cases_deferred": 61, + "cases_deferred": 55, "cases_failed": 0, - "cases_passed": 2318, + "cases_passed": 2324, "cases_total": 2379, "deferred_by_unit": { - "surface.cone_p1": 2, + "surface.cone_p1": 7, "surface.offset_surface": 46, - "surface.plane_p2": 11, "surface.surf_of_extrusion_p2": 2 }, "max_rel_err": 0.0, From a6675c0affad2cda0570abf1d18cd018e171935d Mon Sep 17 00:00:00 2001 From: bherbruck Date: Tue, 13 Oct 2026 23:22:42 -0400 Subject: [PATCH 23/54] claim: intersect.curve_class_p1 Co-Authored-By: Claude Opus 5.5 (1M context) From 28a6de047699fd94b9f1cca04859243beaa9456f Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 08:31:07 -0400 Subject: [PATCH 24/54] WIP: interrupted by a WSL restart (unverified) Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm --- .../src/units/intersect_curve_class_p1.rs | 2479 +++ .../src/units/intersect_curve_class_p1.rs | 718 + crates/solidcore/src/curve/crv_in_volume.rs | 2 +- crates/solidcore/src/curve/crv_on_surf.rs | 2 +- crates/solidcore/src/curve/ellipse/p2.rs | 5 + crates/solidcore/src/curve/hyperbola.rs | 5 + crates/solidcore/src/curve/line.rs | 5 + crates/solidcore/src/geom/tol.rs | 8 +- crates/solidcore/src/intersect.rs | 1 + crates/solidcore/src/intersect/curve_class.rs | 20 + .../solidcore/src/intersect/curve_class/p1.rs | 2072 ++ crates/solidcore/src/surface/plane/p1.rs | 6 + crates/solidcore/src/surface/surface/p2.rs | 4 +- fixtures/intersect.curve_class_p1/usage.json | 38 + harness/cpp/shim/intersect_curve_class_p1.cpp | 2866 +++ .../difftest/intersect.curve_class_p1.json | 16769 ++++++++++++++++ 16 files changed, 24993 insertions(+), 7 deletions(-) create mode 100644 crates/difftest/src/units/intersect_curve_class_p1.rs create mode 100644 crates/solidcore-ffi/src/units/intersect_curve_class_p1.rs create mode 100644 crates/solidcore/src/intersect/curve_class.rs create mode 100644 crates/solidcore/src/intersect/curve_class/p1.rs create mode 100644 fixtures/intersect.curve_class_p1/usage.json create mode 100644 harness/cpp/shim/intersect_curve_class_p1.cpp create mode 100644 reports/difftest/intersect.curve_class_p1.json diff --git a/crates/difftest/src/units/intersect_curve_class_p1.rs b/crates/difftest/src/units/intersect_curve_class_p1.rs new file mode 100644 index 0000000000..c994de8b06 --- /dev/null +++ b/crates/difftest/src/units/intersect_curve_class_p1.rs @@ -0,0 +1,2479 @@ +//! Runner for unit `intersect.curve_class_p1`: `SmCurveInterval`, the part-1 members of +//! `SmCurveClassification`, `SmTouchData`'s touch-list helpers, the classification overloads +//! of `SmTol` and the static helpers of `SmCurveClass.cpp`. +//! +//! C++: `solidcore_ffi::units::intersect_curve_class_p1` (upstream +//! `source/SMLib/src/SmCurveClass.cpp`). Rust: `solidcore::intersect::curve_class`. +//! +//! A case is a script: a pool of `objects` (curves as in unit `curve.curve_p6` plus real +//! `SmEllipse` / `SmCircle`, planes, B-spline surfaces, points, vertex, edge and face objects, +//! loop and "other" stand-ins) and `ops` on two default classifications `cc[0]`, `cc[1]`. Both +//! sides produce the flat record documented in the ffi module (per op: code, status, outputs, +//! state of the target classification), reported as the `out` values. A Rust error maps to +//! its `SmStatus` (`InvalidInput` 1007, `-1` for one upstream cannot return); an `Unported` +//! error anywhere defers the case. +//! +//! Deferred cases: ops that reach topology (`ComputePointParameters` on vertices, edges and +//! faces, `sm_SetXSectEdgeThroughPoint`, `sm_GetCCIGeometry`, `sm_ComputeFacePointClass`), +//! surface point solves (`ComputePointParameters` on surfaces, `sm_GetCCISurfaceGaps` with +//! surfaces), `SmTol::MapTo2d` (`sm_GetXSectTol2dOr3d_ForClassifyPair` for a UV curve on a +//! surface) and an `SmCrvOnSurf` over a plane. Generated scripts are filtered by the shim's +//! run-time checks (scripts it rejects as undefined upstream are dropped). + +use serde::{Deserialize, Serialize}; +use serde_json::{json, Value}; + +use solidcore::curve::curve::p2::{Curve, CurveKind}; +use solidcore::curve::ellipse::{Ellipse, EllipseOptions}; +use solidcore::curve::hermite_curve::HermiteCurve; +use solidcore::curve::line::{BoundedLineOptions, Line}; +use solidcore::geom::extent1d::Extent1d; +use solidcore::geom::solution_array::{ObjectKind, Solution, SolutionArray, SolutionObject, SolutionType}; +use solidcore::geom::tol::{zone_tol3d, ScaledZero}; +use solidcore::geom::vector3d::Vec3; +use solidcore::intersect::curve_class::{ + self as cc_mod, ApplyPointSolutionInput, CrvDirOnFaceType, CurveClassification, + CurveInterval, TouchData, CURVE_CLASSIFICATION_TYPE_STRING, +}; +use solidcore::intersect::point_class::{ + ClassGeometry, ClassObject, ClassObjectKind, PointClassType, PointClassification, +}; +use solidcore::kernel::Kernel; +use solidcore::math::Point2; +use solidcore::nurbs::b_spline_curve::BSplineCurve; +use solidcore::nurbs::b_spline_surface::BSplineSurface; +use solidcore::nurbs::math::CPoint; +use solidcore::nurbs::nurbs_crv::allocate_nurb_curve; +use solidcore::nurbs::srf_basic::Surface as NurbSurface; +use solidcore::surface::plane::Plane; +use solidcore::surface::surface::Surface; +use solidcore::surface::volume::Volume; +use solidcore::SolidError; +use solidcore_ffi::units::intersect_curve_class_p1::{self as ffi, kind, op}; + +use crate::case::{CaseContext, CaseSource}; +use crate::runner::default_cases; +use crate::{Case, HarnessError, Output, Rng, UnitDiff}; + +/// Generated cases per run, whatever `--seeds` says (it can only raise this). +pub const MIN_GENERATED: usize = 2000; + +/// `intersect.curve_class_p1` runner. +pub struct Runner; + +fn harness(msg: impl Into) -> HarnessError { + HarnessError::new(msg) +} + +const NOZ: f64 = f64::MAX; +const NOW: f64 = -f64::MAX; +/// `SM_USE_DEFAULT`. +const USE_DEFAULT: f64 = 9876543.21; +/// `SM_BIG_DOUBLE`. +const BIG: f64 = 1.0e20; +/// `SC_ERR_ARG`. +const SC_ERR_ARG: i32 = -1002; + +// ---- inputs ----------------------------------------------------------------------------- + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct BSplineIn { + dim: u64, + #[serde(default)] + oob: bool, + cpts: Vec<[f64; 4]>, + p: usize, + u: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct HermiteIn { + dim: u64, + p1: [f64; 3], + d1: [f64; 3], + p2: [f64; 3], + d2: [f64; 3], +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct LineIn { + p: [f64; 3], + v: [f64; 3], + domain: [f64; 2], + #[serde(default = "one")] + scale: f64, + #[serde(default)] + inside_out: bool, +} + +fn one() -> f64 { + 1.0 +} + +/// An `SmEllipse(C, X, Y, [d0, d1], rx, ry, dim, ctx, NULL, io)` or, without `ry`, an +/// `SmCircle(C, X, Y, [d0, d1], rx, dim, ctx, NULL, io)`. +#[derive(Debug, Clone, Serialize, Deserialize)] +struct ConicIn { + center: [f64; 3], + x: [f64; 3], + y: [f64; 3], + domain: [f64; 2], + rx: f64, + ry: Option, + #[serde(default)] + inside_out: bool, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +enum CurveIn { + Bspline(BSplineIn), + Hermite(HermiteIn), + Line(LineIn), + Conic(ConicIn), +} + +/// A B-spline surface: control net `net[i][j]` (`x y z w`, `w = NOW` non-rational). +#[derive(Debug, Clone, Serialize, Deserialize)] +struct SurfIn { + #[serde(default)] + oob: bool, + net: Vec>, + p: usize, + q: usize, + u: Vec, + v: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +enum ObjIn { + Curve(CurveIn), + Plane { o: [f64; 3], n: [f64; 3] }, + Bsurf(SurfIn), + Point([f64; 3]), + Vertex, + Edge(Option), + Face(Option), + Loop, + Other, +} + +/// A touch: `connected_to loop_dir loop_index param pt_index pt_classify`. +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] +struct TouchIn { + c: Option, + dir: i32, + li: u64, + prm: f64, + pi: u64, + pc: Option, +} + +/// A solution of `sm_CullOrRefineCCIIn3d`: `type s0 s1 e0 e1 value`. +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] +struct SolIn { + ty: usize, + s: [f64; 2], + e: [f64; 2], + value: f64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "op", rename_all = "snake_case")] +enum OpIn { + SetSize { t: usize, n: usize }, + RemoveAt { t: usize, j: usize }, + IvlSet { t: usize, j: usize, a: f64, b: f64 }, + IvlSetMin { t: usize, j: usize, v: f64 }, + IvlSetMax { t: usize, j: usize, v: f64 }, + IvlReset { t: usize, j: usize }, + IvlAssign { t: usize, j: usize, k: usize }, + IvlNew { t: usize, j: usize, with: bool, owner: bool, a: f64, b: f64 }, + PcSetClass { t: usize, j: usize, w: usize, class: i32, obj: Option }, + PcSetT { t: usize, j: usize, w: usize, v: f64 }, + PcSetUv { t: usize, j: usize, w: usize, u: f64, v: f64 }, + PcSetGap { t: usize, j: usize, w: usize, g: f64 }, + PcSetSss { t: usize, j: usize, w: usize, p: [f64; 3] }, + PcSetPresnap { t: usize, j: usize, w: usize, v: f64 }, + PcSetSrcTol { t: usize, j: usize, w: usize, tol: f64 }, + SetCurve { t: usize, obj: Option, owned: bool }, + SetSurface1 { t: usize, obj: Option }, + SetSurface2 { t: usize, obj: Option }, + SetFace { t: usize, obj: Option }, + SetIntersectData { + t: usize, + s1: Option, + s2: Option, + uv2: Option, + current: bool, + ti: Option, + }, + SetIsCurveCurrent { t: usize, b: bool }, + SetIgnoreTangency { t: usize, b: bool }, + SetIsCurveOwned { t: usize, b: bool }, + SetOkToSetTol { t: usize, b: bool }, + SetFilletData { t: usize, obj: Option, b: bool }, + SetTgtLoopsOnly { t: usize, b: bool }, + AddTgtLoop { t: usize, obj: Option }, + SetSrcTol { t: usize, tol: f64 }, + SetUvCurve1 { t: usize, obj: Option }, + SetUvCurve2 { t: usize, obj: Option }, + SubInterval { t: usize, j: usize }, + ClassifyCrvLoc { t: usize, j: usize, w: usize, prm: f64 }, + SetPcParams { t: usize, mids: bool }, + SqueezeEnd { t: usize, j: usize }, + IsReferenced { t: usize, obj: Option }, + MakeConsistent { t: usize }, + Type { t: usize, types: Vec }, + SrcTol { t: usize }, + IvlTols { t: usize, j: usize }, + ObjDim { t: usize, obj: Option }, + XsectCurve { + t: usize, + c: Option, + tol: f64, + uvc: Vec>, + srf: Vec>, + uv: Vec<[f64; 2]>, + prm: f64, + dev: f64, + p: [f64; 3], + }, + Apply { + t: usize, + use_cc: bool, + edge: Option, + emate: Option, + srf: [Option; 4], + uv: [[f64; 2]; 4], + sol: [f64; 3], + sss: [f64; 3], + }, + Angle { t: usize, c1: Option, t1: f64, c2: Option, t2: f64, dev: f64 }, + Cull { + t: usize, + s: Option, + uvc: Option, + ivl1: [f64; 2], + c2: Option, + ivl2: [f64; 2], + tol: f64, + sols: Vec, + }, + TolPair { t: usize, c: Option, s: Option, p1: f64, tol1: f64, p2: f64, tol2: f64 }, + Gaps { + t: usize, + cp: [f64; 3], + ep: [f64; 3], + sol: [f64; 2], + pairs: Vec<(Option, Option)>, + count: usize, + }, + TouchConnected { t: usize, c: Option, touches: Vec }, + TouchWinding { t: usize, touches: Vec }, + EdgeThrough { t: usize, e: Option, p: [f64; 3], srf: [Option; 2], uv: [[f64; 2]; 2], prm: f64 }, + CciGeometry { t: usize, e: Option }, + FacePointClass { t: usize, f: Option, p: [f64; 3], tol: f64 }, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct Script { + objects: Vec, + ops: Vec, +} + +// ---- objects ---------------------------------------------------------------------------- + +fn v3(p: [f64; 3]) -> Vec3 { + Vec3::from_array(p) +} + +fn b(x: bool) -> f64 { + f64::from(u8::from(x)) +} + +fn opt_id(o: Option) -> f64 { + o.map_or(-1.0, |i| i as f64) +} + +fn curve_block(v: &mut Vec, c: &CurveIn) { + match c { + CurveIn::Bspline(bs) => { + let n = bs.cpts.len().saturating_sub(1); + let m = bs.u.len().saturating_sub(1); + v.extend([0.0, bs.dim as f64, b(bs.oob)]); + v.extend([n as f64, bs.p as f64, m as f64]); + for c in &bs.cpts { + v.extend_from_slice(c); + } + v.extend_from_slice(&bs.u); + } + CurveIn::Hermite(h) => { + v.extend([1.0, h.dim as f64]); + for p in [h.p1, h.d1, h.p2, h.d2] { + v.extend_from_slice(&p); + } + } + CurveIn::Conic(c) => { + v.extend([if c.ry.is_some() { 3.0 } else { 4.0 }, 3.0]); + v.extend_from_slice(&c.center); + v.extend_from_slice(&c.x); + v.extend_from_slice(&c.y); + v.extend(c.domain); + v.push(c.rx); + if let Some(ry) = c.ry { + v.push(ry); + } + v.push(b(c.inside_out)); + } + CurveIn::Line(l) => { + v.extend([2.0, 3.0]); + v.extend_from_slice(&l.p); + v.extend_from_slice(&l.v); + v.extend([l.domain[0], l.domain[1], l.scale, b(l.inside_out)]); + } + } +} + +fn surface_block(v: &mut Vec, s: &SurfIn) { + let n = s.net.len().saturating_sub(1); + let m = s.net.first().map_or(0, Vec::len).saturating_sub(1); + v.push(b(s.oob)); + v.extend([ + n as f64, + m as f64, + s.p as f64, + s.q as f64, + s.u.len().saturating_sub(1) as f64, + s.v.len().saturating_sub(1) as f64, + ]); + for row in &s.net { + for c in row { + v.extend_from_slice(c); + } + } + v.extend_from_slice(&s.u); + v.extend_from_slice(&s.v); +} + +fn build_curve(c: &CurveIn) -> Result { + match c { + CurveIn::Bspline(bs) => { + let n = bs + .cpts + .len() + .checked_sub(1) + .ok_or_else(|| harness("no points"))?; + let m = bs.u.len().checked_sub(1).ok_or_else(|| harness("no knots"))?; + let mut cur = + allocate_nurb_curve(n, bs.p, m).map_err(|e| harness(format!("curve: {e}")))?; + for (d, s) in cur.cpts_mut().iter_mut().zip(&bs.cpts) { + d.x = s[0]; + d.y = s[1]; + d.z = s[2]; + d.w = s[3]; + } + cur.knots_mut().copy_from_slice(&bs.u); + let mut c = BSplineCurve::from_nurb(cur, bs.dim, false); + c.set_out_of_bounds_enabled(bs.oob); + Ok(Curve::from(c)) + } + CurveIn::Hermite(h) => Ok(Curve::from(HermiteCurve::new( + v3(h.p1), + v3(h.d1), + v3(h.p2), + v3(h.d2), + h.dim, + ))), + CurveIn::Line(l) => { + let opts = BoundedLineOptions { + scale: l.scale, + inside_out: l.inside_out, + ..BoundedLineOptions::default() + }; + Ok(Curve::from(Line::bounded( + v3(l.p), + v3(l.v), + &Extent1d::from_min_max(l.domain[0], l.domain[1]), + &opts, + ))) + } + CurveIn::Conic(c) => { + let k = Kernel::default(); + let opts = EllipseOptions { + dim: 3, + nurb: None, + inside_out: c.inside_out, + }; + let domain = Extent1d::from_min_max(c.domain[0], c.domain[1]); + let e = match c.ry { + Some(ry) => Ellipse::new(&k, v3(c.center), v3(c.x), v3(c.y), domain, c.rx, ry, &opts), + None => Ellipse::new_circle(&k, v3(c.center), v3(c.x), v3(c.y), domain, c.rx, &opts), + } + .map_err(|e| harness(format!("conic: {e}")))?; + Ok(Curve::from(e)) + } + } +} + +fn build_surface(s: &SurfIn) -> Result { + let net = s + .net + .iter() + .map(|row| row.iter().map(|c| CPoint::new(c[0], c[1], c[2], c[3])).collect()) + .collect(); + let sur = NurbSurface::new(net, s.p, s.q, s.u.clone(), s.v.clone()) + .map_err(|e| harness(format!("surface: {e}")))?; + let mut bs = BSplineSurface::from_nurb(sur, false); + *bs.out_of_bounds_enabled_mut() = s.oob; + Ok(Surface::from(bs)) +} + +// ---- C++ side --------------------------------------------------------------------------- + +fn touches_block(v: &mut Vec, ts: &[TouchIn]) { + v.push(ts.len() as f64); + for t in ts { + v.extend([ + opt_id(t.c), + f64::from(t.dir), + t.li as f64, + t.prm, + t.pi as f64, + opt_id(t.pc), + ]); + } +} + +fn cpp_input(s: &Script) -> Vec { + let mut v = vec![s.objects.len() as f64]; + for o in &s.objects { + match o { + ObjIn::Curve(c) => { + v.push(kind::CURVE as f64); + curve_block(&mut v, c); + } + ObjIn::Plane { o, n } => { + v.push(kind::PLANE as f64); + v.extend_from_slice(o); + v.extend_from_slice(n); + } + ObjIn::Bsurf(sf) => { + v.push(kind::BSURF as f64); + surface_block(&mut v, sf); + } + ObjIn::Point(p) => { + v.push(kind::POINT as f64); + v.extend_from_slice(p); + } + ObjIn::Vertex => v.push(kind::VERTEX as f64), + ObjIn::Edge(c) => v.extend([kind::EDGE as f64, opt_id(*c)]), + ObjIn::Face(sf) => v.extend([kind::FACE as f64, opt_id(*sf)]), + ObjIn::Loop => v.push(kind::LOOP as f64), + ObjIn::Other => v.push(kind::OTHER as f64), + } + } + v.push(s.ops.len() as f64); + for o in &s.ops { + let (code, t) = op_code(o); + v.extend([code as f64, t as f64]); + match o { + OpIn::SetSize { n, .. } => v.push(*n as f64), + OpIn::RemoveAt { j, .. } + | OpIn::IvlReset { j, .. } + | OpIn::SubInterval { j, .. } + | OpIn::SqueezeEnd { j, .. } + | OpIn::IvlTols { j, .. } => v.push(*j as f64), + OpIn::IvlSet { j, a, b: bb, .. } => v.extend([*j as f64, *a, *bb]), + OpIn::IvlSetMin { j, v: x, .. } | OpIn::IvlSetMax { j, v: x, .. } => { + v.extend([*j as f64, *x]); + } + OpIn::IvlAssign { j, k, .. } => v.extend([*j as f64, *k as f64]), + OpIn::IvlNew { + j, with, owner, a, b: bb, .. + } => v.extend([*j as f64, b(*with), b(*owner), *a, *bb]), + OpIn::PcSetClass { j, w, class, obj, .. } => { + v.extend([*j as f64, *w as f64, f64::from(*class), opt_id(*obj)]); + } + OpIn::PcSetT { j, w, v: x, .. } | OpIn::PcSetPresnap { j, w, v: x, .. } => { + v.extend([*j as f64, *w as f64, *x]); + } + OpIn::PcSetUv { j, w, u, v: x, .. } => v.extend([*j as f64, *w as f64, *u, *x]), + OpIn::PcSetGap { j, w, g, .. } => v.extend([*j as f64, *w as f64, *g]), + OpIn::PcSetSrcTol { j, w, tol, .. } => v.extend([*j as f64, *w as f64, *tol]), + OpIn::PcSetSss { j, w, p, .. } => { + v.extend([*j as f64, *w as f64]); + v.extend_from_slice(p); + } + OpIn::SetCurve { obj, owned, .. } => v.extend([opt_id(*obj), b(*owned)]), + OpIn::SetFilletData { obj, b: x, .. } => v.extend([opt_id(*obj), b(*x)]), + OpIn::SetSurface1 { obj, .. } + | OpIn::SetSurface2 { obj, .. } + | OpIn::SetFace { obj, .. } + | OpIn::AddTgtLoop { obj, .. } + | OpIn::SetUvCurve1 { obj, .. } + | OpIn::SetUvCurve2 { obj, .. } + | OpIn::IsReferenced { obj, .. } + | OpIn::ObjDim { obj, .. } => v.push(opt_id(*obj)), + OpIn::CciGeometry { e, .. } => v.push(opt_id(*e)), + OpIn::SetIntersectData { + s1, s2, uv2, current, ti, .. + } => v.extend([opt_id(*s1), opt_id(*s2), opt_id(*uv2), b(*current), opt_id(*ti)]), + OpIn::SetIsCurveCurrent { b: x, .. } + | OpIn::SetIgnoreTangency { b: x, .. } + | OpIn::SetIsCurveOwned { b: x, .. } + | OpIn::SetOkToSetTol { b: x, .. } + | OpIn::SetTgtLoopsOnly { b: x, .. } + | OpIn::SetPcParams { mids: x, .. } => v.push(b(*x)), + OpIn::SetSrcTol { tol, .. } => v.push(*tol), + OpIn::ClassifyCrvLoc { j, w, prm, .. } => v.extend([*j as f64, *w as f64, *prm]), + OpIn::Type { types, .. } => { + v.push(types.len() as f64); + v.extend(types.iter().map(|&x| x as f64)); + } + OpIn::XsectCurve { + c, tol, uvc, srf, uv, prm, dev, p, .. + } => { + v.extend([opt_id(*c), *tol, uvc.len() as f64]); + v.extend(uvc.iter().map(|x| opt_id(*x))); + v.push(srf.len() as f64); + v.extend(srf.iter().map(|x| opt_id(*x))); + v.push(uv.len() as f64); + for q in uv { + v.extend_from_slice(q); + } + v.extend([*prm, *dev]); + v.extend_from_slice(p); + } + OpIn::Apply { + use_cc, + edge, + emate, + srf, + uv, + sol, + sss, + .. + } => { + v.extend([b(*use_cc), opt_id(*edge), opt_id(*emate)]); + for (s, q) in srf.iter().zip(uv) { + v.extend([opt_id(*s), q[0], q[1]]); + } + v.extend_from_slice(sol); + v.extend_from_slice(sss); + } + OpIn::Angle { c1, t1, c2, t2, dev, .. } => { + v.extend([opt_id(*c1), *t1, opt_id(*c2), *t2, *dev]); + } + OpIn::Cull { + s, uvc, ivl1, c2, ivl2, tol, sols, .. + } => { + v.extend([opt_id(*s), opt_id(*uvc), ivl1[0], ivl1[1], opt_id(*c2), ivl2[0], ivl2[1], *tol]); + v.push(sols.len() as f64); + for x in sols { + v.extend([x.ty as f64, x.s[0], x.s[1], x.e[0], x.e[1], x.value]); + } + } + OpIn::TolPair { + c, s, p1, tol1, p2, tol2, .. + } => v.extend([opt_id(*c), opt_id(*s), *p1, *tol1, *p2, *tol2]), + OpIn::Gaps { + cp, ep, sol, pairs, count, .. + } => { + v.extend_from_slice(cp); + v.extend_from_slice(ep); + v.extend_from_slice(sol); + v.push(pairs.len() as f64); + for (s, u) in pairs { + v.extend([opt_id(*s), opt_id(*u)]); + } + v.push(*count as f64); + } + OpIn::TouchConnected { c, touches, .. } => { + v.push(opt_id(*c)); + touches_block(&mut v, touches); + } + OpIn::TouchWinding { touches, .. } => touches_block(&mut v, touches), + OpIn::EdgeThrough { e, p, srf, uv, prm, .. } => { + v.push(opt_id(*e)); + v.extend_from_slice(p); + for (s, q) in srf.iter().zip(uv) { + v.extend([opt_id(*s), q[0], q[1]]); + } + v.push(*prm); + } + OpIn::FacePointClass { f, p, tol, .. } => { + v.push(opt_id(*f)); + v.extend_from_slice(p); + v.push(*tol); + } + OpIn::MakeConsistent { .. } | OpIn::SrcTol { .. } => {} + } + } + v +} + +fn op_code(o: &OpIn) -> (usize, usize) { + match *o { + OpIn::SetSize { t, .. } => (op::SET_SIZE, t), + OpIn::RemoveAt { t, .. } => (op::REMOVE_AT, t), + OpIn::IvlSet { t, .. } => (op::IVL_SET, t), + OpIn::IvlSetMin { t, .. } => (op::IVL_SET_MIN, t), + OpIn::IvlSetMax { t, .. } => (op::IVL_SET_MAX, t), + OpIn::IvlReset { t, .. } => (op::IVL_RESET, t), + OpIn::IvlAssign { t, .. } => (op::IVL_ASSIGN, t), + OpIn::IvlNew { t, .. } => (op::IVL_NEW, t), + OpIn::PcSetClass { t, .. } => (op::PC_SET_CLASS, t), + OpIn::PcSetT { t, .. } => (op::PC_SET_T, t), + OpIn::PcSetUv { t, .. } => (op::PC_SET_UV, t), + OpIn::PcSetGap { t, .. } => (op::PC_SET_GAP, t), + OpIn::PcSetSss { t, .. } => (op::PC_SET_SSS, t), + OpIn::PcSetPresnap { t, .. } => (op::PC_SET_PRESNAP, t), + OpIn::PcSetSrcTol { t, .. } => (op::PC_SET_SRC_TOL, t), + OpIn::SetCurve { t, .. } => (op::SET_CURVE, t), + OpIn::SetSurface1 { t, .. } => (op::SET_SURFACE1, t), + OpIn::SetSurface2 { t, .. } => (op::SET_SURFACE2, t), + OpIn::SetFace { t, .. } => (op::SET_FACE, t), + OpIn::SetIntersectData { t, .. } => (op::SET_INTERSECT_DATA, t), + OpIn::SetIsCurveCurrent { t, .. } => (op::SET_IS_CURVE_CURRENT, t), + OpIn::SetIgnoreTangency { t, .. } => (op::SET_IGNORE_TANGENCY, t), + OpIn::SetIsCurveOwned { t, .. } => (op::SET_IS_CURVE_OWNED, t), + OpIn::SetOkToSetTol { t, .. } => (op::SET_OK_TO_SET_TOL, t), + OpIn::SetFilletData { t, .. } => (op::SET_FILLET_DATA, t), + OpIn::SetTgtLoopsOnly { t, .. } => (op::SET_TGT_LOOPS_ONLY, t), + OpIn::AddTgtLoop { t, .. } => (op::ADD_TGT_LOOP, t), + OpIn::SetSrcTol { t, .. } => (op::SET_SRC_TOL, t), + OpIn::SetUvCurve1 { t, .. } => (op::SET_UV_CURVE1, t), + OpIn::SetUvCurve2 { t, .. } => (op::SET_UV_CURVE2, t), + OpIn::SubInterval { t, .. } => (op::SUB_INTERVAL, t), + OpIn::ClassifyCrvLoc { t, .. } => (op::CLASSIFY_CRV_LOC, t), + OpIn::SetPcParams { t, .. } => (op::SET_PC_PARAMS, t), + OpIn::SqueezeEnd { t, .. } => (op::SQUEEZE_END, t), + OpIn::IsReferenced { t, .. } => (op::IS_REFERENCED, t), + OpIn::MakeConsistent { t } => (op::MAKE_CONSISTENT, t), + OpIn::Type { t, .. } => (op::TYPE, t), + OpIn::SrcTol { t } => (op::SRC_TOL, t), + OpIn::IvlTols { t, .. } => (op::IVL_TOLS, t), + OpIn::ObjDim { t, .. } => (op::OBJ_DIM, t), + OpIn::XsectCurve { t, .. } => (op::XSECT_CURVE, t), + OpIn::Apply { t, .. } => (op::APPLY, t), + OpIn::Angle { t, .. } => (op::ANGLE, t), + OpIn::Cull { t, .. } => (op::CULL, t), + OpIn::TolPair { t, .. } => (op::TOL_PAIR, t), + OpIn::Gaps { t, .. } => (op::GAPS, t), + OpIn::TouchConnected { t, .. } => (op::TOUCH_CONNECTED, t), + OpIn::TouchWinding { t, .. } => (op::TOUCH_WINDING, t), + OpIn::EdgeThrough { t, .. } => (op::EDGE_THROUGH, t), + OpIn::CciGeometry { t, .. } => (op::CCI_GEOMETRY, t), + OpIn::FacePointClass { t, .. } => (op::FACE_POINT_CLASS, t), + } +} + +fn cpp(s: &Script) -> Result { + let input = cpp_input(s); + let out = ffi::run(&input).map_err(|e| harness(format!("c++: {e}")))?; + Ok(Output::new().values("out", out)) +} + +// ---- Rust side -------------------------------------------------------------------------- + +/// A pool handle: index and kind. +#[derive(Debug, Clone, Copy, PartialEq)] +struct H(usize, ClassObjectKind); + +impl ClassObject for H { + fn class_kind(&self) -> ClassObjectKind { + self.1 + } +} + +/// A solution handle naming nothing. +#[derive(Debug, Clone, Copy, PartialEq)] +struct NoObj; + +impl SolutionObject for NoObj { + fn kind(&self) -> ObjectKind { + ObjectKind::Curve + } +} + +enum PoolObj { + Curve(Curve), + Surface(Surface), + Point(Vec3), + Bare, +} + +struct Pool { + objs: Vec, + handles: Vec, + kinds: Vec, +} + +impl ClassGeometry for Pool { + fn curve(&self, o: H) -> Option<&Curve> { + match self.objs.get(o.0) { + Some(PoolObj::Curve(c)) => Some(c), + _ => None, + } + } + fn surface(&self, o: H) -> Option<&Surface> { + match self.objs.get(o.0) { + Some(PoolObj::Surface(s)) => Some(s), + _ => None, + } + } + fn volume(&self, _o: H) -> Option<&Volume> { + None + } + fn point(&self, o: H) -> Option { + match self.objs.get(o.0) { + Some(PoolObj::Point(p)) => Some(*p), + _ => None, + } + } +} + +impl Pool { + fn handle(&self, i: Option) -> Result, HarnessError> { + i.map(|i| { + self.handles + .get(i) + .copied() + .ok_or_else(|| harness("object index out of range")) + }) + .transpose() + } + + fn curve_at(&self, i: Option) -> Result, HarnessError> { + match i { + None => Ok(None), + Some(i) => match self.objs.get(i) { + Some(PoolObj::Curve(c)) => Ok(Some(c)), + _ => Err(harness("not a curve")), + }, + } + } + + fn surface_at(&self, i: Option) -> Result, HarnessError> { + match i { + None => Ok(None), + Some(i) => match self.objs.get(i) { + Some(PoolObj::Surface(s)) => Ok(Some(s)), + _ => Err(harness("not a surface")), + }, + } + } + + /// Takes curve `i` out of the pool (to edit it); put it back with [`Pool::put_curve`]. + fn take_curve(&mut self, i: usize) -> Result { + match self.objs.get_mut(i) { + Some(slot @ PoolObj::Curve(_)) => match core::mem::replace(slot, PoolObj::Bare) { + PoolObj::Curve(c) => Ok(c), + _ => Err(harness("not a curve")), + }, + _ => Err(harness("not a curve")), + } + } + + fn put_curve(&mut self, i: usize, c: Curve) { + if let Some(slot) = self.objs.get_mut(i) { + *slot = PoolObj::Curve(c); + } + } +} + +fn class_kind_of(k: usize) -> ClassObjectKind { + match k { + kind::CURVE => ClassObjectKind::Curve, + kind::PLANE | kind::BSURF => ClassObjectKind::Surface, + kind::POINT => ClassObjectKind::Point, + kind::VERTEX => ClassObjectKind::Vertex, + kind::EDGE => ClassObjectKind::Edge, + kind::FACE => ClassObjectKind::Face, + kind::LOOP => ClassObjectKind::Loop, + _ => ClassObjectKind::Other, + } +} + +fn obj_kind(o: &ObjIn) -> usize { + match o { + ObjIn::Curve(_) => kind::CURVE, + ObjIn::Plane { .. } => kind::PLANE, + ObjIn::Bsurf(_) => kind::BSURF, + ObjIn::Point(_) => kind::POINT, + ObjIn::Vertex => kind::VERTEX, + ObjIn::Edge(_) => kind::EDGE, + ObjIn::Face(_) => kind::FACE, + ObjIn::Loop => kind::LOOP, + ObjIn::Other => kind::OTHER, + } +} + +fn build_pool(objects: &[ObjIn]) -> Result { + let mut pool = Pool { + objs: Vec::new(), + handles: Vec::new(), + kinds: Vec::new(), + }; + for (i, o) in objects.iter().enumerate() { + let k = obj_kind(o); + let obj = match o { + ObjIn::Curve(c) => PoolObj::Curve(build_curve(c)?), + ObjIn::Plane { o, n } => { + PoolObj::Surface(Surface::from(Plane::from_normal(v3(*o), v3(*n)))) + } + ObjIn::Bsurf(s) => PoolObj::Surface(build_surface(s)?), + ObjIn::Point(p) => PoolObj::Point(v3(*p)), + _ => PoolObj::Bare, + }; + pool.objs.push(obj); + pool.handles.push(H(i, class_kind_of(k))); + pool.kinds.push(k); + } + Ok(pool) +} + +/// The `SmStatus` of a Rust error; `-1` for one upstream cannot return. +fn status(e: &SolidError) -> f64 { + match e { + SolidError::Upstream { code, .. } => f64::from(*code), + SolidError::InvalidInput { .. } => 1007.0, + _ => -1.0, + } +} + +/// A Rust failure: deferred for `Unported`, a harness error otherwise. +enum Fail { + Deferred(Box), + Harness(HarnessError), +} + +impl From for Fail { + fn from(e: HarnessError) -> Self { + Fail::Harness(e) + } +} + +/// `Ok(v)` or the status; `Unported` defers the case. +fn st(r: solidcore::Result) -> Result, Fail> { + match r { + Ok(v) => Ok(Ok(v)), + Err(e) => match Output::unported(&e) { + Some(o) => Err(Fail::Deferred(Box::new(o))), + None => Ok(Err(status(&e))), + }, + } +} + +/// The value, or a harness error for a status (an operation upstream cannot fail). +fn must(r: solidcore::Result) -> Result { + st(r)?.map_err(|s| Fail::Harness(harness(format!("unexpected status {s}")))) +} + +fn id(h: Option) -> f64 { + h.map_or(-1.0, |h| h.0 as f64) +} + +fn put_pc(o: &mut Vec, pc: &PointClassification) { + o.push(f64::from(pc.point_class().code())); + o.push(id(pc.object())); + o.push(id(pc.face())); + o.push(pc.deviation()); + o.push(pc.t_param()); + let uv = pc.uv_param(); + o.extend([uv.x, uv.y]); + let w = pc.uvw_param(); + o.extend([w.x, w.y, w.z]); + o.push(b(pc.are_parameters_set())); + o.push(pc.pre_snap_param()); + o.push(b(pc.sss_point_flag())); + let s = pc.sss_point(); + o.extend([s.x, s.y, s.z]); + o.push(pc.src_zone_tol_3d()); +} + +fn put_cc(o: &mut Vec, k: &Kernel, cc: &CurveClassification) { + o.push(cc.size() as f64); + let ivl = cc.interval(); + o.extend([ivl.min(), ivl.max()]); + o.push(cc_mod::src_zone_tol_3d_of(k, Some(cc))); + o.extend([ + b(cc.is_curve_owned()), + b(cc.is_curve_current()), + b(cc.ignore_tangency()), + b(cc.doing_cross_hatch()), + b(cc.doing_fillets()), + b(cc.ok_to_set_tolerance()), + b(cc.tgt_loops_only()), + ]); + o.extend([ + id(cc.curve()), + id(cc.uv_curve1()), + id(cc.uv_curve2()), + id(cc.any_uv_curve1()), + id(cc.any_uv_curve2()), + id(cc.surface1()), + id(cc.surface2()), + id(cc.face()), + id(cc.topology_intersector()), + id(cc.other_classification()), + ]); + o.push(cc.tgt_loops().len() as f64); + o.extend(cc.tgt_loops().iter().map(|h| h.0 as f64)); + for ivl in cc.intervals() { + o.extend([ivl.min(), ivl.max()]); + put_pc(o, &ivl.start); + put_pc(o, &ivl.mid); + put_pc(o, &ivl.end); + } +} + +/// The curve record (see the ffi module). +fn put_curve(o: &mut Vec, c: &Curve) { + let ivl = c.natural_interval(); + o.extend([ivl.min(), ivl.max()]); + let base = match c.kind() { + CurveKind::BSpline(x) => Some(x), + CurveKind::Ellipse(x) => Some(x.base()), + CurveKind::Hyperbola(x) => Some(x.base()), + CurveKind::Parabola(x) => Some(x.base()), + CurveKind::Line(x) => Some(x.base()), + _ => None, + }; + match base.and_then(|x| x.gw_nurb()) { + Some(cur) => o.extend([cur.n() as f64, cur.m() as f64]), + None => o.extend([-1.0, -1.0]), + } + for i in 0..=6 { + match c.evaluate_point(ivl.evaluate(f64::from(i) / 6.0)) { + Ok(p) => o.extend([0.0, p.x, p.y, p.z]), + Err(e) => o.push(status(&e)), + } + } +} + +fn pc_mut(ivl: &mut CurveInterval, w: usize) -> Result<&mut PointClassification, HarnessError> { + match w { + 0 => Ok(&mut ivl.start), + 1 => Ok(&mut ivl.mid), + 2 => Ok(&mut ivl.end), + _ => Err(harness("bad point classification")), + } +} + +fn touch_list(pool: &Pool, ts: &[TouchIn]) -> Result>, HarnessError> { + ts.iter() + .map(|t| { + Ok(TouchData { + connected_to: pool.handle(t.c)?, + loop_dir: CrvDirOnFaceType::from_code(t.dir).ok_or_else(|| harness("bad dir"))?, + loop_index: t.li, + param: t.prm, + pt_classify_index: t.pi, + pt_classify: pool.handle(t.pc)?, + }) + }) + .collect() +} + +fn put_touch(o: &mut Vec, t: &TouchData) { + o.extend([ + id(t.connected_to), + f64::from(t.loop_dir.code()), + t.loop_index as f64, + t.param, + t.pt_classify_index as f64, + id(t.pt_classify), + ]); +} + +fn uvp(q: [f64; 2]) -> Point2 { + Point2::new(q[0], q[1]) +} + +#[allow(clippy::too_many_lines)] +fn rust_run(s: &Script) -> Result, Fail> { + let k = Kernel::default(); + let mut pool = build_pool(&s.objects)?; + let mut ccs: [CurveClassification; 2] = + [CurveClassification::new(&k), CurveClassification::new(&k)]; + let mut o: Vec = Vec::new(); + let mut deferred: Option> = None; + for x in &s.ops { + let mut step = || -> Result<(), Fail> { + let (code, t) = op_code(x); + if t > 1 { + return Err(harness("bad target").into()); + } + let other = ccs.get(1 - t).cloned().ok_or_else(|| harness("bad target"))?; + o.push(code as f64); + { + let cc = ccs.get_mut(t).ok_or_else(|| harness("bad target"))?; + match x { + OpIn::SetSize { n, .. } => { + must(cc.set_size(&k, *n))?; + o.push(0.0); + } + OpIn::RemoveAt { j, .. } => { + must(cc.remove_at(*j))?; + o.push(0.0); + } + OpIn::IvlSet { j, a, b: bb, .. } => { + must(cc.at_mut(*j))?.set_interval(&Extent1d::from_min_max(*a, *bb)); + o.push(0.0); + } + OpIn::IvlSetMin { j, v, .. } => { + let r = must(cc.at_mut(*j))?.set_interval_min(*v); + o.push(st(r)?.err().unwrap_or(0.0)); + } + OpIn::IvlSetMax { j, v, .. } => { + let r = must(cc.at_mut(*j))?.set_interval_max(*v); + o.push(st(r)?.err().unwrap_or(0.0)); + } + OpIn::IvlReset { j, .. } => { + must(cc.at_mut(*j))?.reset(&k); + o.push(0.0); + } + OpIn::IvlAssign { j, k: kk, .. } => { + let src = *must(other.at(*kk))?; + *must(cc.at_mut(*j))? = src; + o.push(0.0); + } + OpIn::IvlNew { + j, with, owner, a, b: bb, .. + } => { + let owner_cc = owner.then_some(&*cc); + let ivl = if *with { + CurveInterval::with_interval(&k, &Extent1d::from_min_max(*a, *bb), owner_cc) + } else { + CurveInterval::new(&k, owner_cc) + }; + *must(cc.at_mut(*j))? = ivl; + o.push(0.0); + } + OpIn::PcSetClass { j, w, class, obj, .. } => { + let c = PointClassType::from_code(*class).ok_or_else(|| harness("bad class"))?; + let h = pool.handle(*obj)?; + pc_mut(must(cc.at_mut(*j))?, *w)?.set_class_object(c, h); + o.push(0.0); + } + OpIn::PcSetT { j, w, v, .. } => { + pc_mut(must(cc.at_mut(*j))?, *w)?.set_t_param(*v, false); + o.push(0.0); + } + OpIn::PcSetUv { j, w, u, v, .. } => { + pc_mut(must(cc.at_mut(*j))?, *w)?.set_uv_param(Point2::new(*u, *v)); + o.push(0.0); + } + OpIn::PcSetGap { j, w, g, .. } => { + pc_mut(must(cc.at_mut(*j))?, *w)?.set_gap_3d(*g); + o.push(0.0); + } + OpIn::PcSetSss { j, w, p, .. } => { + pc_mut(must(cc.at_mut(*j))?, *w)?.set_sss_point(v3(*p)); + o.push(0.0); + } + OpIn::PcSetPresnap { j, w, v, .. } => { + pc_mut(must(cc.at_mut(*j))?, *w)?.set_pre_snap_param(*v); + o.push(0.0); + } + OpIn::PcSetSrcTol { j, w, tol, .. } => { + pc_mut(must(cc.at_mut(*j))?, *w)?.set_src_zone_tol_3d(zone_tol3d(&k, *tol)); + o.push(0.0); + } + OpIn::SetCurve { obj, owned, .. } => { + cc.set_curve(pool.handle(*obj)?, *owned); + o.push(0.0); + } + OpIn::SetSurface1 { obj, .. } => { + cc.set_surface1(pool.handle(*obj)?); + o.push(0.0); + } + OpIn::SetSurface2 { obj, .. } => { + cc.set_surface2(pool.handle(*obj)?); + o.push(0.0); + } + OpIn::SetFace { obj, .. } => { + cc.set_face(pool.handle(*obj)?); + o.push(0.0); + } + OpIn::SetIntersectData { + s1, s2, uv2, current, ti, .. + } => { + cc.set_intersect_data( + pool.handle(*s1)?, + pool.handle(*s2)?, + pool.handle(*uv2)?, + *current, + pool.handle(*ti)?, + ); + o.push(0.0); + } + OpIn::SetIsCurveCurrent { b: x, .. } => { + cc.set_is_curve_current(*x); + o.push(0.0); + } + OpIn::SetIgnoreTangency { b: x, .. } => { + cc.set_ignore_tangency(*x); + o.push(0.0); + } + OpIn::SetIsCurveOwned { b: x, .. } => { + cc.set_is_curve_owned(*x); + o.push(0.0); + } + OpIn::SetOkToSetTol { b: x, .. } => { + cc.set_ok_to_set_tolerance(*x); + o.push(0.0); + } + OpIn::SetFilletData { obj, b: x, .. } => { + cc.set_fillet_data(pool.handle(*obj)?, *x); + o.push(0.0); + } + OpIn::SetTgtLoopsOnly { b: x, .. } => { + cc.set_tgt_loops_only(*x); + o.push(0.0); + } + OpIn::AddTgtLoop { obj, .. } => { + let h = pool.handle(*obj)?.ok_or_else(|| harness("no loop"))?; + cc.add_tgt_loop(h); + o.push(0.0); + } + OpIn::SetSrcTol { tol, .. } => { + cc.set_src_zone_tol_3d(zone_tol3d(&k, *tol)); + o.push(0.0); + } + OpIn::SetUvCurve1 { obj, .. } => { + cc.set_uv_curve1(pool.handle(*obj)?); + o.push(0.0); + } + OpIn::SetUvCurve2 { obj, .. } => { + cc.set_uv_curve2(pool.handle(*obj)?); + o.push(0.0); + } + OpIn::SubInterval { j, .. } => { + let e = must(cc.sub_interval(*j))?; + o.extend([0.0, e.min(), e.max()]); + } + OpIn::ClassifyCrvLoc { j, w, prm, .. } => { + let pc = match *w { + 0 => must(cc.at(*j))?.start, + 1 => must(cc.at(*j))?.mid, + _ => must(cc.at(*j))?.end, + }; + let p = must(cc.classify_crv_loc(&pool, &pc, *prm))?; + o.extend([0.0, p.x, p.y, p.z]); + } + OpIn::SetPcParams { mids, .. } => { + let r = cc.set_point_class_parameters(&k, &pool, *mids); + o.push(st(r)?.err().unwrap_or(0.0)); + } + OpIn::SqueezeEnd { j, .. } => { + let pos = must(cc.find_best_squeeze_end(*j))?; + o.extend([0.0, f64::from(pos.code())]); + } + OpIn::IsReferenced { obj, .. } => { + o.extend([0.0, b(cc.is_referenced(pool.handle(*obj)?))]); + } + OpIn::MakeConsistent { .. } => { + let r = cc_mod::make_consistent_classifications(cc); + o.push(st(r)?.err().unwrap_or(0.0)); + } + OpIn::Type { types, .. } => { + o.extend([0.0, cc.type_code() as f64]); + o.extend(types.iter().map(|&ty| b(cc.is_kind_of(ty)))); + o.push(CURVE_CLASSIFICATION_TYPE_STRING.len() as f64); + o.extend(CURVE_CLASSIFICATION_TYPE_STRING.bytes().map(f64::from)); + } + OpIn::SrcTol { .. } => { + o.extend([ + 0.0, + cc_mod::src_zone_tol_3d_of(&k, Some(&*cc)), + cc_mod::src_zone_tol_3d_of::(&k, None), + ]); + } + OpIn::IvlTols { j, .. } => { + let ivl = *must(cc.at(*j))?; + let obj_tol = must(cc_mod::interval_obj_zone_tol_3d(&k, &pool, Some(&ivl)))?; + let none = must(cc_mod::interval_obj_zone_tol_3d::(&k, &pool, None))?; + o.extend([ + 0.0, + cc_mod::src_zone_tol_3d_of(&k, Some(&*cc)), + obj_tol, + none, + ivl.scaled_zero(), + ]); + } + OpIn::ObjDim { obj, .. } => { + o.extend([0.0, f64::from(cc_mod::object_dimension(pool.handle(*obj)?))]); + } + _ => {} + } + } + // the free functions (they may edit pool curves) + let cc = ccs.get(t).cloned().ok_or_else(|| harness("bad target"))?; + match x { + OpIn::XsectCurve { + c, tol, uvc, srf, uv, prm, dev, p, .. + } => { + let ci = c.ok_or_else(|| harness("no curve"))?; + let mut curve = pool.take_curve(ci)?; + let mut uv_curves = Vec::new(); + for u in uvc { + let ui = u.ok_or_else(|| harness("no uv curve"))?; + match pool.curve_at(Some(ui))?.map(Curve::kind) { + Some(CurveKind::BSpline(bs)) => uv_curves.push(bs.clone()), + _ => return Err(harness("uv curve not a B-spline").into()), + } + } + let surfaces: Vec<&Surface> = srf + .iter() + .map(|x| pool.surface_at(*x)?.ok_or_else(|| harness("no surface"))) + .collect::>()?; + let uvs: Vec = uv.iter().map(|q| uvp(*q)).collect(); + let r = cc_mod::set_xsect_curve_through_point( + &k, + &mut curve, + zone_tol3d(&k, *tol), + &mut uv_curves, + &surfaces, + &uvs, + *prm, + v3(*p), + ); + let r = match st(r) { + Ok(r) => r, + Err(f) => { + pool.put_curve(ci, curve); + return Err(f); + } + }; + match r { + Ok(r) => { + o.extend([ + if r.success { 0.0 } else { 1001.0 }, + b(r.modified_curve), + r.param, + r.deviation.unwrap_or(*dev), + b(r.set_3d_point), + r.point_3d.x, + r.point_3d.y, + r.point_3d.z, + ]); + put_curve(&mut o, &curve); + for (u, bs) in uvc.iter().zip(uv_curves) { + let ui = u.ok_or_else(|| harness("no uv curve"))?; + let c = Curve::from(bs); + put_curve(&mut o, &c); + pool.put_curve(ui, c); + } + pool.put_curve(ci, curve); + } + Err(s) => { + pool.put_curve(ci, curve); + return Err(harness(format!("xsect: status {s}")).into()); + } + } + } + OpIn::Apply { + use_cc, + edge, + emate, + srf, + uv, + sol, + sss, + .. + } => { + let src = if *use_cc { cc.curve() } else { None }; + let src_tol = cc_mod::src_zone_tol_3d_of(&k, use_cc.then_some(&cc)); + let mut curve = match src { + Some(h) => Some((h.0, pool.take_curve(h.0)?)), + None => None, + }; + let mut solution: Solution = Solution::new(); + solution.solution_type = SolutionType::SingleValue; + solution.start.parameters[0] = sol[0]; + solution.start.parameters[1] = sol[1]; + solution.start.solution_value = sol[2]; + let r = { + let sp = |i: usize| -> Result, HarnessError> { + let s = srf.get(i).copied().flatten(); + let q = uv.get(i).copied().unwrap_or([0.0, 0.0]); + Ok(pool.surface_at(s)?.map(|s| (s, uvp(q)))) + }; + let input = ApplyPointSolutionInput { + src_zone_tol_3d: src_tol, + edge: pool.handle(*edge)?, + emate: pool.handle(*emate)?, + class_curve_surface1: sp(0)?, + class_curve_surface2: sp(1)?, + edge_curve_surface1: sp(2)?, + edge_curve_surface2: sp(3)?, + }; + cc_mod::apply_point_solution( + &k, + curve.as_mut().map(|(_, c)| c), + &input, + &mut solution, + v3(*sss), + ) + }; + let res = st(r); + let done = |pool: &mut Pool, curve: Option<(usize, Curve)>| { + if let Some((i, c)) = curve { + pool.put_curve(i, c); + } + }; + let r = match res { + Ok(Ok(r)) => r, + Ok(Err(s)) => { + done(&mut pool, curve); + return Err(harness(format!("apply: status {s}")).into()); + } + Err(f) => { + done(&mut pool, curve); + return Err(f); + } + }; + o.extend([ + if r.success { 0.0 } else { 1001.0 }, + r.sss_point.x, + r.sss_point.y, + r.sss_point.z, + b(r.sss_point_flag), + b(r.modified_curve), + b(r.modified_edge_curve), + b(r.modified_mate_curve), + r.deviation, + solution.start.parameters[0], + solution.start.parameters[1], + ]); + if let Some((_, c)) = &curve { + put_curve(&mut o, c); + } + done(&mut pool, curve); + } + OpIn::Angle { c1, t1, c2, t2, dev, .. } => { + let a = must(cc_mod::get_curve_curve_angle( + pool.curve_at(*c1)?, + *t1, + pool.curve_at(*c2)?, + *t2, + *dev, + ))?; + o.extend([0.0, a]); + } + OpIn::Cull { + s, uvc, ivl1, c2, ivl2, tol, sols, .. + } => { + let mut arr: SolutionArray = SolutionArray::new(); + for x in sols { + let mut sol: Solution = Solution::new(); + sol.solution_type = *SolutionType::ALL + .get(x.ty) + .ok_or_else(|| harness("bad solution type"))?; + sol.start.parameters[0] = x.s[0]; + sol.start.parameters[1] = x.s[1]; + sol.end.parameters[0] = x.e[0]; + sol.end.parameters[1] = x.e[1]; + sol.start.solution_value = x.value; + arr.add(&sol); + } + let r = cc_mod::cull_or_refine_cci_in_3d( + &k, + pool.surface_at(*s)?.ok_or_else(|| harness("no surface"))?, + pool.curve_at(*uvc)?.ok_or_else(|| harness("no uv curve"))?, + &Extent1d::from_min_max(ivl1[0], ivl1[1]), + pool.curve_at(*c2)?.ok_or_else(|| harness("no curve"))?, + &Extent1d::from_min_max(ivl2[0], ivl2[1]), + *tol, + &mut arr, + ); + o.push(st(r)?.err().unwrap_or(0.0)); + o.push(arr.len() as f64); + for x in arr.as_slice() { + o.extend([ + f64::from(x.solution_type.code()), + x.start.parameters[0], + x.start.parameters[1], + x.end.parameters[0], + x.end.parameters[1], + x.start.solution_value, + ]); + } + } + OpIn::TolPair { + c, s, p1, tol1, p2, tol2, .. + } => { + let v = must(cc_mod::xsect_tol_2d_or_3d_for_classify_pair( + &k, + pool.curve_at(*c)?.ok_or_else(|| harness("no curve"))?, + pool.surface_at(*s)?, + *p1, + zone_tol3d(&k, *tol1), + *p2, + zone_tol3d(&k, *tol2), + ))?; + o.extend([0.0, v]); + } + OpIn::Gaps { + cp, ep, sol, pairs, count, .. + } => { + let mut solution: Solution = Solution::new(); + solution.start.parameters[0] = sol[0]; + solution.start.parameters[1] = sol[1]; + let mut surfaces = Vec::new(); + let mut uvcs = Vec::new(); + for (s, u) in pairs { + surfaces.push(pool.surface_at(*s)?.ok_or_else(|| harness("no surface"))?); + uvcs.push(pool.curve_at(*u)?); + } + let r = must(cc_mod::get_cci_surface_gaps( + v3(*cp), + v3(*ep), + &solution, + &surfaces, + &uvcs, + *count, + ))?; + o.extend([ + if r.success { 0.0 } else { 1001.0 }, + r.curve_edge_gap, + r.curve_surface_gap, + r.edge_surface_gap, + r.uv_points.len() as f64, + ]); + for q in &r.uv_points { + o.extend([q.x, q.y]); + } + } + OpIn::TouchConnected { c, touches, .. } => { + let list = touch_list(&pool, touches)?; + let out = cc_mod::get_connected_touches(pool.handle(*c)?, &list); + o.extend([0.0, out.len() as f64, out.len() as f64]); + for t in &out { + put_touch(&mut o, t); + } + } + OpIn::TouchWinding { touches, .. } => { + let list = touch_list(&pool, touches)?; + let (w, ot) = must(cc_mod::get_winding_count(&list))?; + let code = match ot { + solidcore::nurbs::b_spline_surface_n_lib::p2::OrientType::Unknown => 0.0, + solidcore::nurbs::b_spline_surface_n_lib::p2::OrientType::Same => 1.0, + solidcore::nurbs::b_spline_surface_n_lib::p2::OrientType::Opposite => 2.0, + }; + o.extend([0.0, w as f64, code]); + } + OpIn::EdgeThrough { e, p, srf, uv, prm, .. } => { + let h = pool.handle(*e)?.ok_or_else(|| harness("no edge"))?; + let surfaces: Vec<&Surface> = srf + .iter() + .map(|x| pool.surface_at(*x)?.ok_or_else(|| harness("no surface"))) + .collect::>()?; + let uvs: Vec = uv.iter().map(|q| uvp(*q)).collect(); + must(cc_mod::set_xsect_edge_through_point(h, v3(*p), &surfaces, &uvs, *prm))?; + return Err(harness("edge through point ported").into()); + } + OpIn::CciGeometry { e, .. } => { + let h = pool.handle(*e)?.ok_or_else(|| harness("no edge"))?; + must(cc_mod::get_cci_geometry(&cc, h))?; + return Err(harness("cci geometry ported").into()); + } + OpIn::FacePointClass { f, p, tol, .. } => { + let h = pool.handle(*f)?.ok_or_else(|| harness("no face"))?; + let mut pc = PointClassification::new(zone_tol3d(&k, USE_DEFAULT)); + must(cc_mod::compute_face_point_class(v3(*p), zone_tol3d(&k, *tol), h, &mut pc))?; + return Err(harness("face point class ported").into()); + } + _ => {} + } + put_cc(&mut o, &k, &cc); + Ok(()) + }; + match step() { + Ok(()) => {} + Err(Fail::Deferred(d)) => { + deferred.get_or_insert(d); + } + Err(e) => return Err(e), + } + } + match deferred { + Some(d) => Err(Fail::Deferred(d)), + None => Ok(o), + } +} + +fn rust(s: &Script) -> Result { + match rust_run(s) { + Ok(v) => Ok(Output::new().values("out", v)), + Err(Fail::Deferred(d)) => Ok(*d), + Err(Fail::Harness(e)) => Err(e), + } +} + +// ---- generation ------------------------------------------------------------------------- + +fn rp(rng: &mut Rng, s: f64) -> [f64; 3] { + rng.point3(-s, s) +} + +/// A random clamped B-spline (sometimes rational or 2D). +fn gen_bspline(rng: &mut Rng) -> BSplineIn { + let p = 1 + rng.below(4) as usize; + let n = p + rng.below(6) as usize; + let rational = rng.chance(0.25); + let two_d = rng.chance(0.1); + let a = if rng.chance(0.5) { 0.0 } else { rng.uniform(-5.0, 5.0) }; + let len = if rng.chance(0.5) { 1.0 } else { rng.uniform(0.1, 10.0) }; + let mut u = vec![a; p + 1]; + let mut ks: Vec = (0..n - p).map(|_| a + len * rng.uniform(0.05, 0.95)).collect(); + ks.sort_by(f64::total_cmp); + u.extend(ks); + u.extend(vec![a + len; p + 1]); + let scale = if rng.chance(0.5) { 5.0 } else { 100.0 }; + let cpts = (0..=n) + .map(|i| { + let [x, y, z] = rp(rng, scale); + let x = x + i as f64 * scale * 0.2; + let w = if rational { rng.uniform(0.3, 3.0) } else { NOW }; + let z = if two_d { NOZ } else { z }; + if rational { + [x * w, y * w, if two_d { z } else { z * w }, w] + } else { + [x, y, z, w] + } + }) + .collect(); + BSplineIn { + dim: if two_d { 2 } else { 3 }, + oob: rng.chance(0.1), + cpts, + p, + u, + } +} + +/// A piecewise-C0 cubic (an intersector approximation) near the line `o + s d`, `s` in +/// `[0, len]`, offset by up to `off`, over `[a, a + plen]`. +fn gen_xsect_cubic(rng: &mut Rng, o: [f64; 3], d: [f64; 3], len: f64, off: f64) -> BSplineIn { + let segs = 1 + rng.below(3) as usize; + let n = 3 * segs; + let a = if rng.chance(0.5) { 0.0 } else { rng.uniform(-3.0, 3.0) }; + let plen = if rng.chance(0.5) { 1.0 } else { rng.uniform(0.5, 20.0) }; + let mut u = vec![a; 4]; + for s in 1..segs { + let k = a + plen * s as f64 / segs as f64; + u.extend([k, k, k]); + } + u.extend([a + plen; 4]); + let cpts = (0..=n) + .map(|i| { + let s = len * i as f64 / n as f64; + let e = rp(rng, off); + [o[0] + s * d[0] + e[0], o[1] + s * d[1] + e[1], o[2] + s * d[2] + e[2], NOW] + }) + .collect(); + BSplineIn { + dim: 3, + oob: false, + cpts, + p: 3, + u, + } +} + +fn gen_curve(rng: &mut Rng) -> CurveIn { + match rng.below(10) { + 0..=1 => { + let d0 = rng.uniform(-5.0, 5.0); + CurveIn::Line(LineIn { + p: rp(rng, 10.0), + v: rp(rng, 3.0), + domain: [d0, d0 + rng.uniform(0.5, 10.0)], + scale: *rng.choose(&[1.0, 1.0, 2.0, 0.5]).unwrap_or(&1.0), + inside_out: rng.chance(0.3), + }) + } + 2..=5 => CurveIn::Bspline(gen_bspline(rng)), + 6..=7 => { + let d0 = rng.uniform(-180.0, 180.0); + let mut y = rp(rng, 1.0); + if y.iter().map(|c| c * c).sum::() < 1e-2 { + y = [0.0, 1.0, 0.0]; + } + CurveIn::Conic(ConicIn { + center: rp(rng, 5.0), + x: [1.0, 0.0, 0.0], + y, + domain: [d0, d0 + rng.uniform(10.0, 360.0)], + rx: rng.uniform(0.5, 10.0), + ry: rng.chance(0.5).then(|| rng.uniform(0.5, 10.0)), + inside_out: rng.chance(0.2), + }) + } + _ => CurveIn::Hermite(HermiteIn { + dim: 3, + p1: rp(rng, 5.0), + d1: rp(rng, 5.0), + p2: rp(rng, 5.0), + d2: rp(rng, 5.0), + }), + } +} + +/// A B-spline surface patch over `[u0, u0 + ul] x [v0, v0 + vl]` of degrees up to 3, +/// near the plane through `o` spanned by `x`, `y` (size `sz`), bumped by up to `bump`. +fn gen_surface(rng: &mut Rng, o: [f64; 3], x: [f64; 3], y: [f64; 3], sz: f64, bump: f64) -> SurfIn { + let p = 1 + rng.below(3) as usize; + let q = 1 + rng.below(3) as usize; + let n = p + rng.below(2) as usize; + let m = q + rng.below(2) as usize; + let knots = |rng: &mut Rng, deg: usize, cnt: usize| { + let a = if rng.chance(0.6) { 0.0 } else { rng.uniform(-2.0, 2.0) }; + let l = if rng.chance(0.6) { 1.0 } else { rng.uniform(0.5, 5.0) }; + let mut k = vec![a; deg + 1]; + let mut inner: Vec = (0..cnt - deg).map(|_| a + l * rng.uniform(0.1, 0.9)).collect(); + inner.sort_by(f64::total_cmp); + k.extend(inner); + k.extend(vec![a + l; deg + 1]); + k + }; + let u = knots(rng, p, n); + let v = knots(rng, q, m); + let rational = rng.chance(0.2); + let net = (0..=n) + .map(|i| { + (0..=m) + .map(|j| { + let s = sz * (i as f64 / n as f64 - 0.5); + let t = sz * (j as f64 / m as f64 - 0.5); + let e = rp(rng, bump); + let pt = [ + o[0] + s * x[0] + t * y[0] + e[0], + o[1] + s * x[1] + t * y[1] + e[1], + o[2] + s * x[2] + t * y[2] + e[2], + ]; + if rational { + let w = rng.uniform(0.5, 2.0); + [pt[0] * w, pt[1] * w, pt[2] * w, w] + } else { + [pt[0], pt[1], pt[2], NOW] + } + }) + .collect() + }) + .collect(); + SurfIn { + oob: rng.chance(0.2), + net, + p, + q, + u, + v, + } +} + +/// Pool indices of objects of kind `k`. +fn of_kind(objs: &[ObjIn], k: usize) -> Vec { + objs.iter() + .enumerate() + .filter(|(_, o)| obj_kind(o) == k) + .map(|(i, _)| i) + .collect() +} + +fn pick(rng: &mut Rng, v: &[usize]) -> Option { + rng.choose(v).copied() +} + +fn maybe(rng: &mut Rng, v: &[usize], p_none: f64) -> Option { + if rng.chance(p_none) { + None + } else { + pick(rng, v) + } +} + +/// A unit-ish random direction. +fn dir(rng: &mut Rng) -> [f64; 3] { + let mut d = rp(rng, 1.0); + let l = (d[0] * d[0] + d[1] * d[1] + d[2] * d[2]).sqrt(); + if l < 0.1 { + d = [1.0, 0.0, 0.0]; + } else { + d = [d[0] / l, d[1] / l, d[2] / l]; + } + d +} + +fn cross(a: [f64; 3], c: [f64; 3]) -> [f64; 3] { + [ + a[1] * c[2] - a[2] * c[1], + a[2] * c[0] - a[0] * c[2], + a[0] * c[1] - a[1] * c[0], + ] +} + +fn norm(a: [f64; 3]) -> [f64; 3] { + let l = (a[0] * a[0] + a[1] * a[1] + a[2] * a[2]).sqrt(); + if l < 1e-9 { + [0.0, 0.0, 1.0] + } else { + [a[0] / l, a[1] / l, a[2] / l] + } +} + +/// The base pool: curves, planes and B-spline surfaces, points, topology and stand-ins. +fn gen_objects(rng: &mut Rng) -> Vec { + let mut objs = Vec::new(); + for _ in 0..=rng.below(3) { + objs.push(ObjIn::Curve(gen_curve(rng))); + } + objs.push(ObjIn::Plane { o: rp(rng, 5.0), n: dir(rng) }); + let (x, y) = { + let d = dir(rng); + let e = norm(cross(d, dir(rng))); + (d, e) + }; + let o = rp(rng, 5.0); + let sz = rng.uniform(1.0, 20.0); + let bump = rng.uniform(0.0, 2.0); + objs.push(ObjIn::Bsurf(gen_surface(rng, o, x, y, sz, bump))); + objs.push(ObjIn::Point(rp(rng, 10.0))); + objs.push(ObjIn::Vertex); + objs.push(ObjIn::Vertex); + objs.push(ObjIn::Edge(Some(0))); + objs.push(ObjIn::Face(of_kind(&objs, kind::PLANE).first().copied())); + objs.push(ObjIn::Loop); + objs.push(ObjIn::Loop); + objs.push(ObjIn::Other); + objs +} + +fn gen_tol(rng: &mut Rng) -> f64 { + match rng.below(8) { + 0 => USE_DEFAULT, + 1 => 1e-5, + 2 => 1e-3, + 3 => 1e-8, + 4 => 0.0, + 5 => -1e-4, + 6 => rng.uniform(1e-7, 1e-1), + _ => 1e-5, + } +} + +/// A class / object pair for `SetClassObject`. +fn gen_class(rng: &mut Rng, objs: &[ObjIn], topo: bool) -> (i32, Option) { + let choices: &[(i32, usize)] = if topo { + &[(102, kind::FACE), (103, kind::EDGE), (104, kind::VERTEX), (106, kind::CURVE), (107, kind::PLANE)] + } else { + &[(106, kind::CURVE), (106, kind::CURVE), (107, kind::PLANE), (107, kind::BSURF), (105, kind::POINT)] + }; + if rng.chance(0.1) { + return (*rng.choose(&[100, 110]).unwrap_or(&100), None); + } + let &(c, k) = rng.choose(choices).unwrap_or(&(106, kind::CURVE)); + (c, pick(rng, &of_kind(objs, k))) +} + +/// Ops on the classification containers. +fn gen_container_op(rng: &mut Rng, objs: &[ObjIn], t: usize, size: usize, topo: bool) -> OpIn { + let j = rng.below(size.max(1) as u64) as usize; + let w = rng.below(3) as usize; + let curves = of_kind(objs, kind::CURVE); + let surfs: Vec = of_kind(objs, kind::PLANE) + .into_iter() + .chain(of_kind(objs, kind::BSURF)) + .collect(); + let all: Vec = (0..objs.len()).collect(); + match rng.below(40) { + 0..=1 => OpIn::SetSize { t, n: rng.below(7) as usize }, + 2 => OpIn::RemoveAt { t, j: rng.below(size as u64 + 2) as usize }, + 3..=5 => { + let a = rng.uniform(-5.0, 5.0); + OpIn::IvlSet { t, j, a, b: a + rng.uniform(-1.0, 5.0) } + } + 6 => OpIn::IvlSetMin { t, j, v: rng.uniform(-5.0, 5.0) }, + 7 => OpIn::IvlSetMax { t, j, v: rng.uniform(-5.0, 5.0) }, + 8 => OpIn::IvlReset { t, j }, + 9 => OpIn::IvlAssign { t, j, k: rng.below(3) as usize }, + 10 => { + let a = rng.uniform(-5.0, 5.0); + OpIn::IvlNew { + t, + j, + with: rng.chance(0.5), + owner: rng.chance(0.5), + a, + b: a + rng.uniform(0.0, 3.0), + } + } + 11..=14 => { + let (class, obj) = gen_class(rng, objs, topo); + OpIn::PcSetClass { t, j, w, class, obj } + } + 15 => OpIn::PcSetT { t, j, w, v: rng.uniform(-5.0, 5.0) }, + 16 => OpIn::PcSetUv { t, j, w, u: rng.uniform(-5.0, 5.0), v: rng.uniform(-5.0, 5.0) }, + 17 => OpIn::PcSetGap { t, j, w, g: *rng.choose(&[0.0, 1e-6, 1e-3, 0.5]).unwrap_or(&0.0) }, + 18 => OpIn::PcSetSss { t, j, w, p: rp(rng, 10.0) }, + 19 => OpIn::PcSetPresnap { t, j, w, v: if rng.chance(0.3) { BIG } else { rng.uniform(-5.0, 5.0) } }, + 20 => OpIn::PcSetSrcTol { t, j, w, tol: gen_tol(rng) }, + 21..=22 => OpIn::SetCurve { t, obj: maybe(rng, &curves, 0.1), owned: rng.chance(0.3) }, + 23 => OpIn::SetSurface1 { t, obj: maybe(rng, &surfs, 0.2) }, + 24 => OpIn::SetSurface2 { t, obj: maybe(rng, &surfs, 0.2) }, + 25 => OpIn::SetFace { t, obj: maybe(rng, &of_kind(objs, kind::FACE), 0.3) }, + 26 => OpIn::SetIntersectData { + t, + s1: maybe(rng, &surfs, 0.2), + s2: maybe(rng, &surfs, 0.2), + uv2: maybe(rng, &curves, 0.3), + current: rng.chance(0.7), + ti: maybe(rng, &of_kind(objs, kind::OTHER), 0.5), + }, + 27 => OpIn::SetIsCurveCurrent { t, b: rng.chance(0.5) }, + 28 => match rng.below(5) { + 0 => OpIn::SetIgnoreTangency { t, b: rng.chance(0.5) }, + 1 => OpIn::SetIsCurveOwned { t, b: rng.chance(0.5) }, + 2 => OpIn::SetOkToSetTol { t, b: rng.chance(0.5) }, + 3 => OpIn::SetTgtLoopsOnly { t, b: rng.chance(0.5) }, + _ => OpIn::SetFilletData { + t, + obj: maybe(rng, &of_kind(objs, kind::OTHER), 0.3), + b: rng.chance(0.7), + }, + }, + 29 => OpIn::AddTgtLoop { t, obj: pick(rng, &of_kind(objs, kind::LOOP)) }, + 30 => OpIn::SetSrcTol { t, tol: gen_tol(rng) }, + 31 => { + if rng.chance(0.5) { + OpIn::SetUvCurve1 { t, obj: maybe(rng, &curves, 0.3) } + } else { + OpIn::SetUvCurve2 { t, obj: maybe(rng, &curves, 0.3) } + } + } + 32 => OpIn::SubInterval { t, j }, + 33..=34 => OpIn::ClassifyCrvLoc { t, j, w, prm: rng.uniform(-2.0, 6.0) }, + 35 => OpIn::SetPcParams { t, mids: rng.chance(0.5) }, + 36 => OpIn::SqueezeEnd { t, j }, + 37 => OpIn::IsReferenced { t, obj: maybe(rng, &all, 0.1) }, + 38 => match rng.below(4) { + 0 => OpIn::MakeConsistent { t }, + 1 => OpIn::Type { t, types: vec![12312, 11001, 12011, 12308, 0, 16500] }, + 2 => OpIn::SrcTol { t }, + _ => OpIn::ObjDim { t, obj: maybe(rng, &all, 0.1) }, + }, + _ => OpIn::IvlTols { t, j }, + } +} + +/// A random UV point on surface `s` of the pool (its natural domain, sometimes outside). +fn surf_uv(rng: &mut Rng, obj: &ObjIn) -> [f64; 2] { + match obj { + ObjIn::Bsurf(s) => { + let lim = |k: &[f64]| (k.first().copied().unwrap_or(0.0), k.last().copied().unwrap_or(1.0)); + let (u0, u1) = lim(&s.u); + let (v0, v1) = lim(&s.v); + let ext = if rng.chance(0.1) { 0.2 } else { 0.0 }; + [ + rng.uniform(u0 - ext * (u1 - u0), u1 + ext * (u1 - u0)), + rng.uniform(v0 - ext * (v1 - v0), v1 + ext * (v1 - v0)), + ] + } + _ => [rng.uniform(-5.0, 5.0), rng.uniform(-5.0, 5.0)], + } +} + +/// UV of point `p` on the plane `(o, n)` as `SmPlane(O, N)` parameterizes it. +fn plane_uv(o: [f64; 3], n: [f64; 3], p: [f64; 3]) -> [f64; 2] { + let pl = Plane::from_normal(v3(o), v3(n)); + let q = pl.project_point_to_uv_domain(v3(p)); + [q.x, q.y] +} + +/// A surf/surf/curve setup: two planes through a common line, a piecewise-C0 cubic near +/// that line (or another curve), the UV points of a point on the line. +fn gen_xsect_setup(rng: &mut Rng, objs: &mut Vec) -> (usize, [usize; 2], [[f64; 2]; 2], f64) { + let o = rp(rng, 5.0); + let d = dir(rng); + let n1 = norm(cross(d, dir(rng))); + let n2 = if rng.chance(0.1) { + n1 // tangent planes + } else { + norm(cross(d, n1)) + }; + let len = rng.uniform(1.0, 20.0); + let off = *rng.choose(&[1e-7, 1e-5, 1e-4, 1e-3, 1e-2]).unwrap_or(&1e-3); + let c = match rng.below(10) { + 0 => gen_curve(rng), + _ => CurveIn::Bspline(gen_xsect_cubic(rng, o, d, len, off)), + }; + objs.push(ObjIn::Curve(c)); + let ci = objs.len() - 1; + objs.push(ObjIn::Plane { o, n: n1 }); + objs.push(ObjIn::Plane { o, n: n2 }); + let s = [objs.len() - 2, objs.len() - 1]; + let f = rng.uniform(-0.1, 1.1); + let es = *rng.choose(&[0.0, 1e-6, 1e-3]).unwrap_or(&0.0); + let e = rp(rng, es); + let p = [o[0] + f * len * d[0] + e[0], o[1] + f * len * d[1] + e[1], o[2] + f * len * d[2] + e[2]]; + let uv = [plane_uv(o, n1, p), plane_uv(o, n2, p)]; + (ci, s, uv, f) +} + +#[allow(clippy::too_many_lines)] +fn gen_script(rng: &mut Rng) -> Script { + let mut objects = gen_objects(rng); + let mode = rng.below(20); + let mut ops = Vec::new(); + let mut sizes = [0usize; 2]; + let topo = rng.chance(0.15); + // set up both classifications most of the time + for t in 0..2 { + if rng.chance(0.8) { + let n = 1 + rng.below(4) as usize; + ops.push(OpIn::SetSize { t, n }); + sizes[t] = n; + let curves = of_kind(&objects, kind::CURVE); + ops.push(OpIn::SetCurve { t, obj: pick(rng, &curves), owned: rng.chance(0.2) }); + if rng.chance(0.7) { + ops.push(OpIn::SetSrcTol { t, tol: gen_tol(rng) }); + } + let mut a = rng.uniform(-1.0, 1.0); + for j in 0..n { + let l = rng.uniform(0.1, 2.0); + ops.push(OpIn::IvlSet { t, j, a, b: a + l }); + a += l; + for w in 0..3 { + if rng.chance(0.6) { + let (class, obj) = gen_class(rng, &objects, topo); + ops.push(OpIn::PcSetClass { t, j, w, class, obj }); + } + } + } + } + } + match mode { + // classification containers + 0..=9 => { + for _ in 0..(2 + rng.below(14)) { + let t = rng.below(2) as usize; + let op = gen_container_op(rng, &objects, t, sizes[t], topo); + match &op { + OpIn::SetSize { n, .. } => sizes[t] = *n, + OpIn::RemoveAt { .. } => sizes[t] = sizes[t].saturating_sub(1), + _ => {} + } + ops.push(op); + } + } + // sm_SetXSectCurveThroughPoint, sm_ApplyPointSolution + 10..=14 => { + let (ci, s, uv, f) = gen_xsect_setup(rng, &mut objects); + let t = rng.below(2) as usize; + let prm = rng.uniform(-1.0, 1.0) + 5.0 * f; + if rng.chance(0.5) { + let mut srf = vec![Some(s[0]), Some(s[1])]; + let mut uvs = vec![uv[0], uv[1]]; + match rng.below(10) { + 0 => { + srf.truncate(1); + uvs.truncate(1); + } + 1 => { + srf.push(Some(s[0])); + uvs.push(uv[0]); + } + 2 => uvs.push(uv[1]), + 3 => { + // the B-spline surface of the pool as a second surface + if let Some(b) = of_kind(&objects, kind::BSURF).first() { + srf[1] = Some(*b); + uvs[1] = surf_uv(rng, &objects[*b]); + } + } + _ => {} + } + ops.push(OpIn::XsectCurve { + t, + c: Some(ci), + tol: gen_tol(rng), + uvc: Vec::new(), + srf, + uv: uvs, + prm, + dev: -7.0, + p: rp(rng, 10.0), + }); + } else { + ops.push(OpIn::SetCurve { t, obj: Some(ci), owned: false }); + ops.push(OpIn::SetSrcTol { t, tol: gen_tol(rng) }); + let use_cc = rng.chance(0.9); + let mut srf = [Some(s[0]), Some(s[1]), None, None]; + let mut uvs = [uv[0], uv[1], [0.0, 0.0], [0.0, 0.0]]; + match rng.below(8) { + 0 => { + srf = [None, None, Some(s[0]), None]; + uvs[2] = uv[0]; + } + 1 => { + srf[2] = Some(s[1]); + uvs[2] = uv[1]; + } + _ => {} + } + let emate = if rng.chance(0.2) { of_kind(&objects, kind::EDGE).first().copied() } else { None }; + ops.push(OpIn::Apply { + t, + use_cc, + edge: None, + emate, + srf, + uv: uvs, + sol: [prm, rng.uniform(-1.0, 1.0), rng.uniform(0.0, 1e-3)], + sss: rp(rng, 10.0), + }); + } + // the edited curve's classification + if rng.chance(0.5) { + ops.push(OpIn::ClassifyCrvLoc { t: 0, j: 0, w: 0, prm }); + } + } + // angle, tolerance pair, touches, dimensions, types + 15..=17 => { + let curves = of_kind(&objects, kind::CURVE); + let surfs: Vec = of_kind(&objects, kind::PLANE) + .into_iter() + .chain(of_kind(&objects, kind::BSURF)) + .collect(); + let all: Vec = (0..objects.len()).collect(); + for _ in 0..(1 + rng.below(6)) { + let t = rng.below(2) as usize; + let op = match rng.below(5) { + 0 | 1 => { + let c1 = maybe(rng, &curves, 0.05); + let c2 = if rng.chance(0.2) { c1 } else { maybe(rng, &curves, 0.05) }; + OpIn::Angle { + t, + c1, + t1: rng.uniform(-1.0, 6.0), + c2, + t2: rng.uniform(-1.0, 6.0), + dev: rng.uniform(0.0, 1e-3), + } + } + 2 => OpIn::TolPair { + t, + c: pick(rng, &curves), + s: maybe(rng, &surfs, 0.6), + p1: rng.uniform(-1.0, 6.0), + tol1: gen_tol(rng), + p2: rng.uniform(-1.0, 6.0), + tol2: gen_tol(rng), + }, + 3 => { + let nt = 2 * rng.below(6) as usize; + let loops = of_kind(&objects, kind::LOOP); + let touches = (0..nt) + .map(|_| TouchIn { + c: maybe(rng, &loops, 0.1), + dir: rng.below(9) as i32, + li: rng.below(4), + prm: rng.uniform(0.0, 1.0), + pi: rng.below(8), + pc: maybe(rng, &all, 0.5), + }) + .collect(); + if rng.chance(0.5) { + OpIn::TouchWinding { t, touches } + } else { + OpIn::TouchConnected { t, c: maybe(rng, &loops, 0.1), touches } + } + } + _ => OpIn::Gaps { + t, + cp: rp(rng, 5.0), + ep: rp(rng, 5.0), + sol: [rng.uniform(0.0, 1.0), rng.uniform(0.0, 1.0)], + pairs: if rng.chance(0.8) { + Vec::new() + } else { + vec![(pick(rng, &surfs), None)] + }, + count: rng.below(3) as usize, + }, + }; + ops.push(op); + } + } + // sm_CullOrRefineCCIIn3d + _ => { + let x = dir(rng); + let y = norm(cross(x, dir(rng))); + let sz = rng.uniform(2.0, 20.0); + let o = rp(rng, 3.0); + let bump = rng.uniform(0.0, 0.5); + let srf = gen_surface(rng, o, x, y, sz, bump); + let (u0, u1) = (srf.u.first().copied().unwrap_or(0.0), srf.u.last().copied().unwrap_or(1.0)); + let (v0, v1) = (srf.v.first().copied().unwrap_or(0.0), srf.v.last().copied().unwrap_or(1.0)); + objects.push(ObjIn::Bsurf(srf)); + let si = objects.len() - 1; + // a 2D B-spline across the domain + let pa = [rng.uniform(u0, u1), rng.uniform(v0, v1)]; + let pb = [rng.uniform(u0, u1), rng.uniform(v0, v1)]; + let deg = 1 + rng.below(2) as usize; + let cnt = deg + 1 + rng.below(2) as usize; + let uvc = BSplineIn { + dim: 2, + oob: false, + cpts: (0..cnt) + .map(|i| { + let f = i as f64 / (cnt - 1) as f64; + [ + pa[0] + f * (pb[0] - pa[0]) + rng.uniform(-0.05, 0.05) * (u1 - u0), + pa[1] + f * (pb[1] - pa[1]) + rng.uniform(-0.05, 0.05) * (v1 - v0), + NOZ, + NOW, + ] + }) + .collect(), + p: deg, + u: { + let mut k = vec![0.0; deg + 1]; + for i in 1..(cnt - deg) { + k.push(i as f64 / (cnt - deg) as f64); + } + k.extend(vec![1.0; deg + 1]); + k + }, + }; + objects.push(ObjIn::Curve(CurveIn::Bspline(uvc))); + let ui = objects.len() - 1; + let c2 = CurveIn::Line(LineIn { + p: rp(rng, 5.0), + v: rp(rng, 3.0), + domain: [0.0, rng.uniform(1.0, 10.0)], + scale: 1.0, + inside_out: false, + }); + objects.push(ObjIn::Curve(if rng.chance(0.5) { c2 } else { gen_curve(rng) })); + let c2i = objects.len() - 1; + let n = rng.below(6) as usize; + let sols = (0..n) + .map(|_| { + let ty = *rng.choose(&[1usize, 1, 1, 2, 2, 0, 4]).unwrap_or(&1); + SolIn { + ty, + s: [rng.uniform(0.0, 1.0), rng.uniform(0.0, 5.0)], + e: [rng.uniform(0.0, 1.0), rng.uniform(0.0, 5.0)], + value: rng.uniform(0.0, 0.5), + } + }) + .collect(); + ops.push(OpIn::Cull { + t: 0, + s: Some(if rng.chance(0.1) { of_kind(&objects, kind::PLANE).first().copied().unwrap_or(si) } else { si }), + uvc: Some(ui), + ivl1: [0.0, 1.0], + c2: Some(c2i), + ivl2: [0.0, 10.0], + tol: *rng.choose(&[1e-6, 1e-3, 0.1, 1.0, 5.0]).unwrap_or(&0.1), + sols, + }); + } + } + Script { objects, ops } +} + +/// Whether the shim accepts the script (it rejects what is undefined upstream). +fn shim_accepts(s: &Script) -> bool { + match ffi::run(&cpp_input(s)) { + Ok(_) => true, + Err(solidcore_ffi::FfiError::Status(c)) if c == SC_ERR_ARG => false, + Err(_) => false, + } +} + +// ---- fixtures built in code --------------------------------------------------------------- + +/// Edge cases: empty / huge-scale / tiny-scale classifications, boundary indices, every +/// winding orientation, degenerate tangents. +fn edge_cases() -> Vec<(String, Value)> { + let mut out = Vec::new(); + let line = |p: [f64; 3], v: [f64; 3], d: [f64; 2]| { + ObjIn::Curve(CurveIn::Line(LineIn { p, v, domain: d, scale: 1.0, inside_out: false })) + }; + for (name, scale) in [("unit", 1.0), ("huge", 1e5), ("tiny", 1e-5)] { + let objs = vec![ + line([0.0, 0.0, 0.0], [scale, 0.0, 0.0], [0.0, 1.0]), + ObjIn::Plane { o: [0.0, 0.0, 0.0], n: [0.0, 0.0, 1.0] }, + ObjIn::Point([scale, scale, 0.0]), + ObjIn::Loop, + ObjIn::Other, + ]; + let ops = vec![ + OpIn::SrcTol { t: 0 }, + OpIn::Type { t: 0, types: vec![12312, 11001, 0] }, + OpIn::SetSize { t: 0, n: 0 }, + OpIn::SetSize { t: 0, n: 3 }, + OpIn::IvlTols { t: 0, j: 2 }, + OpIn::SetCurve { t: 0, obj: Some(0), owned: true }, + OpIn::SetSrcTol { t: 0, tol: 1e-5 * scale }, + OpIn::IvlSet { t: 0, j: 0, a: 0.0, b: 0.25 }, + OpIn::IvlSet { t: 0, j: 1, a: 0.25, b: 0.75 }, + OpIn::IvlSet { t: 0, j: 2, a: 0.75, b: 1.0 }, + OpIn::IvlSetMin { t: 0, j: 1, v: 0.8 }, + OpIn::IvlSetMin { t: 0, j: 1, v: 0.3 }, + OpIn::IvlSetMax { t: 0, j: 1, v: 0.2 }, + OpIn::IvlSetMax { t: 0, j: 1, v: 0.75 }, + OpIn::PcSetClass { t: 0, j: 0, w: 0, class: 107, obj: Some(1) }, + OpIn::PcSetClass { t: 0, j: 0, w: 2, class: 106, obj: Some(0) }, + OpIn::PcSetClass { t: 0, j: 1, w: 1, class: 105, obj: Some(2) }, + OpIn::PcSetSss { t: 0, j: 2, w: 2, p: [scale, 2.0 * scale, 3.0 * scale] }, + OpIn::ClassifyCrvLoc { t: 0, j: 2, w: 2, prm: 0.5 }, + OpIn::ClassifyCrvLoc { t: 0, j: 2, w: 0, prm: 0.5 }, + OpIn::ClassifyCrvLoc { t: 0, j: 0, w: 0, prm: -3.0 }, + OpIn::SqueezeEnd { t: 0, j: 0 }, + OpIn::SqueezeEnd { t: 0, j: 2 }, + OpIn::IsReferenced { t: 0, obj: Some(0) }, + OpIn::IsReferenced { t: 0, obj: Some(4) }, + OpIn::IsReferenced { t: 0, obj: None }, + OpIn::SubInterval { t: 0, j: 2 }, + OpIn::RemoveAt { t: 0, j: 9 }, + OpIn::RemoveAt { t: 0, j: 0 }, + OpIn::SetSize { t: 0, n: 4 }, + OpIn::SetSize { t: 1, n: 1 }, + OpIn::IvlAssign { t: 1, j: 0, k: 0 }, + OpIn::IvlAssign { t: 1, j: 0, k: 1 }, + OpIn::IvlNew { t: 1, j: 0, with: true, owner: true, a: 2.0, b: 1.0 }, + OpIn::IvlNew { t: 0, j: 3, with: false, owner: true, a: 0.0, b: 0.0 }, + OpIn::IvlReset { t: 0, j: 3 }, + OpIn::SetIntersectData { t: 0, s1: Some(1), s2: Some(1), uv2: Some(0), current: false, ti: Some(4) }, + OpIn::SetUvCurve1 { t: 0, obj: Some(0) }, + OpIn::SetIsCurveCurrent { t: 0, b: true }, + OpIn::SetIsCurveCurrent { t: 0, b: false }, + OpIn::SetFilletData { t: 0, obj: Some(4), b: true }, + OpIn::AddTgtLoop { t: 0, obj: Some(3) }, + OpIn::AddTgtLoop { t: 0, obj: Some(3) }, + OpIn::SetTgtLoopsOnly { t: 0, b: true }, + OpIn::MakeConsistent { t: 0 }, + OpIn::ObjDim { t: 0, obj: Some(3) }, + OpIn::ObjDim { t: 0, obj: None }, + OpIn::SetSize { t: 0, n: 0 }, + OpIn::SetPcParams { t: 0, mids: true }, + OpIn::SetSize { t: 0, n: 2 }, + OpIn::SetPcParams { t: 0, mids: false }, + ]; + out.push((format!("edge_containers_{name}"), json!(Script { objects: objs, ops }))); + } + // winding counts: in/out excess, out/in excess, balanced, empty + let loop_objs = vec![ObjIn::Loop, ObjIn::Loop, ObjIn::Other]; + let tch = |c: usize, dir: i32, prm: f64| TouchIn { c: Some(c), dir, li: 0, prm, pi: 0, pc: None }; + for (name, list) in [ + ("in_out", vec![tch(0, 2, 0.1), tch(0, 4, 0.1), tch(0, 2, 0.5), tch(0, 4, 0.5)]), + ("out_in", vec![tch(0, 4, 0.1), tch(0, 2, 0.1), tch(1, 3, 0.2), tch(1, 6, 0.2)]), + ("balanced", vec![tch(0, 2, 0.1), tch(0, 4, 0.1), tch(1, 4, 0.5), tch(1, 2, 0.5)]), + ("empty", vec![]), + ] { + let ops = vec![ + OpIn::TouchWinding { t: 0, touches: list.clone() }, + OpIn::TouchConnected { t: 0, c: Some(0), touches: list.clone() }, + OpIn::TouchConnected { t: 1, c: None, touches: list.clone() }, + ]; + out.push((format!("edge_touches_{name}"), json!(Script { objects: loop_objs.clone(), ops }))); + } + // degenerate tangents and NULL curves for the angle + let objs = vec![ + line([0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0]), + line([0.0, 0.0, 0.0], [-1.0, 1e-9, 0.0], [0.0, 1.0]), + ObjIn::Curve(CurveIn::Hermite(HermiteIn { + dim: 3, + p1: [0.0; 3], + d1: [0.0; 3], + p2: [0.0; 3], + d2: [0.0; 3], + })), + line([0.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 1.0]), + ]; + let ops = vec![ + OpIn::Angle { t: 0, c1: Some(0), t1: 0.5, c2: Some(1), t2: 0.5, dev: 0.0 }, + OpIn::Angle { t: 0, c1: Some(0), t1: 0.5, c2: Some(3), t2: 0.5, dev: 0.0 }, + OpIn::Angle { t: 0, c1: Some(2), t1: 0.5, c2: Some(0), t2: 0.5, dev: 0.0 }, + OpIn::Angle { t: 0, c1: Some(0), t1: 0.5, c2: Some(2), t2: 0.5, dev: 0.0 }, + OpIn::Angle { t: 0, c1: None, t1: 0.5, c2: Some(2), t2: 0.5, dev: 0.0 }, + OpIn::TolPair { t: 0, c: Some(0), s: None, p1: 0.0, tol1: 1e-5, p2: 1.0, tol2: 2e-5 }, + OpIn::TolPair { t: 0, c: Some(0), s: None, p1: 0.0, tol1: USE_DEFAULT, p2: 1.0, tol2: -1e-3 }, + OpIn::Gaps { t: 0, cp: [0.0; 3], ep: [3.0, 4.0, 0.0], sol: [0.0, 0.0], pairs: vec![], count: 0 }, + ]; + out.push(("edge_angles".into(), json!(Script { objects: objs, ops }))); + // the topology helpers (deferred in the port) + let objs = vec![ + line([0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0]), + ObjIn::Plane { o: [0.0, 0.0, 0.0], n: [0.0, 0.0, 1.0] }, + ObjIn::Plane { o: [0.0, 0.0, 0.0], n: [0.0, 1.0, 0.0] }, + ObjIn::Edge(Some(0)), + ObjIn::Face(Some(1)), + ]; + for (name, op) in [ + ( + "edge_through", + OpIn::EdgeThrough { + t: 0, + e: Some(3), + p: [0.5, 0.0, 0.0], + srf: [Some(1), Some(2)], + uv: [[0.5, 0.0], [0.5, 0.0]], + prm: 0.4, + }, + ), + ("cci_geometry", OpIn::CciGeometry { t: 0, e: Some(3) }), + ( + "face_point_class", + OpIn::FacePointClass { t: 0, f: Some(4), p: [0.5, 0.5, 0.0], tol: 1e-5 }, + ), + ] { + let ops = vec![ + OpIn::SetIntersectData { t: 0, s1: Some(1), s2: Some(2), uv2: None, current: true, ti: None }, + op, + ]; + out.push((format!("edge_topology_{name}"), json!(Script { objects: objs.clone(), ops }))); + } + out +} + +impl UnitDiff for Runner { + fn id(&self) -> &'static str { + "intersect.curve_class_p1" + } + + fn generate(&self, rng: &mut Rng) -> Option { + for _ in 0..64 { + let s = gen_script(rng); + if ffi::validate(&cpp_input(&s)).is_err() || !shim_accepts(&s) { + continue; + } + return serde_json::to_value(s).ok(); + } + None + } + + fn cases(&self, ctx: &CaseContext) -> Result, HarnessError> { + let ctx = CaseContext { + seeds: ctx.seeds.max(MIN_GENERATED), + ..ctx.clone() + }; + let mut cases = default_cases(self, &ctx)?; + for (name, inputs) in edge_cases() { + cases.push(Case { + unit: self.id().into(), + name, + source: CaseSource::Inline, + inputs, + }); + } + Ok(cases) + } + + fn run_cpp(&self, case: &Case) -> Result { + cpp(&case.parse()?) + } + + fn run_rust(&self, case: &Case) -> Result { + rust(&case.parse()?) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + /// Generated scripts are accepted by the ffi checks, and most of them are comparable + /// now (not deferred). + #[test] + fn generated_scripts_are_mostly_comparable() { + let mut rng = Rng::new(11); + let (mut total, mut deferred) = (0, 0); + for _ in 0..300 { + let Some(v) = Runner.generate(&mut rng) else { + continue; + }; + let s: Script = serde_json::from_value(v).unwrap(); + total += 1; + if matches!(rust_run(&s), Err(Fail::Deferred(_))) { + deferred += 1; + } + } + assert!(total > 250, "{total}"); + assert!(deferred * 3 < total, "{deferred} of {total} deferred"); + } +} + +#[cfg(test)] +mod dump { + use super::*; + + /// Prints how often the generated scripts reach the interesting branches of the static + /// helpers (a debugging aid: `cargo test -p difftest --features cpp --lib + /// coverage_stats -- --ignored --nocapture`). + #[test] + #[ignore = "debugging aid"] + fn coverage_stats() { + let k = Kernel::default(); + let mut stats: std::collections::BTreeMap = Default::default(); + let mut bump = |s: String| *stats.entry(s).or_default() += 1; + for i in 0..MIN_GENERATED { + let mut rng = Rng::new(CaseContext::seed_for("intersect.curve_class_p1", i)); + let Some(v) = Runner.generate(&mut rng) else { continue }; + let s: Script = serde_json::from_value(v).unwrap(); + let mut pool = build_pool(&s.objects).unwrap(); + for x in &s.ops { + match x { + OpIn::XsectCurve { c, tol, srf, uv, prm, p, .. } => { + let mut curve = pool.take_curve(c.unwrap()).unwrap(); + let surfaces: Vec<&Surface> = + srf.iter().map(|x| pool.surface_at(*x).unwrap().unwrap()).collect(); + let uvs: Vec = uv.iter().map(|q| uvp(*q)).collect(); + let r = cc_mod::set_xsect_curve_through_point( + &k, &mut curve, zone_tol3d(&k, *tol), &mut [], &surfaces, &uvs, *prm, v3(*p), + ); + bump(match r { + Ok(r) => format!( + "xsect success={} modified={} dev={:?}", + r.success, + r.modified_curve, + r.deviation.map(|d| d == 0.0) + ), + Err(e) => format!("xsect err {e}"), + }); + } + OpIn::Apply { .. } => bump("apply".into()), + OpIn::Cull { sols, .. } => bump(format!("cull n={}", sols.len().min(1))), + OpIn::Angle { .. } => bump("angle".into()), + OpIn::TolPair { .. } => bump("tol_pair".into()), + OpIn::TouchWinding { .. } | OpIn::TouchConnected { .. } => bump("touch".into()), + OpIn::SetPcParams { .. } => bump("set_pc_params".into()), + OpIn::SqueezeEnd { .. } => bump("squeeze".into()), + _ => {} + } + } + } + for (k, v) in stats { + println!("{v:6} {k}"); + } + } + + /// Prints generated case `CC_CASE` as JSON (a debugging aid: + /// `CC_CASE=6 cargo test -p difftest --features cpp --lib dump_case -- --ignored --nocapture`). + #[test] + #[ignore = "debugging aid; needs CC_CASE"] + fn dump_case() { + let i: usize = std::env::var("CC_CASE").unwrap().parse().unwrap(); + let mut rng = Rng::new(CaseContext::seed_for("intersect.curve_class_p1", i)); + let v = Runner.generate(&mut rng).unwrap(); + println!("{}", serde_json::to_string(&v).unwrap()); + } +} diff --git a/crates/solidcore-ffi/src/units/intersect_curve_class_p1.rs b/crates/solidcore-ffi/src/units/intersect_curve_class_p1.rs new file mode 100644 index 0000000000..5bdcc968e4 --- /dev/null +++ b/crates/solidcore-ffi/src/units/intersect_curve_class_p1.rs @@ -0,0 +1,718 @@ +//! FFI wrappers for unit `intersect.curve_class_p1`. +//! +//! Shim: `harness/cpp/shim/intersect_curve_class_p1.cpp` (`sc_intersect_curve_class_p1_run`). +//! Upstream: `source/SMLib/src/SmCurveClass.cpp`, `source/SMLib/inc/SmCurveClass.h` (the +//! part-1 members of `SmCurveClassification` and `SmCurveInterval`, `SmTouchData`'s touch-list +//! helpers, the static `sm_*` helpers) and the classification overloads of `SmTol`. +//! +//! A script is `n_obj obj*n_obj n_ops op*n_ops`. It builds a pool of objects, constructs two +//! default classifications `cc[0]`, `cc[1]` (`SmCurveClassification()`), then runs the ops, +//! each on a target `t` (`0` or `1`; "other" is `cc[1 - t]`). +//! +//! Objects (`kind data`): `0` curve block (`0 dim oob n p m cpts(x y z w) knots` an +//! `SmBSplineCurve`, `1 dim P1 D1 P2 D2` an `SmHermiteCurve`, `2 3 P V d0 d1 scale io` a bounded +//! `SmLine`, `3 dim C X Y d0 d1 rx ry io` an `SmEllipse`, `4 dim C X Y d0 d1 r io` an +//! `SmCircle`), `1 O[3] N[3]` (`SmPlane(O, N)`), `2 oob n m p q r s cpts(x y z w, v fastest) u v` +//! (an `SmBSplineSurface`), `3 P[3]` (an `SmPoint3d`), `4` vertex, `5 c` (an edge on pool curve +//! `c`, `-1` none), `6 s` (a face on pool surface `s`, `-1` none), `7` loop stand-in, `8` other +//! stand-in (used for the topology intersector and other-classification pointers, which are +//! only stored). +//! +//! | code | op (`op t ...`) | upstream | outputs after the status | +//! |------|----------------------------------------------|---------------------------------------------|--------------------------| +//! | 0 | `n` | `SetSize` | | +//! | 1 | `j` | `RemoveAt` | | +//! | 2 | `j a b` | `GetAt(j).SetInterval(SmExtent1d(a, b))` | | +//! | 3, 4 | `j v` | `GetAt(j).SetIntervalMin` / `SetIntervalMax`| (status) | +//! | 5 | `j` | `GetAt(j).ReSet()` | | +//! | 6 | `j k` | `GetAt(j) = other.GetAt(k)` | | +//! | 7 | `j with owner a b` | `GetAt(j) = SmCurveInterval([ivl,] ctx, owner ? this : NULL)` | | +//! | 8 | `j w class obj` | `SetClassObject` of start / mid / end (`w` 0 / 1 / 2) | | +//! | 9..14| `j w v` / `j w u v` / `j w g` / `j w P[3]` / `j w v` / `j w tol` | `SetTParam`, `SetUVParam`, `SetGap3d`, `SetSSSPoint`, `SetPreSnapParam`, `SetSrcZoneTol3d` | | +//! | 15 | `obj owned` | `SetCurve` | | +//! | 16..18 | `obj` | `SetSurface1`, `SetSurface2`, `SetFace` | | +//! | 19 | `s1 s2 uv2 current ti` | `SetIntersectData` | | +//! | 20..23, 25 | `b` | `SetIsCurveCurrent`, `SetIgnoreTangency`, `SetIsCurveOwned`, `SetOKToSetTolerance`, `SetTgtLoopsOnly` | | +//! | 24 | `obj b` | `SetFilletData` | | +//! | 26 | `obj` | `AddTgtLoop` | | +//! | 27 | `tol` | `SmTol::SetZoneTol3d(cc, tol)` | | +//! | 28, 29 | `obj` | `SetUVCurve1`, `SetUVCurve2` | | +//! | 30 | `j` | `GetSubInterval` | `min max` | +//! | 31 | `j w param` | `GetClassifyCrvLoc(pc, param)` | `P[3]` | +//! | 32 | `mids` | `SetPointClassParameters` | (status) | +//! | 33 | `j` | `FindBestSqueezeEnd` | `position` | +//! | 34 | `obj` | `IsReferenced` | `flag` | +//! | 35 | | `sm_MakeConsistentClassifications` | (status) | +//! | 36 | `n type*n` | `GetType`, `IsKindOf`, `GetTypeString` | `type flag*n len chars` | +//! | 37 | | `SmTol::GetSrcZoneTol3d(cc)`, `(NULL)` | `tol system` | +//! | 38 | `j` | `SmTol::GetSrcZoneTol3d(ivl)`, `GetObjZoneTol3d(ivl)`, `(NULL)`, `GetScaledZero(ivl)` | 4 values | +//! | 39 | `obj` | `sm_ObjectDimension` | `dim` | +//! | 40 | `c tol n_uvc uvc* n_srf srf* n_uv (u v)* param dev P[3]` | `sm_SetXSectCurveThroughPoint` | `modified param dev set3d P[3] curve uvcurve*` | +//! | 41 | `use_cc edge emate (s u v)*4 t0 t1 value P[3]` | `sm_ApplyPointSolution` | `P[3] flag mc me mm dev t0 t1 [curve]` | +//! | 42 | `c1 t1 c2 t2 dev` | `sm_GetCurveCurveAngle` | `angle` | +//! | 43 | `s uvc a0 a1 c2 b0 b1 tol n (type s0 s1 e0 e1 value)*n` | `sm_CullOrRefineCCIIn3d` | `n (type s0 s1 e0 e1 value)*n` | +//! | 44 | `c s p1 tol1 p2 tol2` | `sm_GetXSectTol2dOr3d_ForClassifyPair` | `tol` | +//! | 45 | `CP[3] EP[3] t0 t1 n (s uvc)*n count` | `sm_GetCCISurfaceGaps` | `g1 g2 g3 n (u v)*n` | +//! | 46 | `c n touch*n` | `SmTouchData::GetConnectedTouches` (with and without list) | `cnt cnt2 touch*cnt` | +//! | 47 | `n touch*n` | `SmTouchData::GetWindingCount` | `count orient` | +//! | 48 | `e P[3] (s u v)*2 param` | `sm_SetXSectEdgeThroughPoint` | `param dev modified` | +//! | 49 | `e` | `sm_GetCCIGeometry` | `n_surfaces count` | +//! | 50 | `f P[3] tol` | `sm_ComputeFacePointClass` | `class` | +//! +//! A touch is `connected_to loop_dir loop_index param pt_index pt_classify` (ids or `-1`). +//! A curve record is `min max n m (status [P[3]])*7`: the natural interval, the NURB's highest +//! control point and knot indices (`-1 -1` when not a B-spline), and the points at 7 evenly +//! spaced parameters. +//! +//! Each op writes `op status outputs state`, the state of `cc[t]` being `size min max src_tol +//! owned current ignore_tangency cross_hatch fillets ok_to_set_tol tgt_loops_only curve uv1 uv2 +//! any_uv1 any_uv2 surface1 surface2 face ti other n_loops loop*n_loops interval*size`, an +//! interval `min max start mid end`, a point classification `class object face deviation t u v +//! uvw[3] param_set pre_snap sss_flag sss[3] src_tol` (object ids are pool indices, `-1` for +//! `NULL`, `-2` for an object outside the pool). +//! +//! [`run`] accepts only well-formed scripts with bounded finite data (counts, codes, object +//! indices, curve and surface blocks). The shim additionally rejects at run time (`SC_ERR_ARG`) +//! what is undefined upstream: interval indices past the size, objects of the wrong kind, +//! `NULL` curves or surfaces that would be dereferenced, `SetClassObject` with an object of +//! another kind than the class, point or stand-in objects for `ComputePointParameters`, the +//! topology walks of `sm_MakeConsistentClassifications` and `sm_ApplyPointSolution` over the +//! bare stand-in edges, odd-length winding touch lists. + +use crate::{call_with_buffer, FfiError}; + +/// Largest pool size. +pub const MAX_OBJECTS: usize = 32; +/// Largest op count. +pub const MAX_OPS: usize = 128; +/// Largest number of intervals set. +pub const MAX_SIZE: usize = 64; +/// Largest coordinate / parameter magnitude. +pub const MAX_COORD: f64 = 1e6; +/// Largest magnitude of a tolerance, gap, deviation or pre-snap value (`SM_USE_DEFAULT` and +/// `SM_BIG_DOUBLE` fit). +pub const MAX_VALUE: f64 = 1e21; +/// Largest control point index of a curve block. +pub const MAX_INDEX: usize = 64; +/// Largest control point index of a surface block (each direction). +pub const MAX_SURF_INDEX: usize = 16; +/// Largest degree. +pub const MAX_DEGREE: usize = 9; + +const NOZ: f64 = f64::MAX; +const NOW: f64 = -f64::MAX; + +/// Object kind codes. +#[allow(missing_docs)] +pub mod kind { + pub const CURVE: usize = 0; + pub const PLANE: usize = 1; + pub const BSURF: usize = 2; + pub const POINT: usize = 3; + pub const VERTEX: usize = 4; + pub const EDGE: usize = 5; + pub const FACE: usize = 6; + pub const LOOP: usize = 7; + pub const OTHER: usize = 8; +} + +/// Op codes. +#[allow(missing_docs)] +pub mod op { + pub const SET_SIZE: usize = 0; + pub const REMOVE_AT: usize = 1; + pub const IVL_SET: usize = 2; + pub const IVL_SET_MIN: usize = 3; + pub const IVL_SET_MAX: usize = 4; + pub const IVL_RESET: usize = 5; + pub const IVL_ASSIGN: usize = 6; + pub const IVL_NEW: usize = 7; + pub const PC_SET_CLASS: usize = 8; + pub const PC_SET_T: usize = 9; + pub const PC_SET_UV: usize = 10; + pub const PC_SET_GAP: usize = 11; + pub const PC_SET_SSS: usize = 12; + pub const PC_SET_PRESNAP: usize = 13; + pub const PC_SET_SRC_TOL: usize = 14; + pub const SET_CURVE: usize = 15; + pub const SET_SURFACE1: usize = 16; + pub const SET_SURFACE2: usize = 17; + pub const SET_FACE: usize = 18; + pub const SET_INTERSECT_DATA: usize = 19; + pub const SET_IS_CURVE_CURRENT: usize = 20; + pub const SET_IGNORE_TANGENCY: usize = 21; + pub const SET_IS_CURVE_OWNED: usize = 22; + pub const SET_OK_TO_SET_TOL: usize = 23; + pub const SET_FILLET_DATA: usize = 24; + pub const SET_TGT_LOOPS_ONLY: usize = 25; + pub const ADD_TGT_LOOP: usize = 26; + pub const SET_SRC_TOL: usize = 27; + pub const SET_UV_CURVE1: usize = 28; + pub const SET_UV_CURVE2: usize = 29; + pub const SUB_INTERVAL: usize = 30; + pub const CLASSIFY_CRV_LOC: usize = 31; + pub const SET_PC_PARAMS: usize = 32; + pub const SQUEEZE_END: usize = 33; + pub const IS_REFERENCED: usize = 34; + pub const MAKE_CONSISTENT: usize = 35; + pub const TYPE: usize = 36; + pub const SRC_TOL: usize = 37; + pub const IVL_TOLS: usize = 38; + pub const OBJ_DIM: usize = 39; + pub const XSECT_CURVE: usize = 40; + pub const APPLY: usize = 41; + pub const ANGLE: usize = 42; + pub const CULL: usize = 43; + pub const TOL_PAIR: usize = 44; + pub const GAPS: usize = 45; + pub const TOUCH_CONNECTED: usize = 46; + pub const TOUCH_WINDING: usize = 47; + pub const EDGE_THROUGH: usize = 48; + pub const CCI_GEOMETRY: usize = 49; + pub const FACE_POINT_CLASS: usize = 50; + /// Largest op code. + pub const LAST: usize = 50; +} + +mod sys { + extern "C" { + pub fn sc_intersect_curve_class_p1_run( + input: *const f64, + n_in: i64, + out: *mut f64, + cap: i64, + out_len: *mut i64, + ) -> i32; + } +} + +fn bad(msg: impl Into) -> FfiError { + FfiError::InvalidArgument(msg.into()) +} + +/// Sequential reader over the input. +struct Reader<'a> { + input: &'a [f64], + at: usize, +} + +impl<'a> Reader<'a> { + fn num(&mut self) -> Result { + let v = self + .input + .get(self.at) + .copied() + .ok_or_else(|| bad("input too short"))?; + self.at += 1; + Ok(v) + } + + /// A finite value of magnitude at most `max`. + fn bounded(&mut self, max: f64) -> Result { + let v = self.num()?; + if !v.is_finite() || v.abs() > max { + return Err(bad(format!("value {v} not finite or too large"))); + } + Ok(v) + } + + fn finite(&mut self) -> Result { + self.bounded(MAX_COORD) + } + + fn value(&mut self) -> Result { + self.bounded(MAX_VALUE) + } + + fn vec3(&mut self) -> Result<[f64; 3], FfiError> { + Ok([self.finite()?, self.finite()?, self.finite()?]) + } + + fn nonzero3(&mut self) -> Result<[f64; 3], FfiError> { + let v = self.vec3()?; + if v.iter().map(|c| c * c).sum::() < 1e-12 { + return Err(bad("zero vector")); + } + Ok(v) + } + + /// An integer in `0..=max`. + fn index(&mut self, max: usize) -> Result { + let v = self.num()?; + if v.fract() != 0.0 || v < 0.0 || v > max as f64 { + return Err(bad(format!("bad index/count {v}"))); + } + Ok(v as usize) + } + + /// `-1` (`None`) or an object index below `len`. + fn object(&mut self, len: usize) -> Result, FfiError> { + let v = self.num()?; + if v == -1.0 { + return Ok(None); + } + if v.fract() != 0.0 || v < 0.0 || v >= len as f64 { + return Err(bad(format!("bad object index {v}"))); + } + Ok(Some(v as usize)) + } + + fn flag(&mut self) -> Result { + Ok(self.index(1)? == 1) + } + + fn take(&mut self, k: usize) -> Result<&'a [f64], FfiError> { + let end = self.at.checked_add(k).ok_or_else(|| bad("overflow"))?; + let s = self + .input + .get(self.at..end) + .ok_or_else(|| bad("input too short"))?; + self.at = end; + Ok(s) + } +} + +fn euclid([x, y, z, w]: [f64; 4]) -> [f64; 3] { + let z = if z == NOZ { 0.0 } else { z }; + if w == NOW { + [x, y, z] + } else { + [x / w, y / w, z / w] + } +} + +/// Clamped, non-decreasing knots of degree `p` with interior multiplicity at most `p`. +fn check_knots(knots: &[f64], p: usize, what: &str) -> Result<(), FfiError> { + if knots.iter().any(|k| !k.is_finite() || k.abs() > MAX_COORD) + || knots.windows(2).any(|w| w.first() > w.last()) + { + return Err(bad(format!("{what}: knots not non-decreasing"))); + } + let (Some(&a), Some(&b)) = (knots.first(), knots.last()) else { + return Err(bad("empty knots")); + }; + let m = knots.len() - 1; + let short = || bad(format!("{what}: knots too short")); + let head = knots.get(..=p).ok_or_else(short)?; + let tail = knots + .get(m.checked_sub(p).ok_or_else(short)?..) + .ok_or_else(short)?; + let inner = knots.get(p + 1..m - p).ok_or_else(short)?; + if a >= b || head.iter().any(|&k| k != a) || tail.iter().any(|&k| k != b) { + return Err(bad(format!("{what}: knots not clamped"))); + } + if b - a < 1e-6 * a.abs().max(b.abs()).max(1.0) { + return Err(bad(format!("{what}: parameter range too small"))); + } + if inner.iter().any(|&k| k == a || k == b) { + return Err(bad(format!("{what}: end multiplicity above p + 1"))); + } + let mut run = 1; + for w in inner.windows(2) { + run = if w.first() == w.last() { run + 1 } else { 1 }; + if run > p { + return Err(bad(format!( + "{what}: interior multiplicity above the degree" + ))); + } + } + Ok(()) +} + +/// A clamped B-spline curve `n p m cpts knots`. +fn bspline(rd: &mut Reader<'_>) -> Result<(), FfiError> { + let n = rd.index(MAX_INDEX)?; + let p = rd.index(MAX_DEGREE)?; + let m = rd.index(MAX_INDEX + MAX_DEGREE + 1)?; + if p == 0 || p > n || m != n + p + 1 { + return Err(bad("curve: need 1 <= p <= n and m = n + p + 1")); + } + let cps = rd.take(4 * (n + 1))?; + let knots = rd.take(m + 1)?; + let (cpts, _) = cps.as_chunks::<4>(); + let [_, _, z0, w0] = *cpts.first().ok_or_else(|| bad("empty curve"))?; + for &[x, y, z, w] in cpts { + if (z == NOZ) != (z0 == NOZ) || (w == NOW) != (w0 == NOW) { + return Err(bad("curve: mixed dimension or rationality")); + } + if !x.is_finite() + || !y.is_finite() + || (z != NOZ && !z.is_finite()) + || (w != NOW && !w.is_finite()) + { + return Err(bad("curve: non-finite control point")); + } + if w != NOW && w <= 1e-3 { + return Err(bad("curve: non-positive weight")); + } + if euclid([x, y, z, w]) + .iter() + .any(|c| !c.is_finite() || c.abs() > MAX_COORD) + { + return Err(bad("curve: Euclidean point out of range")); + } + } + check_knots(knots, p, "curve") +} + +/// A curve block. +fn curve_block(rd: &mut Reader<'_>) -> Result<(), FfiError> { + let kind = rd.index(4)?; + let dim = rd.index(3)?; + if dim < 2 { + return Err(bad("curve block: dimension must be 2 or 3")); + } + match kind { + 3 | 4 => { + rd.vec3()?; + rd.nonzero3()?; + rd.nonzero3()?; + let d0 = rd.finite()?; + let d1 = rd.finite()?; + let len = (d1 - d0).abs(); + if d0.abs() > 720.0 || d1.abs() > 720.0 || !(1e-4..=360.0).contains(&len) { + return Err(bad( + "conic: domain outside [-720, 720] or length outside [1e-4, 360]", + )); + } + for _ in 0..(if kind == 3 { 2 } else { 1 }) { + if rd.finite()? <= 0.0 { + return Err(bad("conic: radius not positive")); + } + } + rd.flag()?; + Ok(()) + } + 0 => { + rd.flag()?; + bspline(rd) + } + 1 => { + for _ in 0..4 { + rd.vec3()?; + } + Ok(()) + } + _ => { + if dim != 3 { + return Err(bad("line block: dimension must be 3")); + } + rd.vec3()?; + rd.nonzero3()?; + let d0 = rd.finite()?; + let d1 = rd.finite()?; + if (d1 - d0).abs() < 1e-6 { + return Err(bad("line: domain too small")); + } + if rd.finite()? <= 1e-6 { + return Err(bad("line: scale not positive")); + } + rd.flag()?; + Ok(()) + } + } +} + +/// A B-spline surface block `oob n m p q r s cpts u v`. +fn surface_block(rd: &mut Reader<'_>) -> Result<(), FfiError> { + rd.flag()?; + let n = rd.index(MAX_SURF_INDEX)?; + let m = rd.index(MAX_SURF_INDEX)?; + let p = rd.index(MAX_DEGREE)?; + let q = rd.index(MAX_DEGREE)?; + let r = rd.index(MAX_SURF_INDEX + MAX_DEGREE + 1)?; + let s = rd.index(MAX_SURF_INDEX + MAX_DEGREE + 1)?; + if p == 0 || q == 0 || p > n || q > m || r != n + p + 1 || s != m + q + 1 { + return Err(bad("surface: bad sizes")); + } + let cps = rd.take(4 * (n + 1) * (m + 1))?; + let (cpts, _) = cps.as_chunks::<4>(); + let [_, _, _, w0] = *cpts.first().ok_or_else(|| bad("empty surface"))?; + for &[x, y, z, w] in cpts { + if (w == NOW) != (w0 == NOW) { + return Err(bad("surface: mixed rationality")); + } + if !x.is_finite() + || !y.is_finite() + || !z.is_finite() + || (w != NOW && !(1e-3..=1e3).contains(&w)) + { + return Err(bad("surface: bad control point")); + } + let d = if w == NOW { 1.0 } else { w }; + if [x / d, y / d, z / d].iter().any(|c| c.abs() > MAX_COORD) { + return Err(bad("surface: point out of range")); + } + } + check_knots(rd.take(r + 1)?, p, "surface u")?; + check_knots(rd.take(s + 1)?, q, "surface v") +} + +fn touches(rd: &mut Reader<'_>, n_obj: usize) -> Result<(), FfiError> { + let n = rd.index(64)?; + for _ in 0..n { + rd.object(n_obj)?; + rd.index(8)?; + rd.index(1 << 20)?; + rd.finite()?; + rd.index(1 << 20)?; + rd.object(n_obj)?; + } + Ok(()) +} + +/// Checks the static shape of a script (what [`run`] checks before calling the shim). +/// +/// # Errors +/// +/// [`FfiError::InvalidArgument`] for a malformed script. +pub fn validate(input: &[f64]) -> Result<(), FfiError> { + let mut rd = Reader { input, at: 0 }; + let n_obj = rd.index(MAX_OBJECTS)?; + for i in 0..n_obj { + let k = rd.index(kind::OTHER)?; + match k { + kind::CURVE => curve_block(&mut rd)?, + kind::PLANE => { + rd.vec3()?; + rd.nonzero3()?; + } + kind::BSURF => surface_block(&mut rd)?, + kind::POINT => { + rd.vec3()?; + } + kind::EDGE | kind::FACE => { + rd.object(i)?; + } + _ => {} + } + } + let n_ops = rd.index(MAX_OPS)?; + for _ in 0..n_ops { + let code = rd.index(op::LAST)?; + rd.index(1)?; + let obj = |rd: &mut Reader<'_>| rd.object(n_obj).map(|_| ()); + match code { + op::SET_SIZE + | op::REMOVE_AT + | op::IVL_RESET + | op::SUB_INTERVAL + | op::SQUEEZE_END + | op::IVL_TOLS => { + rd.index(MAX_SIZE)?; + } + op::IVL_SET => { + rd.index(MAX_SIZE)?; + rd.finite()?; + rd.finite()?; + } + op::IVL_SET_MIN | op::IVL_SET_MAX => { + rd.index(MAX_SIZE)?; + rd.finite()?; + } + op::IVL_ASSIGN => { + rd.index(MAX_SIZE)?; + rd.index(MAX_SIZE)?; + } + op::IVL_NEW => { + rd.index(MAX_SIZE)?; + rd.flag()?; + rd.flag()?; + rd.finite()?; + rd.finite()?; + } + op::PC_SET_CLASS => { + rd.index(MAX_SIZE)?; + rd.index(2)?; + rd.index(110)?; + obj(&mut rd)?; + } + op::PC_SET_UV => { + rd.index(MAX_SIZE)?; + rd.index(2)?; + rd.finite()?; + rd.finite()?; + } + op::PC_SET_T | op::PC_SET_PRESNAP | op::PC_SET_GAP | op::PC_SET_SRC_TOL => { + rd.index(MAX_SIZE)?; + rd.index(2)?; + rd.value()?; + } + op::PC_SET_SSS => { + rd.index(MAX_SIZE)?; + rd.index(2)?; + rd.vec3()?; + } + op::SET_CURVE | op::SET_FILLET_DATA => { + obj(&mut rd)?; + rd.flag()?; + } + op::SET_SURFACE1 + | op::SET_SURFACE2 + | op::SET_FACE + | op::ADD_TGT_LOOP + | op::SET_UV_CURVE1 + | op::SET_UV_CURVE2 + | op::IS_REFERENCED + | op::OBJ_DIM + | op::CCI_GEOMETRY => obj(&mut rd)?, + op::SET_INTERSECT_DATA => { + obj(&mut rd)?; + obj(&mut rd)?; + obj(&mut rd)?; + rd.flag()?; + obj(&mut rd)?; + } + op::SET_IS_CURVE_CURRENT + | op::SET_IGNORE_TANGENCY + | op::SET_IS_CURVE_OWNED + | op::SET_OK_TO_SET_TOL + | op::SET_TGT_LOOPS_ONLY + | op::SET_PC_PARAMS => { + rd.flag()?; + } + op::SET_SRC_TOL => { + rd.value()?; + } + op::CLASSIFY_CRV_LOC => { + rd.index(MAX_SIZE)?; + rd.index(2)?; + rd.finite()?; + } + op::TYPE => { + let n = rd.index(8)?; + for _ in 0..n { + rd.index(1 << 20)?; + } + } + op::XSECT_CURVE => { + obj(&mut rd)?; + rd.value()?; + let n_uvc = rd.index(8)?; + for _ in 0..n_uvc { + obj(&mut rd)?; + } + let n_srf = rd.index(8)?; + for _ in 0..n_srf { + obj(&mut rd)?; + } + let n_uv = rd.index(8)?; + for _ in 0..2 * n_uv { + rd.finite()?; + } + rd.finite()?; + rd.value()?; + rd.vec3()?; + } + op::APPLY => { + rd.flag()?; + obj(&mut rd)?; + obj(&mut rd)?; + for _ in 0..4 { + obj(&mut rd)?; + rd.finite()?; + rd.finite()?; + } + rd.finite()?; + rd.finite()?; + rd.value()?; + rd.vec3()?; + } + op::ANGLE => { + obj(&mut rd)?; + rd.finite()?; + obj(&mut rd)?; + rd.finite()?; + rd.value()?; + } + op::CULL => { + obj(&mut rd)?; + obj(&mut rd)?; + rd.finite()?; + rd.finite()?; + obj(&mut rd)?; + rd.finite()?; + rd.finite()?; + rd.value()?; + let n = rd.index(16)?; + for _ in 0..n { + rd.index(4)?; + for _ in 0..4 { + rd.finite()?; + } + rd.value()?; + } + } + op::TOL_PAIR => { + obj(&mut rd)?; + obj(&mut rd)?; + rd.finite()?; + rd.value()?; + rd.finite()?; + rd.value()?; + } + op::GAPS => { + rd.vec3()?; + rd.vec3()?; + rd.finite()?; + rd.finite()?; + let n = rd.index(8)?; + for _ in 0..n { + obj(&mut rd)?; + obj(&mut rd)?; + } + rd.index(64)?; + } + op::TOUCH_CONNECTED => { + rd.object(n_obj)?; + touches(&mut rd, n_obj)?; + } + op::TOUCH_WINDING => touches(&mut rd, n_obj)?, + op::EDGE_THROUGH => { + obj(&mut rd)?; + rd.vec3()?; + for _ in 0..2 { + obj(&mut rd)?; + rd.finite()?; + rd.finite()?; + } + rd.finite()?; + } + op::FACE_POINT_CLASS => { + obj(&mut rd)?; + rd.vec3()?; + rd.value()?; + } + // MAKE_CONSISTENT, SRC_TOL: no arguments + _ => {} + } + } + if rd.at != input.len() { + return Err(bad("trailing input")); + } + Ok(()) +} + +/// Runs a script (see the module docs) and returns its output stream. +/// +/// # Errors +/// +/// [`FfiError::InvalidArgument`] for a malformed script; [`FfiError::Status`] with +/// `SC_ERR_ARG` when the shim rejects an op at run time. +pub fn run(input: &[f64]) -> Result, FfiError> { + validate(input)?; + call_with_buffer(8192, |buf, len| { + // SAFETY: input is valid for input.len() reads and is a validated script (every + // count, code, object index, curve and surface block the shim reads); buf is valid + // for buf.len() writes and the shim honours the capacity; len is valid. + unsafe { + sys::sc_intersect_curve_class_p1_run( + input.as_ptr(), + input.len() as i64, + buf.as_mut_ptr(), + buf.len() as i64, + &raw mut *len, + ) + } + }) +} diff --git a/crates/solidcore/src/curve/crv_in_volume.rs b/crates/solidcore/src/curve/crv_in_volume.rs index edd12aed95..9acd301c8e 100644 --- a/crates/solidcore/src/curve/crv_in_volume.rs +++ b/crates/solidcore/src/curve/crv_in_volume.rs @@ -147,7 +147,7 @@ fn classify_against_volume( ) -> Result> { // UNPORTED(intersect.curve_class_p4): SmCurveClassification::SmCurveClassification // UNPORTED(intersect.curve_class_p8): SmCurveClassification::Intersect3DDiscontinuities - // UNPORTED(intersect.curve_class_p1): SmCurveClassification::GetSize, SmCurveClassification::GetAt + // (then the intervals: intersect::curve_class::CurveClassification::size / at) Err(SolidError::unported( "SmCurveClassification::SmCurveClassification", "intersect.curve_class_p4", diff --git a/crates/solidcore/src/curve/crv_on_surf.rs b/crates/solidcore/src/curve/crv_on_surf.rs index e0b978fd5c..4ee0d46a06 100644 --- a/crates/solidcore/src/curve/crv_on_surf.rs +++ b/crates/solidcore/src/curve/crv_on_surf.rs @@ -205,7 +205,7 @@ fn classify_against_surface( ) -> Result> { // UNPORTED(intersect.curve_class_p4): SmCurveClassification::SmCurveClassification // UNPORTED(intersect.curve_class_p8): SmCurveClassification::IntersectUVDiscontinuties - // UNPORTED(intersect.curve_class_p1): SmCurveClassification::GetSize, SmCurveClassification::GetAt + // (then the intervals: intersect::curve_class::CurveClassification::size / at) Err(SolidError::unported( "SmCurveClassification::SmCurveClassification", "intersect.curve_class_p4", diff --git a/crates/solidcore/src/curve/ellipse/p2.rs b/crates/solidcore/src/curve/ellipse/p2.rs index 0165c7042e..aead10df12 100644 --- a/crates/solidcore/src/curve/ellipse/p2.rs +++ b/crates/solidcore/src/curve/ellipse/p2.rs @@ -892,6 +892,11 @@ impl Ellipse { &self.base } + /// The `SmBSplineCurve` base object, mutable (for the base-class edits). + pub(crate) fn base_mut(&mut self) -> &mut BSplineCurve { + &mut self.base + } + /// The polar conversion table (`m_vPolarConverter`). #[must_use] pub const fn polar_converter(&self) -> &PolarConversion { diff --git a/crates/solidcore/src/curve/hyperbola.rs b/crates/solidcore/src/curve/hyperbola.rs index 9bb3e2fc5f..d786792116 100644 --- a/crates/solidcore/src/curve/hyperbola.rs +++ b/crates/solidcore/src/curve/hyperbola.rs @@ -200,6 +200,11 @@ impl Hyperbola { &self.base } + /// The `SmBSplineCurve` base object, mutable (for the base-class edits). + pub(crate) fn base_mut(&mut self) -> &mut BSplineCurve { + &mut self.base + } + /// The placement: center, semi axis and semi imaginary axis directions. #[must_use] pub const fn position(&self) -> &Axis2Placement { diff --git a/crates/solidcore/src/curve/line.rs b/crates/solidcore/src/curve/line.rs index ee2b20107b..b5e4cf38e6 100644 --- a/crates/solidcore/src/curve/line.rs +++ b/crates/solidcore/src/curve/line.rs @@ -473,6 +473,11 @@ impl Line { &self.base } + /// The `SmBSplineCurve` base object, mutable (for the base-class edits). + pub(crate) fn base_mut(&mut self) -> &mut BSplineCurve { + &mut self.base + } + /// Image-space dimension (`SmCurve::GetDim`). #[must_use] pub const fn dim(&self) -> u64 { diff --git a/crates/solidcore/src/geom/tol.rs b/crates/solidcore/src/geom/tol.rs index c9bed58db8..1b8a138bbe 100644 --- a/crates/solidcore/src/geom/tol.rs +++ b/crates/solidcore/src/geom/tol.rs @@ -131,9 +131,11 @@ use crate::surface::volume::Volume; // UNPORTED(surface.surface_p1): SmTol::MapTo2d(const SmTol3d&, const SmVector2d&, [const // SmVector2d&,] const SmSurface&) and SmTol::GetScaledZero(const SmSurface&) need // SmSurface::Evaluate1stDerivatives / GetNaturalUVDomain / ApproximateSize. -// UNPORTED(intersect.curve_class_p1): SmTol::GetSrcZoneTol3d / GetObjZoneTol3d of -// SmCurveClassification / SmCurveInterval and SmTol::GetScaledZero(const -// SmCurveInterval&) need the classification classes. +// SmTol::GetSrcZoneTol3d / GetObjZoneTol3d of SmCurveClassification / SmCurveInterval +// and SmTol::GetScaledZero(const SmCurveInterval&) are +// intersect::curve_class::src_zone_tol_3d_of / interval_obj_zone_tol_3d and the +// ScaledZero impl of intersect::curve_class::CurveInterval; SmTol::SetZoneTol3d of a +// classification is CurveClassification::set_src_zone_tol_3d. // SmTol::GetSrcZoneTol3d / GetObjZoneTol3d / GetXSectTol3d of SmPointClassification // are intersect::point_class::PointClassification::src_zone_tol_3d / obj_zone_tol_3d / // xsect_tol_3d. diff --git a/crates/solidcore/src/intersect.rs b/crates/solidcore/src/intersect.rs index aed41725c3..6d6a8aea83 100644 --- a/crates/solidcore/src/intersect.rs +++ b/crates/solidcore/src/intersect.rs @@ -5,6 +5,7 @@ //! `SmPolyIntersector`, `SmSSIData` in `source/SMLib`, and //! `SM_API/SmApiIntersectors`. +pub mod curve_class; pub mod point_class; pub mod surface_intersector; pub mod surface_tracer; diff --git a/crates/solidcore/src/intersect/curve_class.rs b/crates/solidcore/src/intersect/curve_class.rs new file mode 100644 index 0000000000..d85fae49ab --- /dev/null +++ b/crates/solidcore/src/intersect/curve_class.rs @@ -0,0 +1,20 @@ +//! Curve classification: a curve split into homogeneous intervals by where it meets +//! the boundaries of the object it is classified against, each interval carrying the +//! point classifications of its ends and interior (`SmCurveClassification`). +//! +//! Upstream: `source/SMLib/src/SmCurveClass.cpp`, `source/SMLib/inc/SmCurveClass.h`. +//! The file is split over several plan units (`intersect.curve_class_p1`, `_p2`, ...); +//! each lives in its own submodule and adds methods to [`CurveClassification`] (or +//! free functions). + +pub mod p1; + +pub use p1::{ + apply_point_solution, compute_face_point_class, cull_or_refine_cci_in_3d, get_cci_geometry, + get_cci_surface_gaps, get_connected_touches, get_curve_curve_angle, get_winding_count, + interval_obj_zone_tol_3d, make_consistent_classifications, object_dimension, + set_xsect_curve_through_point, set_xsect_edge_through_point, src_zone_tol_3d_of, + xsect_tol_2d_or_3d_for_classify_pair, ApplyPointSolution, ApplyPointSolutionInput, CciGeometry, + CciSurfaceGaps, CrvDirOnFaceType, CurveClassification, CurveInterval, IntervalPosition, + TouchData, XSectThroughPoint, CURVE_CLASSIFICATION_TYPE_STRING, MAX_INTERVALS, +}; diff --git a/crates/solidcore/src/intersect/curve_class/p1.rs b/crates/solidcore/src/intersect/curve_class/p1.rs new file mode 100644 index 0000000000..8cbb82e2bf --- /dev/null +++ b/crates/solidcore/src/intersect/curve_class/p1.rs @@ -0,0 +1,2072 @@ +//! Curve classification, part 1: the interval and classification containers, their +//! accessors and storage management, the touch-list helpers, and the static helpers +//! that tighten classification-curve / edge intersections onto surf/surf/surf points. +//! +//! Upstream: `source/SMLib/src/SmCurveClass.cpp`, `source/SMLib/inc/SmCurveClass.h`; +//! the `SmCurveClassification` / `SmCurveInterval` overloads of `SmTol` in +//! `source/SMLib/src/SmTol.cpp`. +//! +//! | Rust | Upstream | +//! |--------------------------------------------------------|--------------------------------------------------| +//! | [`IntervalPosition`] | `SmIntervalPositionType` | +//! | [`CrvDirOnFaceType`] | `SmCrvDirOnFaceType` | +//! | [`TouchData`] | `SmTouchData` | +//! | [`get_connected_touches`] | `SmTouchData::GetConnectedTouches` | +//! | [`get_winding_count`] | `SmTouchData::GetWindingCount` | +//! | [`CurveInterval`] | `SmCurveInterval` | +//! | [`CurveInterval::new`], [`CurveInterval::with_interval`] | `SmCurveInterval(ctx, owner)`, `SmCurveInterval(ivl, ctx, owner)` | +//! | [`CurveInterval::reset`] | `SmCurveInterval::ReSet` | +//! | [`CurveInterval::set_interval`] | `SmCurveInterval::SetInterval` | +//! | `Clone` / `Copy` (derived) | `SmCurveInterval::operator=` | +//! | [`CurveInterval::set_interval_min`], [`CurveInterval::set_interval_max`] | `SetIntervalMin`, `SetIntervalMax` (private) | +//! | [`CurveInterval::interval`], [`CurveInterval::min`], [`CurveInterval::max`] | `GetInterval`, `GetMin`, `GetMax` | +//! | [`CurveClassification`] | `SmCurveClassification` | +//! | [`CurveClassification::new`] | `SmCurveClassification()` | +//! | `Drop` (implicit) | `~SmCurveClassification` | +//! | [`CurveClassification::size`] | `GetSize` | +//! | [`CurveClassification::face`] | `GetFace` | +//! | [`CurveClassification::surface1`], [`CurveClassification::surface2`] | `GetSurface1`, `GetSurface2` | +//! | [`CurveClassification::curve`] | `GetCurve` | +//! | [`CurveClassification::interval`] | `GetInterval` | +//! | [`CurveClassification::sub_interval`] | `GetSubInterval` | +//! | [`CurveClassification::uv_curve1`], [`CurveClassification::uv_curve2`] | `GetUVCurve1`, `GetUVCurve2` | +//! | [`CurveClassification::any_uv_curve1`], [`CurveClassification::any_uv_curve2`] | `GetAnyUVCurve1`, `GetAnyUVCurve2` | +//! | [`CurveClassification::topology_intersector`] | `GetTopologyIntersector` | +//! | [`CurveClassification::is_curve_current`] | `GetIsCurveCurrent` | +//! | [`CurveClassification::ignore_tangency`] | `GetIgnoreTangency` | +//! | [`CurveClassification::doing_cross_hatch`] | `GetDoingCrossHatch` | +//! | [`CurveClassification::doing_fillets`] | `GetDoingFillets` | +//! | [`CurveClassification::other_classification`] | `GetOtherClassification` | +//! | [`CurveClassification::ok_to_set_tolerance`] | `GetOKToSetTolerance` | +//! | [`CurveClassification::tgt_loops_only`], [`CurveClassification::set_tgt_loops_only`] | `GetTgtLoopsOnly`, `SetTgtLoopsOnly` | +//! | [`CurveClassification::tgt_loops`], [`CurveClassification::add_tgt_loop`] | `GetTgtLoops`, `AddTgtLoop` | +//! | [`CurveClassification::src_zone_tol_3d`] | `GetSrcZoneTol3d` (private) | +//! | [`CurveClassification::set_src_zone_tol_3d`] | `SetSrcZoneTol3d` (private; through `SmTol::SetZoneTol3d`) | +//! | [`CurveClassification::at`], [`CurveClassification::at_mut`] | `GetAt`, `operator[]` | +//! | [`CurveClassification::set_surface1`], [`CurveClassification::set_surface2`] | `SetSurface1`, `SetSurface2` | +//! | [`CurveClassification::set_face`] | `SetFace` | +//! | [`CurveClassification::set_ignore_tangency`] | `SetIgnoreTangency` | +//! | [`CurveClassification::set_is_curve_owned`], [`CurveClassification::is_curve_owned`] | `SetIsCurveOwned`, `m_bIsCurveOwned` | +//! | [`CurveClassification::set_ok_to_set_tolerance`] | `SetOKToSetTolerance` | +//! | [`CurveClassification::set_fillet_data`] | `SetFilletData` | +//! | [`CurveClassification::set_uv_curve1`], [`CurveClassification::set_uv_curve2`] | `SetUVCurve1`, `SetUVCurve2` (no plan unit: unreachable from the entry points) | +//! | [`CurveClassification::type_code`], [`CURVE_CLASSIFICATION_TYPE_STRING`], [`CurveClassification::is_kind_of`] | `GetType`, `GetTypeString`, `IsKindOf` | +//! | [`CurveClassification::classify_crv_loc`] | `GetClassifyCrvLoc(const SmPointClassification*, double)` | +//! | [`CurveClassification::set_curve`] | `SetCurve` | +//! | [`CurveClassification::set_intersect_data`] | `SetIntersectData` | +//! | [`CurveClassification::set_is_curve_current`] | `SetIsCurveCurrent` | +//! | [`CurveClassification::remove_at`] | `RemoveAt` | +//! | [`CurveClassification::set_size`], [`MAX_INTERVALS`] | `SetSize` | +//! | [`CurveClassification::set_point_class_parameters`] | `SetPointClassParameters` | +//! | [`CurveClassification::find_best_squeeze_end`] | `FindBestSqueezeEnd` | +//! | [`CurveClassification::is_referenced`] | `IsReferenced` | +//! | [`src_zone_tol_3d_of`] | `SmTol::GetSrcZoneTol3d(const SmCurveClassification*)`, `SmTol::GetSrcZoneTol3d(const SmCurveInterval*)` | +//! | [`interval_obj_zone_tol_3d`] | `SmTol::GetObjZoneTol3d(const SmCurveInterval*)` | +//! | `ScaledZero for CurveInterval` | `SmTol::GetScaledZero(const SmCurveInterval&)` | +//! | [`set_xsect_curve_through_point`], [`XSectThroughPoint`] | `sm_SetXSectCurveThroughPoint` (static) | +//! | [`set_xsect_edge_through_point`] | `sm_SetXSectEdgeThroughPoint` (static) | +//! | [`get_cci_surface_gaps`], [`CciSurfaceGaps`] | `sm_GetCCISurfaceGaps` (static) | +//! | [`get_cci_geometry`], [`CciGeometry`] | `sm_GetCCIGeometry` (static) | +//! | [`apply_point_solution`], [`ApplyPointSolutionInput`], [`ApplyPointSolution`] | `sm_ApplyPointSolution` (static) | +//! | [`make_consistent_classifications`] | `sm_MakeConsistentClassifications` (static) | +//! | [`get_curve_curve_angle`] | `sm_GetCurveCurveAngle` (static) | +//! | [`cull_or_refine_cci_in_3d`] | `sm_CullOrRefineCCIIn3d` (static) | +//! | [`compute_face_point_class`] | `sm_ComputeFacePointClass` (static) | +//! | [`xsect_tol_2d_or_3d_for_classify_pair`] | `sm_GetXSectTol2dOr3d_ForClassifyPair` | +//! | [`object_dimension`] | `sm_ObjectDimension` (static) | +//! +//! Deviations: +//! - **Object handles.** Every `SmObject` pointer the classification stores (curve, +//! UV curves, surfaces, face, target loops, the other classification, the topology +//! intersector) is a caller-chosen handle `O` ([`ClassObject`]), as in +//! [`PointClassification`]; geometry behind a handle is reached through a +//! [`ClassGeometry`]. `m_cpContext` is not stored (the kernel is passed explicitly). +//! - **No back pointer.** `SmCurveInterval::m_pCurveClassification` and +//! `GetCurveClassification` are not ported: an interval lives inside its +//! classification and is reached through it. The constructors take the owner (or +//! `None`) only for its source zone tolerance (`SmTol::GetSrcZoneTol3d(cpOwner)`). +//! - **Storage.** `m_pData` / `m_lMaxSize` / `m_bIsBorrowed` become a `Vec` plus a flag +//! recording whether upstream's array is allocated: growing from no array +//! default-constructs the new intervals (their point classifications take the system +//! zone tolerance, `SmTol::GetSrcZoneTol3d(NULL)`), growing an allocated array +//! `ReSet`s them (`SM_UNINIT_TOL`). Borrowed arrays (`pOptBorrowedData`) are a +//! memory-management feature of `ReSet` (unit `intersect.curve_class_p2`) and are not +//! modelled. [`CurveClassification::set_size`] refuses more than [`MAX_INTERVALS`] +//! intervals instead of allocating without bound. +//! - **Ownership of the curve.** `m_bIsCurveOwned` is kept as data; there is nothing to +//! delete when a handle is replaced. +//! - **Undefined behaviour upstream** is an error here: `GetSubInterval`, `GetAt`, +//! `operator[]`, `FindBestSqueezeEnd` past the size (upstream reads past `m_lSize`), +//! `RemoveAt` on an empty classification (`m_lSize` wraps), a `NULL` curve where one is +//! evaluated, an odd-length touch list in `GetWindingCount`, and missing surfaces or +//! UV points where the static helpers dereference them. `RemoveAt` past the end of a +//! non-empty classification drops the last interval, as upstream. +//! - **Out-params.** Status plus out-params become result structs; an out-param upstream +//! leaves unwritten on some paths is an `Option` (`None` = not written) or is passed +//! in and returned. `GetConnectedTouches` returns the connected touches (their count +//! is the length). `sm_ApplyPointSolution` takes the classification as its curve +//! (mutable: upstream edits it through a `const_cast`) and source zone tolerance. +//! - **`SmTemporaryChangeValue` on `GetOutOfBoundsEnabled`.** The surfaces a static +//! helper evaluates out of bounds are copies with out-of-bounds evaluation enabled +//! (B-spline surfaces and planes, the `SmBSplineSurface` kinds); the caller's +//! surfaces are unchanged, as after upstream's restore. +//! - **Dead code.** `sm_ApplyPointSolution`'s `gwcUpdateCurves` / `gwcUpdateEdges` are +//! constant `TRUE`, so its `FALSE` branches, and every `SM_DEBUG_CODE` block, are not +//! ported; `SM_ASSERT*` only report. +//! - **Not ported here (other units).** `ReSet`, `InsertAt`, `operator=` and the other +//! members of `SmCurveClassification` belong to units `intersect.curve_class_p2` .. +//! `_p9`; `SmTouchData::operator==` (the derived `PartialEq`), `Homogenize`, `Dump`, +//! `AssertValid` and `Draw` are not reachable from the in-scope entry points. +//! - **Callees in units not ported yet** return [`SolidError::Unported`]: every +//! topology member (`SmEdge`, `SmVertex`, `SmFace`, `SmEdgeuse`), the surface point +//! solves (`surface.surface_p4`, `surface.surface_p5`), `SmSurface::GetFace` and +//! `ApproximateSize` and the surface cache (`surface.surface_p1`), `SmTol::MapTo2d` +//! (its `Evaluate1stDerivatives`, `surface.surface_p1`), and an `SmCrvOnSurf` over a +//! surface that is not a B-spline (`curve.crv_on_surf` holds only B-spline surfaces). +//! - **Recursion.** None. + +use std::borrow::Cow; + +use crate::curve::crv_on_surf::CrvOnSurf; +use crate::curve::curve::p2::{Curve, CurveKind}; +use crate::curve::curve::p3::{local_curve_intersect, PointSolveOptions}; +use crate::error::{ignored, Result, SolidError, SM_ERR}; +use crate::geom::assert_array::labels::CURVE_CLASSIFICATION_TYPE; +use crate::geom::extent1d::Extent1d; +use crate::geom::global_solver::SolverOperation; +use crate::geom::object; +use crate::geom::solution_array::{Solution, SolutionArray, SolutionObject, SolutionType}; +use crate::geom::tol::{ + ang_tol_rad, eff_zero, eff_zero_param, xsect_tol3d, xsect_tol_3d_from_zones, zone_tol3d, + zone_tol_3d, ScaledZero, SmallTopoType, UNINIT_TOL, +}; +use crate::intersect::point_class::{ + ClassGeometry, ClassObject, ClassObjectKind, PointClassType, PointClassification, +}; +use crate::kernel::Kernel; +use crate::math::{max2, Point2, Point3, Vec2, Vec3, PI}; +use crate::nurbs::b_spline_curve::BSplineCurve; +use crate::nurbs::b_spline_surface_n_lib::p2::{EvaluateFlags, OrientType}; +use crate::surface::surface::p2::surface_cache; +use crate::surface::surface::{Surface, SurfaceKind}; + +const OP_CC: &str = "intersect::curve_class::p1::CurveClassification"; +const OP_TOUCH: &str = "intersect::curve_class::p1::get_winding_count"; +const OP_XSECT: &str = "intersect::curve_class::p1::set_xsect_curve_through_point"; +const OP_APPLY: &str = "intersect::curve_class::p1::apply_point_solution"; +const OP_GAPS: &str = "intersect::curve_class::p1::get_cci_surface_gaps"; +const OP_CULL: &str = "intersect::curve_class::p1::cull_or_refine_cci_in_3d"; +const OP_PAIR: &str = "intersect::curve_class::p1::xsect_tol_2d_or_3d_for_classify_pair"; + +/// The most intervals [`CurveClassification::set_size`] stores (far above anything a +/// classification reaches; upstream allocates whatever is asked for). +pub const MAX_INTERVALS: usize = 1 << 20; + +/// `SM_MIN_ARRAY_SIZE` / `MIN_ARRAY_SIZE` of `SetSize`. +const MIN_ARRAY_SIZE: usize = 16; + +/// `SmCurveClassification::GetTypeString`. +pub const CURVE_CLASSIFICATION_TYPE_STRING: &str = "SmCurveClassification_TYPE"; + +// ---- enums ------------------------------------------------------------------------------ + +/// Where a parameter falls relative to an interval (`SmIntervalPositionType`); the +/// discriminants are the upstream values. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)] +#[repr(i32)] +pub enum IntervalPosition { + /// `SM_IP_UNINIT`: not yet classified. + #[default] + Uninit = 0, + /// `SM_IP_START`: on the start point. + Start = 1, + /// `SM_IP_INSIDE`: between the start and end points. + Inside = 2, + /// `SM_IP_END`: on the end point. + End = 3, + /// `SM_IP_OUTSIDE`: outside the interval. + Outside = 4, +} + +impl IntervalPosition { + /// The upstream enum value. + #[must_use] + pub const fn code(self) -> i32 { + self as i32 + } +} + +/// The direction of a surface vector at a surface point relative to a face +/// (`SmCrvDirOnFaceType`); the discriminants are the upstream values. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)] +#[repr(i32)] +pub enum CrvDirOnFaceType { + /// `SM_CD_UNINIT`. + #[default] + Uninit = 0, + /// `SM_CD_NONE`. + None = 1, + /// `SM_CD_IN`: points into the face. + In = 2, + /// `SM_CD_ON`: tangent to a face boundary. + On = 3, + /// `SM_CD_OUT`: points out of the face. + Out = 4, + /// `SM_CD_LAMINA`: out of the surface over a lamina boundary. + Lamina = 5, + /// `SM_CD_SEAM`: out of the surface over a seam. + Seam = 6, + /// `SM_CD_POLE`: out of the surface over a pole marked by a vertex. + Pole = 7, + /// `SM_CD_POLE_NO_VERTEX`: out of the surface over a pole without a vertex. + PoleNoVertex = 8, +} + +impl CrvDirOnFaceType { + /// The upstream enum value. + #[must_use] + pub const fn code(self) -> i32 { + self as i32 + } + + /// The type with upstream value `code`, if any. + #[must_use] + pub const fn from_code(code: i32) -> Option { + Some(match code { + 0 => Self::Uninit, + 1 => Self::None, + 2 => Self::In, + 3 => Self::On, + 4 => Self::Out, + 5 => Self::Lamina, + 6 => Self::Seam, + 7 => Self::Pole, + 8 => Self::PoleNoVertex, + _ => return None, + }) + } +} + +// ---- touch data ------------------------------------------------------------------------- + +/// How the classification curve arrives at or departs from a face boundary at one of +/// its point classifications (`SmTouchData`). Touch lists hold arrive/depart pairs. +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct TouchData { + /// `m_pConnectedTo`: the topology the point classification connects to. + pub connected_to: Option, + /// `m_eLoopDir`. + pub loop_dir: CrvDirOnFaceType, + /// `m_lLoopIndx`: the index of the loop of `connected_to`. + pub loop_index: u64, + /// `m_dParam`: the classification curve parameter. + pub param: f64, + /// `m_lPtClassifyIndx`: the index of the point classification. + pub pt_classify_index: u64, + /// `m_pPtClassify`: the point classification (a handle). + pub pt_classify: Option, +} + +/// The touches of `touches` connected to `connected_to`, in order +/// (`SmTouchData::GetConnectedTouches`; upstream's count is the length). +#[must_use] +pub fn get_connected_touches( + connected_to: Option, + touches: &[TouchData], +) -> Vec> { + // for every touch + touches + .iter() + .filter(|t| t.connected_to == connected_to) + .copied() + .collect() +} + +/// The winding count of a single loop's touch list (`SmTouchData::GetWindingCount`): +/// the number of unmatched in/out and out/in arrive/depart pairs, and +/// [`OrientType::Opposite`] (`SM_OT_LOWERDOMAIN`) for more in/out pairs, +/// [`OrientType::Same`] (`SM_OT_UPPERDOMAIN`) for more out/in pairs, else +/// [`OrientType::Unknown`]. +/// +/// # Errors +/// +/// [`SolidError::InvalidInput`] for a list of odd length (upstream reads past its end). +pub fn get_winding_count(touches: &[TouchData]) -> Result<(u64, OrientType)> { + if touches.len() % 2 != 0 { + return Err(SolidError::invalid_input( + OP_TOUCH, + "touch list of odd length", + )); + } + + // init locals and output + let mut in_out_cnt: u64 = 0; + let mut out_in_cnt: u64 = 0; + + // for every touch + for pair in touches.chunks_exact(2) { + let (Some(a), Some(d)) = (pair.first(), pair.get(1)) else { + continue; + }; + if a.loop_dir == CrvDirOnFaceType::In && d.loop_dir == CrvDirOnFaceType::Out { + in_out_cnt += 1; + } + if a.loop_dir == CrvDirOnFaceType::Out && d.loop_dir == CrvDirOnFaceType::In { + out_in_cnt += 1; + } + } + + // all done - return WindingCount = unpaired In/Out to Out/In touches + let orient = match in_out_cnt.cmp(&out_in_cnt) { + core::cmp::Ordering::Greater => OrientType::Opposite, + core::cmp::Ordering::Less => OrientType::Same, + core::cmp::Ordering::Equal => OrientType::Unknown, + }; + + // smos_Labs(lInOutCnt - lOutInCnt) of the unsigned difference + Ok((in_out_cnt.abs_diff(out_in_cnt), orient)) +} + +// ---- curve interval --------------------------------------------------------------------- + +/// The classification of one homogeneous interval of the classification curve +/// (`SmCurveInterval`): its parameter range and the point classifications of its start, +/// interior and end. +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct CurveInterval { + /// `m_vInterval`: the parameter interval (its ends may have been snapped, see the + /// point classifications' pre-snap parameters). + pub interval: Extent1d, + /// `m_vStart`: the classification of the start point. + pub start: PointClassification, + /// `m_vMid`: the classification of the interior. + pub mid: PointClassification, + /// `m_vEnd`: the classification of the end point. + pub end: PointClassification, +} + +impl CurveInterval { + /// An interval with the "inside out" extent whose point classifications take the + /// owner's source zone tolerance (`SmCurveInterval(cpContext, cpOwner)`; + /// `SmTol::GetSrcZoneTol3d(cpOwner)`, the system zone tolerance without an owner). + #[must_use] + pub fn new(k: &Kernel, owner: Option<&CurveClassification>) -> Self { + Self::with_interval(k, &Extent1d::new(), owner) + } + + /// An interval over `interval` (`SmCurveInterval(crInterval, cpContext, cpOwner)`). + #[must_use] + pub fn with_interval( + k: &Kernel, + interval: &Extent1d, + owner: Option<&CurveClassification>, + ) -> Self { + let tol = src_zone_tol_3d_of(k, owner); + Self { + interval: *interval, + start: PointClassification::new(tol), + mid: PointClassification::new(tol), + end: PointClassification::new(tol), + } + } + + /// Resets the extent and the three point classifications (`ReSet`). + pub fn reset(&mut self, k: &Kernel) { + self.interval.init(); // m_cpContext value left alone by design + self.start.reset(k, None); + self.mid.reset(k, None); + self.end.reset(k, None); + } + + /// Sets the parameter interval (`SetInterval`). + pub fn set_interval(&mut self, interval: &Extent1d) { + self.interval = *interval; + } + + /// Moves the start of the interval (`SetIntervalMin`, private upstream: use the + /// classification's `EditIntervalMin`). + /// + /// # Errors + /// + /// Those of [`Extent1d::set_min_max`] (the interval would become negative); the + /// interval is then unchanged. + pub fn set_interval_min(&mut self, new_param: f64) -> Result<()> { + let max = self.interval.max(); + self.interval.set_min_max(new_param, max) + } + + /// Moves the end of the interval (`SetIntervalMax`, private upstream). + /// + /// # Errors + /// + /// As [`CurveInterval::set_interval_min`]. + pub fn set_interval_max(&mut self, new_param: f64) -> Result<()> { + let min = self.interval.min(); + self.interval.set_min_max(min, new_param) + } + + /// The parameter interval (`GetInterval`). + #[must_use] + pub const fn interval(&self) -> &Extent1d { + &self.interval + } + + /// The start parameter (`GetMin`). + #[must_use] + pub const fn min(&self) -> f64 { + self.interval.min() + } + + /// The end parameter (`GetMax`). + #[must_use] + pub const fn max(&self) -> f64 { + self.interval.max() + } +} + +/// `SmTol::GetScaledZero(const SmCurveInterval&)`: the scaled zero of the interval. +impl ScaledZero for CurveInterval { + fn scaled_zero(&self) -> f64 { + self.interval.scaled_zero() + } +} + +// ---- curve classification --------------------------------------------------------------- + +/// The classification of a curve against another object (`SmCurveClassification`): +/// the curve split into ascending homogeneous [`CurveInterval`]s spanning its interval. +#[derive(Debug, Clone, PartialEq)] +#[allow(clippy::struct_excessive_bools)] // upstream's SmBoolean members +pub struct CurveClassification { + /// `m_bIsCurveOwned`. + is_curve_owned: bool, + /// `m_cpCurve`: the curve being classified. + curve: Option, + /// `m_sSrcZoneTol3d`: the zone tolerance of the curve's source. + src_zone_tol_3d: f64, + /// `m_cpUVCurve1`. + uv_curve1: Option, + /// `m_bIsCurveCurrent`. + is_curve_current: bool, + /// `m_cpSurface1`. + surface1: Option, + /// `m_cpSurface2`. + surface2: Option, + /// `m_bDoingCrossHatch`. + doing_cross_hatch: bool, + /// `m_bDoingFillets`. + doing_fillets: bool, + /// `m_bOKToSetTolerance`. + ok_to_set_tolerance: bool, + /// `m_bTgtLoopsOnly`. + tgt_loops_only: bool, + /// `m_sTgtLoops`. + tgt_loops: Vec, + /// `m_cpOtherClassification`. + other_classification: Option, + /// `m_cpFace`. + face: Option, + /// `m_cpUVCurve2`. + uv_curve2: Option, + /// `m_cpTI`. + ti: Option, + /// `m_vInterval`: the whole interval classified. + interval: Extent1d, + /// `m_pData[0 .. m_lSize]`. + data: Vec>, + /// `m_pData != NULL`: whether upstream's interval array is allocated. + allocated: bool, + /// `m_bIgnoreTangency`. + ignore_tangency: bool, +} + +impl CurveClassification { + /// An empty classification (`SmCurveClassification()`): no curve, no intervals, + /// interval `[0, 1]`, source zone tolerance `SM_UNINIT_TOL`. + #[must_use] + pub fn new(k: &Kernel) -> Self { + Self { + is_curve_owned: false, + curve: None, + src_zone_tol_3d: zone_tol3d(k, UNINIT_TOL), + uv_curve1: None, + is_curve_current: true, + surface1: None, + surface2: None, + doing_cross_hatch: false, + doing_fillets: false, + ok_to_set_tolerance: true, + tgt_loops_only: false, + tgt_loops: Vec::new(), + other_classification: None, + face: None, + uv_curve2: None, + ti: None, + interval: Extent1d::from_min_max(0.0, 1.0), + data: Vec::new(), + allocated: false, + ignore_tangency: false, + } + } + + // ---- simple data access -------------------------------------------------------- + + /// The number of intervals (`GetSize`; the end-point count is one more). + #[must_use] + pub fn size(&self) -> usize { + self.data.len() + } + + /// The intervals. + #[must_use] + pub fn intervals(&self) -> &[CurveInterval] { + &self.data + } + + /// The face classified against (`GetFace`). + #[must_use] + pub const fn face(&self) -> Option { + self.face + } + + /// `GetSurface1`. + #[must_use] + pub const fn surface1(&self) -> Option { + self.surface1 + } + + /// `GetSurface2`. + #[must_use] + pub const fn surface2(&self) -> Option { + self.surface2 + } + + /// The curve being classified (`GetCurve`). + #[must_use] + pub const fn curve(&self) -> Option { + self.curve + } + + /// The whole interval classified (`GetInterval`). + #[must_use] + pub const fn interval(&self) -> Extent1d { + self.interval + } + + /// The parameter interval of interval `index` (`GetSubInterval`). + /// + /// # Errors + /// + /// [`SolidError::InvalidInput`] for `index >= size()` (upstream reads past the + /// intervals). + pub fn sub_interval(&self, index: usize) -> Result { + Ok(self.at(index)?.interval) + } + + /// The surface-1 UV curve while the curve is current (`GetUVCurve1`). + #[must_use] + pub const fn uv_curve1(&self) -> Option { + if self.is_curve_current { + self.uv_curve1 + } else { + None + } + } + + /// The surface-2 UV curve while the curve is current (`GetUVCurve2`). + #[must_use] + pub const fn uv_curve2(&self) -> Option { + if self.is_curve_current { + self.uv_curve2 + } else { + None + } + } + + /// `GetAnyUVCurve1`. + #[must_use] + pub const fn any_uv_curve1(&self) -> Option { + self.uv_curve1 + } + + /// `GetAnyUVCurve2`. + #[must_use] + pub const fn any_uv_curve2(&self) -> Option { + self.uv_curve2 + } + + /// `GetTopologyIntersector`. + #[must_use] + pub const fn topology_intersector(&self) -> Option { + self.ti + } + + /// `GetIsCurveCurrent`. + #[must_use] + pub const fn is_curve_current(&self) -> bool { + self.is_curve_current + } + + /// `GetIgnoreTangency`. + #[must_use] + pub const fn ignore_tangency(&self) -> bool { + self.ignore_tangency + } + + /// `GetDoingCrossHatch`. + #[must_use] + pub const fn doing_cross_hatch(&self) -> bool { + self.doing_cross_hatch + } + + /// `GetDoingFillets`. + #[must_use] + pub const fn doing_fillets(&self) -> bool { + self.doing_fillets + } + + /// `GetOtherClassification`. + #[must_use] + pub const fn other_classification(&self) -> Option { + self.other_classification + } + + /// `GetOKToSetTolerance`. + #[must_use] + pub const fn ok_to_set_tolerance(&self) -> bool { + self.ok_to_set_tolerance + } + + /// `m_bIsCurveOwned` (no upstream getter). + #[must_use] + pub const fn is_curve_owned(&self) -> bool { + self.is_curve_owned + } + + /// `GetTgtLoopsOnly`. + #[must_use] + pub const fn tgt_loops_only(&self) -> bool { + self.tgt_loops_only + } + + /// `SetTgtLoopsOnly`. + pub fn set_tgt_loops_only(&mut self, tgt_loops_only: bool) { + self.tgt_loops_only = tgt_loops_only; + } + + /// `GetTgtLoops`. + #[must_use] + pub fn tgt_loops(&self) -> &[O] { + &self.tgt_loops + } + + /// `AddTgtLoop`. + pub fn add_tgt_loop(&mut self, tgt_loop: O) { + self.tgt_loops.push(tgt_loop); + } + + /// The source zone tolerance (`GetSrcZoneTol3d`; its `SM_ASSERT_TOL` only reports). + #[must_use] + pub const fn src_zone_tol_3d(&self) -> f64 { + self.src_zone_tol_3d + } + + /// Sets the source zone tolerance (`SetSrcZoneTol3d`, reached through + /// `SmTol::SetZoneTol3d`). + pub fn set_src_zone_tol_3d(&mut self, zone_tol_3d: f64) { + self.src_zone_tol_3d = zone_tol_3d; + } + + // ---- curve interval access ------------------------------------------------------- + + /// Interval `index` (`GetAt`, `operator[]`). + /// + /// # Errors + /// + /// [`SolidError::InvalidInput`] for `index >= size()`. + pub fn at(&self, index: usize) -> Result<&CurveInterval> { + self.data.get(index).ok_or_else(bad_index) + } + + /// Interval `index`, mutable (`GetAt`, `operator[]`). + /// + /// # Errors + /// + /// [`SolidError::InvalidInput`] for `index >= size()`. + pub fn at_mut(&mut self, index: usize) -> Result<&mut CurveInterval> { + self.data.get_mut(index).ok_or_else(bad_index) + } + + // ---- sets ------------------------------------------------------------------------ + + /// `SetSurface1`. + pub fn set_surface1(&mut self, surface1: Option) { + self.surface1 = surface1; + } + + /// `SetSurface2`. + pub fn set_surface2(&mut self, surface2: Option) { + self.surface2 = surface2; + } + + /// `SetFace`. + pub fn set_face(&mut self, face: Option) { + self.face = face; + } + + /// `SetIgnoreTangency`. + pub fn set_ignore_tangency(&mut self, ignore_tangency: bool) { + self.ignore_tangency = ignore_tangency; + } + + /// `SetIsCurveOwned`. + pub fn set_is_curve_owned(&mut self, is_curve_owned: bool) { + self.is_curve_owned = is_curve_owned; + } + + /// `SetOKToSetTolerance`. + pub fn set_ok_to_set_tolerance(&mut self, ok_to_set_tolerance: bool) { + self.ok_to_set_tolerance = ok_to_set_tolerance; + } + + /// Sets the fillet data (`SetFilletData`; upstream default `bDoingFillets = TRUE`). + pub fn set_fillet_data(&mut self, other_classification: Option, doing_fillets: bool) { + self.other_classification = other_classification; + self.doing_fillets = doing_fillets; + } + + /// Sets the surface-1 UV curve (`SetUVCurve1`; deleting the old one, + /// `bDeleteOldUVCurve`, has no counterpart for a handle). + pub fn set_uv_curve1(&mut self, uv_curve1: Option) { + self.uv_curve1 = uv_curve1; + } + + /// Sets the surface-2 UV curve (`SetUVCurve2`). + pub fn set_uv_curve2(&mut self, uv_curve2: Option) { + self.uv_curve2 = uv_curve2; + } + + /// Sets the curve (`SetCurve`; upstream default `bIsCurveOwned = FALSE`); the curve + /// becomes current. + pub fn set_curve(&mut self, curve: Option, is_curve_owned: bool) { + // when needed - free old curve (nothing to free for a handle) + + // make assignment + self.curve = curve; + self.is_curve_owned = is_curve_owned; + self.is_curve_current = true; + } + + /// Sets the surf/surf intersection data (`SetIntersectData`; upstream defaults + /// `bIsCurveCurrent = TRUE`, `cpTI = NULL`). + pub fn set_intersect_data( + &mut self, + surface1: Option, + surface2: Option, + uv_curve2: Option, + is_curve_current: bool, + ti: Option, + ) { + self.surface1 = surface1; + self.surface2 = surface2; + self.is_curve_current = is_curve_current; + self.uv_curve2 = uv_curve2; + self.ti = ti; + } + + /// Marks the curve current or not (`SetIsCurveCurrent`); a curve that is no longer + /// current loses its UV curves. + pub fn set_is_curve_current(&mut self, current: bool) { + self.is_curve_current = current; + if !current { + self.uv_curve1 = None; + self.uv_curve2 = None; + } + } + + // ---- type -------------------------------------------------------------------------- + + /// `GetType`. + #[must_use] + pub const fn type_code(&self) -> i64 { + CURVE_CLASSIFICATION_TYPE + } + + /// `IsKindOf`: its own type, then `SmObject`'s. + #[must_use] + pub const fn is_kind_of(&self, t: i64) -> bool { + t == CURVE_CLASSIFICATION_TYPE || object::is_kind_of(t) + } + + // ---- editing ----------------------------------------------------------------------- + + /// Removes interval `index` (`RemoveAt`). An index past the end of a non-empty + /// classification drops the last interval, as upstream. + /// + /// # Errors + /// + /// [`SolidError::InvalidInput`] for an empty classification (upstream's size + /// wraps). + pub fn remove_at(&mut self, index: usize) -> Result<()> { + let size = self.data.len(); + if size == 0 { + return Err(SolidError::invalid_input( + OP_CC, + "remove_at on an empty classification", + )); + } + if index < size { + self.data.remove(index); + } else { + // the shift loop does nothing; m_lSize -= 1 + self.data.truncate(size - 1); + } + Ok(()) + } + + /// Sets the number of intervals (`SetSize`). New intervals are default-constructed + /// when no array is allocated yet, else reset; size 0 frees the array. + /// + /// # Errors + /// + /// [`SolidError::InvalidInput`] for more than [`MAX_INTERVALS`] intervals. + pub fn set_size(&mut self, k: &Kernel, new_size: usize) -> Result<()> { + if new_size > MAX_INTERVALS { + return Err(SolidError::invalid_input(OP_CC, "too many intervals")); + } + + // switch on NewSize + if new_size == 0 { + // shrink to nothing + self.data.clear(); + self.allocated = false; + } else if !self.allocated { + // a new array of default-constructed intervals (no owner) + let fresh = CurveInterval::new(k, None); + self.data.clear(); + self.data.resize(new_size, fresh); + self.allocated = true; + } else if new_size > self.data.len() { + // init any newly used SmCurveIntervals (within or beyond the allocation) + let mut reset = CurveInterval::new(k, None); + reset.reset(k); + self.data.resize(new_size, reset); + } else { + self.data.truncate(new_size); + } + // (MIN_ARRAY_SIZE growth only sizes upstream's allocation) + let _ = MIN_ARRAY_SIZE; + Ok(()) + } + + // ---- queries ------------------------------------------------------------------------ + + /// The location of a point classification with curve parameter `param` + /// (`GetClassifyCrvLoc(const SmPointClassification*, double)`): its surf/surf/surf + /// point when set, else the curve point. + /// + /// # Errors + /// + /// [`SolidError::InvalidInput`] when the curve is needed but there is none or + /// `geometry` cannot resolve it. + pub fn classify_crv_loc( + &self, + geometry: &impl ClassGeometry, + point_class: &PointClassification, + param: f64, + ) -> Result { + // When pointClassification has a stored point + if point_class.sss_point_flag() { + return Ok(point_class.sss_point()); + } + + // compute curve point at pointClassification parameter (status ignored) + let curve = self.curve_geometry(geometry)?; + Ok(ignored(curve.evaluate_point(param))?.unwrap_or(Vec3::UNDEF)) + } + + /// Makes sure every start and end point classification (and every interior one + /// with `set_mids`) has its object parameters set (`SetPointClassParameters`; + /// upstream default `bSetMids = FALSE`): the first start and every end from the + /// curve point at their parameter, every other start copied from the previous end. + /// + /// # Errors + /// + /// The last failure of the curve evaluations and of + /// [`PointClassification::compute_point_parameters`] (processing continues past + /// them, as upstream); [`SolidError::Unported`] at once; an error for a missing + /// curve where one is evaluated. + pub fn set_point_class_parameters( + &mut self, + k: &Kernel, + geometry: &impl ClassGeometry, + set_mids: bool, + ) -> Result<()> { + let num_cis = self.data.len(); + let mut ret: Result<()> = Ok(()); + let mut pt = Vec3::UNDEF; + + // record a failing status, propagate Unported at once + let mut record = |r: Result<()>| -> Result<()> { + match r { + Ok(()) => Ok(()), + Err(e) if e.is_unported() => Err(e), + Err(e) => { + ret = Err(e); + Ok(()) + } + } + }; + + for ii in 0..num_cis { + // Start: + let start_set = self.at(ii)?.start.are_parameters_set(); + if !start_set { + if ii == 0 { + let param = self.at(ii)?.interval.min(); + match self.curve_geometry(geometry)?.evaluate_point(param) { + Ok(p) => pt = p, + Err(e) => record(Err(e))?, + } + let r = self + .at_mut(ii)? + .start + .compute_point_parameters(k, geometry, pt); + record(r)?; + } else { + let prev_end = self.at(ii - 1)?.end; + self.at_mut(ii)?.start = prev_end; + } + } + + // End: + if !self.at(ii)?.end.are_parameters_set() { + let param = self.at(ii)?.interval.max(); + match self.curve_geometry(geometry)?.evaluate_point(param) { + Ok(p) => pt = p, + Err(e) => record(Err(e))?, + } + let r = self + .at_mut(ii)? + .end + .compute_point_parameters(k, geometry, pt); + record(r)?; + } + + // Mid: + if set_mids && !self.at(ii)?.mid.are_parameters_set() { + let param = self.at(ii)?.interval.mid(); + match self.curve_geometry(geometry)?.evaluate_point(param) { + Ok(p) => pt = p, + Err(e) => record(Err(e))?, + } + let r = self + .at_mut(ii)? + .mid + .compute_point_parameters(k, geometry, pt); + record(r)?; + } + } // End for each CurveInterval + + ret + } + + /// Which end of interval `index` to squeeze out (`FindBestSqueezeEnd`): the end + /// classified to the more general object kind (the first interval's start, or the + /// last interval's end, then takes the other end's classification), else the end + /// with the larger gap. + /// + /// # Errors + /// + /// [`SolidError::InvalidInput`] for `index >= size()`. + pub fn find_best_squeeze_end(&mut self, index: usize) -> Result { + let last = self.data.len().saturating_sub(1); + let ivl = self.at_mut(index)?; + let start_class = ivl.start.point_class().code(); + let end_class = ivl.end.point_class().code(); + + // when startPoint is more general than endPoint - squeeze startPoint + if start_class < end_class { + // When squeezing the first interval - set startPointClass = endPointClass + if index == 0 { + ivl.start = ivl.end; + } + return Ok(IntervalPosition::Start); + } + // when endPoint is more general than startPoint - squeeze endPoint + else if start_class > end_class { + // when squeezing the last interval - set endPointClass = startPointClass + if index == last { + ivl.end = ivl.start; + } + return Ok(IntervalPosition::End); + } + + // arrive here when both endPoints classifiy to the same type of topology + + // squeeze the end with the greatest deviation + Ok(if ivl.start.deviation() > ivl.end.deviation() { + IntervalPosition::Start + } else { + IntervalPosition::End + }) + } + + /// Whether `object` is the object of any point classification (`IsReferenced`); + /// false for `None`. + #[must_use] + pub fn is_referenced(&self, object: Option) -> bool { + // return FALSE for NULL objects + let Some(o) = object else { + return false; + }; + + // for every interval + self.data.iter().any(|ivl| { + ivl.start.object() == Some(o) + || ivl.mid.object() == Some(o) + || ivl.end.object() == Some(o) + }) + } + + /// The curve geometry, or an error for no curve. + fn curve_geometry<'g>(&self, geometry: &'g impl ClassGeometry) -> Result<&'g Curve> { + let c = self + .curve + .ok_or(SolidError::invalid_input(OP_CC, "no classification curve"))?; + geometry + .curve(c) + .ok_or(SolidError::invalid_input(OP_CC, "unresolved curve handle")) + } +} + +fn bad_index() -> SolidError { + SolidError::invalid_input(OP_CC, "interval index out of range") +} + +// ---- SmTol overloads ---------------------------------------------------------------------- + +/// The source zone tolerance of a classification, the system zone tolerance for none +/// (`SmTol::GetSrcZoneTol3d(const SmCurveClassification*)`; also +/// `SmTol::GetSrcZoneTol3d(const SmCurveInterval*)` given the interval's owner). +#[must_use] +pub fn src_zone_tol_3d_of( + k: &Kernel, + classification: Option<&CurveClassification>, +) -> f64 { + match classification { + Some(c) => c.src_zone_tol_3d(), + None => zone_tol_3d(k, SmallTopoType::NormalSize), + } +} + +/// The zone tolerance of an interval's interior object, the system zone tolerance for +/// no interval (`SmTol::GetObjZoneTol3d(const SmCurveInterval*)`). +/// +/// # Errors +/// +/// Those of [`PointClassification::obj_zone_tol_3d`]. +pub fn interval_obj_zone_tol_3d( + k: &Kernel, + geometry: &impl ClassGeometry, + interval: Option<&CurveInterval>, +) -> Result { + match interval { + Some(i) => i.mid.obj_zone_tol_3d(k, geometry), + None => Ok(zone_tol_3d(k, SmallTopoType::NormalSize)), + } +} + +/// `SmTol::GetZoneTol3d(const SmSurface*)`: the tolerance of the surface's face, the +/// system zone tolerance for a surface without one. +fn surface_zone_tol_3d(k: &Kernel, surface: &Surface) -> Result { + if surface.owner().is_some() { + // UNPORTED(surface.surface_p1): SmSurface::GetFace + // UNPORTED(topology.face_p2): SmFace::GetTolerance + return Err(SolidError::unported( + "SmSurface::GetFace", + "surface.surface_p1", + )); + } + Ok(zone_tol_3d(k, SmallTopoType::NormalSize)) +} + +// ---- static helpers ----------------------------------------------------------------------- + +/// A copy of `surface` evaluating out of bounds when it is an `SmBSplineSurface` kind +/// (`SmTemporaryChangeValue(GetOutOfBoundsEnabled(), TRUE)`). +fn out_of_bounds(surface: &Surface) -> Cow<'_, Surface> { + match surface.kind() { + SurfaceKind::BSpline(s) => { + let mut s = s.clone(); + *s.out_of_bounds_enabled_mut() = true; + Cow::Owned(Surface::from(s)) + } + SurfaceKind::Plane(p) => { + let mut p = p.copy(); + *p.out_of_bounds_enabled_mut() = true; + Cow::Owned(Surface::from(p)) + } + SurfaceKind::CurveBounded(_) => Cow::Borrowed(surface), + } +} + +/// `SmSurface::Evaluate(uv, 1, 1, TRUE, TRUE, TRUE, vals)` (status ignored upstream): +/// `vals[i][j]`, the upper half; `[1][1]` and the values of a failed evaluation stay +/// undefined. +fn surface_evaluate_11(surface: &Surface, uv: Vec2) -> Result<(bool, [[Vec3; 2]; 2])> { + let mut vals = [[Vec3::UNDEF; 2]; 2]; + let r = surface.evaluate( + uv, + 1, + 1, + EvaluateFlags { + only_upper_half: true, + ..EvaluateFlags::default() + }, + ); + let Some(d) = ignored(r)? else { + return Ok((false, vals)); + }; + let at = |i: usize, j: usize| d.get(i).and_then(|r| r.get(j)).copied(); + for (i, j) in [(0, 0), (0, 1), (1, 0)] { + if let (Some(v), Some(slot)) = (at(i, j), vals.get_mut(i).and_then(|r| r.get_mut(j))) { + *slot = v; + } + } + Ok((true, vals)) +} + +/// `SmCurve::Evaluate(t, 1, TRUE, pv)` (status ignored upstream): the point and +/// tangent, undefined for a failed evaluation. +fn curve_evaluate_1(curve: &Curve, t: f64) -> Result<[Vec3; 2]> { + let mut pv = [Vec3::UNDEF; 2]; + if let Some(d) = ignored(curve.evaluate(t, 1, true, true))? { + for (slot, v) in pv.iter_mut().zip(d) { + *slot = v; + } + } + Ok(pv) +} + +/// The `SmBSplineCurve` part of a curve (`IsKindOf(SmBSplineCurve_TYPE)` and the cast). +fn bspline_part_mut(curve: &mut Curve) -> Option<&mut BSplineCurve> { + match curve.kind_mut() { + CurveKind::BSpline(c) => Some(c), + CurveKind::Ellipse(c) => Some(c.base_mut()), + CurveKind::Hyperbola(c) => Some(c.base_mut()), + CurveKind::Parabola(c) => Some(c.base_mut()), + CurveKind::Line(c) => Some(c.base_mut()), + _ => None, + } +} + +/// The result of [`set_xsect_curve_through_point`]. +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct XSectThroughPoint { + /// `SM_SUCCESS` (`true`) or `SM_ERR` (`false`; "the curve was not set up to be + /// tweaked", not a failure the caller must stop on). + pub success: bool, + /// `bModifiedCurve`: the curves were edited to pass through the point. + pub modified_curve: bool, + /// `dParam` out: the curve parameter of the intersection point. + pub param: f64, + /// `dDeviation`: the distance from the point to the curve (`None` when upstream + /// leaves it unwritten). + pub deviation: Option, + /// `bSet3DPoint`: `point_3d` was set from the first surface. + pub set_3d_point: bool, + /// `*p3DPoint` out: the intersection point (the caller's value unless set). + pub point_3d: Point3, +} + +/// Makes a surf/surf intersection curve (and its UV trim curves) pass through the +/// surf/surf/surf intersection point given by `uv_points` on `surfaces` +/// (`sm_SetXSectCurveThroughPoint`): the point is the first surface's point there; +/// it is projected onto the curve near `param`, and when that is farther than the +/// intersection tolerance and the surfaces' intersection tangent is defined and nearly +/// parallel to the curve, a B-spline curve gets a through point +/// ([`BSplineCurve::set_intersection_curve_through_point`]). `point_3d` is the caller's +/// value of the output point. +/// +/// # Errors +/// +/// [`SolidError::InvalidInput`] for fewer than two UV points with two surfaces +/// (upstream reads past them); [`SolidError::Unported`] for a surface owned by a face +/// (its zone tolerance). +pub fn set_xsect_curve_through_point( + k: &Kernel, + src_curve: &mut Curve, + curve_zone_tol_3d: f64, + uv_curves: &mut [BSplineCurve], + surfaces: &[&Surface], + uv_points: &[Vec2], + param: f64, + point_3d: Point3, +) -> Result { + // init outputs - curve not modified + let mut out = XSectThroughPoint { + success: false, + modified_curve: false, + param, + deviation: None, + set_3d_point: false, + point_3d, + }; + + // check state + let ok_inputs = uv_curves.len() <= surfaces.len() + && surfaces.len() >= 2 + && surfaces.len() == uv_points.len(); + + // 1st the surface evaluations and setting p3DPoint + let (Some(s0), Some(s1)) = (surfaces.first(), surfaces.get(1)) else { + return Ok(out); + }; + let (Some(&uv0), Some(&uv1)) = (uv_points.first(), uv_points.get(1)) else { + return Err(SolidError::invalid_input( + OP_XSECT, + "fewer UV points than surfaces", + )); + }; + + // temporarily allow out of bound evaluations for surface[0], surface[1] + let (orig0, orig1) = (*s0, *s1); + let s0 = out_of_bounds(orig0); + let s1 = out_of_bounds(orig1); + + // evaluate each surface at the given intersection parameter points + let (ok0, mut surf_val0) = surface_evaluate_11(&s0, uv0)?; + let (_, mut surf_val1) = surface_evaluate_11(&s1, uv1)?; + + // tolerances + let xsect_obj_zone_tol_3d = max2( + surface_zone_tol_3d(k, orig0)?, + surface_zone_tol_3d(k, orig1)?, + ); + let xsect_tol_3d = xsect_tol_3d_from_zones(k, curve_zone_tol_3d, xsect_obj_zone_tol_3d); + // (sXSectTol3dSq only feeds a warning) + let ang_bound_rad = 6.0 * ang_tol_rad(); + let scaled_zero = eff_zero(); + + // let surf/surf/surf xsect point = pSurface[0] evaluation + if ok0 { + out.set_3d_point = true; + out.point_3d = surf_val0[0][0]; + } + + // Abort when inputs are confused (after setting output variables). + if !ok_inputs { + return Ok(out); + } + + // project p3DPoint onto pSrcCurve3d to get its param value + let natural = src_curve.natural_interval(); + out.param = natural.clamp_value(out.param); + let projection = ignored(src_curve.local_point_solve::( + &natural, + SolverOperation::Minimize, + out.point_3d, + &PointSolveOptions::default(), + out.param, + ))?; + + // when the point fails to project to the curve + let Some((true, projection)) = projection else { + return Ok(out); + }; + + // grab the projected point's curve param and curve/point deviation values + out.param = projection.start.param(0)?; + let deviation = projection.start.solution_value; + out.deviation = Some(deviation); + + // Note: sXSectTol3d = XSectTol3d(CurveSrcZoneTol3d,Surface) + if deviation < xsect_tol_3d { + out.success = true; + return Ok(out); + } + + // evaluate the curve at the param value for pos and tangent information + let src_crv_pt = curve_evaluate_1(src_curve, out.param)?; + + surf_val0[1][0] = surf_val0[1][0].unitize_or_z(); + surf_val0[0][1] = surf_val0[0][1].unitize_or_z(); + surf_val1[1][0] = surf_val1[1][0].unitize_or_z(); + surf_val1[0][1] = surf_val1[0][1].unitize_or_z(); + let norm1 = surf_val0[1][0].cross(surf_val0[0][1]); + let norm2 = surf_val1[1][0].cross(surf_val1[0][1]); + let mut xsect_tangent = norm1.cross(norm2); + + // skip curve modification when the throughPoint is close enough to a tangent + // surf/surf intersection point that the tangent vector can't easily be computed + if xsect_tangent.length_squared() <= 100.0 * scaled_zero { + out.success = true; + return Ok(out); + } + + // ensure Tangent direction is same as curve's direction + if xsect_tangent.dot(src_crv_pt[1]) < 0.0 { + xsect_tangent = -xsect_tangent; + } + + // Surf/Surf XSectLine Tang direction is not nearly parallel to pSrcCurve3d's tangent + let tang_angle = xsect_tangent.angle_between(src_crv_pt[1]).unwrap_or(0.0); + if tang_angle > ang_bound_rad { + out.success = true; + return Ok(out); + } + + // unitize the tangent vector + xsect_tangent = xsect_tangent.unitize_or_z(); + + // insert throughPoint=p3DPoint (tangent=sXSectTangent3d) at dParam into pSrcCurve3d + if let Some(bs) = bspline_part_mut(src_curve) { + let uv_opts: Vec> = uv_points.iter().copied().map(Some).collect(); + // the surfaces as evaluated here (copies; evaluation does not use the owner) + let evaluators: Vec = surfaces + .iter() + .enumerate() + .map(|(i, s)| match i { + 0 => s0.as_ref().clone(), + 1 => s1.as_ref().clone(), + _ => (*s).clone(), + }) + .collect(); + let mut new_param = out.param; + let r = bs.set_intersection_curve_through_point( + &mut new_param, + out.point_3d, + Some(xsect_tangent), + uv_curves, + &evaluators, + &uv_opts, + 0.001, + ); + out.param = new_param; + // When Successful - reset dDeviation + match ignored(r)? { + Some(modified) => { + out.modified_curve = modified; + out.deviation = Some(0.0); + } + None => out.modified_curve = false, + } + } + + // all done - succesfully + out.success = true; + Ok(out) +} + +/// `sm_SetXSectEdgeThroughPoint`: [`set_xsect_curve_through_point`] for an edge and all +/// of its UV trim curves. +/// +/// # Errors +/// +/// [`SolidError::Unported`]: the edge's curve, tolerance and faces come first +/// (`SmEdge::GetCurve`, unit `topology.edge`). +pub fn set_xsect_edge_through_point( + edge: O, + through_point: Point3, + surfaces: &[&Surface], + uv_points: &[Vec2], + param: f64, +) -> Result { + let _ = (edge, through_point, surfaces, uv_points, param); + // UNPORTED(topology.edge): SmEdge::GetCurve + Err(SolidError::unported("SmEdge::GetCurve", "topology.edge")) +} + +/// The result of [`get_cci_surface_gaps`]. +#[derive(Debug, Clone, PartialEq)] +pub struct CciSurfaceGaps { + /// `SM_SUCCESS` (`true`), or `SM_ERR` when a point does not drop to a surface (the + /// outputs are then partial). + pub success: bool, + /// `dCurveEdgeGap`: the curve point / edge point distance. + pub curve_edge_gap: f64, + /// `dCurveSurfaceGap`: the largest curve point / curve surface gap. + pub curve_surface_gap: f64, + /// `dEdgeSurfaceGap`: the largest edge point / edge surface gap. + pub edge_surface_gap: f64, + /// `rUVPoints`: the UV point of each drop. + pub uv_points: Vec, +} + +/// The gaps between a classification-curve / edge-curve intersection and its surfaces +/// (`sm_GetCCISurfaceGaps`): the first two surfaces are the curve's, the rest the +/// edge's; a surface with a UV trim curve is dropped onto locally from the trim curve +/// point at the solution parameter, the others globally. +/// +/// # Errors +/// +/// [`SolidError::InvalidInput`] for fewer UV curve entries than surfaces; +/// [`SolidError::Unported`] for any surface: the surface point solves (units +/// `surface.surface_p5`, `surface.surface_p4`) and the surface cache and size +/// (`surface.surface_p1`). +pub fn get_cci_surface_gaps( + class_curve_point: Point3, + edge_curve_point: Point3, + solution: &Solution, + surfaces: &[&Surface], + uv_curves: &[Option<&Curve>], + edge_surface_count: usize, +) -> Result { + let _ = edge_surface_count; // NotUsed + // init output + let mut out = CciSurfaceGaps { + success: false, + curve_edge_gap: class_curve_point.distance(edge_curve_point), + curve_surface_gap: 0.0, + edge_surface_gap: 0.0, + uv_points: Vec::new(), + }; + + // for every surface + for (ii, surface) in surfaces.iter().enumerate() { + // get target Point/Surface combination + let uv_curve = *uv_curves.get(ii).ok_or(SolidError::invalid_input( + OP_GAPS, + "fewer UV curves than surfaces", + ))?; + let point = if ii < 2 { + class_curve_point + } else { + edge_curve_point + }; + + // When posible use cheap localSolve else use expensive Global Solve + let sol: Option<(f64, Point2)> = if let Some(uv_curve) = uv_curve { + // get UVGuessPoint + let t_param = if ii < 2 { + solution.start.param(0)? + } else { + solution.start.param(1)? + }; + let guess = ignored(uv_curve.evaluate_point(t_param))?.unwrap_or(Vec3::UNDEF); + surface_local_point_solve(surface, point, Point2::new(guess.x, guess.y))? + } else { + // get classCurvePoint/surf dist without checking trim boundaries + let _cache = surface_cache(surface)?; + let _size = surface_approximate_size(surface)?; + match surface_global_point_solve(surface, point)? { + Some(s) => Some(s), + None => return Ok(out), + } + }; + + // accumulate UVPoints and distances + let Some((gap, uv)) = sol else { + // Point failed to drop to connected surface + return Ok(out); + }; + out.uv_points.push(uv); + + // save max CurvePoint/Surface and EdgePoint/Surface gaps + if ii < 2 { + if gap > out.curve_surface_gap { + out.curve_surface_gap = gap; + } + } else if gap > out.edge_surface_gap { + out.edge_surface_gap = gap; + } + } + + // all done + out.success = true; + Ok(out) +} + +/// The surfaces, edge uses and UV trim curves around a classification-curve / edge +/// intersection ([`get_cci_geometry`]). +#[derive(Debug, Clone, PartialEq)] +pub struct CciGeometry { + /// `pEMate`: the edge's Boolean mate. + pub emate: Option, + /// `rSurfaces`: curve surfaces, edge surfaces, the common surface again, mate + /// surfaces. + pub surfaces: Vec, + /// `rEdgeuses`: the edge use of each surface (none for the curve's). + pub edgeuses: Vec>, + /// `rUVCurves`: the UV trim curve of each surface. + pub uv_curves: Vec>, + /// `lEdgeSurfaceCount`. + pub edge_surface_count: usize, +} + +/// `sm_GetCCIGeometry`: the surfaces, edge uses and UV trim curves at a +/// classification-curve / `edge` intersection. +/// +/// # Errors +/// +/// [`SolidError::Unported`]: the faces of the edge (`SmEdge::GetFaces`, unit +/// `topology.edge`) follow the classification's surfaces. +pub fn get_cci_geometry( + classification: &CurveClassification, + edge: O, +) -> Result> { + let _ = edge; + let mut out = CciGeometry { + emate: None, + surfaces: Vec::new(), + edgeuses: Vec::new(), + uv_curves: Vec::new(), + edge_surface_count: 0, + }; + + // gather the ClassCurve Surfaces and UVTrimCurves + if let Some(s) = classification.surface1() { + out.surfaces.push(s); + out.edgeuses.push(None); + out.uv_curves.push(classification.uv_curve1()); + } + if let Some(s) = classification.surface2() { + out.surfaces.push(s); + out.edgeuses.push(None); + out.uv_curves.push(classification.uv_curve2()); + } + + // get Faces connected to Edge and Edge->BooleanMate + // UNPORTED(topology.edge): SmEdge::GetFaces + Err(SolidError::unported("SmEdge::GetFaces", "topology.edge")) +} + +/// The inputs of [`apply_point_solution`] other than the curves and the solution. +#[derive(Debug, Clone, Copy)] +pub struct ApplyPointSolutionInput<'a, O> { + /// `SmTol::GetSrcZoneTol3d(pCurveClassification)` (see [`src_zone_tol_3d_of`]). + pub src_zone_tol_3d: f64, + /// `pEdge`: the edge, `None` to leave the edge curve alone. + pub edge: Option, + /// `pEMate`: the edge's Boolean mate. + pub emate: Option, + /// `pClassCurveSurface1`, `pClassCurveUVPoint1`. + pub class_curve_surface1: Option<(&'a Surface, Point2)>, + /// `pClassCurveSurface2`, `pClassCurveUVPoint2`. + pub class_curve_surface2: Option<(&'a Surface, Point2)>, + /// `pEdgeCurveSurface1`, `pEdgeCurveUVPoint1`. + pub edge_curve_surface1: Option<(&'a Surface, Point2)>, + /// `pEdgeCurveSurface2`, `pEdgeCurveUVPoint2`. + pub edge_curve_surface2: Option<(&'a Surface, Point2)>, +} + +/// The result of [`apply_point_solution`]. +#[derive(Debug, Clone, Copy, PartialEq)] +#[allow(clippy::struct_excessive_bools)] // upstream's SmBoolean out-params +pub struct ApplyPointSolution { + /// `SM_SUCCESS` (`true`) or `SM_ERR` (no surface point could be evaluated). + pub success: bool, + /// `rSSSPoint` out: the surf/surf/surf point (the caller's value unless set). + pub sss_point: Point3, + /// `bSSSPointFlag`: use the surf/surf/surf point. + pub sss_point_flag: bool, + /// `bModifiedCurve`: the classification curve was modified. + pub modified_curve: bool, + /// `bModifiedEdgeCurve`. + pub modified_edge_curve: bool, + /// `bModifiedMateCurve`. + pub modified_mate_curve: bool, + /// `dDeviation`: the largest curve / surf/surf/surf point distance. + pub deviation: f64, +} + +/// Moves a classification-curve / edge intersection onto the surf/surf/surf point of +/// its surfaces (`sm_ApplyPointSolution`): the point is the first available surface +/// point; the classification curve (when given; it needs both its surfaces) is made to +/// pass through it ([`set_xsect_curve_through_point`]) and the solution's first +/// parameter moves to it. `sss_point` is the caller's value of the output point. +/// +/// # Errors +/// +/// [`SolidError::Unported`] with an edge (`SmEdge::GetCurve`, unit `topology.edge`); +/// [`SolidError::InvalidInput`] for a classification curve without both of its +/// surfaces (upstream dereferences the missing one); those of +/// [`set_xsect_curve_through_point`]. +pub fn apply_point_solution( + k: &Kernel, + src_curve: Option<&mut Curve>, + input: &ApplyPointSolutionInput<'_, O>, + solution: &mut Solution, + sss_point: Point3, +) -> Result { + // init output + let mut out = ApplyPointSolution { + success: false, + sss_point, + sss_point_flag: false, + modified_curve: false, + modified_edge_curve: false, + modified_mate_curve: false, + deviation: 0.0, + }; + + // locals + if input.edge.is_some() { + // UNPORTED(topology.edge): SmEdge::GetCurve + return Err(SolidError::unported("SmEdge::GetCurve", "topology.edge")); + } + let src_zone_tol_3d = input.src_zone_tol_3d; + + // let rSSSPoint = pClassCurveSurface1 evaluation at the intersection point + let has_src = src_curve.is_some(); + let eval = if let (true, Some((s, uv))) = (has_src, input.class_curve_surface1) { + Some(s.evaluate_point(uv)) + } else if let (true, Some((s, uv))) = (has_src, input.class_curve_surface2) { + Some(s.evaluate_point(uv)) + } else if let (true, Some((s, uv))) = ( + input.edge.is_some() || input.emate.is_some(), + input.edge_curve_surface1, + ) { + Some(s.evaluate_point(uv)) + } else { + None + }; + match eval { + None => return Ok(out), + Some(Ok(p)) => out.sss_point = p, + Some(Err(e)) if e.is_unported() => return Err(e), + Some(Err(SolidError::Upstream { code, .. })) if code == SM_ERR => return Ok(out), + Some(Err(_)) => {} + } + + // set closest point on curve to surf/surf/surf intersection point + if let Some(src_curve) = src_curve { + // set up sm_SetXSectCurveThroughPoint arguments + let param = solution.start.param(0)?; // init guess = curve/curve xsect solution + let (Some((s1, uv1)), Some((s2, uv2))) = + (input.class_curve_surface1, input.class_curve_surface2) + else { + return Err(SolidError::invalid_input( + OP_APPLY, + "classification curve without both surfaces", + )); + }; + + // ensure surf/surf/surf solution is through point on classCurve + let r = set_xsect_curve_through_point( + k, + src_curve, + src_zone_tol_3d, + &mut [], + &[s1, s2], + &[uv1, uv2], + param, + out.sss_point, + )?; + out.modified_curve = r.modified_curve; + out.sss_point = r.point_3d; + + // inform the public - remove obsolete UVTrimCurves + if out.modified_curve { + out.sss_point_flag = true; + } + + // move pSrcCurve3d parameter in rSolution to surf/surf/surf xsect point + *solution.start.param_mut(0)? = r.param; + + // increase deviation to include distance to this curve from rSSSPoint + out.deviation = max2(out.deviation, r.deviation.unwrap_or(0.0)); + } + + // (pEdge: handled above) + + // all done + out.success = true; + Ok(out) +} + +/// Makes every interval whose interior classifies to an edge and whose start or end +/// classifies to a vertex use a vertex of that edge +/// (`sm_MakeConsistentClassifications`). +/// +/// # Errors +/// +/// [`SolidError::Unported`] for such an interval: the edge's vertices +/// (`SmEdge::GetVertex`, unit `topology.edge`). +pub fn make_consistent_classifications( + classification: &mut CurveClassification, +) -> Result<()> { + // for every interval + for ivl in classification.intervals() { + // If interval classifies to an Edge + if ivl.mid.point_class() == PointClassType::Edge + && (ivl.start.point_class() == PointClassType::Vertex + || ivl.end.point_class() == PointClassType::Vertex) + { + // UNPORTED(topology.edge): SmEdge::GetVertex + return Err(SolidError::unported("SmEdge::GetVertex", "topology.edge")); + } + } + Ok(()) +} + +/// The angle in `[0, PI/2]` between the tangents of two curves at their parameters +/// (`sm_GetCurveCurveAngle`); `0` without either curve or when either tangent is +/// shorter than the scaled zero of the first point. `deviation` is only used by debug +/// code upstream. +/// +/// # Errors +/// +/// [`SolidError::Unported`] from the evaluations. +pub fn get_curve_curve_angle( + this_curve: Option<&Curve>, + this_param: f64, + other_curve: Option<&Curve>, + other_param: f64, + deviation: f64, +) -> Result { + let _ = deviation; + // no work - no curves + let (Some(this_curve), Some(other_curve)) = (this_curve, other_curve) else { + return Ok(0.0); + }; + + // Evaluate the Curve locations + let this_pv = curve_evaluate_1(this_curve, this_param)?; + let other_pv = curve_evaluate_1(other_curve, other_param)?; + + // check for zero-length tangents. + let scaled_zero = this_pv[0].scaled_zero(); + if this_pv[1].length() < scaled_zero { + return Ok(0.0); + } + if other_pv[1].length() < scaled_zero { + return Ok(0.0); + } + + // get the angle between the tangents + let mut angle = this_pv[1].angle_between(other_pv[1]).unwrap_or(0.0); + + // return angle from 0 to PI/2 + if angle < 0.0 { + angle = -angle; + } + if angle > PI / 2.0 { + angle = (PI - angle).abs(); + } + + // all done + Ok(angle) +} + +/// Tightens or culls the UV curve / trim curve intersections `solutions` with the +/// equivalent 3D intersections (`sm_CullOrRefineCCIIn3d`): a point solution takes the +/// 3D curve/curve intersection of the UV curve on `surface` with `curve_2` when that is +/// tighter, and is removed when there is none within `xsect_tol_3d`; a range solution +/// is removed when the curves are farther apart than `xsect_tol_3d`. As upstream, the +/// solution after a removed one is skipped. +/// +/// # Errors +/// +/// Those of the 3D intersection and distance computations; +/// [`SolidError::Unported`] for a surface that is not a B-spline surface (unit +/// `curve.crv_on_surf` holds only B-spline surfaces). +pub fn cull_or_refine_cci_in_3d( + k: &Kernel, + surface: &Surface, + uv_curve_1: &Curve, + interval_1: &Extent1d, + curve_2: &Curve, + interval_2: &Extent1d, + xsect_tol_3d: f64, + solutions: &mut SolutionArray, +) -> Result<()> { + // project UVCurve into 3d space + let SurfaceKind::BSpline(bs) = surface.kind() else { + // UNPORTED(curve.crv_on_surf): SmCrvOnSurf over a surface that is not an SmBSplineSurface + return Err(SolidError::unported( + "SmCrvOnSurf::SmCrvOnSurf", + "curve.crv_on_surf", + )); + }; + let curve_1 = Curve::from(CrvOnSurf::new(k, uv_curve_1.clone(), bs.clone(), None, 0)?); + let _ = OP_CULL; + + // for every solution + let mut i = 0; + while i < solutions.len() { + let Some(sol) = solutions.get(i).copied() else { + break; + }; + + // when the solution is a point (not an interval) + if sol.solution_type == SolutionType::SingleValue { + // get the 3dCurve/3Dcurve intersection + let found = local_curve_intersect( + &curve_1, + interval_1, + curve_2, + interval_2, + xsect_tol_3d, + sol.start.param(0)?, + sol.start.param(1)?, + )?; + + // when 3dCurve/3dCurve intersection is tighter than 2dCurve/2dCurve intersection + if let Some(x) = found { + if x.deviation < sol.start.solution_value { + if let Some(s) = solutions.get_mut(i) { + s.start.solution_value = x.deviation; + *s.start.param_mut(0)? = x.my_param; + *s.start.param_mut(1)? = x.other_param; + } + } + } + + // when 3dCurve/3dCurve intersection is not good enough + if found.is_none_or(|x| x.deviation > xsect_tol_3d) { + solutions.remove_at(i, 1); + } + } + // when the solution is a coincident curve pair + else if sol.solution_type == SolutionType::RangeOfValues { + // get quick max edge/UVTrimCurve 3d distance estimate at 8 sample points + let sol_interval_1 = Extent1d::from_min_max(sol.start.param(0)?, sol.end.param(0)?); + let mut max_dist = curve_1 + .curve_max_distance_between( + k, + &sol_interval_1, + curve_2, + sol.start.param(1)?, + sol.end.param(1)?, + 8, + None, + )? + .distance; + + // when the quick estimate is good but not very tight + if max_dist < xsect_tol_3d && max_dist > xsect_tol_3d / 100.00 { + // get max dist value possible between curves by setting samplePointCount = 0 + max_dist = curve_1 + .curve_max_distance_between( + k, + &sol_interval_1, + curve_2, + sol.start.param(1)?, + sol.end.param(1)?, + 0, + None, + )? + .distance; + } + + // when max edge/UVTrimCurve 3d distance is not good enough + if max_dist > xsect_tol_3d { + solutions.remove_at(i, 1); + } + } + i += 1; + } + + // all done + Ok(()) +} + +/// Classifies a 3D point expected on `face` to it (`sm_ComputeFacePointClass`). +/// +/// # Errors +/// +/// [`SolidError::Unported`]: the face's surface (`SmFace::GetSurface`, unit +/// `topology.face_p2`) comes first. +pub fn compute_face_point_class( + point: Point3, + src_zone_tol_3d: f64, + face: O, + point_class: &mut PointClassification, +) -> Result<()> { + let _ = (point, src_zone_tol_3d, face, point_class); + // UNPORTED(topology.face_p2): SmFace::GetSurface + Err(SolidError::unported( + "SmFace::GetSurface", + "topology.face_p2", + )) +} + +/// The tolerance within which two points of a classification curve coincide, in the +/// space the classification works in (`sm_GetXSectTol2dOr3d_ForClassifyPair`): for a +/// 3D curve the intersection tolerance of the two zone tolerances; for a UV curve on +/// `surface_1` the two tolerances mapped to UV space; for a UV curve without surface +/// `SM_EFF_ZERO_PARAM`. +/// +/// # Errors +/// +/// [`SolidError::Unported`] for a UV curve on a surface (`SmTol::MapTo2d` needs +/// `SmSurface::Evaluate1stDerivatives`, unit `surface.surface_p1`). +pub fn xsect_tol_2d_or_3d_for_classify_pair( + k: &Kernel, + src_curve: &Curve, + surface_1: Option<&Surface>, + src_curve_or_obj1_param: f64, + src_curve_or_obj1_zone_tol_3d: f64, + obj2_src_curve_param: f64, + obj2_zone_tol_3d: f64, +) -> Result { + let _ = OP_PAIR; + // tolerance cases: + if src_curve.dim() == 3 { + // Curve3d + Ok(xsect_tol_3d_from_zones( + k, + src_curve_or_obj1_zone_tol_3d, + obj2_zone_tol_3d, + )) + } else if surface_1.is_some() { + // Curve2d with m_cpSurface1 + let _ = (src_curve_or_obj1_param, obj2_src_curve_param); + // UNPORTED(surface.surface_p1): SmTol::MapTo2d (SmSurface::Evaluate1stDerivatives) + Err(SolidError::unported( + "SmSurface::Evaluate1stDerivatives", + "surface.surface_p1", + )) + } else { + // Curve2d No m_cpSurface1 + Ok(xsect_tol3d(k, eff_zero_param())) + } +} + +/// The dimension of a topology object (`sm_ObjectDimension`): face 2, edge 1, vertex +/// 0, anything else (or none) 4. +#[must_use] +pub fn object_dimension(object: Option) -> i32 { + match object.map(|o| o.class_kind()) { + Some(ClassObjectKind::Face) => 2, + Some(ClassObjectKind::Edge) => 1, + Some(ClassObjectKind::Vertex) => 0, + _ => 4, + } +} + +// ---- callees in units not ported yet --------------------------------------------------- + +/// `SmSurface::LocalPointSolve(domain, SM_SO_MINIMIZE, point, guess, found, sol)`: +/// the gap and UV point of the answer, if found. +fn surface_local_point_solve( + _surface: &Surface, + _point: Point3, + _guess: Point2, +) -> Result> { + // UNPORTED(surface.surface_p5): SmSurface::LocalPointSolve + Err(SolidError::unported( + "SmSurface::LocalPointSolve", + "surface.surface_p5", + )) +} + +/// `SmSurface::ApproximateSize`. +fn surface_approximate_size(_surface: &Surface) -> Result { + // UNPORTED(surface.surface_p1): SmSurface::ApproximateSize + Err(SolidError::unported( + "SmSurface::ApproximateSize", + "surface.surface_p1", + )) +} + +/// `SmSurface::GlobalPointSolve(domain, SM_SO_MINIMIZE, point, tol, &maxDrop, +/// SM_SR_SINGLE, sols)`: the gap and UV point of the first solution, if any. +fn surface_global_point_solve(_surface: &Surface, _point: Point3) -> Result> { + // UNPORTED(surface.surface_p4): SmSurface::GlobalPointSolve + Err(SolidError::unported( + "SmSurface::GlobalPointSolve", + "surface.surface_p4", + )) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[derive(Debug, Clone, Copy, PartialEq)] + struct H(usize, ClassObjectKind); + + impl ClassObject for H { + fn class_kind(&self) -> ClassObjectKind { + self.1 + } + } + + fn touch(dir: CrvDirOnFaceType, to: usize) -> TouchData { + TouchData { + connected_to: Some(H(to, ClassObjectKind::Loop)), + loop_dir: dir, + loop_index: 0, + param: 0.0, + pt_classify_index: 0, + pt_classify: None, + } + } + + #[test] + fn winding_count() { + use CrvDirOnFaceType as D; + let l = [ + touch(D::In, 0), + touch(D::Out, 0), + touch(D::Out, 1), + touch(D::In, 1), + touch(D::In, 0), + touch(D::Out, 0), + ]; + assert_eq!(get_winding_count(&l).ok(), Some((1, OrientType::Opposite))); + assert!(get_winding_count(&l[..3]).is_err()); + assert_eq!( + get_connected_touches(Some(H(1, ClassObjectKind::Loop)), &l).len(), + 2 + ); + } + + #[test] + fn set_size_and_remove() { + let k = Kernel::default(); + let mut c: CurveClassification = CurveClassification::new(&k); + assert_eq!(c.interval().min(), 0.0); + assert!(c.remove_at(0).is_err()); + c.set_size(&k, 3).ok(); + assert_eq!(c.size(), 3); + // default constructed: system zone tolerance + assert_eq!( + c.at(0).map(|i| i.start.src_zone_tol_3d()).ok(), + Some(1.0e-5) + ); + c.remove_at(7).ok(); + assert_eq!(c.size(), 2); + c.set_size(&k, 4).ok(); + // reset: uninit tolerance + assert_eq!( + c.at(3).map(|i| i.start.src_zone_tol_3d()).ok(), + Some(UNINIT_TOL) + ); + assert!(c.sub_interval(4).is_err()); + assert!(c.set_size(&k, MAX_INTERVALS + 1).is_err()); + c.set_size(&k, 0).ok(); + c.set_size(&k, 1).ok(); + assert_eq!( + c.at(0).map(|i| i.start.src_zone_tol_3d()).ok(), + Some(1.0e-5) + ); + } + + #[test] + fn squeeze_end_and_references() { + let k = Kernel::default(); + let mut c: CurveClassification = CurveClassification::new(&k); + c.set_size(&k, 2).ok(); + let v = H(5, ClassObjectKind::Vertex); + if let Ok(i) = c.at_mut(0) { + i.start.set_class_object(PointClassType::Face, None); + i.end.set_class_object(PointClassType::Vertex, Some(v)); + } + assert_eq!( + c.find_best_squeeze_end(0).ok(), + Some(IntervalPosition::Start) + ); + assert_eq!( + c.at(0).map(|i| i.start.point_class()).ok(), + Some(PointClassType::Vertex) + ); + assert!(c.is_referenced(Some(v))); + assert!(!c.is_referenced(None)); + assert_eq!(object_dimension(Some(v)), 0); + assert_eq!(object_dimension::(None), 4); + } +} diff --git a/crates/solidcore/src/surface/plane/p1.rs b/crates/solidcore/src/surface/plane/p1.rs index 23d4afa64b..b0e64de6f4 100644 --- a/crates/solidcore/src/surface/plane/p1.rs +++ b/crates/solidcore/src/surface/plane/p1.rs @@ -366,6 +366,12 @@ impl Plane { self.anal_uv_domain } + /// The out-of-bounds evaluation flag of the `SmBSplineSurface` part, mutable + /// (`SmBSplineSurface::GetOutOfBoundsEnabled`, inherited). + pub fn out_of_bounds_enabled_mut(&mut self) -> &mut bool { + self.base.out_of_bounds_enabled_mut() + } + /// The natural (NURB) domain (`SmBSplineSurface::GetNaturalUVDomain`, inherited): /// the knot range of the NURB, made on a copy when missing; `(0, 0, 0, 0)` when /// none can be made. diff --git a/crates/solidcore/src/surface/surface/p2.rs b/crates/solidcore/src/surface/surface/p2.rs index 8861311960..16bc7959ab 100644 --- a/crates/solidcore/src/surface/surface/p2.rs +++ b/crates/solidcore/src/surface/surface/p2.rs @@ -947,12 +947,12 @@ impl Surface { /// [`SolidError::Unported`]: `SmCurveClassification` (units /// `intersect.curve_class_*`). pub fn curve_on_classify(&self, _classification: &mut C) -> Result<()> { - // UNPORTED(intersect.curve_class_p1): SmCurveClassification::ReSet + // UNPORTED(intersect.curve_class_p2): SmCurveClassification::ReSet // (then SetFace, SetSurface1, SetSurface2, IntersectNaturalBounds // (intersect.curve_class_p8) and the end interval classifications) Err(SolidError::unported( "SmCurveClassification::ReSet", - "intersect.curve_class_p1", + "intersect.curve_class_p2", )) } diff --git a/fixtures/intersect.curve_class_p1/usage.json b/fixtures/intersect.curve_class_p1/usage.json new file mode 100644 index 0000000000..5c47ac1296 --- /dev/null +++ b/fixtures/intersect.curve_class_p1/usage.json @@ -0,0 +1,38 @@ +{ "cases": [ + { "name": "apply_point_solution_two_planes", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:1655 (sm_RefineCCIToSurfaces calls sm_ApplyPointSolution with the classification's surfaces and the curve/edge solution)", + "inputs": { + "objects": [ + { "curve": { "bspline": { "dim": 3, "p": 3, + "cpts": [[0.0, 0.0, 0.0, -1.7976931348623157e308], [1.0, 0.002, -0.001, -1.7976931348623157e308], [2.0, -0.001, 0.002, -1.7976931348623157e308], [3.0, 0.0, 0.0, -1.7976931348623157e308]], + "u": [0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0] } } }, + { "plane": { "o": [0.0, 0.0, 0.0], "n": [0.0, 0.0, 1.0] } }, + { "plane": { "o": [0.0, 0.0, 0.0], "n": [0.0, 1.0, 0.0] } } + ], + "ops": [ + { "op": "set_size", "t": 0, "n": 1 }, + { "op": "set_curve", "t": 0, "obj": 0, "owned": false }, + { "op": "set_src_tol", "t": 0, "tol": 1e-5 }, + { "op": "set_intersect_data", "t": 0, "s1": 1, "s2": 2, "uv2": null, "current": true, "ti": null }, + { "op": "ivl_set", "t": 0, "j": 0, "a": 0.0, "b": 1.0 }, + { "op": "apply", "t": 0, "use_cc": true, "edge": null, "emate": null, + "srf": [1, 2, null, null], "uv": [[1.5, 0.0], [0.0, 1.5], [0.0, 0.0], [0.0, 0.0]], + "sol": [0.5, 0.25, 1e-4], "sss": [0.0, 0.0, 0.0] }, + { "op": "classify_crv_loc", "t": 0, "j": 0, "w": 0, "prm": 0.5 }, + { "op": "set_pc_params", "t": 0, "mids": true } + ] } }, + { "name": "xsect_curve_through_point_tangent_planes", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:618 (sm_SetXSectCurveThroughPoint skips tangent surf/surf points)", + "inputs": { + "objects": [ + { "curve": { "bspline": { "dim": 3, "p": 3, + "cpts": [[0.0, 0.0, 0.01, -1.7976931348623157e308], [1.0, 0.0, 0.01, -1.7976931348623157e308], [2.0, 0.0, 0.01, -1.7976931348623157e308], [3.0, 0.0, 0.01, -1.7976931348623157e308]], + "u": [0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0] } } }, + { "plane": { "o": [0.0, 0.0, 0.0], "n": [0.0, 0.0, 1.0] } }, + { "plane": { "o": [0.0, 0.0, 0.0], "n": [0.0, 0.0, 1.0] } } + ], + "ops": [ + { "op": "xsect_curve", "t": 0, "c": 0, "tol": 1e-5, "uvc": [], "srf": [1, 2], + "uv": [[1.5, 0.0], [1.5, 0.0]], "prm": 0.5, "dev": -7.0, "p": [0.0, 0.0, 0.0] } + ] } } +] } diff --git a/harness/cpp/shim/intersect_curve_class_p1.cpp b/harness/cpp/shim/intersect_curve_class_p1.cpp new file mode 100644 index 0000000000..7f3e4ec9d5 --- /dev/null +++ b/harness/cpp/shim/intersect_curve_class_p1.cpp @@ -0,0 +1,2866 @@ +// SPDX-License-Identifier: Apache-2.0 +// difftest shim for unit `intersect.curve_class_p1`: SmCurveInterval, the part-1 members of +// SmCurveClassification, SmTouchData::GetConnectedTouches / GetWindingCount, the +// SmCurveClassification / SmCurveInterval overloads of SmTol, and the static helpers of +// source/SMLib/src/SmCurveClass.cpp (sm_SetXSectCurveThroughPoint, ...). +// +// Static functions of SmCurveClass.cpp cannot be linked against, so they are VERBATIM copies of +// upstream SmCurveClass.cpp (commit c9c5979) inside the namespace sc_cc_p1 (line ranges noted at +// each block; generated, do not edit by hand). sm_GetXSectTol2dOr3d_ForClassifyPair is global +// and called in the library. Private members (SmCurveInterval::SetIntervalMin / SetIntervalMax, +// SmCurveClassification::m_bIsCurveOwned) are reached through explicit instantiation (Rob). +// +// One entry point, sc_intersect_curve_class_p1_run(in, n_in, out, cap, out_len): a script over a +// pool of objects and two default-constructed classifications cc[0], cc[1]. The layout is +// documented in crates/solidcore-ffi/src/units/intersect_curve_class_p1.rs, which validates the +// static shape; the run-time checks below reject (SC_ERR_ARG) the ops that are undefined +// behaviour upstream (indices past the intervals, NULL curves or surfaces that are dereferenced, +// objects of the wrong kind, topology walks over the bare stand-in edges). Objects live for the +// whole process (never deleted: topology destructors notify owners). +#include "sc_shim.h" + +#include "StdAfx.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +// global in the library (SmCurveClass.cpp), not declared in a header +SmXSectTol3d sm_GetXSectTol2dOr3d_ForClassifyPair(const SmCurve* cpSrcCurve, const SmSurface* cpSurface1, + double dSrcCurveOrObj1_Param, + SmZoneTol3d sSrcCurveOrObj1_ZoneTol3d, + double dObj2_SrcCurveParam, SmZoneTol3d sObj2_ZoneTol3d); + +namespace sc_cc_p1 +{ +// clang-format off +// ---- verbatim: SmCurveClass.cpp lines 512-698: sm_SetXSectCurveThroughPoint +static SmStatus sm_SetXSectCurveThroughPoint + (SmCurve * pSrcCurve3d, // i/o: SrcCurve, expected to be CurveClassification->m_cpCurve + SmZoneTol3d s3DCurveZoneTol3d, // in : 3D Curve's ZoneTol3d - use SmCurveClassification::SrcZoneTol3d when 3D Curve is the m_cpCurve + SmTArray & rUVCurve, // i/o: UVTrimCurves sharing pSrcCurve3d parameterization, possibly modified + SmTArray & rSurface, // in : Surfaces intersecting 3DCurve corresponding with rUVCurve array, + // the intersection of 1st 2 rSurface surfaces define pSrcCurve3d intersection curve, + // if rUVCurve.GetSize() == 1, rSurface.GetSize is still expected to equal 2. + SmTArray & rUVPoint, // in : Intersection through UV-Points on corresponding surfaces of rSurface array + SmBoolean & bModifiedCurve, // out: TRUE=Curves updated, FALSE=No need to modify curves + double & dParam, // i/o: in = guessed Curve parameter assigned to this xsect throughPoint + // out = actual Curve parameter assigned to this xsect throughPoint by projecting sssPoint onto pSrcCurve3d + double & dDeviation, // out: deviation from xsect point to pSrcCurve3d after modifications + SmBoolean & bSet3DPoint, // out: TRUE = p3DPoint was set, FALSE=wasn't + SmVector3d * p3DPoint) // out: xsect point 3D value +{ + // init outputs - curve not modified + bModifiedCurve = FALSE ; + bSet3DPoint = FALSE ; + + // check state + SmBoolean bOKInputs = ( pSrcCurve3d != NULL + // && rUVCurve.GetSize() >= 0 - GetSize() returns ULONG which is always >= 0 + && rUVCurve.GetSize() <= rSurface.GetSize() + && rSurface.GetSize() >= 2 + && rSurface.GetSize() == rUVPoint.GetSize() + && p3DPoint != NULL) ; + SM_ASSERT(bOKInputs) ; + + // locals + //double dOrigParam = dParam ; + SmStatus sRtn = SM_ERR ; + + // 1st the surface evaluations and setting p3DPoint + if(rSurface.GetSize() < 2) + { return(SM_ERR) ; } + + // temporarily allow out of bound evaluations for surface[0], surface[1] + SmBoolean bTmp0 = FALSE, bTmp1 = FALSE ; + SmBSplineSurface * pBSplineSurface0 = SM_CAST_PTR(SmBSplineSurface, rSurface[0]) ; + SmBSplineSurface * pBSplineSurface1 = SM_CAST_PTR(SmBSplineSurface, rSurface[1]) ; + SmTemporaryChangeValue sClean0(pBSplineSurface0 ? pBSplineSurface0->GetOutOfBoundsEnabled() : bTmp0, TRUE) ; + SmTemporaryChangeValue sClean1(pBSplineSurface1 ? pBSplineSurface1->GetOutOfBoundsEnabled() : bTmp1, TRUE) ; + + // evaluate each surface at the given intersection parameter points + SmVector3d aSurfVal0[2][2], aSurfVal1[2][2] ; + sRtn = rSurface[0]->Evaluate(*rUVPoint[0], 1, 1, TRUE, TRUE, TRUE, aSurfVal0[0]) ; + rSurface[1]->Evaluate(*rUVPoint[1], 1, 1, TRUE, TRUE, TRUE, aSurfVal1[0]) ; + + // tolerances + SM_ASSERT_BREAK_MSG(pSrcCurve3d->GetDim() == 3, _T("Bad CurveClass 3d Assumption switch call to sm_GetXSectTol2dOr3d_ForClassifyPair()")) ; + SmZoneTol3d sXSectObjZoneTol3d = SmTol::GetZoneTol3d_ForXSectResult(rSurface[0], rSurface[1]) ; + SmXSectTol3d sXSectTol3d = SmTol::GetXSectTol3d(s3DCurveZoneTol3d, // was 1.0E-5 ; + sXSectObjZoneTol3d) ; + SmXSectTol3d sXSectTol3dSq = sXSectTol3d * sXSectTol3d ; // was 1.0E-10 ; + double dAngBoundRad = 6 * SmTol::GetAngTolRad() ; // match previous behavior SM_DEG2RAD(3.0) ; now 0.5 + SmScaledZero sScaledZero = SmTol::GetEffZero() ; + + // let surf/surf/surf xsect point = pSurface[0] evaluation + if(sRtn == SM_SUCCESS) + { bSet3DPoint = TRUE ; + *p3DPoint = aSurfVal0[0][0] ; + } + + // Abort when inputs are confused (after setting output variables). + if(bOKInputs == FALSE) + { return(SM_ERR) ; + } + + // check state - surface xsect projections are within XSectTol3d(Curve,Surface) of one another + double dMaxDeviationSq = aSurfVal0[0][0].DistanceBetweenSquared(aSurfVal1[0][0]) ; + if(dMaxDeviationSq > sXSectTol3dSq) + { + SM_DBG_WARN(_T("Tighten Intersection Curve heuristic not applicable - \n ThroughPoint not added: Given Surface xSectPt pair too far apart to add ThroughPoint to xSect curve to tighten tolerances\n")) ; + // SM_DBG_WARN(_T("Distance between two surface intersection points check failed - points too far apart\n")) ; + // return(SM_ERR); + } + + // project p3DPoint onto pSrcCurve3d to get its param value + SmBoolean bCurveProjectAnswer = FALSE ; + SmSolution sCurveProjection ; + dParam = pSrcCurve3d->GetNaturalInterval().ClampValue(dParam); + pSrcCurve3d->LocalPointSolve(pSrcCurve3d->GetNaturalInterval(), + SM_SO_MINIMIZE, + *p3DPoint, + NULL, NULL, NULL, + dParam, // in : guess param + bCurveProjectAnswer, // out: TRUE=found answer + sCurveProjection) ; // out: SmSolution container + + // when the point fails to project to the curve + SM_ASSERT(bCurveProjectAnswer == TRUE) ; + if(bCurveProjectAnswer == FALSE) + { + SM_DBG_WARN(_T("SSSPoint projection to XSect Curve failed\n")) ; + return(SM_ERR) ; + } + + // grab the projected point's curve param and curve/point deviation values + dParam = sCurveProjection.m_vStart[0] ; + dDeviation = sCurveProjection.m_vStart.m_dSolutionValue ; + + // Note: sXSectTol3d = XSectTol3d(CurveSrcZoneTol3d,Surface) + if(dDeviation < sXSectTol3d) + { + return(SM_SUCCESS) ; + } + + // evaluate the curve at the param value for pos and tangent information + SmVector3d sSrcCrvPt3d[2] ; + pSrcCurve3d->Evaluate(dParam, 1, TRUE, sSrcCrvPt3d) ; + + // skip curves close enough to xsectPoint + SmVector3d sGap = sSrcCrvPt3d[0] - *p3DPoint ; + + #if SM_DEBUG_CODE + // set through point tangent = cross(surf1Normal,surf2Normal) ; + SM_ASSERT(aSurfVal0[1][0].LengthSquared() > SmTol::GetEffZeroSq()); + SM_ASSERT(aSurfVal0[0][1].LengthSquared() > SmTol::GetEffZeroSq()); + SM_ASSERT(aSurfVal1[1][0].LengthSquared() > SmTol::GetEffZeroSq()); + SM_ASSERT(aSurfVal1[0][1].LengthSquared() > SmTol::GetEffZeroSq()); +#endif // SM_DEBUG_CODE + + aSurfVal0[1][0].Unitize() ; + aSurfVal0[0][1].Unitize() ; + aSurfVal1[1][0].Unitize() ; + aSurfVal1[0][1].Unitize() ; + SmVector3d sNorm1 = aSurfVal0[1][0]*aSurfVal0[0][1] ; + SmVector3d sNorm2 = aSurfVal1[1][0]*aSurfVal1[0][1] ; + SmVector3d sXSectTangent3d = sNorm1 * sNorm2 ; + + // skip curve modification when the throughPoint is close + // enough to a tangent surf/surf intersection point that + // the tangent vector can't easily be computed. Experience + // has shown inserting throughpoints in these cases + // easily corrupt intersection-curve shapes by + // adding doglegs and hooks to the geometry shape. + + // sXSectTangent3d == 0 for truly tangent surfaces + // 0 for points at poles + // 0 points at poorly constructed surface (1st Dir U and V vecs are parallel) + if(sXSectTangent3d.LengthSquared() <= 100 * sScaledZero) // this could be broken down in to an angle test with AngTol and a SpeedTest with ScaledZero tol + { return(SM_SUCCESS) ; } // but I can't predict how that will change things - this is good enough for now + // and to change would take a study of using this over a large set of examples - (Examples not available) + + // ensure Tangent direction is same as curve's direction + if(sXSectTangent3d.Dot(sSrcCrvPt3d[1]) < 0.0) + { + sXSectTangent3d = -sXSectTangent3d ; + } + + // Surf/Surf XSectLine Tang direction is not nearly parallel to pSrcCurve3d's tangent + double dTangAngle = 0.0 ; + sXSectTangent3d.AngleBetween(sSrcCrvPt3d[1], dTangAngle) ; + if(dTangAngle > dAngBoundRad) // works well at 3 degrees - could try bigger limits to see how it goes + { return(SM_SUCCESS) ; } + + // unitize the tangent vector + sXSectTangent3d.Unitize() ; + + // insert throughPoint=p3DPoint (tangent=sXSectTangent3d) at dParam into pSrcCurve3d + if(pSrcCurve3d->IsKindOf(SmBSplineCurve_TYPE)) + { + // force 3DCurve to interpolate v3DPoint point with given tangent + sRtn = ((SmBSplineCurve *)pSrcCurve3d)->SetIntersectionCurveThroughPoint + (dParam, // i/o: suggested param value updated to actual param value + *p3DPoint, // in : through point position + &sXSectTangent3d, // in : optional tangent value, NULL to ignore + rUVCurve, // in : UVTrimCurves associated with this curve, expected (not required) to equal number of surfaces + rSurface, // in : corresponding surfaces for each pUVCurve + rUVPoint, // in : UVPoint on pSurface corresponding to Through3dPoint, + // A NULL entry=project crThrough3dPoint onto pSurface + bModifiedCurve) ; // out: TRUE=modified curve, FALSE=didn't + // in : smallest allowed size for new spans. + // A curve span is either split and updated or + // just updated. Splitting is skipped when the split + // point would create a span less than dMinimunSpanPercent + // of the current span size. + // When Successful - reset dDeviation + if(sRtn == SM_SUCCESS) { dDeviation = 0.0 ; } + else { bModifiedCurve = FALSE; } + + } // end need to insert throughPoint check + + // all done - succesfully + return(SM_SUCCESS) ; + +} // end sm_SetXSectCurveThroughPoint + +// ---- verbatim: SmCurveClass.cpp lines 726-960: sm_SetXSectEdgeThroughPoint +static SmStatus sm_SetXSectEdgeThroughPoint + (SmEdge * pEdge, // i/o: 3D Edge to modify + SmPoint3d * pThroughPoint, // in : point to interpolate + SmTArray & rSurface, // in : two surfaces whose xsect define shape of pEdge + SmTArray & rUVPoint, // in : 3DPoint associated UVPoints for surfaces in rSurface + double & dParam, // i/o: in = guessed pEdge Curve parameter assigned to this xsect throughPoint + // out = pEdge Curve parameter assigned to this xsect throughPoint by projecting sssPoint onto pSrcCurve3d + double & dDeviation, // out: pThroughPoint to edge distance + SmBoolean & bModifiedCurve) // out: TRUE=Curves updated and outputs are set +{ + // init outputs - curve not modified + bModifiedCurve = FALSE ; + + // locals + SmTArray aFace ; + SmCurve * pSrcCurve3d = pEdge->GetCurve() ; + SmZoneTol3d s3DCurveZoneTol3d = SmTol::GetZoneTol3d(pEdge) ; + pEdge->GetFaces(aFace) ; + SmSolution sCurveProjection, sSurfaceProjection ; + SmPoint3d sTempPoint ; + SmVector3d sSrcCrvPt3d[2] ; + SmBoolean bCurveProjectAnswer = FALSE ; + SmExtent1d sEdgeInterval = pEdge->GetInterval() ; + SmExtent1d sCurveInterval = pSrcCurve3d->GetNaturalInterval() ; + SmBoolean bCommonCurveEdgeInterval = ( sEdgeInterval.GetMin() == sCurveInterval.GetMin() + && sEdgeInterval.GetMax() == sCurveInterval.GetMax()) ? TRUE : FALSE ; + + // check state - given or found valid pointers to edge, curve, points, and surfaces + if( pEdge == NULL + || pThroughPoint == NULL + || pSrcCurve3d == NULL + || rSurface.GetSize() < 2 + || rUVPoint.GetSize() != rSurface.GetSize()) + { return(SM_ERR) ; } + + // project pThroughPoint onto pCurve + pSrcCurve3d->LocalPointSolve(pEdge->GetInterval(), + SM_SO_MINIMIZE, + *pThroughPoint, + NULL, NULL, NULL, + dParam, // in : guess param + bCurveProjectAnswer, // out: TRUE=found answer + sCurveProjection) ; // out: SmSolution container + + // error - when no projected point is found + if(bCurveProjectAnswer == FALSE) + { return(SM_ERR) ; } + + // grab the projected point's param and deviaton values + dParam = sCurveProjection.m_vStart[0] ; + dDeviation = sCurveProjection.m_vStart.m_dSolutionValue ; + + // evaluate the curve at the param value for pos and tangent information + pSrcCurve3d->Evaluate(dParam, 1, TRUE, sSrcCrvPt3d) ; + + // compute a tangent value for the throughPoint + + // temporarily allow out of bound evaluations for surface[0], surface[1] + SmBoolean bTmp0 = FALSE, bTmp1 = FALSE ; + SmBSplineSurface * pBSplineSurface0 = SM_CAST_PTR(SmBSplineSurface, rSurface[0]) ; + SmBSplineSurface * pBSplineSurface1 = SM_CAST_PTR(SmBSplineSurface, rSurface[1]) ; + SmTemporaryChangeValue sClean0(pBSplineSurface0 ? pBSplineSurface0->GetOutOfBoundsEnabled() : bTmp0, TRUE) ; + SmTemporaryChangeValue sClean1(pBSplineSurface1 ? pBSplineSurface1->GetOutOfBoundsEnabled() : bTmp1, TRUE) ; + + SmVector3d aSurfVal0[2][2], aSurfVal1[2][2] ; + rSurface[0]->Evaluate(*rUVPoint[0], 1, 1, TRUE, TRUE, TRUE, aSurfVal0[0]) ; + rSurface[1]->Evaluate(*rUVPoint[1], 1, 1, TRUE, TRUE, TRUE, aSurfVal1[0]) ; + + // tolerances s3DCurveZoneTol3d + SM_ASSERT_BREAK_MSG(pSrcCurve3d->GetDim() == 3, _T("Bad CurveClass 3d Assumption switch call to sm_GetXSectTol2dOr3d_ForClassifyPair()")) ; + SmXSectTol3d sXSectTol3d = SmTol::GetXSectTol3d(s3DCurveZoneTol3d, // was 1.0E-5 ; + smos_Max(SmTol::GetZoneTol3d(rSurface[0]), + SmTol::GetZoneTol3d(rSurface[1]))) ; + SmXSectTol3d sXSectTol3dSq = sXSectTol3d * sXSectTol3d ; // was 1.0E-10 ; + SmScaledZero sScaledZero = SmTol::GetEffZero() ; + double dAngBoundRad = 6 * SmTol::GetAngTolRad() ; // was SM_DEG2RAD(3.0) ; now 0.5 + + // check state - surface xsect projections are near one another + if( pThroughPoint->DistanceBetweenSquared(aSurfVal0[0][0]) > sXSectTol3dSq + || pThroughPoint->DistanceBetweenSquared(aSurfVal1[0][0]) > sXSectTol3dSq + || aSurfVal0[0][0].DistanceBetweenSquared(aSurfVal1[0][0]) > sXSectTol3dSq) + { return(SM_ERR) ; } + + // set through point tangent = cross(surf1Normal,surf2Normal) ; + SM_ASSERT(aSurfVal0[1][0].LengthSquared() > sScaledZero) ; + SM_ASSERT(aSurfVal0[0][1].LengthSquared() > sScaledZero) ; + SM_ASSERT(aSurfVal1[1][0].LengthSquared() > sScaledZero) ; + SM_ASSERT(aSurfVal1[0][1].LengthSquared() > sScaledZero) ; + + aSurfVal0[1][0].Unitize() ; + aSurfVal0[0][1].Unitize() ; + aSurfVal1[1][0].Unitize() ; + aSurfVal1[0][1].Unitize() ; + SmVector3d sNorm1 = aSurfVal0[1][0]*aSurfVal0[0][1] ; + SmVector3d sNorm2 = aSurfVal1[1][0]*aSurfVal1[0][1] ; + SmVector3d sXSectTangent3d = sNorm1 * sNorm2 ; + + if(sXSectTangent3d.LengthSquared() <= sScaledZero) + { + // the surfaces are tangent at this point + // Let tangent = CurrentCurveTangent + // gwc: We really should optimize here to find the tangent value + sXSectTangent3d = sSrcCrvPt3d[1] ; + } + + // ensure Tangent direction is same as curve's direction + if(sXSectTangent3d.Dot(sSrcCrvPt3d[1]) < 0.0) + { + sXSectTangent3d = -sXSectTangent3d ; + } + + // skip curve modification when the throughPoint is close + // enough to a tangent surf/surf intersection point that + // the tangent vector can't easily be computed. Experience + // has shown inserting throughpoints in these cases + // easily corrupt intersection-curve shapes by + // adding doglegs and hooks to the geometry shape. + + // sXSectTangent3d == 0 for truly tangent surfaces, or + // sXSectTangent3d not nearly parallel to sSrcCrvPt3d[1] for nearly + // tangent surfaces. + double dTangAngle = 0.0 ; + sXSectTangent3d.AngleBetween(sSrcCrvPt3d[1], dTangAngle) ; + if( sXSectTangent3d.LengthSquared() <= sScaledZero + || dTangAngle > dAngBoundRad) // works well at 3 degrees - could try bigger limits to see how it goes + { + return(SM_SUCCESS) ; + } + + // unitize the tangent vector + sXSectTangent3d.Unitize() ; + + // force the 3DCurve to interpolate the point + // insert throughPoint=pThroughPoint (tangent=sXSectTangent3d) at dParam into pSrcCurve3d + if( pSrcCurve3d->IsKindOf(SmBSplineCurve_TYPE) + && sCurveProjection.m_vStart.m_dSolutionValue > s3DCurveZoneTol3d/2000) // usually about 1e-8 = ApproxTol/1000 (2 gets ApproxTol) + { + SmTArray aUVCurve ; + SmTArray aSurface ; + SmTArray aOptUVPoint ; + + // for every face + for(ULONG ii=0;iiGetEdgeuseOfFace(aFace[ii]) ; + + // Build the SetIntersectionCurveThroughPoint UVTrimCurve arrays + if( pEdgeuse ) aUVCurve.Add(pEdgeuse->GetUVTrimCurve()) ; + aSurface.Add(aFace[ii]->GetSurface()) ; + aOptUVPoint.Add(NULL) ; + + } // end iter every face + + // GWC:EXPERIMENT - Leave the end-points of existing edge-curves alone. + // They may be attached to vertices and part of CEdges. + // Just add-through points. + // Leave the associated UVTrimCurves alone. The parameterization + // of an Edge->Curve that has been trimmed by a previous Curve Merge will + // be different than its Edge->UVTrimcurves. + SM_TOL_LINE double dMinimumSpanPercent = 1.0E-6 ; // stop using 'move existing through point cases' + aUVCurve.ReSet() ; // stop editing UVTrimCurves + aSurface.ReSet() ; + aOptUVPoint.ReSet() ; + + // force 3DCurve to interpolate pThroughPoint with given tangent + // Note: Curve's natural domain may be modified + SmStatus eStat = ((SmBSplineCurve *)pSrcCurve3d)->SetIntersectionCurveThroughPoint + (dParam, // i/o: suggested param value updated to actual param value + *pThroughPoint, // in : through point position + &sXSectTangent3d, // in : optional tangent value, NULL to ignore + aUVCurve, // in : UVTrimCurves associated with this curve, expected (not required) to equal number of surfaces + aSurface, // in : corresponding surfaces for each pUVCurve + aOptUVPoint, // in : UVPoint on pSurface corresponding to Through3dPoint, + // A NULL entry=project crThrough3dPoint onto pSurface + bModifiedCurve, // out: TRUE=modified curve, FALSE=didn't + dMinimumSpanPercent) ; // in : smallest allowed size for new spans. + // A curve span is either split and updated or + // just updated. Splitting is skipped when the split + // point would create a span less than dMinimunSpanPercent + // of the current span size. + // If the curve was not changed, then we're done. + if ( eStat != SM_SUCCESS || ! bModifiedCurve ) + { return SM_SUCCESS; } + + // restore common curve/edge interval if its stopped being common + // by scaling the curve's parameterization + sEdgeInterval = pEdge->GetInterval() ; + sCurveInterval = pSrcCurve3d->GetNaturalInterval() ; + double dEMin = sEdgeInterval.GetMin() ; + double dEMax = sEdgeInterval.GetMax() ; + double dCMin = sCurveInterval.GetMin() ; + double dCMax = sCurveInterval.GetMax() ; + if( bCommonCurveEdgeInterval + && ( fabs(dEMin - dCMin) > sScaledZero + || fabs(dEMax - dCMax) > sScaledZero)) + { + // we should be fixing the case where one end of the curve's + // natural interval was modified. + SM_ASSERT( (fabs(dEMin - dCMin) <= sScaledZero && dEMax == dParam) + || (fabs(dEMax - dCMax) <= sScaledZero && dEMin == dParam)) ; + + // change the parameter values of every pSrcCurve3d knot + ((SmBSplineCurve *)pSrcCurve3d)->ScaleKnotVector(dEMin, dEMax) ; + + // change the parameter values of every UVTrimCurve knot + for(ULONG ii=0;iiScaleKnotVector(dEMin, dEMax) ; + + } // end iter every UVTrimCurve + + } // end need to restore common curve/edge interval check + + // reset the deviation value + dDeviation = 0.0 ; + + // GWC:CHANGE_SSSUVTRIMCURVE + // remove obsolete UVTrimCurves from edge->Edgeuses + SmTArray aEdgeuses ; + pEdge->GetEdgeuses(aEdgeuses) ; + for(ULONG ii=0;iiSetUVTrimCurve(NULL, 0.0, TRUE) ; // TRUE = delete existing UVTrimCurve + } + + // inform the public that the curves were updated + bModifiedCurve = TRUE ; + + } // end need to adjust throughPoint Check + + // all done - successfully + return(SM_SUCCESS) ; + +} // end sm_SetXSectEdgeThroughPoint + +// ---- verbatim: SmCurveClass.cpp lines 968-1080: sm_GetCCISurfaceGaps +static SmStatus sm_GetCCISurfaceGaps + (SmPoint3d & rClassCurvePoint3d, // in : Current ClassificationCurve Solution Point3d + SmPoint3d & rEdgeCurvePoint, // in : Current Edge Solution Point + SmSolution & rSolution, // in : ClassificationCurve/EdgeCurve intersection solution + SmTArray & rSurfaces, // in : List of all Surfaces connected to this intersection point + // ordered:[CurveSurfaces, EdgeSurfaces, commonEdgeCurveSurface, EdgeBooleanMateSurfaces] + SmTArray & rUVCurves, // in : edgeuse UVTrimCurve (may be NULL) + ULONG lEdgeSurfaceCount, // NotUsed: in : ignored - number of EdgeSurfaces in rSurfaces (number of Curve Surfaces == 2, the rest are pEMate->Surfaces) + double & dCurveEdgeGap, // out: CurvePoint/EdgePoint gap + double & dCurveSurfaceGap, // out: CurvePoint/SurfacesConnectedToCurve max gap + double & dEdgeSurfaceGap, // out: EdgePoint/SurfacesConnectedToEdge max gap + SmTArray & rUVPoints) // out: Surface UVPoint for each GapVector + // plus one for the EdgeCurvePoint/CommonSurf gap +{ + SM_REF1(lEdgeSurfaceCount) ; + // init output + dCurveSurfaceGap = 0.0 ; + dEdgeSurfaceGap = 0.0 ; + rUVPoints.ReSet() ; + + // Get CurvePoint/EdgePoint gap size + dCurveEdgeGap = rClassCurvePoint3d.DistanceBetween(rEdgeCurvePoint) ; + + // for every surface + SmSolutionArray sSolutions; + double dMaxDropDist = 1.0 ; + ULONG ii ; + for(ii=0;iiEvaluatePoint(dTParam, sGuessPoint) ; + SmPoint2d sUVPoint(sGuessPoint.x, sGuessPoint.y) ; + + // get classCurvePoint/Surf dist from cheap local solve + SmBoolean bFoundAnswer ; + pSurface->LocalPointSolve(pSurface->GetNaturalUVDomain(), + SM_SO_MINIMIZE, + *pPoint, + sUVPoint, + bFoundAnswer, + sSol) ; + if(bFoundAnswer) { pSol = &sSol ; } + else { pSol = NULL ; + SM_DBG_WARN(_T("XSectCurvePoint failed LocalDrop to Surface")) ; + } + + } // end LocalSolve from UVTrimCurve Point branch + else // need a GlobalSolve branch + { + // get classCurvePoint/surf dist without checking trim boundaries + sSolutions.ReSet() ; + SmSurfaceCache *pSC = smsurf_GetSurfaceCache(pSurface); + + // Turn off point testing so GlobalPointSolve() will keep all point solutions + // without classifying the solution point against the trim boundaries. + SmTemporaryChangeValue sChange(pSC->m_bPointTestEnabled,FALSE); + // Get a tolerance to use. + SmVector2d sSize; + pSurface->ApproximateSize( sSize ); + double dTol = 0.001 * sSize.Length(); + pSurface->GlobalPointSolve(pSurface->GetNaturalUVDomain(), + SM_SO_MINIMIZE, + *pPoint, + dTol, // not: dMaxDropDist, + &dMaxDropDist, + SM_SR_SINGLE, + sSolutions) ; + if(sSolutions.GetSize() > 0) + { pSol = &(sSolutions[0]) ; } + else { return(SM_ERR) ; + } + } // end GlobalSolve ClassCurvePoint/Surf distance branch + + // accumulate UVPoints and distances + if(pSol) + { + double dGap = pSol->m_vStart.m_dSolutionValue ; + SmPoint2d sUVPoint(pSol->m_vStart.m_adParameters[0], + pSol->m_vStart.m_adParameters[1]) ; + rUVPoints.Add(sUVPoint) ; + + // save max CurvePoint/Surface and EdgePoint/Surface gaps + if(ii < 2) { if(dGap > dCurveSurfaceGap) dCurveSurfaceGap = dGap ; } + else { if(dGap > dEdgeSurfaceGap ) dEdgeSurfaceGap = dGap ; } + } + else + { + // Point failed to drop to connected surface + return(SM_ERR) ; + } + } // end iter every surface looking for ClassCurvePoint/Surf distance + + // all done + return(SM_SUCCESS) ; + +} // end sm_GetCCISurfaceGaps + +// ---- verbatim: SmCurveClass.cpp lines 1106-1235: sm_GetCCIGeometry +static SmStatus sm_GetCCIGeometry + (SmCurveClassification * pCurveClassification, // in : classification containing curve to check + SmSolution & rSolution, // NotUsed: in : ClassificationCurve/EdgeCurve intersection solution + SmEdge * pEdge, // in : Edge found to intersect the curve being classified + SmEdge *& pEMate, // out: edge->BooleanMateEdge + SmTArray & rSurfaces, // out: List of all Surfaces connected to this intersection point + // ordered:[CurveSurfaces(2), EdgeSurfaces, CommonEdgeCurveSurface, EdgeBooleanMateSurfaces] + SmTArray & rEdgeuses, // out: associated edgeuse connecting intersectionPoint to Surface (may be NULL) + SmTArray & rUVCurves, // out: edgeuse UVTrimCurve (may be NULL) + ULONG & lEdgeSurfaceCount) // out: number of EdgeSurfaces in rSurfaces including the duplicate CommonEdgeCurveSurface +{ + SM_REF1(rSolution) ; + // init output + pEMate = NULL ; + rSurfaces.ReSet() ; + rEdgeuses.ReSet() ; + rUVCurves.ReSet() ; + lEdgeSurfaceCount = 0 ; + + // locals + ULONG ii ; + const SmSurface *pSurface1 = pCurveClassification->GetSurface1() ; + const SmSurface *pSurface2 = pCurveClassification->GetSurface2() ; + ULONG lCommonSurf = SM_BIG_ULONG ; + + // Part 1 - gather Surfaces, edgeuses, and UVTrimCurves connected to intersection Point + + // gather the ClassCurve Surfaces and UVTrimCurves + if(pSurface1) { rSurfaces.Add(pSurface1) ; + rEdgeuses.Add(NULL) ; + rUVCurves.Add(pCurveClassification->GetUVCurve1()) ; + } + if(pSurface2) { rSurfaces.Add(pSurface2) ; + rEdgeuses.Add(NULL) ; + rUVCurves.Add(pCurveClassification->GetUVCurve2()) ; + } + + // get Faces connected to Edge and Edge->BooleanMate + SmTArray sFaces ; + pEdge->GetFaces(sFaces) ; + ULONG lEdgeFaceCount = sFaces.GetSize() ; + + // When curve classification is being done as part of a boolean operation + const SmTopologyIntersector *cpTI = pCurveClassification->GetTopologyIntersector() ; + if(cpTI) + { + // look for edge->BooleanMate + pEMate = cpTI->GetOtherMate(pEdge) + ? (SmEdge *)cpTI->GetOtherMate(pEdge) + : (SmEdge *)cpTI->GetBrepMate(pEdge) ; + + // when pEdge has a boolean operation temporary mate + if(pEMate) + { + // add in Faces and Edgeuses connected to Edge->BooleanMate + SmTArray tFaces ; + SM_ASSERT(pEMate->IsKindOf(SmEdge_TYPE)) ; + pEMate->GetFaces(tFaces) ; + sFaces.Append(tFaces) ; + } + } // end possible temporary mating edge check + + // gather unique surfaces and edgeuses connected to this intersection point + ULONG lEdgeCurveCommonSurf = 0 ; + for(ii=0;iiGetSurface() ; + + // when pSurf is not in sSurfaces list - add it + ULONG lIndex ; + if(FALSE == rSurfaces.FindElement(pSurf, lIndex)) + { + const SmEdgeuse *pEdgeuse = iiGetEdgeuseOfFace(pFace) + : pEMate->GetEdgeuseOfFace(pFace) ; + + if(pEdgeuse != NULL) + { + rSurfaces.Add( pSurf ); // Should this be outside of if? + rEdgeuses.Add( (SmEdgeuse *)pEdgeuse ); + + // don't use pEMate UVTrimCurves (they have a different parameterization) + rUVCurves.Add( (pEdgeuse && ii < lEdgeFaceCount) + ? pEdgeuse->GetUVTrimCurve() + : NULL ); + } + + if(ii Surface which is shared with the curve (nonManifold may have 2) + SM_ASSERT(pSurface1 != NULL) ; + if (pSurf == pSurface1) { lEdgeCurveCommonSurf = 1 ; + lCommonSurf = ii ; + } + else if(pSurf == pSurface2) { lEdgeCurveCommonSurf = 2 ; + lCommonSurf = ii ; + } + + // when we are done with edgeSurfaces + if( ii == lEdgeFaceCount - 1 && lCommonSurf < lEdgeFaceCount ) + { + // add the commonSurf a 2nd time + pFace = sFaces[lCommonSurf] ; + pSurf = pFace->GetSurface() ; + const SmEdgeuse *pEdgeuse = pEdge->GetEdgeuseOfFace(pFace) ; + + if(pEdgeuse) + { + rSurfaces.Add( pSurf ); + rEdgeuses.Add( (SmEdgeuse *)pEdgeuse ); + + // don't use pEMate UVTrimCurves (they have a different parameterization) + rUVCurves.Add( pEdgeuse->GetUVTrimCurve() ); + lEdgeSurfaceCount++; + } + + } + } // end iter every face attached to this edge + + // at least 1 edge or edge->BooleanMate face's surface is one of the intersection surfaces + SM_ASSERT( lEdgeCurveCommonSurf == 1 + || lEdgeCurveCommonSurf == 2) ; + SM_ASSERT(lCommonSurf != SM_BIG_ULONG) ; + + // all done + return(SM_SUCCESS) ; + +} // end sm_GetCCIGeometry + +// ---- verbatim: SmCurveClass.cpp lines 1247-1625: sm_ApplyPointSolution +static SmStatus sm_ApplyPointSolution + (SmCurveClassification * pCurveClassification, // in : CurveClassification containing ClassCurve, NULL = leave ClassCurve alone + SmEdge * pEdge, // in : Edge, NULL = leave EdgeCurve alone + SmEdge * pEMate, // in : Edge->BooleanMateEdge, NULL = leave EdgeMateCurve alone + const SmSurface * pClassCurveSurface1, // in : ClassCurve Surf1 + SmPoint2d * pClassCurveUVPoint1, // in : Desired Surf1 Solution point + const SmSurface * pClassCurveSurface2, // in : ClassCurve Surf2 + SmPoint2d * pClassCurveUVPoint2, // in : Desired Surf2 Solution point + const SmSurface * pEdgeCurveSurface1, // in : pEdge/pEMate Surf1 + SmPoint2d * pEdgeCurveUVPoint1, // in : Desired pEdge/pEMate1 Solution point + const SmSurface * pEdgeCurveSurface2, // in : pEdge/pEMate Surf2 + SmPoint2d * pEdgeCurveUVPoint2, // in : Desired pEdge/pEMate2 Solution point + SmSolution & rSolution, // i/o: ClassCurve/Edge Solution being refined. + // Sol.m_vStart.Value, Param[0], and Param[1] are changed + SmPoint3d & rSSSPoint, // out: surf/surf/surf xsect point for this solution + SmBoolean & bSSSPointFlag, // out: TRUE=use Surf/surf/surf intersection point + SmBoolean & bModifiedCurve, // out: TRUE=Classification Curve modified, Classification should be redone + SmBoolean & bModifiedEdgeCurve, // out: TRUE=EdgeCurve modified, UVTrimCurves should be cleared + SmBoolean & bModifiedMateCurve, // out: TRUE=MateCurve modified, UVTrimCurves should be cleared + double & dDeviation) // out: deviation of curves from sssPoint +{ + // check input - must have a pEdge if given a pEMate + SM_ASSERT(pEMate == NULL || pEdge != NULL) ; + + // init output + bSSSPointFlag = FALSE ; + bModifiedCurve = FALSE ; + bModifiedEdgeCurve = FALSE ; + bModifiedMateCurve = FALSE ; + dDeviation = 0.0 ; + + // locals + const SmCurve * pSrcCurve3d = pCurveClassification ? pCurveClassification->GetCurve() : NULL ; + const SmCurve * pEdgeCurve = pEdge ? pEdge->GetCurve() : NULL ; + SmZoneTol3d sSrcZoneTol3d = SmTol::GetSrcZoneTol3d(pCurveClassification) ; + SmStatus eStat; + +#ifdef SM_DEBUG_CODE +static constexpr ULONG bDebugMe = FALSE ; + + SmExtent2d sInitDomain ; + SmExtent2d sUVDomain1 = pClassCurveSurface1 ? pClassCurveSurface1->GetNaturalUVDomain() : sInitDomain ; + SmExtent2d sUVDomain2 = pClassCurveSurface2 ? pClassCurveSurface2->GetNaturalUVDomain() : sInitDomain ; + SmExtent2d sUVDomain3 = pEdgeCurveSurface1 ? pEdgeCurveSurface1->GetNaturalUVDomain() : sInitDomain ; + + // output a message if any of the UVPoints are outside their surface boundary + if( (pCurveClassification != NULL && FALSE == sUVDomain1.ContainsPoint2d(*pClassCurveUVPoint1, SM_EFF_ZERO)) + || (pCurveClassification != NULL && FALSE == sUVDomain2.ContainsPoint2d(*pClassCurveUVPoint2, SM_EFF_ZERO)) + || ((pEdge != NULL || pEMate != NULL) && FALSE == sUVDomain3.ContainsPoint2d(*pEdgeCurveUVPoint1, SM_EFF_ZERO))) + { + SmVector2d sZero(0.0,0.0) ; + SmVector2d sGap1 = pCurveClassification ? *pClassCurveUVPoint1 - sUVDomain1.ClampPoint2d(*pClassCurveUVPoint1) : sZero; + SmVector2d sGap2 = pCurveClassification ? *pClassCurveUVPoint2 - sUVDomain2.ClampPoint2d(*pClassCurveUVPoint2) : sZero; + SmVector2d sGap3 = (pEdge != NULL || pEMate != NULL) ? *pEdgeCurveUVPoint1 - sUVDomain3.ClampPoint2d(*pEdgeCurveUVPoint1) : sZero ; + + if(bDebugMe) + { + smgfx_Erase() ; + smgfx_SetLook(1,2, 0,0,1) ; if(pClassCurveSurface1) pClassCurveSurface1->DrawUV(2,2) ; sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,1,0) ; if(pClassCurveSurface2) pClassCurveSurface2->DrawUV(2,2) ; sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,1,1) ; if(pEdgeCurveSurface1 ) pEdgeCurveSurface1->DrawUV(2,2) ; sm_GraphicsLoop() ; + sm_GraphicsLoop() ; + } // end bDebug check + + if(sGap1.LengthSquared() > SM_EFF_ZERO) { SM_DBG_WARN(_T("FYI: SSSPoint found outside surface1 NaturalUVDomain")) ; + if(!SM_IS_ZERO(sGap1.x)) ((SmBSplineSurface *)pClassCurveSurface1)->ExpandBoundarySpan(pClassCurveUVPoint1->x, SM_SP_U) ; + if(!SM_IS_ZERO(sGap1.y)) ((SmBSplineSurface *)pClassCurveSurface1)->ExpandBoundarySpan(pClassCurveUVPoint1->y, SM_SP_V) ; + } + if(sGap2.LengthSquared() > SM_EFF_ZERO) { SM_DBG_WARN(_T("FYI: SSSPoint found outside surface2 NaturalUVDomain")) ; + if(!SM_IS_ZERO(sGap2.x)) ((SmBSplineSurface *)pClassCurveSurface2)->ExpandBoundarySpan(pClassCurveUVPoint2->x, SM_SP_U) ; + if(!SM_IS_ZERO(sGap2.y)) ((SmBSplineSurface *)pClassCurveSurface2)->ExpandBoundarySpan(pClassCurveUVPoint2->y, SM_SP_V) ; + } + if(sGap3.LengthSquared() > SM_EFF_ZERO) { SM_DBG_WARN(_T("FYI: SSSPoint found outside surface3 NaturalUVDomain")) ; + if(!SM_IS_ZERO(sGap3.x)) ((SmBSplineSurface *)pEdgeCurveSurface1)->ExpandBoundarySpan(pEdgeCurveUVPoint1->x, SM_SP_U) ; + if(!SM_IS_ZERO(sGap3.y)) ((SmBSplineSurface *)pEdgeCurveSurface1)->ExpandBoundarySpan(pEdgeCurveUVPoint1->y, SM_SP_V) ; + } + } // end SSSPoint outside surface boundary check + + const SmCurve* pEMateCurve = pEMate ? pEMate->GetCurve() : NULL; + + SmFace* pFace1 = pClassCurveSurface1 ? (SmFace*)pClassCurveSurface1->GetFace() : NULL; + SmFace *pFace2 = pClassCurveSurface2 ? (SmFace *)pClassCurveSurface2->GetFace() : NULL ; + SmFace *pFace3 = pEdgeCurveSurface1 ? (SmFace *)pEdgeCurveSurface1->GetFace() : NULL ; + SmBrep *pBrep1 = pFace1 ? pFace1->GetBrep() : NULL ; + SmBrep *pBrep2 = pFace2 ? pFace2->GetBrep() : NULL ; + SmBrep *pBrep3 = pFace3 ? pFace3->GetBrep() : NULL ; + + if(bDebugMe) + { + SmPoint3d sSurface1Point ; + SmBoolean bTmp0 = FALSE ; + SmBSplineSurface * pBSplineSurface0 = SM_CAST_PTR(SmBSplineSurface, pClassCurveSurface1) ; + SmTemporaryChangeValue sClean0(pBSplineSurface0 ? pBSplineSurface0->GetOutOfBoundsEnabled() : bTmp0, TRUE) ; + pClassCurveSurface1->EvaluatePoint(*pClassCurveUVPoint1,sSurface1Point) ; + + smgfx_Erase() ; + smgfx_SetLook(1,2, 0,0,1) ; if(pBrep1) pBrep1->Draw() ; sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,1,0) ; if(pBrep2 && pBrep2 != pBrep1) pBrep2->Draw() ; sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,0,0) ; if(pBrep3 && pBrep3 != pBrep1 && pBrep3 != pBrep2) pBrep3->Draw() ; sm_GraphicsLoop() ; + + smgfx_SetLook(1,2, 0,0,1) ; if(pClassCurveSurface1) pClassCurveSurface1->DrawUV() ; sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,0,0) ; if(pFace1) { pFace1->Draw(SM_DM_CROSSHATCH) ; } sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,1,0) ; if(pClassCurveSurface2) pClassCurveSurface2->DrawUV() ; sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,0,0) ; if(pFace2) { pFace2->Draw(SM_DM_CROSSHATCH) ; } sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,1,1) ; if(pEdgeCurveSurface1) pEdgeCurveSurface1->DrawUV() ; sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,0,0) ; if(pFace3) { pFace3->Draw(SM_DM_CROSSHATCH) ; } sm_GraphicsLoop() ; + + smgfx_SetLook(5,7, 1,0,1) ; if(pSrcCurve3d) pSrcCurve3d->Draw() ; sm_GraphicsLoop() ; + smgfx_SetLook(3,6, 0,1,0) ; if(pEdgeCurve) pEdgeCurve->Draw() ; sm_GraphicsLoop() ; + smgfx_SetLook(3,6, 0,1,0) ; if(pEMateCurve) pEMateCurve->Draw() ; sm_GraphicsLoop() ; + smgfx_SetLook(7,9, 1,0,0) ; sSurface1Point.Draw() ; sm_GraphicsLoop() ; + sm_GraphicsLoop() ; + } // end bDebug check +#endif // SM_DEBUG_CODE + + // add switches to turn curve/edge through point interpolation on and off + SmBoolean gwcUpdateCurves = TRUE ; // system found to be more robust when gwcUpdateCurves is run + SmBoolean gwcUpdateEdges = TRUE ; // system found to be more robust when gwcUpdateEdges is run + + // locals + SmTArray aUVCurve ; + SmTArray aSurface ; + SmTArray aUVPoint ; + SmBoolean bCurveFoundAnswer = FALSE ; + SmSolution sCurveProjection ; + double dParam, dTDeviation = 0.0 ; + + // let rSSSPoint = pClassCurveSurface1 evaluation at the intersection point + SmStatus sRtn = (pSrcCurve3d && pClassCurveSurface1) ? pClassCurveSurface1->EvaluatePoint(*pClassCurveUVPoint1, rSSSPoint) + : (pSrcCurve3d && pClassCurveSurface2) ? pClassCurveSurface2->EvaluatePoint(*pClassCurveUVPoint2, rSSSPoint) + : ((pEdge || pEMate) && pEdgeCurveSurface1) ? pEdgeCurveSurface1->EvaluatePoint (*pEdgeCurveUVPoint1, rSSSPoint) + : SM_ERR ; + + if( sRtn == SM_ERR ) + return( SM_ERR ); + + // set closest point on curve to surf/surf/surf intersection point + if(pSrcCurve3d) + { + if(gwcUpdateCurves == TRUE) // system found to be more robust when gwcUpdateCurves TRUE + { + // set up sm_SetXSectCurveThroughPoint arguments + dParam = rSolution.m_vStart[0] ; // init pSrcCurve3d param guess = curve/curve xsect solution + aUVCurve.ReSet() ; + aSurface.ReSet() ; + aUVPoint.ReSet() ; + + // load surfaces and UVPoints marking the intersection + aSurface.Add(pClassCurveSurface1) ; + aUVPoint.Add(pClassCurveUVPoint1) ; + + aSurface.Add(pClassCurveSurface2) ; + aUVPoint.Add(pClassCurveUVPoint2) ; + + // ensure surf/surf/surf solution is through point on classCurve and its UVTrimCurves + // side effects: curves with large tolerance are modified to interpolate xsect point + // rSSSPoint is set with 3DPoint value for intersection + // dParam is moved to best through point value + // dTDeviation is set with surf/surf/surf xsect Point to curve distance + SmBoolean bSetSSSPoint = FALSE ; + sm_SetXSectCurveThroughPoint + ((SmCurve *)pSrcCurve3d, // i/o: 3D Curve, possibly modified + sSrcZoneTol3d, // in : pSrcCurve3d's ZoneTol3d value + aUVCurve, // i/o: UVTrimCurves sharing pSrcCurve3d parameterization, possibly modified + aSurface, // in : Surfaces intersecting 3DCurve corresponding with rUVCurve array, + // the intersection of 1st 2 rSurface surfaces define pSrcCurve3d intersection curve, + // if rUVCurve.GetSize() == 1, rSurface.GetSize is still expected to equal 2. + aUVPoint, // in : Intersection through UV-Points on corresponding surfaces of rSurface array + bModifiedCurve, // out: TRUE=Curves updated, FALSE=No need to modify curves + dParam, // i/o: in = guessed Curve parameter assigned to this xsect throughPoint + // out = actual Curve parameter assigned to this xsect throughPoint by projecting sssPoint onto pSrcCurve3d + dTDeviation, // out: deviation from xsect point to pSrcCurve3d after modifications + bSetSSSPoint, // out: TRUE = p3DPoint was set, FALSE=wasn't + &rSSSPoint) ; // out: xsect point 3D value + + // inform the public - remove obsolete UVTrimCurves + if(bModifiedCurve) + { bSSSPointFlag = TRUE; } + + // move pSrcCurve3d parameter in rSolution to surf/surf/surf xsect point + rSolution.m_vStart[0] = dParam ; + + // increase deviation to include distance to this curve from rSSSPoint + dDeviation = smos_Max(dDeviation, dTDeviation) ; + + } // end gwcUpdateCurves == TRUE branch + else // don't add through points to xsect curves branch + { + // temporarily allow out of bounds evaluations for pClassCurveSurface1 + SmBoolean bTmp0 = FALSE ; + SmBSplineSurface * pBSplineSurface0 = SM_CAST_PTR(SmBSplineSurface, pClassCurveSurface1) ; + SmTemporaryChangeValue sClean0(pBSplineSurface0 ? pBSplineSurface0->GetOutOfBoundsEnabled() : bTmp0, TRUE) ; + + // let rSSSPoint = pClassCurveSurface1 evaluation at the intersection point + sRtn = pClassCurveSurface1->EvaluatePoint(*pClassCurveUVPoint1, rSSSPoint) ; + + // inform the public + if(sRtn == SM_SUCCESS) + { bSSSPointFlag = TRUE ; } + + // move pSrcCurve3d parameter in rSolution to surf/surf/surf xsect point + eStat = pSrcCurve3d->LocalPointSolve(pCurveClassification->GetInterval(), + SM_SO_MINIMIZE, + rSSSPoint, + NULL, NULL, NULL, + rSolution.m_vStart[0], + bCurveFoundAnswer, + sCurveProjection) ; + + // when we found a project point - save the parameter and deviation values + if ( eStat == SM_SUCCESS && bCurveFoundAnswer ) + { + rSolution.m_vStart[0] = sCurveProjection.m_vStart[0] ; + + // increase deviation to include distance to this curve from rSSSPoint + dDeviation = smos_Max(dDeviation, sCurveProjection.m_vStart.m_dSolutionValue) ; + + } // end Point projected to curve check + } // end gwcUpdateCurves == FALSE branch + } // end pSrcCurve3d existence check + + // set closest point on pEdge to surf/surf/surf intersection point + if(pEdge) + { + if(gwcUpdateEdges == TRUE) + { + // set arguments for sm_SetXSectEdgeThroughPoint() call. + dParam = rSolution.m_vStart[1] ; + aSurface.ReSet() ; + aUVPoint.ReSet() ; + + if(pEdgeCurveSurface1) { aSurface.Add(pEdgeCurveSurface1) ; + aUVPoint.Add(pEdgeCurveUVPoint1) ; + } + if(pEdgeCurveSurface2) { aSurface.Add(pEdgeCurveSurface2) ; + aUVPoint.Add(pEdgeCurveUVPoint2) ; + } + + // fix the pEdge and its UVTrimCurves - edge is only modified if it is piecewise C0 + sm_SetXSectEdgeThroughPoint + (pEdge, // i/o: 3D Edge to modify + &rSSSPoint, // in : point to interpolate + aSurface, // in : two surfaces whose xsect define shape of pEdge + aUVPoint, // in : 3DPoint associated UVPoints for surfaces in rSurface + dParam, // i/o: in = guessed pEdge Curve parameter assigned to this xsect throughPoint + // out = pEdge Curve parameter assigned to this xsect throughPoint by projecting sssPoint onto pSrcCurve3d + dTDeviation, // out: pThroughPoint to edge distance + bModifiedEdgeCurve) ; // out: TRUE=Curves updated and outputs are set + + // move pEdge parameter in rSolution to surf/surf/surf xsect point + rSolution.m_vStart[1] = dParam ; + + // increase deviation to include distance to this edge from rSSSPoint + dDeviation = smos_Max(dDeviation, dTDeviation) ; + + // inform the public - remove obsolete UVTrimCurves + if(bModifiedEdgeCurve) + { bSSSPointFlag = TRUE;} + + // when there is an associated pEMate + if(pEMate) + { + // use edge's solution to get a good guess on the mate + double dParam1 ; + pEdge->GetInterval().Inversion(dParam,dParam1) ; + dParam1 = pEMate->GetInterval().Evaluate(dParam1) ; + + // fix the pEMate and its UVTrimCurves + sm_SetXSectEdgeThroughPoint + (pEMate, // i/o: 3D Edge to modify + &rSSSPoint, // in : point to interpolate + aSurface, // in : two surfaces whose xsect define shape of pEdge + aUVPoint, // in : 3DPoint associated UVPoints for surfaces in rSurface + dParam1, // i/o: in = guessed pEdge Curve parameter assigned to this xsect throughPoint + // out = pEdge Curve parameter assigned to this xsect throughPoint by projecting sssPoint onto pSrcCurve3d + dTDeviation, // out: pThroughPoint to edge distance + bModifiedMateCurve) ; // out: TRUE=Curves updated and outputs are set + + // increase deviation to include distance to this edge from rSSSPoint + dDeviation = smos_Max(dDeviation, dTDeviation) ; + + } // end pEMate existence check + + } // end gwcUpdateEdges == TRUE branch + else + { + // move pEdgeCurve parameter in rSolution to surf/surf/surf xsect point + pEdgeCurve->LocalPointSolve(pEdge->GetInterval(), + SM_SO_MINIMIZE, + rSSSPoint, + NULL, NULL, NULL, + rSolution.m_vStart[1], + bCurveFoundAnswer, + sCurveProjection) ; + if(bCurveFoundAnswer) { rSolution.m_vStart[1] = sCurveProjection.m_vStart[0] ; } + + // increase deviation to include distance from edge to rSSSPoint + dDeviation = smos_Max(dDeviation, sCurveProjection.m_vStart.m_dSolutionValue) ; + + // to be complete we could also increase the dDeviation to include + // the distance from the pEMate edge to the rSSSPoint. But that + // should be the same as the pEdge to rSSSPoint distance. + + } // end gwcUpdateEdges == FALSE branch + } // end pEdge or pEMate existence check + +#ifdef SM_DEBUG_CODE + + // check gaps + + // get the xyz point for each surface solution domain point + SmBoolean bTmp0 = FALSE, bTmp1 = FALSE, bTmp2 = FALSE ; + SmBSplineSurface * pBSplineSurface0 = SM_CAST_PTR(SmBSplineSurface, pClassCurveSurface1) ; + SmBSplineSurface * pBSplineSurface1 = SM_CAST_PTR(SmBSplineSurface, pClassCurveSurface2) ; + SmBSplineSurface * pBSplineSurface2 = SM_CAST_PTR(SmBSplineSurface, pEdgeCurveSurface1 ) ; + SmTemporaryChangeValue sClean0(pBSplineSurface0 ? pBSplineSurface0->GetOutOfBoundsEnabled() : bTmp0, TRUE) ; + SmTemporaryChangeValue sClean1(pBSplineSurface1 ? pBSplineSurface1->GetOutOfBoundsEnabled() : bTmp1, TRUE) ; + SmTemporaryChangeValue sClean2(pBSplineSurface2 ? pBSplineSurface2->GetOutOfBoundsEnabled() : bTmp2, TRUE) ; + + SmPoint3d sSurface1Point(0,0,0), sSurface2Point(0,0,0), sSurface3Point(0,0,0) ; + if(pCurveClassification) pClassCurveSurface1->EvaluatePoint(*pClassCurveUVPoint1,sSurface1Point) ; + if(pCurveClassification) pClassCurveSurface2->EvaluatePoint(*pClassCurveUVPoint2,sSurface2Point) ; + if(pEdge || pEMate) pEdgeCurveSurface1->EvaluatePoint (*pEdgeCurveUVPoint1,sSurface3Point) ; + + // get the xyz point for each curve solution domain point + SmPoint3d sClassCurvePoint, sEdgeCurvePoint ; + if(pSrcCurve3d) pSrcCurve3d->EvaluatePoint(rSolution.m_vStart[0], sClassCurvePoint) ; + if(pEdgeCurve ) pEdgeCurve->EvaluatePoint (rSolution.m_vStart[1], sEdgeCurvePoint) ; + + // get the distances between + // 2 curve/curve xsect points and 3 surf/surf/surf xsect points +// double dDistCC = (pSrcCurve3d && pEdgeCurve) ? sClassCurvePoint.DistanceBetween(sEdgeCurvePoint) : 0 ; + + //double dDist1a = (pSrcCurve3d && pCurveClassification) ? sSurface1Point.DistanceBetween(sClassCurvePoint) : 0.0 ; + //double dDist2a = (pSrcCurve3d && pCurveClassification) ? sSurface2Point.DistanceBetween(sClassCurvePoint) : 0.0 ; + //double dDist3a = (pSrcCurve3d && (pEdge || pEMate) ) ? sSurface3Point.DistanceBetween(sClassCurvePoint) : 0.0 ; + + //double dDist1b = (pEdgeCurve && pCurveClassification) ? sSurface1Point.DistanceBetween(sEdgeCurvePoint) : 0.0 ; + //double dDist2b = (pEdgeCurve && pCurveClassification) ? sSurface2Point.DistanceBetween(sEdgeCurvePoint) : 0.0 ; + //double dDist3b = (pEdgeCurve && (pEdge || pEMate) ) ? sSurface3Point.DistanceBetween(sEdgeCurvePoint) : 0.0 ; + + //double dDist12 = (pCurveClassification) ? sSurface1Point.DistanceBetween(sSurface2Point) : 0.0 ; + //double dDist23 = (pCurveClassification && (pEdge || pEMate)) ? sSurface2Point.DistanceBetween(sSurface3Point) : 0.0 ; + //double dDist31 = (pCurveClassification && (pEdge || pEMate)) ? sSurface3Point.DistanceBetween(sSurface1Point) : 0.0 ; + +// double dMaxDistSS = smos_3Max(dDist12, dDist23, dDist31) ; +// double dmaxDistCS = smos_Max(smos_3Max(dDist1a, dDist2a, dDist3a), +// smos_3Max(dDist1b, dDist2b, dDist3b)) ; + + // draw Breps, Surfaces, Curves, Points + if(bDebugMe) + { + smgfx_Erase() ; + smgfx_SetLook(1,2, 0,0,1) ; if(pBrep1) pBrep1->Draw() ; sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,1,0) ; if(pBrep2 && pBrep2 != pBrep1) pBrep2->Draw() ; sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,0,0) ; if(pBrep3 && pBrep3 != pBrep1 && pBrep3 != pBrep2) pBrep3->Draw() ; sm_GraphicsLoop() ; + + smgfx_SetLook(1,2, 0,0,1) ; if(pClassCurveSurface1) pClassCurveSurface1->DrawUV() ; sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,0,0) ; if(pFace1) { pFace1->Draw(SM_DM_CROSSHATCH) ; } sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,1,0) ; if(pClassCurveSurface2) pClassCurveSurface2->DrawUV() ; sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,0,0) ; if(pFace2) { pFace2->Draw(SM_DM_CROSSHATCH) ; } sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,1,1) ; if(pEdgeCurveSurface1) pEdgeCurveSurface1->DrawUV() ; sm_GraphicsLoop() ; + smgfx_SetLook(1,2, 0,0,0) ; if(pFace3) { pFace3->Draw(SM_DM_CROSSHATCH) ; } sm_GraphicsLoop() ; + + smgfx_SetLook(5,7, 1,0,1) ; if(pSrcCurve3d) pSrcCurve3d->Draw() ; sm_GraphicsLoop() ; + smgfx_SetLook(3,6, 0,1,0) ; if(pEdgeCurve) pEdgeCurve->Draw() ; sm_GraphicsLoop() ; + smgfx_SetLook(3,6, 0,1,0) ; if(pEMateCurve) pEMateCurve->Draw() ; sm_GraphicsLoop() ; + smgfx_SetLook(7,9, 1,0,0) ; sSurface1Point.Draw() ; sm_GraphicsLoop() ; + smgfx_SetLook(7,9, 1,0,0) ; sSurface2Point.Draw() ; sm_GraphicsLoop() ; + smgfx_SetLook(7,9, 1,0,0) ; sSurface3Point.Draw() ; sm_GraphicsLoop() ; + sm_GraphicsLoop() ; + + } // end draw section +#endif // SM_DEBUG_CODE + + // all done + return(SM_SUCCESS) ; + +} // end sm_ApplyPointSolution + +// ---- verbatim: SmCurveClass.cpp lines 3048-3275: sm_MakeConsistentClassifications +static SmStatus sm_MakeConsistentClassifications(SmCurveClassification & rCurveClass) +{ + // locals + SmZoneTol3d sSrcZoneTol3d = SmTol::GetSrcZoneTol3d(&rCurveClass) ; + + // for every interval + for (ULONG i=0; iGetVertex(); + SmVertex *pEdgeVertex2 = pClassifyEdge->GetOtherVertex(pEdgeVertex1); + + // check that classified vertex is one of the Edge's vertices + if ( pClassifyVertex != pEdgeVertex1 + && pClassifyVertex != pEdgeVertex2) + { + // Something is wrong: what looks like a coincident edge with:[Mid=Edge,Start=Vertex] + // does not have the ClassifyStartV == Edge->[StartV or EndV] as expected + // Since every Edge always has just one StartV and one EndV, it's not that the ClassifyEdge + // is missing a connection to the ClassifyVertex. It's more likely that one of the classifications + // of Ivl.Mid=EDGE or the Ivl.Start=VERTEX was made to the wrong Object. Perhaps one in the neighborhood + // of the Classify EDGE and VERTEX objects themselves. + WARN(_T("MakeConsistentClassification: bad CoinEdge classify:[ClassifyMid=Edge,ClassifyStart=Vertex] but Edge:[StartV,EndV] != ClassifyStart")) ; + +#ifdef SM_DEBUG_CODE + SmBoolean bDebugMe=FALSE; + if (bDebugMe) + { + SM_DUMP_AND_ASSERT_VALID(&rCurveClass); + SmBrep *pBrep = pClassifyEdge->GetBrep() ; + + smgfx_Erase(); + smgfx_SetLook(1,2, 0,0,1) ; if(pBrep) { pBrep->Draw(TRUE) ; } sm_GraphicsLoop() ; + smgfx_SetLook(3,5, 0,1,1) ; rCurveClass.GetCurve()->DrawWDeriv(rCIvl.m_vInterval); sm_GraphicsLoop() ; + smgfx_SetLook(4,5, 1,0,1) ; pClassifyEdge->Draw(); sm_GraphicsLoop() ; + smgfx_SetLook(3,8, 1,0,0) ; pClassifyVertex->GetPoint().Draw(); sm_GraphicsLoop() ; + smgfx_SetLook(3,9, 0,1,0) ; pEdgeVertex1->GetPoint().Draw(); sm_GraphicsLoop() ; + smgfx_SetLook(3,9, 0,0,1) ; pEdgeVertex2->GetPoint().Draw(); sm_GraphicsLoop() ; + sm_GraphicsLoop(); + } +#endif // SM_DEBUG_CODE + // Try 1 - Simple ClassifyEdge substitution: look for better ClassifyEdge assuming ClassifyVertex is correct + // Check every Edge attached to ClassifyVertex - pick the first Edge within XSectTol3d at the Ivl MidPoint + SmBoolean bFixedProblem = FALSE; + + // for every edge attached to the vertex + SmTArray pVertexEdges; + pClassifyVertex->GetEdges(pVertexEdges); + for (ULONG kk=0; kkEvaluatePoint(dTMid,sMidPnt)); + SM_ASSERT_BREAK_MSG(rCurveClass.GetCurve()->GetDim() == 3, _T("Bad CurveClass 3d Assumption switch call to sm_GetXSectTol2dOr3d_ForClassifyPair()")) ; + SmXSectTol3d sXSectTol3d = SmTol::GetXSectTol3d(sSrcZoneTol3d, SmTol::GetZoneTol3d(pVertexEdge)) ; + + // drop a midInterval Point to this VertexEdge + SER(pVertexEdge->GetCurve()->DropPoint(pVertexEdge->GetInterval(), // in : target curve allowed domain + sMidPnt, // in : Point to drop to curve + NULL, // in : For Snapping, NULL=NoSnap, Vec pointing to CrvInside from desired EndPt for snapping. + // when DropPt is within dDistTol in cpVecToCrvInside dir of EndPt, Snap to Ivl EndPt. + // Vec handles ambiguities and makes sure that curves are not just touching at the ends. + sXSectTol3d, // in : Used for SnapDist, and SM_SO_INTERSECT sXSectTol3d distance. + // sXSectTol3d = dDistTol ; SM_SO_INTERSECT + // sXSectTol3d = SM_BIG_DOUBLE ; SM_SO_MINIMIZE, SM_SO_NORMALIZE + // sSnapTol3d = dDistTol ; SM_SO_MINIMIZE, SM_SO_NORMALIZE, SM_SO_INTERSECT + NULL, // in : If given, call cheap LocalPointSolve() else call expensive GlobalPointSolve() + bSuccess, // out: TRUE = found a drop point + dDropParam, // out: found drop curve param + dDistToCurve)) ; // out: found drop distance + // in : SM_SO_MINIMIZE = allow nonNormal drops near endPoints + // SM_SO_INTERSECT= like Minimize but point must be within dDistTol + // SM_SO_NORMALIZE= exclude nonNormal drops near endPoints + // default:[SM_SO_MINIMIZE] to preserve original behavior + + // if point was close enough to edge - substitute the ClassifyMid Edge target with the found VertexEdge + if (bSuccess) + { + // set the interval's Classification object to this edge + MSG(_T("MakeConsistentClassification: fixing bad CoinEdge classify, switching ClassifyEdge = a StartVertexEdge within XSectTol3d at mid interval")) ; + rCIvl.m_vMid.SetClassObject(SM_PC_EDGE, pVertexEdge); + bFixedProblem = TRUE; + break; + } // end point was close enough check + } // end iter every edge attached to the vertex + + // arrive here when none of the Edges attached to ClassifyVertex are likely coincident with the ClassifyVertex + + // Try 2 - simple ClassifyVertex substitution: Substitute ClassifyVertex with the EdgeVertex + // closest to ClassifyVertex + // gwc: I'm surprised that this helps + if (!bFixedProblem) + { + MSG(_T("MakeConsistentClassification: fixing bad CoinEdge classify, switching Start ClassifyVertex = Closest EdgeVertex")) ; + if (pClassifyVertex->GetPoint().DistanceBetween(pEdgeVertex1->GetPoint()) < + pClassifyVertex->GetPoint().DistanceBetween(pEdgeVertex2->GetPoint()) ) + { rCIvl.m_vStart.SetClassObject(SM_PC_VERTEX, pEdgeVertex1); } + else { rCIvl.m_vStart.SetClassObject(SM_PC_VERTEX, pEdgeVertex2); } + } // end bFixedProblem == FALSE check + + } // end classified vertex is one of the Edge's vertices check + } // end Classification IVl with Mid=EDGE and startPoint classified to a Vertex check + + // if endPoint classifies to a Vertex + if (rCIvl.m_vEnd.GetPointClass() == SM_PC_VERTEX) + { + SmEdge *pClassifyEdge = (SmEdge*)rCIvl.m_vMid.GetObject(); + SmVertex *pClassifyVertex = (SmVertex*)rCIvl.m_vEnd.GetObject(); + SmVertex *pEdgeVertex1 = pClassifyEdge->GetVertex(); + SmVertex *pEdgeVertex2 = pClassifyEdge->GetOtherVertex(pEdgeVertex1); + + + // check that classified vertex is one of the Edge's vertices + if ( pClassifyVertex != pEdgeVertex1 + && pClassifyVertex != pEdgeVertex2) + { + // Something is wrong: what looks like a coincident edge with:[Mid=Edge,End=Vertex] + // does not have the ClassifyEndV == Edge->[StartV or EndV] as expected + // Since every Edge always has just one StartV and one EndV, it's not that the ClassifyEdge + // is missing a connection to the ClassifyVertex. It's more likely that one of the classifications + // of Ivl.Mid=EDGE or the Ivl.Start=VERTEX was made to the wrong Object. Perhaps one in the neighborhood + // of the Classify EDGE and VERTEX objects themselves. + WARN(_T("MakeConsistentClassification: bad CoinEdge classify:[ClassifyMid=Edge,ClassifyEnd=Vertex] but Edge:[StartV,EndV] != ClassifyStart")) ; + +#ifdef SM_DEBUG_CODE +SmBoolean bDebugMe=FALSE; + if (bDebugMe) + { + SM_DUMP_AND_ASSERT_VALID(&rCurveClass); + SmBrep *pBrep = pClassifyEdge->GetBrep() ; + + smgfx_Erase(); + smgfx_SetLook(1,2, 0,0,1) ; if(pBrep) { pBrep->Draw(TRUE) ; } sm_GraphicsLoop() ; + smgfx_SetLook(3,5, 0,1,1) ; rCurveClass.GetCurve()->DrawWDeriv(rCIvl.m_vInterval); sm_GraphicsLoop() ; + smgfx_SetLook(4,5, 1,0,1) ; pClassifyEdge->Draw(); sm_GraphicsLoop() ; + smgfx_SetLook(3,8, 1,0,0) ; pClassifyVertex->GetPoint().Draw(); sm_GraphicsLoop() ; + smgfx_SetLook(3,9, 0,1,0) ; pEdgeVertex1->GetPoint().Draw(); sm_GraphicsLoop() ; + smgfx_SetLook(3,9, 0,0,1) ; pEdgeVertex2->GetPoint().Draw(); sm_GraphicsLoop() ; + sm_GraphicsLoop(); + } +#endif // SM_DEBUG_CODE + + // Try 1 - Simple ClassifyEdge substitution: look for better ClassifyEdge assuming ClassifyVertex is correct + // Check every Edge attached to ClassifyVertex - pick the first Edge within XSectTol3d at the Ivl MidPoint + SmBoolean bFixedProblem = FALSE; + + // for every edge attached to the vertex + SmTArray sEdges; + pClassifyVertex->GetEdges(sEdges); + for (ULONG kk=0; kkEvaluatePoint(dTMid,sMidPnt)); + SM_ASSERT_BREAK_MSG(rCurveClass.GetCurve()->GetDim() == 3, _T("Bad CurveClass 3d Assumption switch call to sm_GetXSectTol2dOr3d_ForClassifyPair()")) ; + SmXSectTol3d sXSectTol3d = SmTol::GetXSectTol3d(sSrcZoneTol3d, SmTol::GetZoneTol3d(pVertexEdge)) ; + + SER(pVertexEdge->GetCurve()->DropPoint(pVertexEdge->GetInterval(), // in : target curve allowed domain + sMidPnt, // in : Point to drop to curve + NULL, // in : For Snapping, NULL=NoSnap, Vec pointing to CrvInside from desired EndPt for snapping. + // when DropPt is within dDistTol in cpVecToCrvInside dir of EndPt, Snap to Ivl EndPt. + // Vec handles ambiguities and makes sure that curves are not just touching at the ends. + sXSectTol3d, // in : Used for SnapDist, and SM_SO_INTERSECT sXSectTol3d distance. + // sXSectTol3d = dDistTol ; SM_SO_INTERSECT + // sXSectTol3d = SM_BIG_DOUBLE ; SM_SO_MINIMIZE, SM_SO_NORMALIZE + // sSnapTol3d = dDistTol ; SM_SO_MINIMIZE, SM_SO_NORMALIZE, SM_SO_INTERSECT + NULL, // in : If given, call cheap LocalPointSolve() else call expensive GlobalPointSolve() + bSuccess, // out: TRUE = found a drop point + dDropParam, // out: found drop curve param + dDistToCurve)) ; // out: found drop distance + // in : SM_SO_MINIMIZE = allow nonNormal drops near endPoints + // SM_SO_INTERSECT= like Minimize but point must be within dDistTol + // SM_SO_NORMALIZE= exclude nonNormal drops near endPoints + // default:[SM_SO_MINIMIZE] to preserve original behavior + + // if point was close enough to edge - substitute the ClassifyMid Edge target with the found VertexEdge + if (bSuccess) + { + // set the interval's Classification object to this edge + MSG(_T("MakeConsistentClassification: fixing bad CoinEdge classify, switching ClassifyEdge = a EndVertexEdge within XSectTol3d at mid interval")) ; + rCIvl.m_vMid.SetClassObject(SM_PC_EDGE, pVertexEdge); + bFixedProblem = TRUE; + break; + } // end point was close enough check + } // end iter every edge attached to the vertex + + // arrive here when none of the Edges attached to ClassifyVertex are likely coincident with the ClassifyVertex + + // Try 2 - simple ClassifyVertex substitution: Substitute ClassifyVertex with the EdgeVertex + // closest to ClassifyVertex + // gwc: I'm surprised that this helps + if (!bFixedProblem) + { + MSG(_T("MakeConsistentClassification: fixing bad CoinEdge classify, switching End ClassifyVertex = Closest EdgeVertex")) ; + if (pClassifyVertex->GetPoint().DistanceBetween(pEdgeVertex1->GetPoint()) < + pClassifyVertex->GetPoint().DistanceBetween(pEdgeVertex2->GetPoint()) ) + { rCIvl.m_vEnd.SetClassObject(SM_PC_VERTEX, pEdgeVertex1); } + else { rCIvl.m_vEnd.SetClassObject(SM_PC_VERTEX, pEdgeVertex2); } + } + } // end classified vertex is one of the Edge's vertices check + } // end Classification IVl with Mid=EDGE and EndPoint classified to a Vertex check + } // end interval classified to Edge check + } // end iter every interval + + return SM_SUCCESS; + +} // end sm_MakeConsistentClassifications + +// ---- verbatim: SmCurveClass.cpp lines 3752-3806: sm_GetCurveCurveAngle +static double sm_GetCurveCurveAngle + (const SmCurve *pThisCurve, // in : 1st tgt curve + double dThisParam, // in : param for ThisCurve evaluation + const SmCurve *pOtherCurve, // in : 2nd tgt Curve + double dOtherParam, // in : param for OtherCurve evaluation + double dDeviation) // in : expected deviation between curve points - only used for debug code check +{ + SmVector3d sThisPV[2], sOtherPV[2] ; + + // no work - no curves + if( pThisCurve == NULL + || pOtherCurve == NULL) + { return 0.0 ; } + + // check input - curves are 3d and params are valid + SM_ASSERT(pThisCurve-> GetDim() == 3) ; + SM_ASSERT(pOtherCurve->GetDim() == 3) ; + SM_ASSERT(pThisCurve-> GetNaturalInterval().ContainsValue(dThisParam) == TRUE) ; + SM_ASSERT(pOtherCurve->GetNaturalInterval().ContainsValue(dOtherParam) == TRUE) ; + + // Evaluate the Curve locations + pThisCurve->Evaluate (dThisParam, 1, TRUE, sThisPV) ; + pOtherCurve->Evaluate(dOtherParam, 1, TRUE, sOtherPV) ; + + // check for zero-length tangents. + SmScaledZero dScaledZero = SmTol::GetScaledZero( sThisPV[0] ); + if ( sThisPV[1].Length() < dScaledZero ) + { return 0.0; } + if ( sOtherPV[1].Length() < dScaledZero ) + { return 0.0; } + +#ifdef SM_DEBUG_CODE + // check that points are the same + double dChkDist = sThisPV[0].DistanceBetween(sOtherPV[0]) ; + double dChkTol = 5.0 * smos_Max(dDeviation, dScaledZero.val) ; + + if(dChkDist >= dChkTol) + { SM_ASSERT(dChkDist < dChkTol) ; } +#else + SM_REF1(dDeviation); +#endif // SM_DEBUG_CODE + + + // get the angle between the tangents + double dAngleRadians = 0.0 ; + sThisPV[1].AngleBetween(sOtherPV[1], dAngleRadians) ; + + // return angle from 0 to PI/2 + if(dAngleRadians < 0.0) dAngleRadians = -dAngleRadians ; + if(dAngleRadians > SM_PI/2.0) dAngleRadians = smos_Fabs(SM_PI - dAngleRadians) ; + + // all done + return(dAngleRadians) ; + +} // end sm_GetCurveCurveAngle + +// ---- verbatim: SmCurveClass.cpp lines 3821-3920: sm_CullOrRefineCCIIn3d +static SmStatus sm_CullOrRefineCCIIn3d // eff: tigthen 2d curve/curve intersections by checking 3dcurve/curve intersection tolerances + (const SmSurface & crSurface, // in : surface of face being classified against + const SmCurve & crUVCurve1, // in : UVCurve being classified + const SmExtent1d & crInterval1, // in : UVCurve's interval + const SmCurve & cr3DCurve2, // in : 3dCurve for face's trimCurve used to generate rSolutions + const SmExtent1d & crInterval2, // in : 3DCurve's interval + double dXSectTol3d, // in : XSectTol3d(SrcCurve,Edge) to use in 3dCurve/3dCurve intersection + SmSolutionArray & rSolutions) // in : solutions from 2dCurve/2dCurve intersections +{ + // project UVCurve into 3d space + SmCrvOnSurf s3DCurve1(SM_CONST_CAST(SmCurve&, crUVCurve1), + SM_CONST_CAST(SmSurface&,crSurface), + NULL, + 0, + crSurface.GetContext()); +// s3DCurve1.SetContext(crSurface.GetContext()); + + // for every solution + for (ULONG i=0; i dXSectTol3d) + { + // remove the solution + rSolutions.RemoveAt(i) ; + } + } // end SM_ST_SINGLE_VALUE solution check + + // when the solution is a coincident curve pair + else if(rSol.m_eSolutionType == SM_ST_RANGE_OF_VALUES) + { + // get quick max edge/UVTrimCurve 3d distance estimate at 8 sample points + double dMaxCurveCurveDist3d = 0.0 ; + SmExtent1d sSolInterval1(rSol.m_vStart[0], rSol.m_vEnd[0]) ; + SER(s3DCurve1.CurveMaxDistanceBetween(sSolInterval1, + cr3DCurve2, + rSol.m_vStart[1], + rSol.m_vEnd[1], + 8, + NULL, + dMaxCurveCurveDist3d)); + + // when the quick estimate is good but not very tight + if ( dMaxCurveCurveDist3d < dXSectTol3d + && dMaxCurveCurveDist3d > dXSectTol3d / 100.00) + { + // get max dist value possible between curves by setting samplePointCount = 0 + SER(s3DCurve1.CurveMaxDistanceBetween(sSolInterval1, + cr3DCurve2, + rSol.m_vStart[1], + rSol.m_vEnd[1], + 0, + NULL, + dMaxCurveCurveDist3d)); + } + + // when max edge/UVTrimCurve 3d distance is not good enough + if(dMaxCurveCurveDist3d > dXSectTol3d) + { + // remove the solution + rSolutions.RemoveAt(i) ; + } + + } // end SM_ST_RANGE_OF_VALUES solution check + } // end iter every solution + + // all done + return SM_SUCCESS; + +} // end sm_CullOrRefineCCIIn3d + +// ---- verbatim: SmCurveClass.cpp lines 3937-4044: sm_ComputeFacePointClass +static SmStatus sm_ComputeFacePointClass + (const SmPoint3d & cr3DPoint, // in : Point expected to be on face + SmZoneTol3d sSrcZoneTol3d, // in : ZoneTol3d(3Dpoint Assoc Obj, e.g. SrcCurve for a CurveClassification with this Face) + SmFace * pFace, // in : target face + SmPointClassification & rPointClass) // out: classification to remember point is on face +{ + // locals + SmSurface *pSurface = pFace->GetSurface(); NER(pSurface); + +// Method: +// 1: project to surface without checking trimmed (face) boundaries: +// 'point testing turned off'. +// 2: face->PointClassify(). + + // Project Point to Face->Surface + SmSolution sData[16]; + SmSolutionArray sSolutions(16,sData); + + // Turn off point testing in the face (temporarily). + SmSurfaceCache * pSC = smsurf_GetSurfaceCache(pSurface) ; + SmCacheCheckOutIn sCheckIO(pSC); + + // Local scope for temporary assignment to pSC->PointTestEnabled block: + { + // Turn off point testing so GlobalPointSolve() will keep all point solutions + // without classifying the solution point against the trim boundaries. + SmTemporaryChangeValue sCV(pSC->m_bPointTestEnabled,FALSE); + + SmXSectTol3d sXSectTol3d = SmTol::GetXSectTol3d(sSrcZoneTol3d, SmTol::GetZoneTol3d(pFace)) ; + + SER(pSurface->GlobalPointSolve(pFace->GetUVDomain(), + SM_SO_INTERSECT, + cr3DPoint, + sSrcZoneTol3d, + NULL, + SM_SR_ALL, + sSolutions)); + + // If global point solve fails, try again with a bigger tolerance. + if (sSolutions.GetSize() == 0) + { + SER(pSurface->GlobalPointSolve(pFace->GetUVDomain(), + SM_SO_INTERSECT, + cr3DPoint, + 10 * sXSectTol3d, // increased tol in hopes of a solution + NULL, + SM_SR_ALL, + sSolutions)); + + // If point still fails to project, give it one more try. + if (sSolutions.GetSize() == 0) + { + SER(pSurface->GlobalPointSolve(pFace->GetUVDomain(), + SM_SO_INTERSECT, + cr3DPoint, + 100 * sXSectTol3d, // additional increased tol in hopes of a solution + NULL, + SM_SR_ALL, + sSolutions)); + // signal error and give up if point still fails to project + if (sSolutions.GetSize() == 0) + { + return SM_ERR; + } // end 3rd project failed check + } // end 2nd project failed check + } // end 1st project point to surface failed check + } // end local scope for temporary assignment to pSC->PointTestEnabled block + + // Find the best solution, and classify it to the face. + double dBestDist = SM_BIG_DOUBLE; + SmPoint2d sUV; + for (ULONG i=0; iPointClassify(sUV, // in : UVPoint to Classify + sSrcZoneTol3d, // in : ZoneTol3d of obj assoc with UVPoint, not this face + // (when none, use: SmTol::GetZoneTol3d(Brep_Context_Or_NULL) + TRUE, // in : TRUE = return point face->Vertex/Edge intersections when found + // FALSE= return loop-containment classifications. + TRUE, // in : TRUE = force classification to be done only in UV space. + // else when LoopClassification fails try again in 3d. + rPointClass ) ; // out: Classification of the point. + // when in : m_ePointClass = SM_PC_FACE + // out: m_ePointClass = SM_PC_UNKNOWN + // on : m_ePointClass = SM_PC_EDGE or SM_PC_VERTEX +#ifdef SM_DEBUG_CODE +SmBoolean bDebugMe = FALSE; + if ( bDebugMe ) + { + if ( rPointClass.GetPointClass() != SM_PC_FACE ) + { + SM_DBG_MSG( TRUE, + _T("MSG: sm_ComputeFacePointClass() did NOT classify to Face.\n")) ; + } + } +#endif // SM_DEBUG_CODE + + // all done + return SM_SUCCESS; + +} // end sm_ComputeFacePointClass + +// ---- verbatim: SmCurveClass.cpp lines 4802-4810: sm_ObjectDimension +static int sm_ObjectDimension( SmObject *pObj ) +{ + return( pObj == NULL ? 4 + : pObj->IsKindOf( SmFace_TYPE ) ? 2 + : pObj->IsKindOf( SmEdge_TYPE ) ? 1 + : pObj->IsKindOf( SmVertex_TYPE ) ? 0 + : 4 ) ; // UNKNOWN, etc. + +} // end sm_ObjectDimension + +// clang-format on +} // namespace sc_cc_p1 + +namespace +{ +enum : int64_t +{ + K_CURVE = 0, + K_PLANE = 1, + K_BSURF = 2, + K_POINT = 3, + K_VERTEX = 4, + K_EDGE = 5, + K_FACE = 6, + K_LOOP = 7, + K_OTHER = 8, +}; + +// Ops (keep in sync with crates/solidcore-ffi/src/units/intersect_curve_class_p1.rs). +enum : int64_t +{ + OP_SET_SIZE = 0, + OP_REMOVE_AT = 1, + OP_IVL_SET = 2, + OP_IVL_SET_MIN = 3, + OP_IVL_SET_MAX = 4, + OP_IVL_RESET = 5, + OP_IVL_ASSIGN = 6, + OP_IVL_NEW = 7, + OP_PC_SET_CLASS = 8, + OP_PC_SET_T = 9, + OP_PC_SET_UV = 10, + OP_PC_SET_GAP = 11, + OP_PC_SET_SSS = 12, + OP_PC_SET_PRESNAP = 13, + OP_PC_SET_SRC_TOL = 14, + OP_SET_CURVE = 15, + OP_SET_SURFACE1 = 16, + OP_SET_SURFACE2 = 17, + OP_SET_FACE = 18, + OP_SET_INTERSECT_DATA = 19, + OP_SET_IS_CURVE_CURRENT = 20, + OP_SET_IGNORE_TANGENCY = 21, + OP_SET_IS_CURVE_OWNED = 22, + OP_SET_OK_TO_SET_TOL = 23, + OP_SET_FILLET_DATA = 24, + OP_SET_TGT_LOOPS_ONLY = 25, + OP_ADD_TGT_LOOP = 26, + OP_SET_SRC_TOL = 27, + OP_SET_UV_CURVE1 = 28, + OP_SET_UV_CURVE2 = 29, + OP_SUB_INTERVAL = 30, + OP_CLASSIFY_CRV_LOC = 31, + OP_SET_PC_PARAMS = 32, + OP_SQUEEZE_END = 33, + OP_IS_REFERENCED = 34, + OP_MAKE_CONSISTENT = 35, + OP_TYPE = 36, + OP_SRC_TOL = 37, + OP_IVL_TOLS = 38, + OP_OBJ_DIM = 39, + OP_XSECT_CURVE = 40, + OP_APPLY = 41, + OP_ANGLE = 42, + OP_CULL = 43, + OP_TOL_PAIR = 44, + OP_GAPS = 45, + OP_TOUCH_CONNECTED = 46, + OP_TOUCH_WINDING = 47, + OP_EDGE_THROUGH = 48, + OP_CCI_GEOMETRY = 49, + OP_FACE_POINT_CLASS = 50, +}; + +// Access to private / protected members through explicit instantiation. +template +struct Rob +{ + friend typename Tag::type get(Tag) { return M; } +}; + +struct IvlSetMin +{ + typedef SmStatus (SmCurveInterval::*type)(double); + friend type get(IvlSetMin); +}; +template struct Rob; + +struct IvlSetMax +{ + typedef SmStatus (SmCurveInterval::*type)(double); + friend type get(IvlSetMax); +}; +template struct Rob; + +struct CcOwned +{ + typedef SmBoolean SmCurveClassification::*type; + friend type get(CcOwned); +}; +template struct Rob; + +struct Rd +{ + const double* in; + int64_t n; + int64_t at; + bool bad = false; + double num() + { + if (at >= n) + { + bad = true; + return 0.0; + } + return in[at++]; + } + int64_t idx() { return (int64_t)num(); } + bool flag() { return num() != 0.0; } + SmVector3d vec() + { + double x = num(); + double y = num(); + double z = num(); + return SmVector3d(x, y, z); + } +}; + +double st(SmStatus s) { return s == SM_SUCCESS ? 0.0 : (double)s; } +double flg(SmBoolean b) { return b ? 1.0 : 0.0; } + +void put_vec(std::vector& o, const SmVector3d& v) +{ + o.push_back(v.x); + o.push_back(v.y); + o.push_back(v.z); +} + +struct ScVertex : public SmVertex +{ + ScVertex() : SmVertex() {} +}; + +struct ScEdge : public SmEdge +{ + explicit ScEdge(SmCurve* c) : SmEdge() { m_pCurve = c; } +}; + +struct ScFace : public SmFace +{ + explicit ScFace(SmSurface* s) : SmFace() { m_pSurface = s; } +}; + +// SmObject stand-in of one class; answers GetType and IsKindOf like that class. +class ScStandIn : public SmObject +{ +public: + explicit ScStandIn(SM_TYPE t) : m_type(t) {} + SM_TYPE GetType() const override { return m_type; } + SmBoolean IsKindOf(SM_TYPE t) const override { return t == m_type || SmObject::IsKindOf(t); } + +private: + SM_TYPE m_type; +}; + +const SmContext& the_context() +{ + static SmContext* p = new SmContext(); + return *p; +} + +// An object carrying the context, for the topology `operator new(size_t, SmObject*)`. +SmObject* anchor() +{ + static SmLine* p = new (&the_context()) + SmLine(SmPoint3d(0.0, 0.0, 0.0), SmPoint3d(1.0, 0.0, 0.0), 3, &the_context()); + return p; +} + +gw_CURVE* read_nurb(Rd& rd) +{ + gw_INDEX n = (gw_INDEX)rd.idx(); + gw_DEGREE p = (gw_DEGREE)rd.idx(); + gw_INDEX m = (gw_INDEX)rd.idx(); + gw_CURVE* cur = sm_AllocateNurbCurve(n, p, m); + for (gw_INDEX i = 0; i <= n; i++) + { + cur->pol->Pw[i].x = rd.num(); + cur->pol->Pw[i].y = rd.num(); + cur->pol->Pw[i].z = rd.num(); + cur->pol->Pw[i].w = rd.num(); + } + for (gw_INDEX i = 0; i <= m; i++) + cur->knt->U[i] = rd.num(); + return cur; +} + +// `n m p q r s cpts(x y z w, v fastest) u v`. +gw_SURFACE* read_nurb_surface(Rd& rd) +{ + gw_INDEX n = (gw_INDEX)rd.idx(); + gw_INDEX m = (gw_INDEX)rd.idx(); + gw_DEGREE p = (gw_DEGREE)rd.idx(); + gw_DEGREE q = (gw_DEGREE)rd.idx(); + gw_INDEX r = (gw_INDEX)rd.idx(); + gw_INDEX s = (gw_INDEX)rd.idx(); + gw_SURFACE* sur = sm_AllocateNurbSurface(n, m, p, q, r, s); + for (gw_INDEX i = 0; i <= n; i++) + for (gw_INDEX j = 0; j <= m; j++) + { + sur->net->Pw[i][j].x = rd.num(); + sur->net->Pw[i][j].y = rd.num(); + sur->net->Pw[i][j].z = rd.num(); + sur->net->Pw[i][j].w = rd.num(); + } + for (gw_INDEX i = 0; i <= r; i++) + sur->knu->U[i] = rd.num(); + for (gw_INDEX i = 0; i <= s; i++) + sur->knv->U[i] = rd.num(); + return sur; +} + +// A curve block `kind dim ...` (0: SmBSplineCurve `oob n p m cpts(x y z w) knots`; +// 1: SmHermiteCurve `P1 D1 P2 D2`; 2: bounded SmLine `P V d0 d1 scale io`; 3 / 4: SmEllipse / +// SmCircle `C X Y d0 d1 rx [ry] io`). +SmCurve* read_curve(Rd& rd, const SmContext& ctx, bool& is_bspline, ULONG& dim) +{ + int64_t kind = rd.idx(); + dim = (ULONG)rd.idx(); + is_bspline = kind == 0; + if (kind == 3 || kind == 4) + { + SmPoint3d c = rd.vec(); + SmVector3d x = rd.vec(); + SmVector3d y = rd.vec(); + double d0 = rd.num(); + double d1 = rd.num(); + double rx = rd.num(); + double ry = kind == 3 ? rd.num() : rx; + bool io = rd.flag(); + if (kind == 3) + return new (ctx) SmEllipse(c, x, y, SmExtent1d(d0, d1), rx, ry, dim, &ctx, NULL, io ? TRUE : FALSE); + return new (ctx) SmCircle(c, x, y, SmExtent1d(d0, d1), rx, dim, &ctx, NULL, io ? TRUE : FALSE); + } + if (kind == 0) + { + bool oob = rd.flag(); + SmBSplineCurve* c = new (ctx) SmBSplineCurve(read_nurb(rd), dim, FALSE); + c->SetOutOfBoundsEnabled(oob ? TRUE : FALSE); + return c; + } + if (kind == 2) + { + SmPoint3d p = rd.vec(); + SmVector3d v = rd.vec(); + double d0 = rd.num(); + double d1 = rd.num(); + double scale = rd.num(); + bool io = rd.flag(); + return new (ctx) SmLine(p, v, SmExtent1d(d0, d1), scale, 3, &ctx, NULL, io ? TRUE : FALSE); + } + SmVector3d p1 = rd.vec(); + SmVector3d d1 = rd.vec(); + SmVector3d p2 = rd.vec(); + SmVector3d d2 = rd.vec(); + return new (ctx) SmHermiteCurve(p1, d1, p2, d2, dim); +} + +struct Pool +{ + std::vector kinds; + std::vector ptrs; // SmObject* or SmPoint3d* + std::vector bspline; + std::vector dims; + std::map ids; + + double id(const void* p) const + { + if (p == NULL) + return -1.0; + auto it = ids.find(p); + return it == ids.end() ? -2.0 : (double)it->second; + } + bool valid(int64_t i) const { return i >= 0 && i < (int64_t)ptrs.size(); } + // pool object i (NULL for -1); `ok` false for an index out of range or of the wrong kind + void* get(int64_t i, std::initializer_list want, bool& ok) const + { + if (i == -1) + return NULL; + if (!valid(i)) + { + ok = false; + return NULL; + } + bool match = want.size() == 0; + for (int64_t w : want) + match = match || kinds[(size_t)i] == w; + if (!match) + ok = false; + return ptrs[(size_t)i]; + } + int64_t kind_of(const void* p) const + { + auto it = ids.find(p); + return it == ids.end() ? -1 : kinds[(size_t)it->second]; + } +}; + +void put_pc(std::vector& o, const SmPointClassification& pc, const Pool& pool) +{ + o.push_back((double)pc.GetPointClass()); + o.push_back(pool.id(pc.GetObject())); + o.push_back(pool.id(pc.GetFace())); + o.push_back(pc.GetDeviation()); + o.push_back(pc.GetTParam()); + SmPoint2d uv = pc.GetUVParam(); + o.push_back(uv.x); + o.push_back(uv.y); + put_vec(o, pc.GetUVWParam()); + o.push_back(flg(pc.AreParametersSet())); + o.push_back(pc.GetPreSnapParam()); + o.push_back(flg(pc.GetSSSPointFlag())); + put_vec(o, pc.GetSSSPoint()); + o.push_back(SmTol::GetSrcZoneTol3d(&pc)); +} + +void put_ivl(std::vector& o, const SmCurveInterval& ivl, const Pool& pool) +{ + o.push_back(ivl.GetMin()); + o.push_back(ivl.GetMax()); + put_pc(o, ivl.m_vStart, pool); + put_pc(o, ivl.m_vMid, pool); + put_pc(o, ivl.m_vEnd, pool); +} + +void put_cc(std::vector& o, const SmCurveClassification& cc, const Pool& pool) +{ + o.push_back((double)cc.GetSize()); + SmExtent1d ivl = cc.GetInterval(); + o.push_back(ivl.GetMin()); + o.push_back(ivl.GetMax()); + o.push_back(SmTol::GetSrcZoneTol3d(&cc)); + o.push_back(flg(cc.*get(CcOwned()))); + o.push_back(flg(cc.GetIsCurveCurrent())); + o.push_back(flg(cc.GetIgnoreTangency())); + o.push_back(flg(cc.GetDoingCrossHatch())); + o.push_back(flg(cc.GetDoingFillets())); + o.push_back(flg(cc.GetOKToSetTolerance())); + o.push_back(flg(cc.GetTgtLoopsOnly())); + o.push_back(pool.id(cc.GetCurve())); + o.push_back(pool.id(cc.GetUVCurve1())); + o.push_back(pool.id(cc.GetUVCurve2())); + o.push_back(pool.id(cc.GetAnyUVCurve1())); + o.push_back(pool.id(cc.GetAnyUVCurve2())); + o.push_back(pool.id(cc.GetSurface1())); + o.push_back(pool.id(cc.GetSurface2())); + o.push_back(pool.id(cc.GetFace())); + o.push_back(pool.id(cc.GetTopologyIntersector())); + o.push_back(pool.id(cc.GetOtherClassification())); + const SmTArray& loops = cc.GetTgtLoops(); + o.push_back((double)loops.GetSize()); + for (ULONG i = 0; i < loops.GetSize(); i++) + o.push_back(pool.id(loops[i])); + for (ULONG i = 0; i < cc.GetSize(); i++) + put_ivl(o, cc.GetAt(i), pool); +} + +// natural interval, control point and knot counts of a B-spline (else -1 -1), 7 points +void put_curve(std::vector& o, const SmCurve* c) +{ + SmExtent1d ivl = c->GetNaturalInterval(); + o.push_back(ivl.GetMin()); + o.push_back(ivl.GetMax()); + const SmBSplineCurve* b = c->IsKindOf(SmBSplineCurve_TYPE) ? (const SmBSplineCurve*)c : NULL; + const gw_CURVE* cur = b ? b->GetGwNurbPointer() : NULL; + o.push_back(cur ? (double)cur->pol->n : -1.0); + o.push_back(cur ? (double)cur->knt->m : -1.0); + for (int i = 0; i <= 6; i++) + { + SmPoint3d p; + SmStatus s = c->EvaluatePoint(ivl.Evaluate(i / 6.0), p); + o.push_back(st(s)); + if (s == SM_SUCCESS) + put_vec(o, p); + } +} + +bool is_surface(int64_t k) { return k == K_PLANE || k == K_BSURF; } + +// the object kind a classification type needs; -1 for none (UNKNOWN, NOTHING), -2 invalid +int64_t kind_of_class(int64_t c) +{ + switch (c) + { + case 100: + case 110: return -1; + case 102: return K_FACE; + case 103: return K_EDGE; + case 104: return K_VERTEX; + case 105: return K_POINT; + case 106: return K_CURVE; + case 107: return K_BSURF; // or K_PLANE + default: return -2; + } +} + +SmPointClassification* pick(SmCurveInterval& ivl, int64_t w) +{ + return w == 0 ? &ivl.m_vStart : w == 1 ? &ivl.m_vMid : w == 2 ? &ivl.m_vEnd : NULL; +} + +// A point classification ComputePointParameters may be called on: not a point or stand-in. +bool computable(const SmPointClassification& pc, const Pool& pool) +{ + int64_t k = pc.GetObject() == NULL ? -1 : pool.kind_of(pc.GetObject()); + return k != K_POINT && k != K_LOOP && k != K_OTHER; +} + +bool read_touches(Rd& rd, const Pool& pool, SmTArray& out) +{ + int64_t n = rd.idx(); + if (n < 0 || n > 64) + return false; + for (int64_t i = 0; i < n; i++) + { + SmTouchData t; + int64_t c = rd.idx(); + t.m_eLoopDir = (SmCrvDirOnFaceType)rd.idx(); + t.m_lLoopIndx = (ULONG)rd.idx(); + t.m_dParam = rd.num(); + t.m_lPtClassifyIndx = (ULONG)rd.idx(); + int64_t pc = rd.idx(); + if ((c != -1 && !pool.valid(c)) || (pc != -1 && !pool.valid(pc))) + return false; + t.m_pConnectedTo = c == -1 ? NULL : (SmTopology*)pool.ptrs[(size_t)c]; + t.m_pPtClassify = pc == -1 ? NULL : (SmPointClassification*)pool.ptrs[(size_t)pc]; + out.Add(t); + } + return !rd.bad; +} + +void put_touch(std::vector& o, const SmTouchData& t, const Pool& pool) +{ + o.push_back(pool.id(t.m_pConnectedTo)); + o.push_back((double)t.m_eLoopDir); + o.push_back((double)t.m_lLoopIndx); + o.push_back(t.m_dParam); + o.push_back((double)t.m_lPtClassifyIndx); + o.push_back(pool.id(t.m_pPtClassify)); +} + +int32_t run(Rd& rd, std::vector& o) +{ + const SmContext& ctx = the_context(); + Pool pool; + + int64_t n_obj = rd.idx(); + for (int64_t i = 0; i < n_obj && !rd.bad; i++) + { + int64_t kind = rd.idx(); + void* p = NULL; + bool bs = false; + ULONG dim = 0; + switch (kind) + { + case K_CURVE: p = read_curve(rd, ctx, bs, dim); break; + case K_PLANE: + { + SmPoint3d org = rd.vec(); + SmVector3d nrm = rd.vec(); + p = new (ctx) SmPlane(org, nrm, &ctx); + break; + } + case K_BSURF: + { + bool oob = rd.flag(); + SmBSplineSurface* s = new (ctx) SmBSplineSurface(read_nurb_surface(rd), FALSE, NULL); + s->GetOutOfBoundsEnabled() = oob ? TRUE : FALSE; + p = s; + break; + } + case K_POINT: p = new SmPoint3d(rd.vec()); break; + case K_VERTEX: p = new (anchor()) ScVertex(); break; + case K_EDGE: + { + int64_t c = rd.idx(); + bool ok = true; + SmCurve* co = (SmCurve*)pool.get(c, {K_CURVE}, ok); + if (!ok) + return SC_ERR_ARG; + p = new (anchor()) ScEdge(co); + break; + } + case K_FACE: + { + int64_t s = rd.idx(); + bool ok = true; + SmSurface* so = (SmSurface*)pool.get(s, {K_PLANE, K_BSURF}, ok); + if (!ok) + return SC_ERR_ARG; + p = new (anchor()) ScFace(so); + break; + } + case K_LOOP: p = new (&ctx) ScStandIn(SmLoop_TYPE); break; + case K_OTHER: p = new (&ctx) ScStandIn(SmObject_TYPE + 7); break; + default: return SC_ERR_ARG; + } + pool.ids[p] = (int64_t)pool.ptrs.size(); + pool.kinds.push_back(kind); + pool.ptrs.push_back(p); + pool.bspline.push_back(bs); + pool.dims.push_back(dim); + } + if (rd.bad) + return SC_ERR_ARG; + + SmCurveClassification ccs[2]; + // the pool's curves are never deleted: clear the ownership flags before the + // classifications are destroyed (on every return) + struct Disown + { + SmCurveClassification* c; + ~Disown() + { + c[0].*get(CcOwned()) = FALSE; + c[1].*get(CcOwned()) = FALSE; + } + } disown{ccs}; + + int64_t n_ops = rd.idx(); + for (int64_t i = 0; i < n_ops && !rd.bad; i++) + { + int64_t op = rd.idx(); + int64_t t = rd.idx(); + if (t < 0 || t > 1) + return SC_ERR_ARG; + SmCurveClassification& cc = ccs[t]; + SmCurveClassification& other = ccs[1 - t]; + int64_t size = (int64_t)cc.GetSize(); + bool ok = true; + o.push_back((double)op); + switch (op) + { + case OP_SET_SIZE: + { + int64_t n = rd.idx(); + if (n < 0 || n > 64) + return SC_ERR_ARG; + cc.SetSize((ULONG)n); + o.push_back(0.0); + break; + } + case OP_REMOVE_AT: + { + int64_t j = rd.idx(); + if (size == 0 || j < 0 || j > 64) + return SC_ERR_ARG; + cc.RemoveAt((ULONG)j); + o.push_back(0.0); + break; + } + case OP_IVL_SET: + case OP_IVL_SET_MIN: + case OP_IVL_SET_MAX: + case OP_IVL_RESET: + case OP_IVL_ASSIGN: + case OP_IVL_NEW: + { + int64_t j = rd.idx(); + if (j < 0 || j >= size) + return SC_ERR_ARG; + SmCurveInterval& ivl = cc.GetAt((ULONG)j); + if (op == OP_IVL_SET) + { + double a = rd.num(); + double b = rd.num(); + ivl.SetInterval(SmExtent1d(a, b)); + o.push_back(0.0); + } + else if (op == OP_IVL_SET_MIN) + o.push_back(st((ivl.*get(IvlSetMin()))(rd.num()))); + else if (op == OP_IVL_SET_MAX) + o.push_back(st((ivl.*get(IvlSetMax()))(rd.num()))); + else if (op == OP_IVL_RESET) + { + ivl.ReSet(); + o.push_back(0.0); + } + else if (op == OP_IVL_ASSIGN) + { + int64_t k = rd.idx(); + if (k < 0 || k >= (int64_t)other.GetSize()) + return SC_ERR_ARG; + ivl = other.GetAt((ULONG)k); + o.push_back(0.0); + } + else + { + bool with = rd.flag(); + bool owner = rd.flag(); + double a = rd.num(); + double b = rd.num(); + const SmCurveClassification* po = owner ? &cc : NULL; + if (with) + ivl = SmCurveInterval(SmExtent1d(a, b), &ctx, po); + else + ivl = SmCurveInterval(&ctx, po); + o.push_back(0.0); + } + break; + } + case OP_PC_SET_CLASS: + case OP_PC_SET_T: + case OP_PC_SET_UV: + case OP_PC_SET_GAP: + case OP_PC_SET_SSS: + case OP_PC_SET_PRESNAP: + case OP_PC_SET_SRC_TOL: + { + int64_t j = rd.idx(); + int64_t w = rd.idx(); + if (j < 0 || j >= size || w < 0 || w > 2) + return SC_ERR_ARG; + SmPointClassification& pc = *pick(cc.GetAt((ULONG)j), w); + if (op == OP_PC_SET_CLASS) + { + int64_t c = rd.idx(); + int64_t obj = rd.idx(); + int64_t want = kind_of_class(c); + if (want == -2) + return SC_ERR_ARG; + void* po = pool.get(obj, {}, ok); + if (!ok) + return SC_ERR_ARG; + if (obj != -1) + { + int64_t k = pool.kinds[(size_t)obj]; + if (!(k == want || (want == K_BSURF && k == K_PLANE))) + return SC_ERR_ARG; + } + pc.SetClassObject((SmPointClassificationType)c, (SmObject*)po); + } + else if (op == OP_PC_SET_T) + pc.SetTParam(rd.num()); + else if (op == OP_PC_SET_UV) + { + double u = rd.num(); + double v = rd.num(); + pc.SetUVParam(SmPoint2d(u, v)); + } + else if (op == OP_PC_SET_GAP) + pc.SetGap3d(rd.num()); + else if (op == OP_PC_SET_SSS) + pc.SetSSSPoint(rd.vec()); + else if (op == OP_PC_SET_PRESNAP) + pc.SetPreSnapParam(rd.num()); + else + pc.SetSrcZoneTol3d(SmZoneTol3d(rd.num())); + o.push_back(0.0); + break; + } + case OP_SET_CURVE: + { + int64_t obj = rd.idx(); + bool owned = rd.flag(); + SmCurve* c = (SmCurve*)pool.get(obj, {K_CURVE}, ok); + if (!ok) + return SC_ERR_ARG; + // SetCurve deletes an owned previous curve: the pool's curves are never deleted, + // so the previous one is disowned first (the flag is data here) + cc.*get(CcOwned()) = FALSE; + cc.SetCurve(c, owned ? TRUE : FALSE); + o.push_back(0.0); + break; + } + case OP_SET_SURFACE1: + case OP_SET_SURFACE2: + { + SmSurface* s = (SmSurface*)pool.get(rd.idx(), {K_PLANE, K_BSURF}, ok); + if (!ok) + return SC_ERR_ARG; + if (op == OP_SET_SURFACE1) + cc.SetSurface1(s); + else + cc.SetSurface2(s); + o.push_back(0.0); + break; + } + case OP_SET_FACE: + { + SmFace* f = (SmFace*)pool.get(rd.idx(), {K_FACE}, ok); + if (!ok) + return SC_ERR_ARG; + cc.SetFace(f); + o.push_back(0.0); + break; + } + case OP_SET_INTERSECT_DATA: + { + SmSurface* s1 = (SmSurface*)pool.get(rd.idx(), {K_PLANE, K_BSURF}, ok); + SmSurface* s2 = (SmSurface*)pool.get(rd.idx(), {K_PLANE, K_BSURF}, ok); + SmCurve* uv2 = (SmCurve*)pool.get(rd.idx(), {K_CURVE}, ok); + bool cur = rd.flag(); + void* ti = pool.get(rd.idx(), {K_OTHER}, ok); + if (!ok) + return SC_ERR_ARG; + cc.SetIntersectData(s1, s2, uv2, cur ? TRUE : FALSE, (const SmTopologyIntersector*)ti); + o.push_back(0.0); + break; + } + case OP_SET_IS_CURVE_CURRENT: + cc.SetIsCurveCurrent(rd.flag() ? TRUE : FALSE); + o.push_back(0.0); + break; + case OP_SET_IGNORE_TANGENCY: + cc.SetIgnoreTangency(rd.flag() ? TRUE : FALSE); + o.push_back(0.0); + break; + case OP_SET_IS_CURVE_OWNED: + // the flag only: the pool's curves are never deleted (see OP_SET_CURVE) + cc.SetIsCurveOwned(rd.flag() ? TRUE : FALSE); + o.push_back(0.0); + break; + case OP_SET_OK_TO_SET_TOL: + cc.SetOKToSetTolerance(rd.flag() ? TRUE : FALSE); + o.push_back(0.0); + break; + case OP_SET_FILLET_DATA: + { + void* oc = pool.get(rd.idx(), {K_OTHER}, ok); + bool b = rd.flag(); + if (!ok) + return SC_ERR_ARG; + cc.SetFilletData((SmCurveClassification*)oc, b ? TRUE : FALSE); + o.push_back(0.0); + break; + } + case OP_SET_TGT_LOOPS_ONLY: + cc.SetTgtLoopsOnly(rd.flag() ? TRUE : FALSE); + o.push_back(0.0); + break; + case OP_ADD_TGT_LOOP: + { + int64_t j = rd.idx(); + void* l = pool.get(j, {K_LOOP}, ok); + if (!ok || j == -1) + return SC_ERR_ARG; + cc.AddTgtLoop((SmLoop*)l); + o.push_back(0.0); + break; + } + case OP_SET_SRC_TOL: + SmTol::SetZoneTol3d(&cc, SmZoneTol3d(rd.num())); + o.push_back(0.0); + break; + case OP_SET_UV_CURVE1: + case OP_SET_UV_CURVE2: + { + SmCurve* c = (SmCurve*)pool.get(rd.idx(), {K_CURVE}, ok); + if (!ok) + return SC_ERR_ARG; + if (op == OP_SET_UV_CURVE1) + cc.SetUVCurve1(c); + else + cc.SetUVCurve2(c); + o.push_back(0.0); + break; + } + case OP_SUB_INTERVAL: + { + int64_t j = rd.idx(); + if (j < 0 || j >= size) + return SC_ERR_ARG; + SmExtent1d e = cc.GetSubInterval((ULONG)j); + o.push_back(0.0); + o.push_back(e.GetMin()); + o.push_back(e.GetMax()); + break; + } + case OP_CLASSIFY_CRV_LOC: + { + int64_t j = rd.idx(); + int64_t w = rd.idx(); + double prm = rd.num(); + if (j < 0 || j >= size || w < 0 || w > 2) + return SC_ERR_ARG; + SmPointClassification* pc = pick(cc.GetAt((ULONG)j), w); + if (!pc->GetSSSPointFlag() && cc.GetCurve() == NULL) + return SC_ERR_ARG; + SmPoint3d p = cc.GetClassifyCrvLoc(pc, prm); + o.push_back(0.0); + put_vec(o, p); + break; + } + case OP_SET_PC_PARAMS: + { + bool mids = rd.flag(); + if (size > 0 && cc.GetCurve() == NULL) + return SC_ERR_ARG; + for (int64_t j = 0; j < size; j++) + { + SmCurveInterval& ivl = cc.GetAt((ULONG)j); + if (!computable(ivl.m_vStart, pool) || !computable(ivl.m_vEnd, pool) || + (mids && !computable(ivl.m_vMid, pool))) + return SC_ERR_ARG; + } + o.push_back(st(cc.SetPointClassParameters(mids ? TRUE : FALSE))); + break; + } + case OP_SQUEEZE_END: + { + int64_t j = rd.idx(); + if (j < 0 || j >= size) + return SC_ERR_ARG; + SmIntervalPosition pos = cc.FindBestSqueezeEnd((ULONG)j); + o.push_back(0.0); + o.push_back((double)pos); + break; + } + case OP_IS_REFERENCED: + { + void* po = pool.get(rd.idx(), {}, ok); + if (!ok) + return SC_ERR_ARG; + o.push_back(0.0); + o.push_back(flg(cc.IsReferenced((const SmObject*)po))); + break; + } + case OP_MAKE_CONSISTENT: + { + // the stand-in edges have no vertices: SmEdge::GetVertex would crash + for (int64_t j = 0; j < size; j++) + { + SmCurveInterval& ivl = cc.GetAt((ULONG)j); + if (ivl.m_vMid.GetPointClass() == SM_PC_EDGE && + (ivl.m_vStart.GetPointClass() == SM_PC_VERTEX || ivl.m_vEnd.GetPointClass() == SM_PC_VERTEX)) + return SC_ERR_ARG; + } + o.push_back(st(sc_cc_p1::sm_MakeConsistentClassifications(cc))); + break; + } + case OP_TYPE: + { + int64_t n = rd.idx(); + if (n < 0 || n > 8) + return SC_ERR_ARG; + std::vector types; + for (int64_t k = 0; k < n; k++) + types.push_back((SM_TYPE)rd.idx()); + o.push_back(0.0); + o.push_back((double)cc.GetType()); + for (SM_TYPE ty : types) + o.push_back(flg(cc.IsKindOf(ty))); + const TCHAR* str = cc.GetTypeString(); + std::vector cs; + for (const TCHAR* c = str; *c; c++) + cs.push_back((double)*c); + o.push_back((double)cs.size()); + o.insert(o.end(), cs.begin(), cs.end()); + break; + } + case OP_SRC_TOL: + o.push_back(0.0); + o.push_back(SmTol::GetSrcZoneTol3d(&cc)); + o.push_back(SmTol::GetSrcZoneTol3d((const SmCurveClassification*)NULL)); + break; + case OP_IVL_TOLS: + { + int64_t j = rd.idx(); + if (j < 0 || j >= size) + return SC_ERR_ARG; + const SmCurveInterval& ivl = cc.GetAt((ULONG)j); + int64_t k = ivl.m_vMid.GetObject() == NULL ? -1 : pool.kind_of(ivl.m_vMid.GetObject()); + if (k == K_POINT) + return SC_ERR_ARG; + // SmTol::GetSrcZoneTol3d(ivl) reads the interval's back pointer (NULL: crash). The + // port has no back pointer and takes the owner explicitly (this classification): + // compare only intervals owned by this classification. + if (ivl.GetCurveClassification() != &cc) + return SC_ERR_ARG; + o.push_back(0.0); + o.push_back(SmTol::GetSrcZoneTol3d(&ivl)); + o.push_back(SmTol::GetObjZoneTol3d(&ivl)); + o.push_back(SmTol::GetObjZoneTol3d((const SmCurveInterval*)NULL)); + o.push_back(SmTol::GetScaledZero(ivl)); + break; + } + case OP_OBJ_DIM: + { + void* po = pool.get(rd.idx(), {}, ok); + if (!ok || (po != NULL && pool.kind_of(po) == K_POINT)) + return SC_ERR_ARG; + o.push_back(0.0); + o.push_back((double)sc_cc_p1::sm_ObjectDimension((SmObject*)po)); + break; + } + case OP_XSECT_CURVE: + { + int64_t cobj = rd.idx(); + SmCurve* c = (SmCurve*)pool.get(cobj, {K_CURVE}, ok); + double tol = rd.num(); + SmTArray uvc; + int64_t n_uvc = rd.idx(); + for (int64_t k = 0; k < n_uvc && k < 8; k++) + { + int64_t j = rd.idx(); + SmCurve* u = (SmCurve*)pool.get(j, {K_CURVE}, ok); + if (j == -1 || !ok || !pool.bspline[(size_t)j] || pool.dims[(size_t)j] != 2) + return SC_ERR_ARG; + uvc.Add((SmBSplineCurve*)u); + } + SmTArray srf; + int64_t n_srf = rd.idx(); + for (int64_t k = 0; k < n_srf && k < 8; k++) + { + int64_t j = rd.idx(); + const SmSurface* s = (const SmSurface*)pool.get(j, {K_PLANE, K_BSURF}, ok); + if (j == -1) + return SC_ERR_ARG; + srf.Add(s); + } + int64_t n_uv = rd.idx(); + std::vector uvs; + for (int64_t k = 0; k < n_uv && k < 8; k++) + { + double u = rd.num(); + double v = rd.num(); + uvs.push_back(SmVector2d(u, v)); + } + double prm = rd.num(); + double dev = rd.num(); + SmPoint3d p3 = rd.vec(); + if (!ok || c == NULL || n_uvc > 8 || n_srf > 8 || n_uv > 8 || rd.bad) + return SC_ERR_ARG; + // the first two UV points are read whenever there are two surfaces + if (n_srf >= 2 && n_uv < 2) + return SC_ERR_ARG; + SmTArray uvp; + for (auto& u : uvs) + uvp.Add(&u); + SmBoolean mod = FALSE; + SmBoolean set3 = FALSE; + SmStatus s = sc_cc_p1::sm_SetXSectCurveThroughPoint(c, SmZoneTol3d(tol), uvc, srf, uvp, mod, prm, dev, set3, &p3); + o.push_back(st(s)); + o.push_back(flg(mod)); + o.push_back(prm); + o.push_back(dev); + o.push_back(flg(set3)); + put_vec(o, p3); + put_curve(o, c); + for (ULONG k = 0; k < uvc.GetSize(); k++) + put_curve(o, uvc[k]); + break; + } + case OP_APPLY: + { + bool use_cc = rd.flag(); + void* edge = pool.get(rd.idx(), {K_EDGE}, ok); + void* emate = pool.get(rd.idx(), {K_EDGE}, ok); + const SmSurface* srf[4]; + SmPoint2d uvs[4]; + for (int k = 0; k < 4; k++) + { + srf[k] = (const SmSurface*)pool.get(rd.idx(), {K_PLANE, K_BSURF}, ok); + double u = rd.num(); + double v = rd.num(); + uvs[k].Set(u, v); + } + SmSolution sol; + sol.m_eSolutionType = SM_ST_SINGLE_VALUE; + sol.m_vStart[0] = rd.num(); + sol.m_vStart[1] = rd.num(); + sol.m_vStart.m_dSolutionValue = rd.num(); + SmPoint3d sss = rd.vec(); + if (!ok || rd.bad) + return SC_ERR_ARG; + SmCurveClassification* pcc = use_cc ? &cc : NULL; + bool src = pcc != NULL && pcc->GetCurve() != NULL; + bool edge_eval = (edge != NULL || emate != NULL) && srf[2] != NULL; + // the classification curve's two surfaces are dereferenced together + if (src && ((srf[0] == NULL) != (srf[1] == NULL))) + return SC_ERR_ARG; + if (src && srf[0] == NULL && edge_eval) + return SC_ERR_ARG; + // the edge path walks topology the stand-in edges do not have + if (edge != NULL) + return SC_ERR_ARG; + SmBoolean flag = FALSE, mc = FALSE, me = FALSE, mm = FALSE; + double dev = 0.0; + SmStatus s = sc_cc_p1::sm_ApplyPointSolution(pcc, (SmEdge*)edge, (SmEdge*)emate, srf[0], &uvs[0], srf[1], + &uvs[1], srf[2], &uvs[2], srf[3], &uvs[3], sol, sss, flag, mc, + me, mm, dev); + o.push_back(st(s)); + put_vec(o, sss); + o.push_back(flg(flag)); + o.push_back(flg(mc)); + o.push_back(flg(me)); + o.push_back(flg(mm)); + o.push_back(dev); + o.push_back(sol.m_vStart[0]); + o.push_back(sol.m_vStart[1]); + if (src) + put_curve(o, pcc->GetCurve()); + break; + } + case OP_ANGLE: + { + const SmCurve* c1 = (const SmCurve*)pool.get(rd.idx(), {K_CURVE}, ok); + double t1 = rd.num(); + const SmCurve* c2 = (const SmCurve*)pool.get(rd.idx(), {K_CURVE}, ok); + double t2 = rd.num(); + double dev = rd.num(); + if (!ok) + return SC_ERR_ARG; + o.push_back(0.0); + o.push_back(sc_cc_p1::sm_GetCurveCurveAngle(c1, t1, c2, t2, dev)); + break; + } + case OP_CULL: + { + int64_t sj = rd.idx(); + const SmSurface* s = (const SmSurface*)pool.get(sj, {K_PLANE, K_BSURF}, ok); + int64_t uj = rd.idx(); + const SmCurve* uvc = (const SmCurve*)pool.get(uj, {K_CURVE}, ok); + double a0 = rd.num(); + double a1 = rd.num(); + const SmCurve* c2 = (const SmCurve*)pool.get(rd.idx(), {K_CURVE}, ok); + double b0 = rd.num(); + double b1 = rd.num(); + double tol = rd.num(); + int64_t n = rd.idx(); + if (!ok || s == NULL || uvc == NULL || c2 == NULL || n < 0 || n > 16 || pool.dims[(size_t)uj] != 2) + return SC_ERR_ARG; + SmSolutionArray sols; + for (int64_t k = 0; k < n; k++) + { + SmSolution sol; + sol.m_eSolutionType = (SmSolutionType)rd.idx(); + sol.m_vStart[0] = rd.num(); + sol.m_vStart[1] = rd.num(); + sol.m_vEnd[0] = rd.num(); + sol.m_vEnd[1] = rd.num(); + sol.m_vStart.m_dSolutionValue = rd.num(); + sols.Add(sol); + } + if (rd.bad) + return SC_ERR_ARG; + SmStatus r = sc_cc_p1::sm_CullOrRefineCCIIn3d(*s, *uvc, SmExtent1d(a0, a1), *c2, SmExtent1d(b0, b1), tol, sols); + o.push_back(st(r)); + o.push_back((double)sols.GetSize()); + for (ULONG k = 0; k < sols.GetSize(); k++) + { + const SmSolution& x = sols[k]; + o.push_back((double)x.m_eSolutionType); + o.push_back(x.m_vStart[0]); + o.push_back(x.m_vStart[1]); + o.push_back(x.m_vEnd[0]); + o.push_back(x.m_vEnd[1]); + o.push_back(x.m_vStart.m_dSolutionValue); + } + break; + } + case OP_TOL_PAIR: + { + const SmCurve* c = (const SmCurve*)pool.get(rd.idx(), {K_CURVE}, ok); + const SmSurface* s = (const SmSurface*)pool.get(rd.idx(), {K_PLANE, K_BSURF}, ok); + double p1 = rd.num(); + double t1 = rd.num(); + double p2 = rd.num(); + double t2 = rd.num(); + if (!ok || c == NULL) + return SC_ERR_ARG; + o.push_back(0.0); + o.push_back(sm_GetXSectTol2dOr3d_ForClassifyPair(c, s, p1, SmZoneTol3d(t1), p2, SmZoneTol3d(t2))); + break; + } + case OP_GAPS: + { + SmPoint3d cp = rd.vec(); + SmPoint3d ep = rd.vec(); + SmSolution sol; + sol.m_vStart[0] = rd.num(); + sol.m_vStart[1] = rd.num(); + int64_t n = rd.idx(); + if (n < 0 || n > 8) + return SC_ERR_ARG; + SmTArray srf; + SmTArray uvc; + for (int64_t k = 0; k < n; k++) + { + const SmSurface* s = (const SmSurface*)pool.get(rd.idx(), {K_PLANE, K_BSURF}, ok); + const SmCurve* u = (const SmCurve*)pool.get(rd.idx(), {K_CURVE}, ok); + if (s == NULL) + return SC_ERR_ARG; + srf.Add(s); + uvc.Add(u); + } + ULONG cnt = (ULONG)rd.idx(); + if (!ok || rd.bad) + return SC_ERR_ARG; + double g1 = -7.0, g2 = -7.0, g3 = -7.0; + SmTArray uvs; + SmStatus r = sc_cc_p1::sm_GetCCISurfaceGaps(cp, ep, sol, srf, uvc, cnt, g1, g2, g3, uvs); + o.push_back(st(r)); + o.push_back(g1); + o.push_back(g2); + o.push_back(g3); + o.push_back((double)uvs.GetSize()); + for (ULONG k = 0; k < uvs.GetSize(); k++) + { + o.push_back(uvs[k].x); + o.push_back(uvs[k].y); + } + break; + } + case OP_TOUCH_CONNECTED: + case OP_TOUCH_WINDING: + { + int64_t c = op == OP_TOUCH_CONNECTED ? rd.idx() : -1; + if (c != -1 && !pool.valid(c)) + return SC_ERR_ARG; + SmTArray in; + if (!read_touches(rd, pool, in)) + return SC_ERR_ARG; + o.push_back(0.0); + if (op == OP_TOUCH_CONNECTED) + { + SmTArray out; + ULONG cnt = SmTouchData::GetConnectedTouches(c == -1 ? NULL : (SmTopology*)pool.ptrs[(size_t)c], in, &out); + ULONG cnt2 = SmTouchData::GetConnectedTouches(c == -1 ? NULL : (SmTopology*)pool.ptrs[(size_t)c], in); + o.push_back((double)cnt); + o.push_back((double)cnt2); + for (ULONG k = 0; k < out.GetSize(); k++) + put_touch(o, out[k], pool); + } + else + { + if (in.GetSize() % 2 != 0) + return SC_ERR_ARG; + SmOrientType ot = SM_OT_UNKNOWN; + ULONG w = SmTouchData::GetWindingCount(in, ot); + o.push_back((double)w); + o.push_back((double)ot); + } + break; + } + case OP_EDGE_THROUGH: + { + // deferred in the port (the edge's topology); run for the record only + SmEdge* e = (SmEdge*)pool.get(rd.idx(), {K_EDGE}, ok); + SmPoint3d p = rd.vec(); + SmTArray srf; + SmTArray uvp; + std::vector uvs(2); + for (int k = 0; k < 2; k++) + { + srf.Add((const SmSurface*)pool.get(rd.idx(), {K_PLANE, K_BSURF}, ok)); + double u = rd.num(); + double v = rd.num(); + uvs[(size_t)k] = SmVector2d(u, v); + } + for (auto& u : uvs) + uvp.Add(&u); + double prm = rd.num(); + if (!ok || e == NULL || srf[0] == NULL || srf[1] == NULL || e->GetCurve() == NULL) + return SC_ERR_ARG; + double dev = -7.0; + SmBoolean mod = FALSE; + SmStatus s = sc_cc_p1::sm_SetXSectEdgeThroughPoint(e, &p, srf, uvp, prm, dev, mod); + o.push_back(st(s)); + o.push_back(prm); + o.push_back(dev); + o.push_back(flg(mod)); + break; + } + case OP_CCI_GEOMETRY: + { + SmEdge* e = (SmEdge*)pool.get(rd.idx(), {K_EDGE}, ok); + if (!ok || e == NULL) + return SC_ERR_ARG; + SmSolution sol; + SmEdge* mate = NULL; + SmTArray srf; + SmTArray eus; + SmTArray uvc; + ULONG cnt = 0; + SmStatus s = sc_cc_p1::sm_GetCCIGeometry(&cc, sol, e, mate, srf, eus, uvc, cnt); + o.push_back(st(s)); + o.push_back((double)srf.GetSize()); + o.push_back((double)cnt); + break; + } + case OP_FACE_POINT_CLASS: + { + SmFace* f = (SmFace*)pool.get(rd.idx(), {K_FACE}, ok); + SmPoint3d p = rd.vec(); + double tol = rd.num(); + if (!ok || f == NULL || f->GetSurface() == NULL) + return SC_ERR_ARG; + SmPointClassification pc; + SmStatus s = sc_cc_p1::sm_ComputeFacePointClass(p, SmZoneTol3d(tol), f, pc); + o.push_back(st(s)); + o.push_back((double)pc.GetPointClass()); + break; + } + default: return SC_ERR_ARG; + } + if (rd.bad) + return SC_ERR_ARG; + put_cc(o, cc, pool); + } + if (rd.bad || rd.at != rd.n) + return SC_ERR_ARG; + return SC_OK; +} +} // namespace + +SC_EXPORT int32_t sc_intersect_curve_class_p1_run(const double* in, int64_t n_in, double* out, int64_t cap, + int64_t* out_len) +{ + if (in == NULL || n_in < 0 || out_len == NULL) + return SC_ERR_ARG; + SC_TRY + Rd rd{in, n_in, 0}; + std::vector o; + int32_t s = run(rd, o); + if (s != SC_OK) + { + *out_len = 0; + return s; + } + return sc_copy_out(o.data(), (int64_t)o.size(), out, cap, out_len); + SC_CATCH +} diff --git a/reports/difftest/intersect.curve_class_p1.json b/reports/difftest/intersect.curve_class_p1.json new file mode 100644 index 0000000000..4a425293e4 --- /dev/null +++ b/reports/difftest/intersect.curve_class_p1.json @@ -0,0 +1,16769 @@ +{ + "abs_floors": [], + "cases": [ + { + "max_rel_err": 0.0, + "name": "apply_point_solution_two_planes", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/usage.json#0 (upstream source/SMLib/src/SmCurveClass.cpp:1655 (sm_RefineCCIToSurfaces calls sm_ApplyPointSolution with the classification's surfaces and the curve/edge solution))", + "values_compared": 661 + }, + { + "max_rel_err": 0.0, + "name": "xsect_curve_through_point_tangent_planes", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/usage.json#1 (upstream source/SMLib/src/SmCurveClass.cpp:618 (sm_SetXSectCurveThroughPoint skips tangent surf/surf points))", + "values_compared": 63 + }, + { + "max_rel_err": 0.0, + "name": "gen0000", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806382", + "values_compared": 4253 + }, + { + "max_rel_err": 0.0, + "name": "gen0001", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806383", + "values_compared": 3381 + }, + { + "max_rel_err": 0.0, + "name": "gen0002", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806384", + "values_compared": 5655 + }, + { + "max_rel_err": 0.0, + "name": "gen0003", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806385", + "values_compared": 8759 + }, + { + "max_rel_err": 0.0, + "name": "gen0004", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806386", + "values_compared": 3831 + }, + { + "max_rel_err": 0.0, + "name": "gen0005", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806387", + "values_compared": 1831 + }, + { + "max_rel_err": 0.0, + "name": "gen0006", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806388", + "values_compared": 2989 + }, + { + "max_rel_err": 0.0, + "name": "gen0007", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806389", + "values_compared": 6097 + }, + { + "max_rel_err": 0.0, + "name": "gen0008", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806390", + "values_compared": 2382 + }, + { + "max_rel_err": 0.0, + "name": "gen0009", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806391", + "values_compared": 4242 + }, + { + "max_rel_err": 0.0, + "name": "gen0010", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806392", + "values_compared": 1688 + }, + { + "max_rel_err": 0.0, + "name": "gen0011", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806393", + "values_compared": 4729 + }, + { + "max_rel_err": 0.0, + "name": "gen0012", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806394", + "values_compared": 2382 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0013", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806395", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0014", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806396", + "values_compared": 3078 + }, + { + "max_rel_err": 0.0, + "name": "gen0015", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806397", + "values_compared": 1502 + }, + { + "max_rel_err": 0.0, + "name": "gen0016", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806398", + "values_compared": 1196 + }, + { + "max_rel_err": 0.0, + "name": "gen0017", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806399", + "values_compared": 4328 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0018", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806400", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0019", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806401", + "values_compared": 5418 + }, + { + "max_rel_err": 0.0, + "name": "gen0020", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806402", + "values_compared": 1843 + }, + { + "max_rel_err": 0.0, + "name": "gen0021", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806403", + "values_compared": 2011 + }, + { + "max_rel_err": 0.0, + "name": "gen0022", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806404", + "values_compared": 4800 + }, + { + "max_rel_err": 0.0, + "name": "gen0023", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806405", + "values_compared": 886 + }, + { + "max_rel_err": 0.0, + "name": "gen0024", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806406", + "values_compared": 2772 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0025", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806407", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0026", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806408", + "values_compared": 4950 + }, + { + "max_rel_err": 0.0, + "name": "gen0027", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806409", + "values_compared": 4344 + }, + { + "max_rel_err": 0.0, + "name": "gen0028", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806410", + "values_compared": 1077 + }, + { + "max_rel_err": 0.0, + "name": "gen0029", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806411", + "values_compared": 7363 + }, + { + "max_rel_err": 0.0, + "name": "gen0030", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806412", + "values_compared": 5917 + }, + { + "max_rel_err": 0.0, + "name": "gen0031", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806413", + "values_compared": 2989 + }, + { + "max_rel_err": 0.0, + "name": "gen0032", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806414", + "values_compared": 1284 + }, + { + "max_rel_err": 0.0, + "name": "gen0033", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806415", + "values_compared": 6050 + }, + { + "max_rel_err": 0.0, + "name": "gen0034", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806416", + "values_compared": 8305 + }, + { + "max_rel_err": 0.0, + "name": "gen0035", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806417", + "values_compared": 9839 + }, + { + "max_rel_err": 0.0, + "name": "gen0036", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806418", + "values_compared": 6617 + }, + { + "max_rel_err": 0.0, + "name": "gen0037", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806419", + "values_compared": 802 + }, + { + "max_rel_err": 0.0, + "name": "gen0038", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806420", + "values_compared": 5772 + }, + { + "max_rel_err": 0.0, + "name": "gen0039", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806421", + "values_compared": 2076 + }, + { + "max_rel_err": 0.0, + "name": "gen0040", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806422", + "values_compared": 4882 + }, + { + "max_rel_err": 0.0, + "name": "gen0041", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806423", + "values_compared": 2238 + }, + { + "max_rel_err": 0.0, + "name": "gen0042", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806424", + "values_compared": 3845 + }, + { + "max_rel_err": 0.0, + "name": "gen0043", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806425", + "values_compared": 7142 + }, + { + "max_rel_err": 0.0, + "name": "gen0044", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806426", + "values_compared": 2652 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0045", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806427", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0046", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806428", + "values_compared": 1456 + }, + { + "max_rel_err": 0.0, + "name": "gen0047", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806429", + "values_compared": 2084 + }, + { + "max_rel_err": 0.0, + "name": "gen0048", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806430", + "values_compared": 1245 + }, + { + "max_rel_err": 0.0, + "name": "gen0049", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806431", + "values_compared": 4903 + }, + { + "max_rel_err": 0.0, + "name": "gen0050", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806432", + "values_compared": 2217 + }, + { + "max_rel_err": 0.0, + "name": "gen0051", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806433", + "values_compared": 3827 + }, + { + "max_rel_err": 0.0, + "name": "gen0052", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806434", + "values_compared": 3468 + }, + { + "max_rel_err": 0.0, + "name": "gen0053", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806435", + "values_compared": 1204 + }, + { + "max_rel_err": 0.0, + "name": "gen0054", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806436", + "values_compared": 1277 + }, + { + "max_rel_err": 0.0, + "name": "gen0055", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806437", + "values_compared": 2076 + }, + { + "max_rel_err": 0.0, + "name": "gen0056", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806438", + "values_compared": 4122 + }, + { + "max_rel_err": 0.0, + "name": "gen0057", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806439", + "values_compared": 5491 + }, + { + "max_rel_err": 0.0, + "name": "gen0058", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806440", + "values_compared": 6214 + }, + { + "max_rel_err": 0.0, + "name": "gen0059", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806441", + "values_compared": 3981 + }, + { + "max_rel_err": 0.0, + "name": "gen0060", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806442", + "values_compared": 7830 + }, + { + "max_rel_err": 0.0, + "name": "gen0061", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806443", + "values_compared": 1461 + }, + { + "max_rel_err": 0.0, + "name": "gen0062", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806444", + "values_compared": 1043 + }, + { + "max_rel_err": 0.0, + "name": "gen0063", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806445", + "values_compared": 3290 + }, + { + "max_rel_err": 0.0, + "name": "gen0064", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806446", + "values_compared": 3107 + }, + { + "max_rel_err": 0.0, + "name": "gen0065", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806447", + "values_compared": 7738 + }, + { + "max_rel_err": 0.0, + "name": "gen0066", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806448", + "values_compared": 487 + }, + { + "max_rel_err": 0.0, + "name": "gen0067", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806449", + "values_compared": 2700 + }, + { + "max_rel_err": 0.0, + "name": "gen0068", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806450", + "values_compared": 5041 + }, + { + "max_rel_err": 0.0, + "name": "gen0069", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806451", + "values_compared": 3368 + }, + { + "max_rel_err": 0.0, + "name": "gen0070", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806452", + "values_compared": 3370 + }, + { + "max_rel_err": 0.0, + "name": "gen0071", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806453", + "values_compared": 3829 + }, + { + "max_rel_err": 0.0, + "name": "gen0072", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806454", + "values_compared": 3627 + }, + { + "max_rel_err": 0.0, + "name": "gen0073", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806455", + "values_compared": 4629 + }, + { + "max_rel_err": 0.0, + "name": "gen0074", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806456", + "values_compared": 5725 + }, + { + "max_rel_err": 0.0, + "name": "gen0075", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806457", + "values_compared": 3644 + }, + { + "max_rel_err": 0.0, + "name": "gen0076", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806458", + "values_compared": 6261 + }, + { + "max_rel_err": 0.0, + "name": "gen0077", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806459", + "values_compared": 2076 + }, + { + "max_rel_err": 0.0, + "name": "gen0078", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806460", + "values_compared": 1781 + }, + { + "max_rel_err": 0.0, + "name": "gen0079", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806461", + "values_compared": 3726 + }, + { + "max_rel_err": 0.0, + "name": "gen0080", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806462", + "values_compared": 4497 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0081", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806463", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0082", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806464", + "values_compared": 4545 + }, + { + "max_rel_err": 0.0, + "name": "gen0083", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806465", + "values_compared": 3827 + }, + { + "max_rel_err": 0.0, + "name": "gen0084", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806466", + "values_compared": 2446 + }, + { + "max_rel_err": 0.0, + "name": "gen0085", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806467", + "values_compared": 339 + }, + { + "max_rel_err": 0.0, + "name": "gen0086", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806468", + "values_compared": 1568 + }, + { + "max_rel_err": 0.0, + "name": "gen0087", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806469", + "values_compared": 5581 + }, + { + "max_rel_err": 0.0, + "name": "gen0088", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806470", + "values_compared": 4516 + }, + { + "max_rel_err": 0.0, + "name": "gen0089", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806471", + "values_compared": 2193 + }, + { + "max_rel_err": 0.0, + "name": "gen0090", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806472", + "values_compared": 1082 + }, + { + "max_rel_err": 0.0, + "name": "gen0091", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806473", + "values_compared": 8762 + }, + { + "max_rel_err": 0.0, + "name": "gen0092", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806474", + "values_compared": 4158 + }, + { + "max_rel_err": 0.0, + "name": "gen0093", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806475", + "values_compared": 4758 + }, + { + "max_rel_err": 0.0, + "name": "gen0094", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806476", + "values_compared": 5839 + }, + { + "max_rel_err": 0.0, + "name": "gen0095", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806477", + "values_compared": 3885 + }, + { + "max_rel_err": 0.0, + "name": "gen0096", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806478", + "values_compared": 4121 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0097", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806479", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0098", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806480", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0099", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806481", + "values_compared": 487 + }, + { + "max_rel_err": 0.0, + "name": "gen0100", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806482", + "values_compared": 1743 + }, + { + "max_rel_err": 0.0, + "name": "gen0101", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806483", + "values_compared": 5679 + }, + { + "max_rel_err": 0.0, + "name": "gen0102", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806484", + "values_compared": 3335 + }, + { + "max_rel_err": 0.0, + "name": "gen0103", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806485", + "values_compared": 9206 + }, + { + "max_rel_err": 0.0, + "name": "gen0104", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806486", + "values_compared": 3552 + }, + { + "max_rel_err": 0.0, + "name": "gen0105", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806487", + "values_compared": 2147 + }, + { + "max_rel_err": 0.0, + "name": "gen0106", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806488", + "values_compared": 493 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0107", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806489", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0108", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806490", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0109", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806491", + "values_compared": 2563 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0110", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806492", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0111", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806493", + "values_compared": 3408 + }, + { + "max_rel_err": 0.0, + "name": "gen0112", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806494", + "values_compared": 2433 + }, + { + "max_rel_err": 0.0, + "name": "gen0113", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806495", + "values_compared": 6541 + }, + { + "max_rel_err": 0.0, + "name": "gen0114", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806496", + "values_compared": 3267 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0115", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806497", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0116", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806498", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0117", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806499", + "values_compared": 1482 + }, + { + "max_rel_err": 0.0, + "name": "gen0118", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806500", + "values_compared": 3721 + }, + { + "max_rel_err": 0.0, + "name": "gen0119", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806501", + "values_compared": 3143 + }, + { + "max_rel_err": 0.0, + "name": "gen0120", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806502", + "values_compared": 5778 + }, + { + "max_rel_err": 0.0, + "name": "gen0121", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806503", + "values_compared": 5370 + }, + { + "max_rel_err": 0.0, + "name": "gen0122", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806504", + "values_compared": 1948 + }, + { + "max_rel_err": 0.0, + "name": "gen0123", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806505", + "values_compared": 1225 + }, + { + "max_rel_err": 0.0, + "name": "gen0124", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806506", + "values_compared": 8109 + }, + { + "max_rel_err": 0.0, + "name": "gen0125", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806507", + "values_compared": 3338 + }, + { + "max_rel_err": 0.0, + "name": "gen0126", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806508", + "values_compared": 2671 + }, + { + "max_rel_err": 0.0, + "name": "gen0127", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806509", + "values_compared": 3582 + }, + { + "max_rel_err": 0.0, + "name": "gen0128", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806510", + "values_compared": 4762 + }, + { + "max_rel_err": 0.0, + "name": "gen0129", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806511", + "values_compared": 5645 + }, + { + "max_rel_err": 0.0, + "name": "gen0130", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806512", + "values_compared": 6036 + }, + { + "max_rel_err": 0.0, + "name": "gen0131", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806513", + "values_compared": 567 + }, + { + "max_rel_err": 0.0, + "name": "gen0132", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806514", + "values_compared": 6332 + }, + { + "max_rel_err": 0.0, + "name": "gen0133", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806515", + "values_compared": 3105 + }, + { + "max_rel_err": 0.0, + "name": "gen0134", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806516", + "values_compared": 2397 + }, + { + "max_rel_err": 0.0, + "name": "gen0135", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806517", + "values_compared": 1334 + }, + { + "max_rel_err": 0.0, + "name": "gen0136", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806518", + "values_compared": 2111 + }, + { + "max_rel_err": 0.0, + "name": "gen0137", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806519", + "values_compared": 1645 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0138", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806520", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0139", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806521", + "values_compared": 1788 + }, + { + "max_rel_err": 0.0, + "name": "gen0140", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806522", + "values_compared": 3419 + }, + { + "max_rel_err": 0.0, + "name": "gen0141", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806523", + "values_compared": 1825 + }, + { + "max_rel_err": 0.0, + "name": "gen0142", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806524", + "values_compared": 7614 + }, + { + "max_rel_err": 0.0, + "name": "gen0143", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806525", + "values_compared": 5489 + }, + { + "max_rel_err": 0.0, + "name": "gen0144", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806526", + "values_compared": 4339 + }, + { + "max_rel_err": 0.0, + "name": "gen0145", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806527", + "values_compared": 5200 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0146", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806528", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0147", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806529", + "values_compared": 5680 + }, + { + "max_rel_err": 0.0, + "name": "gen0148", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806530", + "values_compared": 7867 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0149", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806531", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0150", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806532", + "values_compared": 10161 + }, + { + "max_rel_err": 0.0, + "name": "gen0151", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806533", + "values_compared": 5485 + }, + { + "max_rel_err": 0.0, + "name": "gen0152", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806534", + "values_compared": 3367 + }, + { + "max_rel_err": 0.0, + "name": "gen0153", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806535", + "values_compared": 1284 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0154", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806536", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0155", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806537", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0156", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806538", + "values_compared": 1816 + }, + { + "max_rel_err": 0.0, + "name": "gen0157", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806539", + "values_compared": 4117 + }, + { + "max_rel_err": 0.0, + "name": "gen0158", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806540", + "values_compared": 6593 + }, + { + "max_rel_err": 0.0, + "name": "gen0159", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806541", + "values_compared": 1729 + }, + { + "max_rel_err": 0.0, + "name": "gen0160", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806542", + "values_compared": 1198 + }, + { + "max_rel_err": 0.0, + "name": "gen0161", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806543", + "values_compared": 5643 + }, + { + "max_rel_err": 0.0, + "name": "gen0162", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806544", + "values_compared": 5625 + }, + { + "max_rel_err": 0.0, + "name": "gen0163", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806545", + "values_compared": 5189 + }, + { + "max_rel_err": 0.0, + "name": "gen0164", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806546", + "values_compared": 3858 + }, + { + "max_rel_err": 0.0, + "name": "gen0165", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806547", + "values_compared": 1355 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0166", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806548", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0167", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806549", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0168", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806550", + "values_compared": 1958 + }, + { + "max_rel_err": 0.0, + "name": "gen0169", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806551", + "values_compared": 5938 + }, + { + "max_rel_err": 0.0, + "name": "gen0170", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806552", + "values_compared": 2830 + }, + { + "max_rel_err": 0.0, + "name": "gen0171", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806553", + "values_compared": 9684 + }, + { + "max_rel_err": 0.0, + "name": "gen0172", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806554", + "values_compared": 5460 + }, + { + "max_rel_err": 0.0, + "name": "gen0173", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806555", + "values_compared": 2586 + }, + { + "max_rel_err": 0.0, + "name": "gen0174", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806556", + "values_compared": 1331 + }, + { + "max_rel_err": 0.0, + "name": "gen0175", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806557", + "values_compared": 3808 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0176", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806558", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0177", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806559", + "values_compared": 1964 + }, + { + "max_rel_err": 0.0, + "name": "gen0178", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806560", + "values_compared": 5124 + }, + { + "max_rel_err": 0.0, + "name": "gen0179", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806561", + "values_compared": 1024 + }, + { + "max_rel_err": 0.0, + "name": "gen0180", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806562", + "values_compared": 3000 + }, + { + "max_rel_err": 0.0, + "name": "gen0181", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806563", + "values_compared": 5249 + }, + { + "max_rel_err": 0.0, + "name": "gen0182", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806564", + "values_compared": 6731 + }, + { + "max_rel_err": 0.0, + "name": "gen0183", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806565", + "values_compared": 2386 + }, + { + "max_rel_err": 0.0, + "name": "gen0184", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806566", + "values_compared": 2610 + }, + { + "max_rel_err": 0.0, + "name": "gen0185", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806567", + "values_compared": 3867 + }, + { + "max_rel_err": 0.0, + "name": "gen0186", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806568", + "values_compared": 581 + }, + { + "max_rel_err": 0.0, + "name": "gen0187", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806569", + "values_compared": 2122 + }, + { + "max_rel_err": 0.0, + "name": "gen0188", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806570", + "values_compared": 605 + }, + { + "max_rel_err": 0.0, + "name": "gen0189", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806571", + "values_compared": 4398 + }, + { + "max_rel_err": 0.0, + "name": "gen0190", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806572", + "values_compared": 4513 + }, + { + "max_rel_err": 0.0, + "name": "gen0191", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806573", + "values_compared": 4774 + }, + { + "max_rel_err": 0.0, + "name": "gen0192", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806574", + "values_compared": 2905 + }, + { + "max_rel_err": 0.0, + "name": "gen0193", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806575", + "values_compared": 3752 + }, + { + "max_rel_err": 0.0, + "name": "gen0194", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806576", + "values_compared": 6394 + }, + { + "max_rel_err": 0.0, + "name": "gen0195", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806577", + "values_compared": 2588 + }, + { + "max_rel_err": 0.0, + "name": "gen0196", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806578", + "values_compared": 4156 + }, + { + "max_rel_err": 0.0, + "name": "gen0197", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806579", + "values_compared": 4078 + }, + { + "max_rel_err": 0.0, + "name": "gen0198", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806580", + "values_compared": 4027 + }, + { + "max_rel_err": 0.0, + "name": "gen0199", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806581", + "values_compared": 1719 + }, + { + "max_rel_err": 0.0, + "name": "gen0200", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806582", + "values_compared": 3018 + }, + { + "max_rel_err": 0.0, + "name": "gen0201", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806583", + "values_compared": 3904 + }, + { + "max_rel_err": 0.0, + "name": "gen0202", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806584", + "values_compared": 4692 + }, + { + "max_rel_err": 0.0, + "name": "gen0203", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806585", + "values_compared": 3652 + }, + { + "max_rel_err": 0.0, + "name": "gen0204", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806586", + "values_compared": 4092 + }, + { + "max_rel_err": 0.0, + "name": "gen0205", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806587", + "values_compared": 5687 + }, + { + "max_rel_err": 0.0, + "name": "gen0206", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806588", + "values_compared": 2970 + }, + { + "max_rel_err": 0.0, + "name": "gen0207", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806589", + "values_compared": 4512 + }, + { + "max_rel_err": 0.0, + "name": "gen0208", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806590", + "values_compared": 6887 + }, + { + "max_rel_err": 0.0, + "name": "gen0209", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806591", + "values_compared": 78 + }, + { + "max_rel_err": 0.0, + "name": "gen0210", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806592", + "values_compared": 2330 + }, + { + "max_rel_err": 0.0, + "name": "gen0211", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806593", + "values_compared": 63 + }, + { + "max_rel_err": 0.0, + "name": "gen0212", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806594", + "values_compared": 4139 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0213", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806595", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0214", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806596", + "values_compared": 3726 + }, + { + "max_rel_err": 0.0, + "name": "gen0215", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806597", + "values_compared": 6777 + }, + { + "max_rel_err": 0.0, + "name": "gen0216", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806598", + "values_compared": 2895 + }, + { + "max_rel_err": 0.0, + "name": "gen0217", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806599", + "values_compared": 774 + }, + { + "deferred": { + "symbol": "SmEdge::GetTolerance", + "unit": "topology.edge" + }, + "max_rel_err": 0.0, + "name": "gen0218", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806600", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0219", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806601", + "values_compared": 4582 + }, + { + "max_rel_err": 0.0, + "name": "gen0220", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806602", + "values_compared": 5139 + }, + { + "max_rel_err": 0.0, + "name": "gen0221", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806603", + "values_compared": 3911 + }, + { + "max_rel_err": 0.0, + "name": "gen0222", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806604", + "values_compared": 3333 + }, + { + "max_rel_err": 0.0, + "name": "gen0223", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806605", + "values_compared": 7153 + }, + { + "max_rel_err": 0.0, + "name": "gen0224", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806606", + "values_compared": 3591 + }, + { + "max_rel_err": 0.0, + "name": "gen0225", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806607", + "values_compared": 1106 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0226", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806608", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0227", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806609", + "values_compared": 3637 + }, + { + "max_rel_err": 0.0, + "name": "gen0228", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806610", + "values_compared": 4620 + }, + { + "max_rel_err": 0.0, + "name": "gen0229", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806611", + "values_compared": 422 + }, + { + "max_rel_err": 0.0, + "name": "gen0230", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806612", + "values_compared": 1103 + }, + { + "max_rel_err": 0.0, + "name": "gen0231", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806613", + "values_compared": 1301 + }, + { + "max_rel_err": 0.0, + "name": "gen0232", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806614", + "values_compared": 3644 + }, + { + "max_rel_err": 0.0, + "name": "gen0233", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806615", + "values_compared": 3887 + }, + { + "max_rel_err": 0.0, + "name": "gen0234", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806616", + "values_compared": 2050 + }, + { + "max_rel_err": 0.0, + "name": "gen0235", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806617", + "values_compared": 3066 + }, + { + "max_rel_err": 0.0, + "name": "gen0236", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806618", + "values_compared": 1159 + }, + { + "max_rel_err": 0.0, + "name": "gen0237", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806619", + "values_compared": 63 + }, + { + "max_rel_err": 0.0, + "name": "gen0238", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806620", + "values_compared": 925 + }, + { + "max_rel_err": 0.0, + "name": "gen0239", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806621", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0240", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806622", + "values_compared": 7147 + }, + { + "max_rel_err": 0.0, + "name": "gen0241", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806623", + "values_compared": 9442 + }, + { + "max_rel_err": 0.0, + "name": "gen0242", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806624", + "values_compared": 4115 + }, + { + "max_rel_err": 0.0, + "name": "gen0243", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806625", + "values_compared": 5336 + }, + { + "max_rel_err": 0.0, + "name": "gen0244", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806626", + "values_compared": 1865 + }, + { + "max_rel_err": 0.0, + "name": "gen0245", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806627", + "values_compared": 1685 + }, + { + "max_rel_err": 0.0, + "name": "gen0246", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806628", + "values_compared": 3927 + }, + { + "max_rel_err": 0.0, + "name": "gen0247", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806629", + "values_compared": 6513 + }, + { + "max_rel_err": 0.0, + "name": "gen0248", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806630", + "values_compared": 7317 + }, + { + "max_rel_err": 0.0, + "name": "gen0249", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806631", + "values_compared": 1964 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "gen0250", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806632", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0251", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806633", + "values_compared": 1935 + }, + { + "max_rel_err": 0.0, + "name": "gen0252", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806634", + "values_compared": 2466 + }, + { + "max_rel_err": 0.0, + "name": "gen0253", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806635", + "values_compared": 4988 + }, + { + "max_rel_err": 0.0, + "name": "gen0254", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806636", + "values_compared": 6288 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0255", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806637", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0256", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806638", + "values_compared": 2052 + }, + { + "max_rel_err": 0.0, + "name": "gen0257", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806639", + "values_compared": 1366 + }, + { + "max_rel_err": 0.0, + "name": "gen0258", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806640", + "values_compared": 63 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0259", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806641", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0260", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806642", + "values_compared": 2410 + }, + { + "max_rel_err": 0.0, + "name": "gen0261", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806643", + "values_compared": 6574 + }, + { + "max_rel_err": 0.0, + "name": "gen0262", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806644", + "values_compared": 2729 + }, + { + "max_rel_err": 0.0, + "name": "gen0263", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806645", + "values_compared": 7676 + }, + { + "max_rel_err": 0.0, + "name": "gen0264", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806646", + "values_compared": 1709 + }, + { + "max_rel_err": 0.0, + "name": "gen0265", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806647", + "values_compared": 3326 + }, + { + "max_rel_err": 0.0, + "name": "gen0266", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806648", + "values_compared": 4657 + }, + { + "max_rel_err": 0.0, + "name": "gen0267", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806649", + "values_compared": 6420 + }, + { + "max_rel_err": 0.0, + "name": "gen0268", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806650", + "values_compared": 3685 + }, + { + "max_rel_err": 0.0, + "name": "gen0269", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806651", + "values_compared": 2242 + }, + { + "max_rel_err": 0.0, + "name": "gen0270", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806652", + "values_compared": 7380 + }, + { + "max_rel_err": 0.0, + "name": "gen0271", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806653", + "values_compared": 847 + }, + { + "max_rel_err": 0.0, + "name": "gen0272", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806654", + "values_compared": 4405 + }, + { + "max_rel_err": 0.0, + "name": "gen0273", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806655", + "values_compared": 3438 + }, + { + "max_rel_err": 0.0, + "name": "gen0274", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806656", + "values_compared": 6400 + }, + { + "max_rel_err": 0.0, + "name": "gen0275", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806657", + "values_compared": 4749 + }, + { + "max_rel_err": 0.0, + "name": "gen0276", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806658", + "values_compared": 4006 + }, + { + "max_rel_err": 0.0, + "name": "gen0277", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806659", + "values_compared": 3408 + }, + { + "max_rel_err": 0.0, + "name": "gen0278", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806660", + "values_compared": 4489 + }, + { + "max_rel_err": 0.0, + "name": "gen0279", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806661", + "values_compared": 3131 + }, + { + "max_rel_err": 0.0, + "name": "gen0280", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806662", + "values_compared": 9576 + }, + { + "max_rel_err": 0.0, + "name": "gen0281", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806663", + "values_compared": 5284 + }, + { + "max_rel_err": 0.0, + "name": "gen0282", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806664", + "values_compared": 1929 + }, + { + "max_rel_err": 0.0, + "name": "gen0283", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806665", + "values_compared": 4242 + }, + { + "max_rel_err": 0.0, + "name": "gen0284", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806666", + "values_compared": 3850 + }, + { + "max_rel_err": 0.0, + "name": "gen0285", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806667", + "values_compared": 4816 + }, + { + "max_rel_err": 0.0, + "name": "gen0286", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806668", + "values_compared": 2973 + }, + { + "max_rel_err": 0.0, + "name": "gen0287", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806669", + "values_compared": 1354 + }, + { + "max_rel_err": 0.0, + "name": "gen0288", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806670", + "values_compared": 2912 + }, + { + "max_rel_err": 0.0, + "name": "gen0289", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806671", + "values_compared": 2009 + }, + { + "max_rel_err": 0.0, + "name": "gen0290", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806672", + "values_compared": 43 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0291", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806673", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0292", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806674", + "values_compared": 3654 + }, + { + "max_rel_err": 0.0, + "name": "gen0293", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806675", + "values_compared": 3240 + }, + { + "max_rel_err": 0.0, + "name": "gen0294", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806676", + "values_compared": 3644 + }, + { + "max_rel_err": 0.0, + "name": "gen0295", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806677", + "values_compared": 2088 + }, + { + "max_rel_err": 0.0, + "name": "gen0296", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806678", + "values_compared": 5436 + }, + { + "max_rel_err": 0.0, + "name": "gen0297", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806679", + "values_compared": 1066 + }, + { + "max_rel_err": 0.0, + "name": "gen0298", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806680", + "values_compared": 4054 + }, + { + "max_rel_err": 0.0, + "name": "gen0299", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806681", + "values_compared": 5977 + }, + { + "max_rel_err": 0.0, + "name": "gen0300", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806682", + "values_compared": 4126 + }, + { + "max_rel_err": 0.0, + "name": "gen0301", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806683", + "values_compared": 1024 + }, + { + "max_rel_err": 0.0, + "name": "gen0302", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806684", + "values_compared": 8253 + }, + { + "max_rel_err": 0.0, + "name": "gen0303", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806685", + "values_compared": 8777 + }, + { + "max_rel_err": 0.0, + "name": "gen0304", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806686", + "values_compared": 3136 + }, + { + "max_rel_err": 0.0, + "name": "gen0305", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806687", + "values_compared": 4210 + }, + { + "max_rel_err": 0.0, + "name": "gen0306", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806688", + "values_compared": 517 + }, + { + "max_rel_err": 0.0, + "name": "gen0307", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806689", + "values_compared": 2224 + }, + { + "max_rel_err": 0.0, + "name": "gen0308", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806690", + "values_compared": 2033 + }, + { + "max_rel_err": 0.0, + "name": "gen0309", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806691", + "values_compared": 1077 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0310", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806692", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0311", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806693", + "values_compared": 2549 + }, + { + "max_rel_err": 0.0, + "name": "gen0312", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806694", + "values_compared": 2076 + }, + { + "max_rel_err": 0.0, + "name": "gen0313", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806695", + "values_compared": 2411 + }, + { + "max_rel_err": 0.0, + "name": "gen0314", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806696", + "values_compared": 4097 + }, + { + "max_rel_err": 0.0, + "name": "gen0315", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806697", + "values_compared": 3092 + }, + { + "max_rel_err": 0.0, + "name": "gen0316", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806698", + "values_compared": 7100 + }, + { + "max_rel_err": 0.0, + "name": "gen0317", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806699", + "values_compared": 749 + }, + { + "deferred": { + "symbol": "SmFace::GetTolerance", + "unit": "topology.face_p2" + }, + "max_rel_err": 0.0, + "name": "gen0318", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806700", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0319", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806701", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0320", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806702", + "values_compared": 2798 + }, + { + "max_rel_err": 0.0, + "name": "gen0321", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806703", + "values_compared": 1315 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0322", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806704", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0323", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806705", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen0324", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806706", + "values_compared": 1272 + }, + { + "max_rel_err": 0.0, + "name": "gen0325", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806707", + "values_compared": 6349 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0326", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806708", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0327", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806709", + "values_compared": 1043 + }, + { + "max_rel_err": 0.0, + "name": "gen0328", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806710", + "values_compared": 1453 + }, + { + "max_rel_err": 0.0, + "name": "gen0329", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806711", + "values_compared": 9441 + }, + { + "max_rel_err": 0.0, + "name": "gen0330", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806712", + "values_compared": 3393 + }, + { + "max_rel_err": 0.0, + "name": "gen0331", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806713", + "values_compared": 4061 + }, + { + "max_rel_err": 0.0, + "name": "gen0332", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806714", + "values_compared": 3146 + }, + { + "max_rel_err": 0.0, + "name": "gen0333", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806715", + "values_compared": 1280 + }, + { + "max_rel_err": 0.0, + "name": "gen0334", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806716", + "values_compared": 3278 + }, + { + "max_rel_err": 0.0, + "name": "gen0335", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806717", + "values_compared": 5070 + }, + { + "max_rel_err": 0.0, + "name": "gen0336", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806718", + "values_compared": 1364 + }, + { + "max_rel_err": 0.0, + "name": "gen0337", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806719", + "values_compared": 5654 + }, + { + "max_rel_err": 0.0, + "name": "gen0338", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806720", + "values_compared": 6168 + }, + { + "deferred": { + "symbol": "SmSurface::Evaluate1stDerivatives", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0339", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806721", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0340", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806722", + "values_compared": 4758 + }, + { + "max_rel_err": 0.0, + "name": "gen0341", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806723", + "values_compared": 4611 + }, + { + "max_rel_err": 0.0, + "name": "gen0342", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806724", + "values_compared": 3916 + }, + { + "max_rel_err": 0.0, + "name": "gen0343", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806725", + "values_compared": 3497 + }, + { + "max_rel_err": 0.0, + "name": "gen0344", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806726", + "values_compared": 2471 + }, + { + "max_rel_err": 0.0, + "name": "gen0345", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806727", + "values_compared": 3891 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0346", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806728", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0347", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806729", + "values_compared": 4605 + }, + { + "max_rel_err": 0.0, + "name": "gen0348", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806730", + "values_compared": 691 + }, + { + "max_rel_err": 0.0, + "name": "gen0349", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806731", + "values_compared": 3038 + }, + { + "max_rel_err": 0.0, + "name": "gen0350", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806732", + "values_compared": 3870 + }, + { + "max_rel_err": 0.0, + "name": "gen0351", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806733", + "values_compared": 5317 + }, + { + "max_rel_err": 0.0, + "name": "gen0352", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806734", + "values_compared": 1695 + }, + { + "max_rel_err": 0.0, + "name": "gen0353", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806735", + "values_compared": 3682 + }, + { + "max_rel_err": 0.0, + "name": "gen0354", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806736", + "values_compared": 3798 + }, + { + "max_rel_err": 0.0, + "name": "gen0355", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806737", + "values_compared": 448 + }, + { + "max_rel_err": 0.0, + "name": "gen0356", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806738", + "values_compared": 5335 + }, + { + "max_rel_err": 0.0, + "name": "gen0357", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806739", + "values_compared": 4290 + }, + { + "max_rel_err": 0.0, + "name": "gen0358", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806740", + "values_compared": 2860 + }, + { + "max_rel_err": 0.0, + "name": "gen0359", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806741", + "values_compared": 505 + }, + { + "max_rel_err": 0.0, + "name": "gen0360", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806742", + "values_compared": 6759 + }, + { + "max_rel_err": 0.0, + "name": "gen0361", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806743", + "values_compared": 1233 + }, + { + "deferred": { + "symbol": "SmEdge::GetTolerance", + "unit": "topology.edge" + }, + "max_rel_err": 0.0, + "name": "gen0362", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806744", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0363", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806745", + "values_compared": 2038 + }, + { + "max_rel_err": 0.0, + "name": "gen0364", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806746", + "values_compared": 2607 + }, + { + "max_rel_err": 0.0, + "name": "gen0365", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806747", + "values_compared": 5373 + }, + { + "max_rel_err": 0.0, + "name": "gen0366", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806748", + "values_compared": 3103 + }, + { + "max_rel_err": 0.0, + "name": "gen0367", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806749", + "values_compared": 5050 + }, + { + "max_rel_err": 0.0, + "name": "gen0368", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806750", + "values_compared": 4581 + }, + { + "max_rel_err": 0.0, + "name": "gen0369", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806751", + "values_compared": 1077 + }, + { + "max_rel_err": 0.0, + "name": "gen0370", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806752", + "values_compared": 591 + }, + { + "max_rel_err": 0.0, + "name": "gen0371", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806753", + "values_compared": 8192 + }, + { + "max_rel_err": 0.0, + "name": "gen0372", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806754", + "values_compared": 1317 + }, + { + "max_rel_err": 0.0, + "name": "gen0373", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806755", + "values_compared": 1462 + }, + { + "max_rel_err": 0.0, + "name": "gen0374", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806756", + "values_compared": 735 + }, + { + "max_rel_err": 0.0, + "name": "gen0375", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806757", + "values_compared": 568 + }, + { + "max_rel_err": 0.0, + "name": "gen0376", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806758", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0377", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806759", + "values_compared": 1775 + }, + { + "max_rel_err": 0.0, + "name": "gen0378", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806760", + "values_compared": 1593 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0379", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806761", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0380", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806762", + "values_compared": 4357 + }, + { + "max_rel_err": 0.0, + "name": "gen0381", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806763", + "values_compared": 3926 + }, + { + "max_rel_err": 0.0, + "name": "gen0382", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806764", + "values_compared": 3049 + }, + { + "max_rel_err": 0.0, + "name": "gen0383", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806765", + "values_compared": 7830 + }, + { + "deferred": { + "symbol": "SmFace::GetTolerance", + "unit": "topology.face_p2" + }, + "max_rel_err": 0.0, + "name": "gen0384", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806766", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0385", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806767", + "values_compared": 2046 + }, + { + "max_rel_err": 0.0, + "name": "gen0386", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806768", + "values_compared": 1865 + }, + { + "max_rel_err": 0.0, + "name": "gen0387", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806769", + "values_compared": 6733 + }, + { + "max_rel_err": 0.0, + "name": "gen0388", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806770", + "values_compared": 3014 + }, + { + "max_rel_err": 0.0, + "name": "gen0389", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806771", + "values_compared": 5539 + }, + { + "max_rel_err": 0.0, + "name": "gen0390", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806772", + "values_compared": 4852 + }, + { + "max_rel_err": 0.0, + "name": "gen0391", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806773", + "values_compared": 4399 + }, + { + "max_rel_err": 0.0, + "name": "gen0392", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806774", + "values_compared": 569 + }, + { + "max_rel_err": 0.0, + "name": "gen0393", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806775", + "values_compared": 1799 + }, + { + "max_rel_err": 0.0, + "name": "gen0394", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806776", + "values_compared": 4359 + }, + { + "max_rel_err": 0.0, + "name": "gen0395", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806777", + "values_compared": 2125 + }, + { + "max_rel_err": 0.0, + "name": "gen0396", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806778", + "values_compared": 4087 + }, + { + "max_rel_err": 0.0, + "name": "gen0397", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806779", + "values_compared": 5501 + }, + { + "max_rel_err": 0.0, + "name": "gen0398", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806780", + "values_compared": 5029 + }, + { + "max_rel_err": 0.0, + "name": "gen0399", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806781", + "values_compared": 2252 + }, + { + "max_rel_err": 0.0, + "name": "gen0400", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806782", + "values_compared": 3957 + }, + { + "max_rel_err": 0.0, + "name": "gen0401", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806783", + "values_compared": 5308 + }, + { + "max_rel_err": 0.0, + "name": "gen0402", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806784", + "values_compared": 1466 + }, + { + "max_rel_err": 0.0, + "name": "gen0403", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806785", + "values_compared": 5542 + }, + { + "max_rel_err": 0.0, + "name": "gen0404", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806786", + "values_compared": 2493 + }, + { + "max_rel_err": 0.0, + "name": "gen0405", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806787", + "values_compared": 2081 + }, + { + "max_rel_err": 0.0, + "name": "gen0406", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806788", + "values_compared": 4065 + }, + { + "max_rel_err": 0.0, + "name": "gen0407", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806789", + "values_compared": 5731 + }, + { + "max_rel_err": 0.0, + "name": "gen0408", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806790", + "values_compared": 3944 + }, + { + "max_rel_err": 0.0, + "name": "gen0409", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806791", + "values_compared": 947 + }, + { + "max_rel_err": 0.0, + "name": "gen0410", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806792", + "values_compared": 1990 + }, + { + "max_rel_err": 0.0, + "name": "gen0411", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806793", + "values_compared": 4431 + }, + { + "max_rel_err": 0.0, + "name": "gen0412", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806794", + "values_compared": 2343 + }, + { + "max_rel_err": 0.0, + "name": "gen0413", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806795", + "values_compared": 1316 + }, + { + "max_rel_err": 0.0, + "name": "gen0414", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806796", + "values_compared": 4487 + }, + { + "max_rel_err": 0.0, + "name": "gen0415", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806797", + "values_compared": 4622 + }, + { + "max_rel_err": 0.0, + "name": "gen0416", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806798", + "values_compared": 4034 + }, + { + "max_rel_err": 0.0, + "name": "gen0417", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806799", + "values_compared": 3249 + }, + { + "max_rel_err": 0.0, + "name": "gen0418", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806800", + "values_compared": 777 + }, + { + "max_rel_err": 0.0, + "name": "gen0419", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806801", + "values_compared": 1958 + }, + { + "max_rel_err": 0.0, + "name": "gen0420", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806802", + "values_compared": 3950 + }, + { + "max_rel_err": 0.0, + "name": "gen0421", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806803", + "values_compared": 1618 + }, + { + "max_rel_err": 0.0, + "name": "gen0422", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806804", + "values_compared": 2489 + }, + { + "max_rel_err": 0.0, + "name": "gen0423", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806805", + "values_compared": 4580 + }, + { + "max_rel_err": 0.0, + "name": "gen0424", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806806", + "values_compared": 6327 + }, + { + "max_rel_err": 0.0, + "name": "gen0425", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806807", + "values_compared": 4944 + }, + { + "max_rel_err": 0.0, + "name": "gen0426", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806808", + "values_compared": 5697 + }, + { + "max_rel_err": 0.0, + "name": "gen0427", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806809", + "values_compared": 4944 + }, + { + "max_rel_err": 0.0, + "name": "gen0428", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806810", + "values_compared": 6847 + }, + { + "max_rel_err": 0.0, + "name": "gen0429", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806811", + "values_compared": 694 + }, + { + "max_rel_err": 0.0, + "name": "gen0430", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806812", + "values_compared": 2992 + }, + { + "max_rel_err": 0.0, + "name": "gen0431", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806813", + "values_compared": 4040 + }, + { + "max_rel_err": 0.0, + "name": "gen0432", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806814", + "values_compared": 3544 + }, + { + "max_rel_err": 0.0, + "name": "gen0433", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806815", + "values_compared": 2905 + }, + { + "max_rel_err": 0.0, + "name": "gen0434", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806816", + "values_compared": 1677 + }, + { + "max_rel_err": 0.0, + "name": "gen0435", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806817", + "values_compared": 5091 + }, + { + "max_rel_err": 0.0, + "name": "gen0436", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806818", + "values_compared": 2848 + }, + { + "max_rel_err": 0.0, + "name": "gen0437", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806819", + "values_compared": 5543 + }, + { + "max_rel_err": 0.0, + "name": "gen0438", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806820", + "values_compared": 386 + }, + { + "max_rel_err": 0.0, + "name": "gen0439", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806821", + "values_compared": 2676 + }, + { + "max_rel_err": 0.0, + "name": "gen0440", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806822", + "values_compared": 4775 + }, + { + "max_rel_err": 0.0, + "name": "gen0441", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806823", + "values_compared": 3758 + }, + { + "max_rel_err": 0.0, + "name": "gen0442", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806824", + "values_compared": 4979 + }, + { + "max_rel_err": 0.0, + "name": "gen0443", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806825", + "values_compared": 1932 + }, + { + "max_rel_err": 0.0, + "name": "gen0444", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806826", + "values_compared": 3589 + }, + { + "max_rel_err": 0.0, + "name": "gen0445", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806827", + "values_compared": 2955 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0446", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806828", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0447", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806829", + "values_compared": 3767 + }, + { + "max_rel_err": 0.0, + "name": "gen0448", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806830", + "values_compared": 3368 + }, + { + "max_rel_err": 0.0, + "name": "gen0449", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806831", + "values_compared": 4526 + }, + { + "max_rel_err": 0.0, + "name": "gen0450", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806832", + "values_compared": 1473 + }, + { + "deferred": { + "symbol": "SmEdge::GetTolerance", + "unit": "topology.edge" + }, + "max_rel_err": 0.0, + "name": "gen0451", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806833", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0452", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806834", + "values_compared": 1667 + }, + { + "max_rel_err": 0.0, + "name": "gen0453", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806835", + "values_compared": 3492 + }, + { + "max_rel_err": 0.0, + "name": "gen0454", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806836", + "values_compared": 2458 + }, + { + "max_rel_err": 0.0, + "name": "gen0455", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806837", + "values_compared": 1196 + }, + { + "max_rel_err": 0.0, + "name": "gen0456", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806838", + "values_compared": 3418 + }, + { + "max_rel_err": 0.0, + "name": "gen0457", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806839", + "values_compared": 2110 + }, + { + "max_rel_err": 0.0, + "name": "gen0458", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806840", + "values_compared": 5057 + }, + { + "max_rel_err": 0.0, + "name": "gen0459", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806841", + "values_compared": 4827 + }, + { + "max_rel_err": 0.0, + "name": "gen0460", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806842", + "values_compared": 3069 + }, + { + "max_rel_err": 0.0, + "name": "gen0461", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806843", + "values_compared": 3726 + }, + { + "max_rel_err": 0.0, + "name": "gen0462", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806844", + "values_compared": 5775 + }, + { + "max_rel_err": 0.0, + "name": "gen0463", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806845", + "values_compared": 1464 + }, + { + "deferred": { + "symbol": "SmEdge::GetTolerance", + "unit": "topology.edge" + }, + "max_rel_err": 0.0, + "name": "gen0464", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806846", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0465", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806847", + "values_compared": 5961 + }, + { + "max_rel_err": 0.0, + "name": "gen0466", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806848", + "values_compared": 1907 + }, + { + "max_rel_err": 0.0, + "name": "gen0467", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806849", + "values_compared": 2530 + }, + { + "max_rel_err": 0.0, + "name": "gen0468", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806850", + "values_compared": 6260 + }, + { + "max_rel_err": 0.0, + "name": "gen0469", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806851", + "values_compared": 5336 + }, + { + "max_rel_err": 0.0, + "name": "gen0470", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806852", + "values_compared": 1097 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0471", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806853", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0472", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806854", + "values_compared": 3317 + }, + { + "max_rel_err": 0.0, + "name": "gen0473", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806855", + "values_compared": 4060 + }, + { + "max_rel_err": 0.0, + "name": "gen0474", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806856", + "values_compared": 860 + }, + { + "max_rel_err": 0.0, + "name": "gen0475", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806857", + "values_compared": 4752 + }, + { + "max_rel_err": 0.0, + "name": "gen0476", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806858", + "values_compared": 6330 + }, + { + "deferred": { + "symbol": "SmEdge::GetTolerance", + "unit": "topology.edge" + }, + "max_rel_err": 0.0, + "name": "gen0477", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806859", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0478", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806860", + "values_compared": 3843 + }, + { + "max_rel_err": 0.0, + "name": "gen0479", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806861", + "values_compared": 4030 + }, + { + "max_rel_err": 0.0, + "name": "gen0480", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806862", + "values_compared": 4986 + }, + { + "max_rel_err": 0.0, + "name": "gen0481", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806863", + "values_compared": 2542 + }, + { + "max_rel_err": 0.0, + "name": "gen0482", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806864", + "values_compared": 4082 + }, + { + "max_rel_err": 0.0, + "name": "gen0483", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806865", + "values_compared": 3652 + }, + { + "max_rel_err": 0.0, + "name": "gen0484", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806866", + "values_compared": 992 + }, + { + "max_rel_err": 0.0, + "name": "gen0485", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806867", + "values_compared": 6602 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0486", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806868", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0487", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806869", + "values_compared": 2970 + }, + { + "max_rel_err": 0.0, + "name": "gen0488", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806870", + "values_compared": 2340 + }, + { + "max_rel_err": 0.0, + "name": "gen0489", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806871", + "values_compared": 2386 + }, + { + "max_rel_err": 0.0, + "name": "gen0490", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806872", + "values_compared": 2437 + }, + { + "max_rel_err": 0.0, + "name": "gen0491", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806873", + "values_compared": 371 + }, + { + "max_rel_err": 0.0, + "name": "gen0492", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806874", + "values_compared": 2373 + }, + { + "max_rel_err": 0.0, + "name": "gen0493", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806875", + "values_compared": 3405 + }, + { + "max_rel_err": 0.0, + "name": "gen0494", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806876", + "values_compared": 1313 + }, + { + "max_rel_err": 0.0, + "name": "gen0495", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806877", + "values_compared": 1562 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0496", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806878", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0497", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806879", + "values_compared": 8294 + }, + { + "max_rel_err": 0.0, + "name": "gen0498", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806880", + "values_compared": 7122 + }, + { + "max_rel_err": 0.0, + "name": "gen0499", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806881", + "values_compared": 5166 + }, + { + "max_rel_err": 0.0, + "name": "gen0500", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806882", + "values_compared": 5720 + }, + { + "max_rel_err": 0.0, + "name": "gen0501", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806883", + "values_compared": 1277 + }, + { + "max_rel_err": 0.0, + "name": "gen0502", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806884", + "values_compared": 2014 + }, + { + "max_rel_err": 0.0, + "name": "gen0503", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806885", + "values_compared": 8974 + }, + { + "max_rel_err": 0.0, + "name": "gen0504", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806886", + "values_compared": 3336 + }, + { + "max_rel_err": 0.0, + "name": "gen0505", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806887", + "values_compared": 2093 + }, + { + "max_rel_err": 0.0, + "name": "gen0506", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806888", + "values_compared": 8031 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0507", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806889", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0508", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806890", + "values_compared": 7125 + }, + { + "max_rel_err": 0.0, + "name": "gen0509", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806891", + "values_compared": 3690 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0510", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806892", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0511", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806893", + "values_compared": 3006 + }, + { + "max_rel_err": 0.0, + "name": "gen0512", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806894", + "values_compared": 5442 + }, + { + "max_rel_err": 0.0, + "name": "gen0513", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806895", + "values_compared": 5941 + }, + { + "max_rel_err": 0.0, + "name": "gen0514", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806896", + "values_compared": 7119 + }, + { + "max_rel_err": 0.0, + "name": "gen0515", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806897", + "values_compared": 3305 + }, + { + "max_rel_err": 0.0, + "name": "gen0516", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806898", + "values_compared": 3058 + }, + { + "max_rel_err": 0.0, + "name": "gen0517", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806899", + "values_compared": 5336 + }, + { + "max_rel_err": 0.0, + "name": "gen0518", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806900", + "values_compared": 2228 + }, + { + "max_rel_err": 0.0, + "name": "gen0519", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806901", + "values_compared": 5991 + }, + { + "max_rel_err": 0.0, + "name": "gen0520", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806902", + "values_compared": 2238 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0521", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806903", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0522", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806904", + "values_compared": 4759 + }, + { + "max_rel_err": 0.0, + "name": "gen0523", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806905", + "values_compared": 1616 + }, + { + "max_rel_err": 0.0, + "name": "gen0524", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806906", + "values_compared": 1538 + }, + { + "max_rel_err": 0.0, + "name": "gen0525", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806907", + "values_compared": 7692 + }, + { + "max_rel_err": 0.0, + "name": "gen0526", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806908", + "values_compared": 4863 + }, + { + "max_rel_err": 0.0, + "name": "gen0527", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806909", + "values_compared": 7736 + }, + { + "max_rel_err": 0.0, + "name": "gen0528", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806910", + "values_compared": 3343 + }, + { + "max_rel_err": 0.0, + "name": "gen0529", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806911", + "values_compared": 2642 + }, + { + "max_rel_err": 0.0, + "name": "gen0530", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806912", + "values_compared": 5487 + }, + { + "max_rel_err": 0.0, + "name": "gen0531", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806913", + "values_compared": 2931 + }, + { + "max_rel_err": 0.0, + "name": "gen0532", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806914", + "values_compared": 2410 + }, + { + "max_rel_err": 0.0, + "name": "gen0533", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806915", + "values_compared": 3515 + }, + { + "max_rel_err": 0.0, + "name": "gen0534", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806916", + "values_compared": 931 + }, + { + "max_rel_err": 0.0, + "name": "gen0535", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806917", + "values_compared": 7789 + }, + { + "max_rel_err": 0.0, + "name": "gen0536", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806918", + "values_compared": 929 + }, + { + "max_rel_err": 0.0, + "name": "gen0537", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806919", + "values_compared": 3541 + }, + { + "max_rel_err": 0.0, + "name": "gen0538", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806920", + "values_compared": 4776 + }, + { + "max_rel_err": 0.0, + "name": "gen0539", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806921", + "values_compared": 6489 + }, + { + "max_rel_err": 0.0, + "name": "gen0540", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806922", + "values_compared": 5100 + }, + { + "max_rel_err": 0.0, + "name": "gen0541", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806923", + "values_compared": 2422 + }, + { + "max_rel_err": 0.0, + "name": "gen0542", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806924", + "values_compared": 1043 + }, + { + "max_rel_err": 0.0, + "name": "gen0543", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806925", + "values_compared": 4879 + }, + { + "max_rel_err": 0.0, + "name": "gen0544", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806926", + "values_compared": 1233 + }, + { + "max_rel_err": 0.0, + "name": "gen0545", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806927", + "values_compared": 5706 + }, + { + "max_rel_err": 0.0, + "name": "gen0546", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806928", + "values_compared": 1080 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0547", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806929", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0548", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806930", + "values_compared": 6067 + }, + { + "max_rel_err": 0.0, + "name": "gen0549", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806931", + "values_compared": 4324 + }, + { + "max_rel_err": 0.0, + "name": "gen0550", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806932", + "values_compared": 4724 + }, + { + "max_rel_err": 0.0, + "name": "gen0551", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806933", + "values_compared": 2299 + }, + { + "max_rel_err": 0.0, + "name": "gen0552", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806934", + "values_compared": 1517 + }, + { + "max_rel_err": 0.0, + "name": "gen0553", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806935", + "values_compared": 5414 + }, + { + "max_rel_err": 0.0, + "name": "gen0554", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806936", + "values_compared": 4228 + }, + { + "max_rel_err": 0.0, + "name": "gen0555", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806937", + "values_compared": 3183 + }, + { + "max_rel_err": 0.0, + "name": "gen0556", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806938", + "values_compared": 5369 + }, + { + "max_rel_err": 0.0, + "name": "gen0557", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806939", + "values_compared": 4865 + }, + { + "max_rel_err": 0.0, + "name": "gen0558", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806940", + "values_compared": 4047 + }, + { + "max_rel_err": 0.0, + "name": "gen0559", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806941", + "values_compared": 3543 + }, + { + "max_rel_err": 0.0, + "name": "gen0560", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806942", + "values_compared": 5641 + }, + { + "max_rel_err": 0.0, + "name": "gen0561", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806943", + "values_compared": 8028 + }, + { + "max_rel_err": 0.0, + "name": "gen0562", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806944", + "values_compared": 6737 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "gen0563", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806945", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0564", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806946", + "values_compared": 4671 + }, + { + "max_rel_err": 0.0, + "name": "gen0565", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806947", + "values_compared": 1382 + }, + { + "max_rel_err": 0.0, + "name": "gen0566", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806948", + "values_compared": 5593 + }, + { + "max_rel_err": 0.0, + "name": "gen0567", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806949", + "values_compared": 3143 + }, + { + "max_rel_err": 0.0, + "name": "gen0568", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806950", + "values_compared": 2620 + }, + { + "max_rel_err": 0.0, + "name": "gen0569", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806951", + "values_compared": 2854 + }, + { + "max_rel_err": 0.0, + "name": "gen0570", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806952", + "values_compared": 2565 + }, + { + "max_rel_err": 0.0, + "name": "gen0571", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806953", + "values_compared": 1088 + }, + { + "max_rel_err": 0.0, + "name": "gen0572", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806954", + "values_compared": 2823 + }, + { + "deferred": { + "symbol": "SmFace::GetTolerance", + "unit": "topology.face_p2" + }, + "max_rel_err": 0.0, + "name": "gen0573", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806955", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0574", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806956", + "values_compared": 6437 + }, + { + "max_rel_err": 0.0, + "name": "gen0575", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806957", + "values_compared": 5110 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0576", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806958", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0577", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806959", + "values_compared": 6501 + }, + { + "max_rel_err": 0.0, + "name": "gen0578", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806960", + "values_compared": 5095 + }, + { + "max_rel_err": 0.0, + "name": "gen0579", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806961", + "values_compared": 4381 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0580", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806962", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0581", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806963", + "values_compared": 5620 + }, + { + "max_rel_err": 0.0, + "name": "gen0582", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806964", + "values_compared": 1366 + }, + { + "max_rel_err": 0.0, + "name": "gen0583", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806965", + "values_compared": 7074 + }, + { + "max_rel_err": 0.0, + "name": "gen0584", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806966", + "values_compared": 3994 + }, + { + "max_rel_err": 0.0, + "name": "gen0585", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806967", + "values_compared": 5665 + }, + { + "max_rel_err": 0.0, + "name": "gen0586", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806968", + "values_compared": 5216 + }, + { + "max_rel_err": 0.0, + "name": "gen0587", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806969", + "values_compared": 963 + }, + { + "max_rel_err": 0.0, + "name": "gen0588", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806970", + "values_compared": 2227 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "gen0589", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806971", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0590", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806972", + "values_compared": 4433 + }, + { + "max_rel_err": 0.0, + "name": "gen0591", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806973", + "values_compared": 2382 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0592", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806974", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmVertex::GetTolerance", + "unit": "topology.vertex" + }, + "max_rel_err": 0.0, + "name": "gen0593", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806975", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0594", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806976", + "values_compared": 4796 + }, + { + "max_rel_err": 0.0, + "name": "gen0595", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806977", + "values_compared": 6209 + }, + { + "max_rel_err": 0.0, + "name": "gen0596", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806978", + "values_compared": 6786 + }, + { + "max_rel_err": 0.0, + "name": "gen0597", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806979", + "values_compared": 860 + }, + { + "max_rel_err": 0.0, + "name": "gen0598", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806980", + "values_compared": 7499 + }, + { + "max_rel_err": 0.0, + "name": "gen0599", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806981", + "values_compared": 1509 + }, + { + "max_rel_err": 0.0, + "name": "gen0600", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806982", + "values_compared": 1200 + }, + { + "max_rel_err": 0.0, + "name": "gen0601", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806983", + "values_compared": 6293 + }, + { + "max_rel_err": 0.0, + "name": "gen0602", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806984", + "values_compared": 1077 + }, + { + "max_rel_err": 0.0, + "name": "gen0603", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806985", + "values_compared": 6372 + }, + { + "max_rel_err": 0.0, + "name": "gen0604", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806986", + "values_compared": 4434 + }, + { + "max_rel_err": 0.0, + "name": "gen0605", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806987", + "values_compared": 1854 + }, + { + "deferred": { + "symbol": "SmSurface::Evaluate1stDerivatives", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0606", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806988", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0607", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806989", + "values_compared": 4834 + }, + { + "max_rel_err": 0.0, + "name": "gen0608", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806990", + "values_compared": 3777 + }, + { + "max_rel_err": 0.0, + "name": "gen0609", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806991", + "values_compared": 4818 + }, + { + "max_rel_err": 0.0, + "name": "gen0610", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806992", + "values_compared": 5816 + }, + { + "max_rel_err": 0.0, + "name": "gen0611", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806993", + "values_compared": 2645 + }, + { + "max_rel_err": 0.0, + "name": "gen0612", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806994", + "values_compared": 2775 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0613", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143806995", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0614", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806996", + "values_compared": 3618 + }, + { + "max_rel_err": 0.0, + "name": "gen0615", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806997", + "values_compared": 2496 + }, + { + "max_rel_err": 0.0, + "name": "gen0616", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806998", + "values_compared": 6162 + }, + { + "max_rel_err": 0.0, + "name": "gen0617", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143806999", + "values_compared": 1316 + }, + { + "max_rel_err": 0.0, + "name": "gen0618", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807000", + "values_compared": 2052 + }, + { + "max_rel_err": 0.0, + "name": "gen0619", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807001", + "values_compared": 4511 + }, + { + "max_rel_err": 0.0, + "name": "gen0620", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807002", + "values_compared": 3488 + }, + { + "deferred": { + "symbol": "SmFace::GetTolerance", + "unit": "topology.face_p2" + }, + "max_rel_err": 0.0, + "name": "gen0621", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807003", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0622", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807004", + "values_compared": 6493 + }, + { + "max_rel_err": 0.0, + "name": "gen0623", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807005", + "values_compared": 4722 + }, + { + "max_rel_err": 0.0, + "name": "gen0624", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807006", + "values_compared": 1245 + }, + { + "max_rel_err": 0.0, + "name": "gen0625", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807007", + "values_compared": 3008 + }, + { + "max_rel_err": 0.0, + "name": "gen0626", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807008", + "values_compared": 6635 + }, + { + "max_rel_err": 0.0, + "name": "gen0627", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807009", + "values_compared": 7302 + }, + { + "max_rel_err": 0.0, + "name": "gen0628", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807010", + "values_compared": 1995 + }, + { + "max_rel_err": 0.0, + "name": "gen0629", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807011", + "values_compared": 658 + }, + { + "max_rel_err": 0.0, + "name": "gen0630", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807012", + "values_compared": 3792 + }, + { + "max_rel_err": 0.0, + "name": "gen0631", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807013", + "values_compared": 1701 + }, + { + "max_rel_err": 0.0, + "name": "gen0632", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807014", + "values_compared": 4628 + }, + { + "max_rel_err": 0.0, + "name": "gen0633", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807015", + "values_compared": 1541 + }, + { + "max_rel_err": 0.0, + "name": "gen0634", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807016", + "values_compared": 4044 + }, + { + "max_rel_err": 0.0, + "name": "gen0635", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807017", + "values_compared": 4007 + }, + { + "max_rel_err": 0.0, + "name": "gen0636", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807018", + "values_compared": 2845 + }, + { + "max_rel_err": 0.0, + "name": "gen0637", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807019", + "values_compared": 1329 + }, + { + "max_rel_err": 0.0, + "name": "gen0638", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807020", + "values_compared": 4421 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0639", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807021", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0640", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807022", + "values_compared": 565 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0641", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807023", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0642", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807024", + "values_compared": 6854 + }, + { + "max_rel_err": 0.0, + "name": "gen0643", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807025", + "values_compared": 7563 + }, + { + "max_rel_err": 0.0, + "name": "gen0644", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807026", + "values_compared": 3107 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0645", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807027", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0646", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807028", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0647", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807029", + "values_compared": 2931 + }, + { + "max_rel_err": 0.0, + "name": "gen0648", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807030", + "values_compared": 3856 + }, + { + "max_rel_err": 0.0, + "name": "gen0649", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807031", + "values_compared": 7705 + }, + { + "max_rel_err": 0.0, + "name": "gen0650", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807032", + "values_compared": 3265 + }, + { + "max_rel_err": 0.0, + "name": "gen0651", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807033", + "values_compared": 4054 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0652", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807034", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0653", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807035", + "values_compared": 2460 + }, + { + "max_rel_err": 0.0, + "name": "gen0654", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807036", + "values_compared": 3756 + }, + { + "max_rel_err": 0.0, + "name": "gen0655", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807037", + "values_compared": 2752 + }, + { + "max_rel_err": 0.0, + "name": "gen0656", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807038", + "values_compared": 783 + }, + { + "max_rel_err": 0.0, + "name": "gen0657", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807039", + "values_compared": 2528 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0658", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807040", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0659", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807041", + "values_compared": 1077 + }, + { + "max_rel_err": 0.0, + "name": "gen0660", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807042", + "values_compared": 2632 + }, + { + "max_rel_err": 0.0, + "name": "gen0661", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807043", + "values_compared": 7272 + }, + { + "max_rel_err": 0.0, + "name": "gen0662", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807044", + "values_compared": 5377 + }, + { + "max_rel_err": 0.0, + "name": "gen0663", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807045", + "values_compared": 5118 + }, + { + "max_rel_err": 0.0, + "name": "gen0664", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807046", + "values_compared": 5139 + }, + { + "max_rel_err": 0.0, + "name": "gen0665", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807047", + "values_compared": 6033 + }, + { + "max_rel_err": 0.0, + "name": "gen0666", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807048", + "values_compared": 3601 + }, + { + "max_rel_err": 0.0, + "name": "gen0667", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807049", + "values_compared": 3885 + }, + { + "max_rel_err": 0.0, + "name": "gen0668", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807050", + "values_compared": 3891 + }, + { + "max_rel_err": 0.0, + "name": "gen0669", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807051", + "values_compared": 4551 + }, + { + "max_rel_err": 0.0, + "name": "gen0670", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807052", + "values_compared": 3332 + }, + { + "max_rel_err": 0.0, + "name": "gen0671", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807053", + "values_compared": 4147 + }, + { + "max_rel_err": 0.0, + "name": "gen0672", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807054", + "values_compared": 1080 + }, + { + "max_rel_err": 0.0, + "name": "gen0673", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807055", + "values_compared": 1244 + }, + { + "max_rel_err": 0.0, + "name": "gen0674", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807056", + "values_compared": 3851 + }, + { + "max_rel_err": 0.0, + "name": "gen0675", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807057", + "values_compared": 3025 + }, + { + "max_rel_err": 0.0, + "name": "gen0676", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807058", + "values_compared": 3143 + }, + { + "max_rel_err": 0.0, + "name": "gen0677", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807059", + "values_compared": 1751 + }, + { + "max_rel_err": 0.0, + "name": "gen0678", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807060", + "values_compared": 3629 + }, + { + "max_rel_err": 0.0, + "name": "gen0679", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807061", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0680", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807062", + "values_compared": 1489 + }, + { + "max_rel_err": 0.0, + "name": "gen0681", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807063", + "values_compared": 3539 + }, + { + "max_rel_err": 0.0, + "name": "gen0682", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807064", + "values_compared": 2851 + }, + { + "max_rel_err": 0.0, + "name": "gen0683", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807065", + "values_compared": 1313 + }, + { + "max_rel_err": 0.0, + "name": "gen0684", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807066", + "values_compared": 4781 + }, + { + "max_rel_err": 0.0, + "name": "gen0685", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807067", + "values_compared": 3726 + }, + { + "max_rel_err": 0.0, + "name": "gen0686", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807068", + "values_compared": 2366 + }, + { + "max_rel_err": 0.0, + "name": "gen0687", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807069", + "values_compared": 2710 + }, + { + "max_rel_err": 0.0, + "name": "gen0688", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807070", + "values_compared": 1881 + }, + { + "max_rel_err": 0.0, + "name": "gen0689", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807071", + "values_compared": 6177 + }, + { + "max_rel_err": 0.0, + "name": "gen0690", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807072", + "values_compared": 6175 + }, + { + "max_rel_err": 0.0, + "name": "gen0691", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807073", + "values_compared": 4773 + }, + { + "max_rel_err": 0.0, + "name": "gen0692", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807074", + "values_compared": 2594 + }, + { + "max_rel_err": 0.0, + "name": "gen0693", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807075", + "values_compared": 3010 + }, + { + "max_rel_err": 0.0, + "name": "gen0694", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807076", + "values_compared": 4099 + }, + { + "max_rel_err": 0.0, + "name": "gen0695", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807077", + "values_compared": 7125 + }, + { + "max_rel_err": 0.0, + "name": "gen0696", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807078", + "values_compared": 973 + }, + { + "max_rel_err": 0.0, + "name": "gen0697", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807079", + "values_compared": 1366 + }, + { + "max_rel_err": 0.0, + "name": "gen0698", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807080", + "values_compared": 2848 + }, + { + "max_rel_err": 0.0, + "name": "gen0699", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807081", + "values_compared": 2591 + }, + { + "max_rel_err": 0.0, + "name": "gen0700", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807082", + "values_compared": 3123 + }, + { + "max_rel_err": 0.0, + "name": "gen0701", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807083", + "values_compared": 1322 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0702", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807084", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0703", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807085", + "values_compared": 3815 + }, + { + "max_rel_err": 0.0, + "name": "gen0704", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807086", + "values_compared": 6229 + }, + { + "max_rel_err": 0.0, + "name": "gen0705", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807087", + "values_compared": 616 + }, + { + "max_rel_err": 0.0, + "name": "gen0706", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807088", + "values_compared": 3485 + }, + { + "max_rel_err": 0.0, + "name": "gen0707", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807089", + "values_compared": 1472 + }, + { + "max_rel_err": 0.0, + "name": "gen0708", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807090", + "values_compared": 1869 + }, + { + "max_rel_err": 0.0, + "name": "gen0709", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807091", + "values_compared": 2617 + }, + { + "max_rel_err": 0.0, + "name": "gen0710", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807092", + "values_compared": 4160 + }, + { + "max_rel_err": 0.0, + "name": "gen0711", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807093", + "values_compared": 2809 + }, + { + "max_rel_err": 0.0, + "name": "gen0712", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807094", + "values_compared": 7402 + }, + { + "max_rel_err": 0.0, + "name": "gen0713", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807095", + "values_compared": 5510 + }, + { + "max_rel_err": 0.0, + "name": "gen0714", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807096", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "gen0715", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807097", + "values_compared": 4554 + }, + { + "max_rel_err": 0.0, + "name": "gen0716", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807098", + "values_compared": 1161 + }, + { + "max_rel_err": 0.0, + "name": "gen0717", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807099", + "values_compared": 4941 + }, + { + "max_rel_err": 0.0, + "name": "gen0718", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807100", + "values_compared": 3169 + }, + { + "max_rel_err": 0.0, + "name": "gen0719", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807101", + "values_compared": 5083 + }, + { + "max_rel_err": 0.0, + "name": "gen0720", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807102", + "values_compared": 4256 + }, + { + "max_rel_err": 0.0, + "name": "gen0721", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807103", + "values_compared": 3438 + }, + { + "max_rel_err": 0.0, + "name": "gen0722", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807104", + "values_compared": 6067 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0723", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807105", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0724", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807106", + "values_compared": 1296 + }, + { + "max_rel_err": 0.0, + "name": "gen0725", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807107", + "values_compared": 1120 + }, + { + "max_rel_err": 0.0, + "name": "gen0726", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807108", + "values_compared": 6115 + }, + { + "max_rel_err": 0.0, + "name": "gen0727", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807109", + "values_compared": 4174 + }, + { + "max_rel_err": 0.0, + "name": "gen0728", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807110", + "values_compared": 2604 + }, + { + "max_rel_err": 0.0, + "name": "gen0729", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807111", + "values_compared": 3007 + }, + { + "max_rel_err": 0.0, + "name": "gen0730", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807112", + "values_compared": 3644 + }, + { + "max_rel_err": 0.0, + "name": "gen0731", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807113", + "values_compared": 7421 + }, + { + "max_rel_err": 0.0, + "name": "gen0732", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807114", + "values_compared": 5942 + }, + { + "max_rel_err": 0.0, + "name": "gen0733", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807115", + "values_compared": 4734 + }, + { + "max_rel_err": 0.0, + "name": "gen0734", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807116", + "values_compared": 2740 + }, + { + "max_rel_err": 0.0, + "name": "gen0735", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807117", + "values_compared": 6367 + }, + { + "max_rel_err": 0.0, + "name": "gen0736", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807118", + "values_compared": 775 + }, + { + "max_rel_err": 0.0, + "name": "gen0737", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807119", + "values_compared": 2613 + }, + { + "max_rel_err": 0.0, + "name": "gen0738", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807120", + "values_compared": 4582 + }, + { + "max_rel_err": 0.0, + "name": "gen0739", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807121", + "values_compared": 6675 + }, + { + "max_rel_err": 0.0, + "name": "gen0740", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807122", + "values_compared": 4434 + }, + { + "max_rel_err": 0.0, + "name": "gen0741", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807123", + "values_compared": 3081 + }, + { + "max_rel_err": 0.0, + "name": "gen0742", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807124", + "values_compared": 6609 + }, + { + "max_rel_err": 0.0, + "name": "gen0743", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807125", + "values_compared": 6011 + }, + { + "max_rel_err": 0.0, + "name": "gen0744", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807126", + "values_compared": 9211 + }, + { + "max_rel_err": 0.0, + "name": "gen0745", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807127", + "values_compared": 7581 + }, + { + "max_rel_err": 0.0, + "name": "gen0746", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807128", + "values_compared": 1973 + }, + { + "max_rel_err": 0.0, + "name": "gen0747", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807129", + "values_compared": 4571 + }, + { + "max_rel_err": 0.0, + "name": "gen0748", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807130", + "values_compared": 2742 + }, + { + "max_rel_err": 0.0, + "name": "gen0749", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807131", + "values_compared": 5178 + }, + { + "max_rel_err": 0.0, + "name": "gen0750", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807132", + "values_compared": 4068 + }, + { + "max_rel_err": 0.0, + "name": "gen0751", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807133", + "values_compared": 964 + }, + { + "max_rel_err": 0.0, + "name": "gen0752", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807134", + "values_compared": 4551 + }, + { + "max_rel_err": 0.0, + "name": "gen0753", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807135", + "values_compared": 1295 + }, + { + "max_rel_err": 0.0, + "name": "gen0754", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807136", + "values_compared": 8499 + }, + { + "max_rel_err": 0.0, + "name": "gen0755", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807137", + "values_compared": 7090 + }, + { + "max_rel_err": 0.0, + "name": "gen0756", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807138", + "values_compared": 1284 + }, + { + "max_rel_err": 0.0, + "name": "gen0757", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807139", + "values_compared": 1881 + }, + { + "max_rel_err": 0.0, + "name": "gen0758", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807140", + "values_compared": 7792 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0759", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807141", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0760", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807142", + "values_compared": 2772 + }, + { + "max_rel_err": 0.0, + "name": "gen0761", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807143", + "values_compared": 1837 + }, + { + "max_rel_err": 0.0, + "name": "gen0762", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807144", + "values_compared": 1103 + }, + { + "max_rel_err": 0.0, + "name": "gen0763", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807145", + "values_compared": 5079 + }, + { + "max_rel_err": 0.0, + "name": "gen0764", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807146", + "values_compared": 2554 + }, + { + "deferred": { + "symbol": "SmFace::GetTolerance", + "unit": "topology.face_p2" + }, + "max_rel_err": 0.0, + "name": "gen0765", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807147", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0766", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807148", + "values_compared": 1706 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0767", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807149", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0768", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807150", + "values_compared": 5230 + }, + { + "max_rel_err": 0.0, + "name": "gen0769", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807151", + "values_compared": 5673 + }, + { + "max_rel_err": 0.0, + "name": "gen0770", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807152", + "values_compared": 4126 + }, + { + "max_rel_err": 0.0, + "name": "gen0771", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807153", + "values_compared": 4437 + }, + { + "max_rel_err": 0.0, + "name": "gen0772", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807154", + "values_compared": 4585 + }, + { + "max_rel_err": 0.0, + "name": "gen0773", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807155", + "values_compared": 6180 + }, + { + "max_rel_err": 0.0, + "name": "gen0774", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807156", + "values_compared": 3461 + }, + { + "max_rel_err": 0.0, + "name": "gen0775", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807157", + "values_compared": 1839 + }, + { + "max_rel_err": 0.0, + "name": "gen0776", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807158", + "values_compared": 7261 + }, + { + "max_rel_err": 0.0, + "name": "gen0777", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807159", + "values_compared": 3197 + }, + { + "max_rel_err": 0.0, + "name": "gen0778", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807160", + "values_compared": 2483 + }, + { + "max_rel_err": 0.0, + "name": "gen0779", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807161", + "values_compared": 4832 + }, + { + "max_rel_err": 0.0, + "name": "gen0780", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807162", + "values_compared": 339 + }, + { + "max_rel_err": 0.0, + "name": "gen0781", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807163", + "values_compared": 2697 + }, + { + "max_rel_err": 0.0, + "name": "gen0782", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807164", + "values_compared": 6414 + }, + { + "max_rel_err": 0.0, + "name": "gen0783", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807165", + "values_compared": 5572 + }, + { + "max_rel_err": 0.0, + "name": "gen0784", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807166", + "values_compared": 8523 + }, + { + "max_rel_err": 0.0, + "name": "gen0785", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807167", + "values_compared": 1043 + }, + { + "max_rel_err": 0.0, + "name": "gen0786", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807168", + "values_compared": 6142 + }, + { + "max_rel_err": 0.0, + "name": "gen0787", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807169", + "values_compared": 5399 + }, + { + "max_rel_err": 0.0, + "name": "gen0788", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807170", + "values_compared": 6645 + }, + { + "max_rel_err": 0.0, + "name": "gen0789", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807171", + "values_compared": 487 + }, + { + "max_rel_err": 0.0, + "name": "gen0790", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807172", + "values_compared": 640 + }, + { + "max_rel_err": 0.0, + "name": "gen0791", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807173", + "values_compared": 4393 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0792", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807174", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0793", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807175", + "values_compared": 2302 + }, + { + "max_rel_err": 0.0, + "name": "gen0794", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807176", + "values_compared": 1159 + }, + { + "max_rel_err": 0.0, + "name": "gen0795", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807177", + "values_compared": 798 + }, + { + "max_rel_err": 0.0, + "name": "gen0796", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807178", + "values_compared": 2332 + }, + { + "max_rel_err": 0.0, + "name": "gen0797", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807179", + "values_compared": 2360 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0798", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807180", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0799", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807181", + "values_compared": 7402 + }, + { + "max_rel_err": 0.0, + "name": "gen0800", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807182", + "values_compared": 1982 + }, + { + "max_rel_err": 0.0, + "name": "gen0801", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807183", + "values_compared": 469 + }, + { + "max_rel_err": 0.0, + "name": "gen0802", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807184", + "values_compared": 4242 + }, + { + "max_rel_err": 0.0, + "name": "gen0803", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807185", + "values_compared": 808 + }, + { + "max_rel_err": 0.0, + "name": "gen0804", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807186", + "values_compared": 567 + }, + { + "max_rel_err": 0.0, + "name": "gen0805", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807187", + "values_compared": 2851 + }, + { + "max_rel_err": 0.0, + "name": "gen0806", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807188", + "values_compared": 1503 + }, + { + "max_rel_err": 0.0, + "name": "gen0807", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807189", + "values_compared": 4516 + }, + { + "max_rel_err": 0.0, + "name": "gen0808", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807190", + "values_compared": 3095 + }, + { + "max_rel_err": 0.0, + "name": "gen0809", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807191", + "values_compared": 2844 + }, + { + "deferred": { + "symbol": "SmVertex::GetTolerance", + "unit": "topology.vertex" + }, + "max_rel_err": 0.0, + "name": "gen0810", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807192", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0811", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807193", + "values_compared": 3565 + }, + { + "max_rel_err": 0.0, + "name": "gen0812", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807194", + "values_compared": 4133 + }, + { + "max_rel_err": 0.0, + "name": "gen0813", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807195", + "values_compared": 1233 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0814", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807196", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0815", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807197", + "values_compared": 4083 + }, + { + "max_rel_err": 0.0, + "name": "gen0816", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807198", + "values_compared": 4245 + }, + { + "max_rel_err": 0.0, + "name": "gen0817", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807199", + "values_compared": 8627 + }, + { + "max_rel_err": 0.0, + "name": "gen0818", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807200", + "values_compared": 3560 + }, + { + "max_rel_err": 0.0, + "name": "gen0819", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807201", + "values_compared": 3262 + }, + { + "max_rel_err": 0.0, + "name": "gen0820", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807202", + "values_compared": 3808 + }, + { + "max_rel_err": 0.0, + "name": "gen0821", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807203", + "values_compared": 3695 + }, + { + "max_rel_err": 0.0, + "name": "gen0822", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807204", + "values_compared": 2185 + }, + { + "max_rel_err": 0.0, + "name": "gen0823", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807205", + "values_compared": 3808 + }, + { + "max_rel_err": 0.0, + "name": "gen0824", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807206", + "values_compared": 4013 + }, + { + "max_rel_err": 0.0, + "name": "gen0825", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807207", + "values_compared": 7784 + }, + { + "max_rel_err": 0.0, + "name": "gen0826", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807208", + "values_compared": 3001 + }, + { + "max_rel_err": 0.0, + "name": "gen0827", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807209", + "values_compared": 6412 + }, + { + "max_rel_err": 0.0, + "name": "gen0828", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807210", + "values_compared": 5639 + }, + { + "max_rel_err": 0.0, + "name": "gen0829", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807211", + "values_compared": 3352 + }, + { + "max_rel_err": 0.0, + "name": "gen0830", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807212", + "values_compared": 2411 + }, + { + "max_rel_err": 0.0, + "name": "gen0831", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807213", + "values_compared": 5147 + }, + { + "max_rel_err": 0.0, + "name": "gen0832", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807214", + "values_compared": 2193 + }, + { + "max_rel_err": 0.0, + "name": "gen0833", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807215", + "values_compared": 5102 + }, + { + "max_rel_err": 0.0, + "name": "gen0834", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807216", + "values_compared": 3327 + }, + { + "max_rel_err": 0.0, + "name": "gen0835", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807217", + "values_compared": 3668 + }, + { + "max_rel_err": 0.0, + "name": "gen0836", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807218", + "values_compared": 3287 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "gen0837", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807219", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0838", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807220", + "values_compared": 5884 + }, + { + "max_rel_err": 0.0, + "name": "gen0839", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807221", + "values_compared": 3120 + }, + { + "max_rel_err": 0.0, + "name": "gen0840", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807222", + "values_compared": 5469 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0841", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807223", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0842", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807224", + "values_compared": 3082 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0843", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807225", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0844", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807226", + "values_compared": 416 + }, + { + "max_rel_err": 0.0, + "name": "gen0845", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807227", + "values_compared": 3033 + }, + { + "max_rel_err": 0.0, + "name": "gen0846", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807228", + "values_compared": 1671 + }, + { + "max_rel_err": 0.0, + "name": "gen0847", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807229", + "values_compared": 2873 + }, + { + "max_rel_err": 0.0, + "name": "gen0848", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807230", + "values_compared": 7805 + }, + { + "max_rel_err": 0.0, + "name": "gen0849", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807231", + "values_compared": 4054 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0850", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807232", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0851", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807233", + "values_compared": 4949 + }, + { + "max_rel_err": 0.0, + "name": "gen0852", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807234", + "values_compared": 7088 + }, + { + "max_rel_err": 0.0, + "name": "gen0853", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807235", + "values_compared": 4646 + }, + { + "max_rel_err": 0.0, + "name": "gen0854", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807236", + "values_compared": 4735 + }, + { + "max_rel_err": 0.0, + "name": "gen0855", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807237", + "values_compared": 4000 + }, + { + "max_rel_err": 0.0, + "name": "gen0856", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807238", + "values_compared": 886 + }, + { + "max_rel_err": 0.0, + "name": "gen0857", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807239", + "values_compared": 1041 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0858", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807240", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0859", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807241", + "values_compared": 4621 + }, + { + "max_rel_err": 0.0, + "name": "gen0860", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807242", + "values_compared": 4344 + }, + { + "max_rel_err": 0.0, + "name": "gen0861", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807243", + "values_compared": 4925 + }, + { + "max_rel_err": 0.0, + "name": "gen0862", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807244", + "values_compared": 2671 + }, + { + "max_rel_err": 0.0, + "name": "gen0863", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807245", + "values_compared": 3890 + }, + { + "max_rel_err": 0.0, + "name": "gen0864", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807246", + "values_compared": 2123 + }, + { + "max_rel_err": 0.0, + "name": "gen0865", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807247", + "values_compared": 2263 + }, + { + "max_rel_err": 0.0, + "name": "gen0866", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807248", + "values_compared": 1394 + }, + { + "max_rel_err": 0.0, + "name": "gen0867", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807249", + "values_compared": 1284 + }, + { + "max_rel_err": 0.0, + "name": "gen0868", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807250", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen0869", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807251", + "values_compared": 2520 + }, + { + "max_rel_err": 0.0, + "name": "gen0870", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807252", + "values_compared": 7553 + }, + { + "max_rel_err": 0.0, + "name": "gen0871", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807253", + "values_compared": 3186 + }, + { + "max_rel_err": 0.0, + "name": "gen0872", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807254", + "values_compared": 3152 + }, + { + "max_rel_err": 0.0, + "name": "gen0873", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807255", + "values_compared": 5429 + }, + { + "max_rel_err": 0.0, + "name": "gen0874", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807256", + "values_compared": 1804 + }, + { + "max_rel_err": 0.0, + "name": "gen0875", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807257", + "values_compared": 4564 + }, + { + "max_rel_err": 0.0, + "name": "gen0876", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807258", + "values_compared": 5094 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0877", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807259", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0878", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807260", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0879", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807261", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0880", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807262", + "values_compared": 2349 + }, + { + "max_rel_err": 0.0, + "name": "gen0881", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807263", + "values_compared": 4491 + }, + { + "max_rel_err": 0.0, + "name": "gen0882", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807264", + "values_compared": 4065 + }, + { + "max_rel_err": 0.0, + "name": "gen0883", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807265", + "values_compared": 5106 + }, + { + "max_rel_err": 0.0, + "name": "gen0884", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807266", + "values_compared": 3733 + }, + { + "max_rel_err": 0.0, + "name": "gen0885", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807267", + "values_compared": 2488 + }, + { + "max_rel_err": 0.0, + "name": "gen0886", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807268", + "values_compared": 849 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0887", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807269", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0888", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807270", + "values_compared": 5847 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0889", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807271", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0890", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807272", + "values_compared": 31 + }, + { + "max_rel_err": 0.0, + "name": "gen0891", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807273", + "values_compared": 6218 + }, + { + "max_rel_err": 0.0, + "name": "gen0892", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807274", + "values_compared": 3302 + }, + { + "max_rel_err": 0.0, + "name": "gen0893", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807275", + "values_compared": 1948 + }, + { + "max_rel_err": 0.0, + "name": "gen0894", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807276", + "values_compared": 4394 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "gen0895", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807277", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0896", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807278", + "values_compared": 3336 + }, + { + "max_rel_err": 0.0, + "name": "gen0897", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807279", + "values_compared": 1209 + }, + { + "max_rel_err": 0.0, + "name": "gen0898", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807280", + "values_compared": 3260 + }, + { + "max_rel_err": 0.0, + "name": "gen0899", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807281", + "values_compared": 849 + }, + { + "max_rel_err": 0.0, + "name": "gen0900", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807282", + "values_compared": 5834 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0901", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807283", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0902", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807284", + "values_compared": 4729 + }, + { + "max_rel_err": 0.0, + "name": "gen0903", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807285", + "values_compared": 3647 + }, + { + "max_rel_err": 0.0, + "name": "gen0904", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807286", + "values_compared": 2471 + }, + { + "max_rel_err": 0.0, + "name": "gen0905", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807287", + "values_compared": 1314 + }, + { + "max_rel_err": 0.0, + "name": "gen0906", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807288", + "values_compared": 3146 + }, + { + "max_rel_err": 0.0, + "name": "gen0907", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807289", + "values_compared": 1855 + }, + { + "max_rel_err": 0.0, + "name": "gen0908", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807290", + "values_compared": 7555 + }, + { + "max_rel_err": 0.0, + "name": "gen0909", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807291", + "values_compared": 4209 + }, + { + "max_rel_err": 0.0, + "name": "gen0910", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807292", + "values_compared": 6884 + }, + { + "max_rel_err": 0.0, + "name": "gen0911", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807293", + "values_compared": 4277 + }, + { + "max_rel_err": 0.0, + "name": "gen0912", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807294", + "values_compared": 3486 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0913", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807295", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0914", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807296", + "values_compared": 6470 + }, + { + "max_rel_err": 0.0, + "name": "gen0915", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807297", + "values_compared": 4125 + }, + { + "max_rel_err": 0.0, + "name": "gen0916", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807298", + "values_compared": 6993 + }, + { + "max_rel_err": 0.0, + "name": "gen0917", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807299", + "values_compared": 5137 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0918", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807300", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0919", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807301", + "values_compared": 6886 + }, + { + "max_rel_err": 0.0, + "name": "gen0920", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807302", + "values_compared": 4858 + }, + { + "max_rel_err": 0.0, + "name": "gen0921", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807303", + "values_compared": 1325 + }, + { + "max_rel_err": 0.0, + "name": "gen0922", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807304", + "values_compared": 544 + }, + { + "max_rel_err": 0.0, + "name": "gen0923", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807305", + "values_compared": 9208 + }, + { + "max_rel_err": 0.0, + "name": "gen0924", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807306", + "values_compared": 1711 + }, + { + "max_rel_err": 0.0, + "name": "gen0925", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807307", + "values_compared": 2070 + }, + { + "max_rel_err": 0.0, + "name": "gen0926", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807308", + "values_compared": 7001 + }, + { + "max_rel_err": 0.0, + "name": "gen0927", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807309", + "values_compared": 4068 + }, + { + "max_rel_err": 0.0, + "name": "gen0928", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807310", + "values_compared": 5467 + }, + { + "max_rel_err": 0.0, + "name": "gen0929", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807311", + "values_compared": 5268 + }, + { + "max_rel_err": 0.0, + "name": "gen0930", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807312", + "values_compared": 5448 + }, + { + "max_rel_err": 0.0, + "name": "gen0931", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807313", + "values_compared": 5405 + }, + { + "max_rel_err": 0.0, + "name": "gen0932", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807314", + "values_compared": 2310 + }, + { + "max_rel_err": 0.0, + "name": "gen0933", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807315", + "values_compared": 668 + }, + { + "max_rel_err": 0.0, + "name": "gen0934", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807316", + "values_compared": 1043 + }, + { + "max_rel_err": 0.0, + "name": "gen0935", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807317", + "values_compared": 2437 + }, + { + "max_rel_err": 0.0, + "name": "gen0936", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807318", + "values_compared": 448 + }, + { + "max_rel_err": 0.0, + "name": "gen0937", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807319", + "values_compared": 1856 + }, + { + "max_rel_err": 0.0, + "name": "gen0938", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807320", + "values_compared": 7322 + }, + { + "max_rel_err": 0.0, + "name": "gen0939", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807321", + "values_compared": 6621 + }, + { + "max_rel_err": 0.0, + "name": "gen0940", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807322", + "values_compared": 2739 + }, + { + "max_rel_err": 0.0, + "name": "gen0941", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807323", + "values_compared": 5871 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0942", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807324", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0943", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807325", + "values_compared": 2027 + }, + { + "max_rel_err": 0.0, + "name": "gen0944", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807326", + "values_compared": 5919 + }, + { + "max_rel_err": 0.0, + "name": "gen0945", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807327", + "values_compared": 5229 + }, + { + "max_rel_err": 0.0, + "name": "gen0946", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807328", + "values_compared": 4003 + }, + { + "max_rel_err": 0.0, + "name": "gen0947", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807329", + "values_compared": 3016 + }, + { + "max_rel_err": 0.0, + "name": "gen0948", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807330", + "values_compared": 3644 + }, + { + "max_rel_err": 0.0, + "name": "gen0949", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807331", + "values_compared": 5020 + }, + { + "max_rel_err": 0.0, + "name": "gen0950", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807332", + "values_compared": 4475 + }, + { + "max_rel_err": 0.0, + "name": "gen0951", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807333", + "values_compared": 1041 + }, + { + "max_rel_err": 0.0, + "name": "gen0952", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807334", + "values_compared": 3696 + }, + { + "max_rel_err": 0.0, + "name": "gen0953", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807335", + "values_compared": 491 + }, + { + "max_rel_err": 0.0, + "name": "gen0954", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807336", + "values_compared": 1079 + }, + { + "max_rel_err": 0.0, + "name": "gen0955", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807337", + "values_compared": 2750 + }, + { + "max_rel_err": 0.0, + "name": "gen0956", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807338", + "values_compared": 3882 + }, + { + "max_rel_err": 0.0, + "name": "gen0957", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807339", + "values_compared": 2782 + }, + { + "max_rel_err": 0.0, + "name": "gen0958", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807340", + "values_compared": 5805 + }, + { + "max_rel_err": 0.0, + "name": "gen0959", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807341", + "values_compared": 3358 + }, + { + "max_rel_err": 0.0, + "name": "gen0960", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807342", + "values_compared": 3567 + }, + { + "max_rel_err": 0.0, + "name": "gen0961", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807343", + "values_compared": 5116 + }, + { + "max_rel_err": 0.0, + "name": "gen0962", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807344", + "values_compared": 6279 + }, + { + "max_rel_err": 0.0, + "name": "gen0963", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807345", + "values_compared": 3885 + }, + { + "max_rel_err": 0.0, + "name": "gen0964", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807346", + "values_compared": 1189 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0965", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807347", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0966", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807348", + "values_compared": 5994 + }, + { + "max_rel_err": 0.0, + "name": "gen0967", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807349", + "values_compared": 982 + }, + { + "max_rel_err": 0.0, + "name": "gen0968", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807350", + "values_compared": 2978 + }, + { + "max_rel_err": 0.0, + "name": "gen0969", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807351", + "values_compared": 3854 + }, + { + "max_rel_err": 0.0, + "name": "gen0970", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807352", + "values_compared": 4375 + }, + { + "max_rel_err": 0.0, + "name": "gen0971", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807353", + "values_compared": 5650 + }, + { + "max_rel_err": 0.0, + "name": "gen0972", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807354", + "values_compared": 1893 + }, + { + "max_rel_err": 0.0, + "name": "gen0973", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807355", + "values_compared": 2418 + }, + { + "max_rel_err": 0.0, + "name": "gen0974", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807356", + "values_compared": 501 + }, + { + "max_rel_err": 0.0, + "name": "gen0975", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807357", + "values_compared": 2930 + }, + { + "max_rel_err": 0.0, + "name": "gen0976", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807358", + "values_compared": 2712 + }, + { + "max_rel_err": 0.0, + "name": "gen0977", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807359", + "values_compared": 4333 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen0978", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807360", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0979", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807361", + "values_compared": 4156 + }, + { + "max_rel_err": 0.0, + "name": "gen0980", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807362", + "values_compared": 4988 + }, + { + "max_rel_err": 0.0, + "name": "gen0981", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807363", + "values_compared": 486 + }, + { + "max_rel_err": 0.0, + "name": "gen0982", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807364", + "values_compared": 4969 + }, + { + "max_rel_err": 0.0, + "name": "gen0983", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807365", + "values_compared": 1586 + }, + { + "max_rel_err": 0.0, + "name": "gen0984", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807366", + "values_compared": 1503 + }, + { + "max_rel_err": 0.0, + "name": "gen0985", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807367", + "values_compared": 1541 + }, + { + "max_rel_err": 0.0, + "name": "gen0986", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807368", + "values_compared": 7890 + }, + { + "max_rel_err": 0.0, + "name": "gen0987", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807369", + "values_compared": 4198 + }, + { + "max_rel_err": 0.0, + "name": "gen0988", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807370", + "values_compared": 3888 + }, + { + "max_rel_err": 0.0, + "name": "gen0989", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807371", + "values_compared": 4395 + }, + { + "max_rel_err": 0.0, + "name": "gen0990", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807372", + "values_compared": 2380 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen0991", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807373", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0992", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807374", + "values_compared": 4516 + }, + { + "max_rel_err": 0.0, + "name": "gen0993", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807375", + "values_compared": 668 + }, + { + "max_rel_err": 0.0, + "name": "gen0994", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807376", + "values_compared": 3967 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0995", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807377", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0996", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807378", + "values_compared": 3777 + }, + { + "max_rel_err": 0.0, + "name": "gen0997", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807379", + "values_compared": 4986 + }, + { + "max_rel_err": 0.0, + "name": "gen0998", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807380", + "values_compared": 5463 + }, + { + "max_rel_err": 0.0, + "name": "gen0999", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807381", + "values_compared": 4310 + }, + { + "max_rel_err": 0.0, + "name": "gen1000", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807382", + "values_compared": 1963 + }, + { + "max_rel_err": 0.0, + "name": "gen1001", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807383", + "values_compared": 3108 + }, + { + "max_rel_err": 0.0, + "name": "gen1002", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807384", + "values_compared": 5972 + }, + { + "max_rel_err": 0.0, + "name": "gen1003", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807385", + "values_compared": 3583 + }, + { + "max_rel_err": 0.0, + "name": "gen1004", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807386", + "values_compared": 6433 + }, + { + "max_rel_err": 0.0, + "name": "gen1005", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807387", + "values_compared": 3762 + }, + { + "max_rel_err": 0.0, + "name": "gen1006", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807388", + "values_compared": 2671 + }, + { + "max_rel_err": 0.0, + "name": "gen1007", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807389", + "values_compared": 3386 + }, + { + "max_rel_err": 0.0, + "name": "gen1008", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807390", + "values_compared": 1710 + }, + { + "max_rel_err": 0.0, + "name": "gen1009", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807391", + "values_compared": 3485 + }, + { + "max_rel_err": 0.0, + "name": "gen1010", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807392", + "values_compared": 6043 + }, + { + "max_rel_err": 0.0, + "name": "gen1011", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807393", + "values_compared": 2203 + }, + { + "max_rel_err": 0.0, + "name": "gen1012", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807394", + "values_compared": 735 + }, + { + "max_rel_err": 0.0, + "name": "gen1013", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807395", + "values_compared": 1604 + }, + { + "max_rel_err": 0.0, + "name": "gen1014", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807396", + "values_compared": 7842 + }, + { + "max_rel_err": 0.0, + "name": "gen1015", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807397", + "values_compared": 3227 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1016", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807398", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1017", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807399", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1018", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807400", + "values_compared": 501 + }, + { + "max_rel_err": 0.0, + "name": "gen1019", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807401", + "values_compared": 6813 + }, + { + "max_rel_err": 0.0, + "name": "gen1020", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807402", + "values_compared": 1007 + }, + { + "max_rel_err": 0.0, + "name": "gen1021", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807403", + "values_compared": 6895 + }, + { + "max_rel_err": 0.0, + "name": "gen1022", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807404", + "values_compared": 3595 + }, + { + "max_rel_err": 0.0, + "name": "gen1023", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807405", + "values_compared": 422 + }, + { + "max_rel_err": 0.0, + "name": "gen1024", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807406", + "values_compared": 3538 + }, + { + "max_rel_err": 0.0, + "name": "gen1025", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807407", + "values_compared": 1949 + }, + { + "max_rel_err": 0.0, + "name": "gen1026", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807408", + "values_compared": 4889 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1027", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807409", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1028", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807410", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1029", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807411", + "values_compared": 6109 + }, + { + "max_rel_err": 0.0, + "name": "gen1030", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807412", + "values_compared": 1103 + }, + { + "max_rel_err": 0.0, + "name": "gen1031", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807413", + "values_compared": 8260 + }, + { + "max_rel_err": 0.0, + "name": "gen1032", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807414", + "values_compared": 6786 + }, + { + "max_rel_err": 0.0, + "name": "gen1033", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807415", + "values_compared": 5965 + }, + { + "max_rel_err": 0.0, + "name": "gen1034", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807416", + "values_compared": 31 + }, + { + "max_rel_err": 0.0, + "name": "gen1035", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807417", + "values_compared": 8302 + }, + { + "max_rel_err": 0.0, + "name": "gen1036", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807418", + "values_compared": 8755 + }, + { + "max_rel_err": 0.0, + "name": "gen1037", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807419", + "values_compared": 2885 + }, + { + "max_rel_err": 0.0, + "name": "gen1038", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807420", + "values_compared": 3618 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1039", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807421", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1040", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807422", + "values_compared": 3732 + }, + { + "max_rel_err": 0.0, + "name": "gen1041", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807423", + "values_compared": 2442 + }, + { + "max_rel_err": 0.0, + "name": "gen1042", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807424", + "values_compared": 1856 + }, + { + "max_rel_err": 0.0, + "name": "gen1043", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807425", + "values_compared": 5648 + }, + { + "max_rel_err": 0.0, + "name": "gen1044", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807426", + "values_compared": 2694 + }, + { + "max_rel_err": 0.0, + "name": "gen1045", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807427", + "values_compared": 1173 + }, + { + "max_rel_err": 0.0, + "name": "gen1046", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807428", + "values_compared": 3767 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1047", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807429", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1048", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807430", + "values_compared": 2756 + }, + { + "max_rel_err": 0.0, + "name": "gen1049", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807431", + "values_compared": 5857 + }, + { + "max_rel_err": 0.0, + "name": "gen1050", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807432", + "values_compared": 6868 + }, + { + "max_rel_err": 0.0, + "name": "gen1051", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807433", + "values_compared": 4703 + }, + { + "max_rel_err": 0.0, + "name": "gen1052", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807434", + "values_compared": 493 + }, + { + "max_rel_err": 0.0, + "name": "gen1053", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807435", + "values_compared": 4152 + }, + { + "max_rel_err": 0.0, + "name": "gen1054", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807436", + "values_compared": 2806 + }, + { + "max_rel_err": 0.0, + "name": "gen1055", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807437", + "values_compared": 5672 + }, + { + "max_rel_err": 0.0, + "name": "gen1056", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807438", + "values_compared": 1725 + }, + { + "max_rel_err": 0.0, + "name": "gen1057", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807439", + "values_compared": 2844 + }, + { + "max_rel_err": 0.0, + "name": "gen1058", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807440", + "values_compared": 4958 + }, + { + "max_rel_err": 0.0, + "name": "gen1059", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807441", + "values_compared": 1106 + }, + { + "max_rel_err": 0.0, + "name": "gen1060", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807442", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen1061", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807443", + "values_compared": 966 + }, + { + "max_rel_err": 0.0, + "name": "gen1062", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807444", + "values_compared": 3381 + }, + { + "max_rel_err": 0.0, + "name": "gen1063", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807445", + "values_compared": 6982 + }, + { + "max_rel_err": 0.0, + "name": "gen1064", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807446", + "values_compared": 3661 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1065", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807447", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1066", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807448", + "values_compared": 1393 + }, + { + "max_rel_err": 0.0, + "name": "gen1067", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807449", + "values_compared": 4358 + }, + { + "max_rel_err": 0.0, + "name": "gen1068", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807450", + "values_compared": 3960 + }, + { + "max_rel_err": 0.0, + "name": "gen1069", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807451", + "values_compared": 4074 + }, + { + "max_rel_err": 0.0, + "name": "gen1070", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807452", + "values_compared": 3766 + }, + { + "max_rel_err": 0.0, + "name": "gen1071", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807453", + "values_compared": 4496 + }, + { + "max_rel_err": 0.0, + "name": "gen1072", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807454", + "values_compared": 4327 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1073", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807455", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1074", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807456", + "values_compared": 4041 + }, + { + "max_rel_err": 0.0, + "name": "gen1075", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807457", + "values_compared": 6330 + }, + { + "max_rel_err": 0.0, + "name": "gen1076", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807458", + "values_compared": 2055 + }, + { + "max_rel_err": 0.0, + "name": "gen1077", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807459", + "values_compared": 2056 + }, + { + "max_rel_err": 0.0, + "name": "gen1078", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807460", + "values_compared": 7786 + }, + { + "max_rel_err": 0.0, + "name": "gen1079", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807461", + "values_compared": 4304 + }, + { + "max_rel_err": 0.0, + "name": "gen1080", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807462", + "values_compared": 1958 + }, + { + "max_rel_err": 0.0, + "name": "gen1081", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807463", + "values_compared": 371 + }, + { + "max_rel_err": 0.0, + "name": "gen1082", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807464", + "values_compared": 6682 + }, + { + "max_rel_err": 0.0, + "name": "gen1083", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807465", + "values_compared": 5504 + }, + { + "max_rel_err": 0.0, + "name": "gen1084", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807466", + "values_compared": 4704 + }, + { + "max_rel_err": 0.0, + "name": "gen1085", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807467", + "values_compared": 2235 + }, + { + "max_rel_err": 0.0, + "name": "gen1086", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807468", + "values_compared": 1658 + }, + { + "max_rel_err": 0.0, + "name": "gen1087", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807469", + "values_compared": 43 + }, + { + "max_rel_err": 0.0, + "name": "gen1088", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807470", + "values_compared": 6179 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen1089", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807471", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1090", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807472", + "values_compared": 4156 + }, + { + "max_rel_err": 0.0, + "name": "gen1091", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807473", + "values_compared": 2537 + }, + { + "max_rel_err": 0.0, + "name": "gen1092", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807474", + "values_compared": 1230 + }, + { + "max_rel_err": 0.0, + "name": "gen1093", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807475", + "values_compared": 5214 + }, + { + "max_rel_err": 0.0, + "name": "gen1094", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807476", + "values_compared": 2602 + }, + { + "max_rel_err": 0.0, + "name": "gen1095", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807477", + "values_compared": 3343 + }, + { + "max_rel_err": 0.0, + "name": "gen1096", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807478", + "values_compared": 1195 + }, + { + "max_rel_err": 0.0, + "name": "gen1097", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807479", + "values_compared": 6687 + }, + { + "max_rel_err": 0.0, + "name": "gen1098", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807480", + "values_compared": 3305 + }, + { + "max_rel_err": 0.0, + "name": "gen1099", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807481", + "values_compared": 3661 + }, + { + "max_rel_err": 0.0, + "name": "gen1100", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807482", + "values_compared": 5683 + }, + { + "max_rel_err": 0.0, + "name": "gen1101", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807483", + "values_compared": 4277 + }, + { + "max_rel_err": 0.0, + "name": "gen1102", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807484", + "values_compared": 519 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1103", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807485", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1104", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807486", + "values_compared": 4552 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1105", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807487", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1106", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807488", + "values_compared": 1284 + }, + { + "max_rel_err": 0.0, + "name": "gen1107", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807489", + "values_compared": 6526 + }, + { + "max_rel_err": 0.0, + "name": "gen1108", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807490", + "values_compared": 4002 + }, + { + "max_rel_err": 0.0, + "name": "gen1109", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807491", + "values_compared": 1475 + }, + { + "max_rel_err": 0.0, + "name": "gen1110", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807492", + "values_compared": 5118 + }, + { + "max_rel_err": 0.0, + "name": "gen1111", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807493", + "values_compared": 4008 + }, + { + "max_rel_err": 0.0, + "name": "gen1112", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807494", + "values_compared": 1219 + }, + { + "max_rel_err": 0.0, + "name": "gen1113", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807495", + "values_compared": 525 + }, + { + "max_rel_err": 0.0, + "name": "gen1114", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807496", + "values_compared": 4224 + }, + { + "max_rel_err": 0.0, + "name": "gen1115", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807497", + "values_compared": 576 + }, + { + "max_rel_err": 0.0, + "name": "gen1116", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807498", + "values_compared": 1896 + }, + { + "max_rel_err": 0.0, + "name": "gen1117", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807499", + "values_compared": 3919 + }, + { + "max_rel_err": 0.0, + "name": "gen1118", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807500", + "values_compared": 504 + }, + { + "max_rel_err": 0.0, + "name": "gen1119", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807501", + "values_compared": 3368 + }, + { + "max_rel_err": 0.0, + "name": "gen1120", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807502", + "values_compared": 1331 + }, + { + "max_rel_err": 0.0, + "name": "gen1121", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807503", + "values_compared": 4750 + }, + { + "deferred": { + "symbol": "SmSurface::Evaluate1stDerivatives", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1122", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807504", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1123", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807505", + "values_compared": 4749 + }, + { + "max_rel_err": 0.0, + "name": "gen1124", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807506", + "values_compared": 1498 + }, + { + "max_rel_err": 0.0, + "name": "gen1125", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807507", + "values_compared": 3285 + }, + { + "max_rel_err": 0.0, + "name": "gen1126", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807508", + "values_compared": 3643 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1127", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807509", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1128", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807510", + "values_compared": 9680 + }, + { + "max_rel_err": 0.0, + "name": "gen1129", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807511", + "values_compared": 1854 + }, + { + "max_rel_err": 0.0, + "name": "gen1130", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807512", + "values_compared": 2445 + }, + { + "max_rel_err": 0.0, + "name": "gen1131", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807513", + "values_compared": 1046 + }, + { + "max_rel_err": 0.0, + "name": "gen1132", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807514", + "values_compared": 1969 + }, + { + "max_rel_err": 0.0, + "name": "gen1133", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807515", + "values_compared": 3650 + }, + { + "max_rel_err": 0.0, + "name": "gen1134", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807516", + "values_compared": 771 + }, + { + "max_rel_err": 0.0, + "name": "gen1135", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807517", + "values_compared": 4158 + }, + { + "max_rel_err": 0.0, + "name": "gen1136", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807518", + "values_compared": 3212 + }, + { + "max_rel_err": 0.0, + "name": "gen1137", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807519", + "values_compared": 2071 + }, + { + "max_rel_err": 0.0, + "name": "gen1138", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807520", + "values_compared": 4052 + }, + { + "max_rel_err": 0.0, + "name": "gen1139", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807521", + "values_compared": 3182 + }, + { + "max_rel_err": 0.0, + "name": "gen1140", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807522", + "values_compared": 7080 + }, + { + "max_rel_err": 0.0, + "name": "gen1141", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807523", + "values_compared": 5972 + }, + { + "max_rel_err": 0.0, + "name": "gen1142", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807524", + "values_compared": 4580 + }, + { + "max_rel_err": 0.0, + "name": "gen1143", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807525", + "values_compared": 4575 + }, + { + "max_rel_err": 0.0, + "name": "gen1144", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807526", + "values_compared": 3726 + }, + { + "max_rel_err": 0.0, + "name": "gen1145", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807527", + "values_compared": 7555 + }, + { + "max_rel_err": 0.0, + "name": "gen1146", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807528", + "values_compared": 2924 + }, + { + "max_rel_err": 0.0, + "name": "gen1147", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807529", + "values_compared": 1046 + }, + { + "max_rel_err": 0.0, + "name": "gen1148", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807530", + "values_compared": 2674 + }, + { + "max_rel_err": 0.0, + "name": "gen1149", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807531", + "values_compared": 2421 + }, + { + "max_rel_err": 0.0, + "name": "gen1150", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807532", + "values_compared": 3001 + }, + { + "max_rel_err": 0.0, + "name": "gen1151", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807533", + "values_compared": 491 + }, + { + "max_rel_err": 0.0, + "name": "gen1152", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807534", + "values_compared": 5466 + }, + { + "max_rel_err": 0.0, + "name": "gen1153", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807535", + "values_compared": 819 + }, + { + "max_rel_err": 0.0, + "name": "gen1154", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807536", + "values_compared": 4803 + }, + { + "max_rel_err": 0.0, + "name": "gen1155", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807537", + "values_compared": 4712 + }, + { + "max_rel_err": 0.0, + "name": "gen1156", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807538", + "values_compared": 6708 + }, + { + "max_rel_err": 0.0, + "name": "gen1157", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807539", + "values_compared": 7597 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1158", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807540", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1159", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807541", + "values_compared": 1867 + }, + { + "max_rel_err": 0.0, + "name": "gen1160", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807542", + "values_compared": 5177 + }, + { + "max_rel_err": 0.0, + "name": "gen1161", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807543", + "values_compared": 3629 + }, + { + "max_rel_err": 0.0, + "name": "gen1162", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807544", + "values_compared": 1707 + }, + { + "max_rel_err": 0.0, + "name": "gen1163", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807545", + "values_compared": 4318 + }, + { + "max_rel_err": 0.0, + "name": "gen1164", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807546", + "values_compared": 1721 + }, + { + "max_rel_err": 0.0, + "name": "gen1165", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807547", + "values_compared": 7322 + }, + { + "max_rel_err": 0.0, + "name": "gen1166", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807548", + "values_compared": 8359 + }, + { + "max_rel_err": 0.0, + "name": "gen1167", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807549", + "values_compared": 4402 + }, + { + "max_rel_err": 0.0, + "name": "gen1168", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807550", + "values_compared": 4954 + }, + { + "max_rel_err": 0.0, + "name": "gen1169", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807551", + "values_compared": 3664 + }, + { + "max_rel_err": 0.0, + "name": "gen1170", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807552", + "values_compared": 1722 + }, + { + "max_rel_err": 0.0, + "name": "gen1171", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807553", + "values_compared": 7084 + }, + { + "max_rel_err": 0.0, + "name": "gen1172", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807554", + "values_compared": 2563 + }, + { + "max_rel_err": 0.0, + "name": "gen1173", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807555", + "values_compared": 3341 + }, + { + "max_rel_err": 0.0, + "name": "gen1174", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807556", + "values_compared": 4442 + }, + { + "max_rel_err": 0.0, + "name": "gen1175", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807557", + "values_compared": 6609 + }, + { + "max_rel_err": 0.0, + "name": "gen1176", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807558", + "values_compared": 1751 + }, + { + "max_rel_err": 0.0, + "name": "gen1177", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807559", + "values_compared": 3877 + }, + { + "max_rel_err": 0.0, + "name": "gen1178", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807560", + "values_compared": 1890 + }, + { + "max_rel_err": 0.0, + "name": "gen1179", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807561", + "values_compared": 4902 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1180", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807562", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1181", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807563", + "values_compared": 3842 + }, + { + "max_rel_err": 0.0, + "name": "gen1182", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807564", + "values_compared": 1561 + }, + { + "deferred": { + "symbol": "SmEdge::GetTolerance", + "unit": "topology.edge" + }, + "max_rel_err": 0.0, + "name": "gen1183", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807565", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1184", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807566", + "values_compared": 5142 + }, + { + "max_rel_err": 0.0, + "name": "gen1185", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807567", + "values_compared": 4074 + }, + { + "max_rel_err": 0.0, + "name": "gen1186", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807568", + "values_compared": 3921 + }, + { + "max_rel_err": 0.0, + "name": "gen1187", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807569", + "values_compared": 4588 + }, + { + "max_rel_err": 0.0, + "name": "gen1188", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807570", + "values_compared": 6103 + }, + { + "max_rel_err": 0.0, + "name": "gen1189", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807571", + "values_compared": 1208 + }, + { + "max_rel_err": 0.0, + "name": "gen1190", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807572", + "values_compared": 8185 + }, + { + "max_rel_err": 0.0, + "name": "gen1191", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807573", + "values_compared": 4386 + }, + { + "max_rel_err": 0.0, + "name": "gen1192", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807574", + "values_compared": 2398 + }, + { + "max_rel_err": 0.0, + "name": "gen1193", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807575", + "values_compared": 6887 + }, + { + "max_rel_err": 0.0, + "name": "gen1194", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807576", + "values_compared": 1393 + }, + { + "max_rel_err": 0.0, + "name": "gen1195", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807577", + "values_compared": 1833 + }, + { + "max_rel_err": 0.0, + "name": "gen1196", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807578", + "values_compared": 3533 + }, + { + "max_rel_err": 0.0, + "name": "gen1197", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807579", + "values_compared": 6011 + }, + { + "max_rel_err": 0.0, + "name": "gen1198", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807580", + "values_compared": 2238 + }, + { + "max_rel_err": 0.0, + "name": "gen1199", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807581", + "values_compared": 3773 + }, + { + "max_rel_err": 0.0, + "name": "gen1200", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807582", + "values_compared": 8986 + }, + { + "max_rel_err": 0.0, + "name": "gen1201", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807583", + "values_compared": 5933 + }, + { + "max_rel_err": 0.0, + "name": "gen1202", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807584", + "values_compared": 4705 + }, + { + "max_rel_err": 0.0, + "name": "gen1203", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807585", + "values_compared": 1303 + }, + { + "max_rel_err": 0.0, + "name": "gen1204", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807586", + "values_compared": 2220 + }, + { + "max_rel_err": 0.0, + "name": "gen1205", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807587", + "values_compared": 2360 + }, + { + "max_rel_err": 0.0, + "name": "gen1206", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807588", + "values_compared": 4265 + }, + { + "max_rel_err": 0.0, + "name": "gen1207", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807589", + "values_compared": 4287 + }, + { + "max_rel_err": 0.0, + "name": "gen1208", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807590", + "values_compared": 1002 + }, + { + "max_rel_err": 0.0, + "name": "gen1209", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807591", + "values_compared": 2228 + }, + { + "max_rel_err": 0.0, + "name": "gen1210", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807592", + "values_compared": 3641 + }, + { + "max_rel_err": 0.0, + "name": "gen1211", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807593", + "values_compared": 5990 + }, + { + "max_rel_err": 0.0, + "name": "gen1212", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807594", + "values_compared": 1893 + }, + { + "max_rel_err": 0.0, + "name": "gen1213", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807595", + "values_compared": 1860 + }, + { + "max_rel_err": 0.0, + "name": "gen1214", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807596", + "values_compared": 7921 + }, + { + "max_rel_err": 0.0, + "name": "gen1215", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807597", + "values_compared": 1804 + }, + { + "max_rel_err": 0.0, + "name": "gen1216", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807598", + "values_compared": 644 + }, + { + "max_rel_err": 0.0, + "name": "gen1217", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807599", + "values_compared": 3885 + }, + { + "max_rel_err": 0.0, + "name": "gen1218", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807600", + "values_compared": 1366 + }, + { + "max_rel_err": 0.0, + "name": "gen1219", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807601", + "values_compared": 1083 + }, + { + "max_rel_err": 0.0, + "name": "gen1220", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807602", + "values_compared": 1937 + }, + { + "max_rel_err": 0.0, + "name": "gen1221", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807603", + "values_compared": 2229 + }, + { + "max_rel_err": 0.0, + "name": "gen1222", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807604", + "values_compared": 6288 + }, + { + "max_rel_err": 0.0, + "name": "gen1223", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807605", + "values_compared": 3553 + }, + { + "max_rel_err": 0.0, + "name": "gen1224", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807606", + "values_compared": 3118 + }, + { + "max_rel_err": 0.0, + "name": "gen1225", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807607", + "values_compared": 1631 + }, + { + "max_rel_err": 0.0, + "name": "gen1226", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807608", + "values_compared": 3962 + }, + { + "max_rel_err": 0.0, + "name": "gen1227", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807609", + "values_compared": 2384 + }, + { + "max_rel_err": 0.0, + "name": "gen1228", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807610", + "values_compared": 5595 + }, + { + "max_rel_err": 0.0, + "name": "gen1229", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807611", + "values_compared": 5654 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen1230", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807612", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1231", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807613", + "values_compared": 4157 + }, + { + "max_rel_err": 0.0, + "name": "gen1232", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807614", + "values_compared": 4788 + }, + { + "max_rel_err": 0.0, + "name": "gen1233", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807615", + "values_compared": 5026 + }, + { + "max_rel_err": 0.0, + "name": "gen1234", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807616", + "values_compared": 717 + }, + { + "max_rel_err": 0.0, + "name": "gen1235", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807617", + "values_compared": 2937 + }, + { + "max_rel_err": 0.0, + "name": "gen1236", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807618", + "values_compared": 101 + }, + { + "max_rel_err": 0.0, + "name": "gen1237", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807619", + "values_compared": 7123 + }, + { + "max_rel_err": 0.0, + "name": "gen1238", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807620", + "values_compared": 3580 + }, + { + "max_rel_err": 0.0, + "name": "gen1239", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807621", + "values_compared": 1751 + }, + { + "max_rel_err": 0.0, + "name": "gen1240", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807622", + "values_compared": 4709 + }, + { + "max_rel_err": 0.0, + "name": "gen1241", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807623", + "values_compared": 1881 + }, + { + "deferred": { + "symbol": "SmCurveClassification::SmCurveClassification", + "unit": "intersect.curve_class_p4" + }, + "max_rel_err": 0.0, + "name": "gen1242", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807624", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1243", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807625", + "values_compared": 493 + }, + { + "max_rel_err": 0.0, + "name": "gen1244", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807626", + "values_compared": 778 + }, + { + "max_rel_err": 0.0, + "name": "gen1245", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807627", + "values_compared": 4670 + }, + { + "max_rel_err": 0.0, + "name": "gen1246", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807628", + "values_compared": 1832 + }, + { + "max_rel_err": 0.0, + "name": "gen1247", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807629", + "values_compared": 2822 + }, + { + "max_rel_err": 0.0, + "name": "gen1248", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807630", + "values_compared": 3964 + }, + { + "max_rel_err": 0.0, + "name": "gen1249", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807631", + "values_compared": 4290 + }, + { + "max_rel_err": 0.0, + "name": "gen1250", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807632", + "values_compared": 2621 + }, + { + "max_rel_err": 0.0, + "name": "gen1251", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807633", + "values_compared": 2732 + }, + { + "max_rel_err": 0.0, + "name": "gen1252", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807634", + "values_compared": 7789 + }, + { + "max_rel_err": 0.0, + "name": "gen1253", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807635", + "values_compared": 7654 + }, + { + "max_rel_err": 0.0, + "name": "gen1254", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807636", + "values_compared": 4461 + }, + { + "max_rel_err": 0.0, + "name": "gen1255", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807637", + "values_compared": 7552 + }, + { + "max_rel_err": 0.0, + "name": "gen1256", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807638", + "values_compared": 2340 + }, + { + "max_rel_err": 0.0, + "name": "gen1257", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807639", + "values_compared": 658 + }, + { + "max_rel_err": 0.0, + "name": "gen1258", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807640", + "values_compared": 410 + }, + { + "max_rel_err": 0.0, + "name": "gen1259", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807641", + "values_compared": 6649 + }, + { + "max_rel_err": 0.0, + "name": "gen1260", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807642", + "values_compared": 3310 + }, + { + "max_rel_err": 0.0, + "name": "gen1261", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807643", + "values_compared": 3694 + }, + { + "max_rel_err": 0.0, + "name": "gen1262", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807644", + "values_compared": 49 + }, + { + "max_rel_err": 0.0, + "name": "gen1263", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807645", + "values_compared": 7942 + }, + { + "max_rel_err": 0.0, + "name": "gen1264", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807646", + "values_compared": 10392 + }, + { + "max_rel_err": 0.0, + "name": "gen1265", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807647", + "values_compared": 3981 + }, + { + "max_rel_err": 0.0, + "name": "gen1266", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807648", + "values_compared": 6303 + }, + { + "max_rel_err": 0.0, + "name": "gen1267", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807649", + "values_compared": 4764 + }, + { + "max_rel_err": 0.0, + "name": "gen1268", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807650", + "values_compared": 3649 + }, + { + "max_rel_err": 0.0, + "name": "gen1269", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807651", + "values_compared": 579 + }, + { + "max_rel_err": 0.0, + "name": "gen1270", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807652", + "values_compared": 4758 + }, + { + "max_rel_err": 0.0, + "name": "gen1271", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807653", + "values_compared": 4899 + }, + { + "max_rel_err": 0.0, + "name": "gen1272", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807654", + "values_compared": 2064 + }, + { + "max_rel_err": 0.0, + "name": "gen1273", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807655", + "values_compared": 37 + }, + { + "max_rel_err": 0.0, + "name": "gen1274", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807656", + "values_compared": 3883 + }, + { + "max_rel_err": 0.0, + "name": "gen1275", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807657", + "values_compared": 963 + }, + { + "max_rel_err": 0.0, + "name": "gen1276", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807658", + "values_compared": 3335 + }, + { + "max_rel_err": 0.0, + "name": "gen1277", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807659", + "values_compared": 3822 + }, + { + "max_rel_err": 0.0, + "name": "gen1278", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807660", + "values_compared": 3165 + }, + { + "max_rel_err": 0.0, + "name": "gen1279", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807661", + "values_compared": 2493 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1280", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807662", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1281", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807663", + "values_compared": 626 + }, + { + "max_rel_err": 0.0, + "name": "gen1282", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807664", + "values_compared": 5549 + }, + { + "max_rel_err": 0.0, + "name": "gen1283", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807665", + "values_compared": 1103 + }, + { + "max_rel_err": 0.0, + "name": "gen1284", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807666", + "values_compared": 1602 + }, + { + "max_rel_err": 0.0, + "name": "gen1285", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807667", + "values_compared": 5008 + }, + { + "max_rel_err": 0.0, + "name": "gen1286", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807668", + "values_compared": 3826 + }, + { + "max_rel_err": 0.0, + "name": "gen1287", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807669", + "values_compared": 4587 + }, + { + "max_rel_err": 0.0, + "name": "gen1288", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807670", + "values_compared": 1854 + }, + { + "max_rel_err": 0.0, + "name": "gen1289", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807671", + "values_compared": 4761 + }, + { + "max_rel_err": 0.0, + "name": "gen1290", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807672", + "values_compared": 1857 + }, + { + "max_rel_err": 0.0, + "name": "gen1291", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807673", + "values_compared": 889 + }, + { + "max_rel_err": 0.0, + "name": "gen1292", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807674", + "values_compared": 2769 + }, + { + "max_rel_err": 0.0, + "name": "gen1293", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807675", + "values_compared": 3858 + }, + { + "max_rel_err": 0.0, + "name": "gen1294", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807676", + "values_compared": 7287 + }, + { + "max_rel_err": 0.0, + "name": "gen1295", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807677", + "values_compared": 4134 + }, + { + "max_rel_err": 0.0, + "name": "gen1296", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807678", + "values_compared": 1852 + }, + { + "max_rel_err": 0.0, + "name": "gen1297", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807679", + "values_compared": 6586 + }, + { + "max_rel_err": 0.0, + "name": "gen1298", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807680", + "values_compared": 6175 + }, + { + "max_rel_err": 0.0, + "name": "gen1299", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807681", + "values_compared": 3757 + }, + { + "max_rel_err": 0.0, + "name": "gen1300", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807682", + "values_compared": 6873 + }, + { + "max_rel_err": 0.0, + "name": "gen1301", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807683", + "values_compared": 2659 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1302", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807684", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1303", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807685", + "values_compared": 8029 + }, + { + "max_rel_err": 0.0, + "name": "gen1304", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807686", + "values_compared": 3857 + }, + { + "max_rel_err": 0.0, + "name": "gen1305", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807687", + "values_compared": 4946 + }, + { + "max_rel_err": 0.0, + "name": "gen1306", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807688", + "values_compared": 1860 + }, + { + "max_rel_err": 0.0, + "name": "gen1307", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807689", + "values_compared": 6383 + }, + { + "max_rel_err": 0.0, + "name": "gen1308", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807690", + "values_compared": 4079 + }, + { + "max_rel_err": 0.0, + "name": "gen1309", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807691", + "values_compared": 1540 + }, + { + "max_rel_err": 0.0, + "name": "gen1310", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807692", + "values_compared": 6424 + }, + { + "max_rel_err": 0.0, + "name": "gen1311", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807693", + "values_compared": 3123 + }, + { + "max_rel_err": 0.0, + "name": "gen1312", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807694", + "values_compared": 6774 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1313", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807695", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1314", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807696", + "values_compared": 4012 + }, + { + "max_rel_err": 0.0, + "name": "gen1315", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807697", + "values_compared": 6038 + }, + { + "max_rel_err": 0.0, + "name": "gen1316", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807698", + "values_compared": 5424 + }, + { + "max_rel_err": 0.0, + "name": "gen1317", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807699", + "values_compared": 2812 + }, + { + "max_rel_err": 0.0, + "name": "gen1318", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807700", + "values_compared": 3252 + }, + { + "max_rel_err": 0.0, + "name": "gen1319", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807701", + "values_compared": 2995 + }, + { + "max_rel_err": 0.0, + "name": "gen1320", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807702", + "values_compared": 3885 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1321", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807703", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1322", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807704", + "values_compared": 2476 + }, + { + "max_rel_err": 0.0, + "name": "gen1323", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807705", + "values_compared": 2706 + }, + { + "max_rel_err": 0.0, + "name": "gen1324", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807706", + "values_compared": 5442 + }, + { + "max_rel_err": 0.0, + "name": "gen1325", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807707", + "values_compared": 992 + }, + { + "max_rel_err": 0.0, + "name": "gen1326", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807708", + "values_compared": 4372 + }, + { + "max_rel_err": 0.0, + "name": "gen1327", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807709", + "values_compared": 5070 + }, + { + "max_rel_err": 0.0, + "name": "gen1328", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807710", + "values_compared": 3105 + }, + { + "max_rel_err": 0.0, + "name": "gen1329", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807711", + "values_compared": 31 + }, + { + "max_rel_err": 0.0, + "name": "gen1330", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807712", + "values_compared": 6203 + }, + { + "max_rel_err": 0.0, + "name": "gen1331", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807713", + "values_compared": 1685 + }, + { + "max_rel_err": 0.0, + "name": "gen1332", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807714", + "values_compared": 1693 + }, + { + "max_rel_err": 0.0, + "name": "gen1333", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807715", + "values_compared": 489 + }, + { + "max_rel_err": 0.0, + "name": "gen1334", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807716", + "values_compared": 1082 + }, + { + "max_rel_err": 0.0, + "name": "gen1335", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807717", + "values_compared": 1586 + }, + { + "max_rel_err": 0.0, + "name": "gen1336", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807718", + "values_compared": 3300 + }, + { + "max_rel_err": 0.0, + "name": "gen1337", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807719", + "values_compared": 2912 + }, + { + "max_rel_err": 0.0, + "name": "gen1338", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807720", + "values_compared": 2737 + }, + { + "max_rel_err": 0.0, + "name": "gen1339", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807721", + "values_compared": 4769 + }, + { + "max_rel_err": 0.0, + "name": "gen1340", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807722", + "values_compared": 7087 + }, + { + "max_rel_err": 0.0, + "name": "gen1341", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807723", + "values_compared": 2757 + }, + { + "max_rel_err": 0.0, + "name": "gen1342", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807724", + "values_compared": 2235 + }, + { + "max_rel_err": 0.0, + "name": "gen1343", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807725", + "values_compared": 4734 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1344", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807726", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1345", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807727", + "values_compared": 4173 + }, + { + "max_rel_err": 0.0, + "name": "gen1346", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807728", + "values_compared": 4513 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1347", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807729", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1348", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807730", + "values_compared": 925 + }, + { + "max_rel_err": 0.0, + "name": "gen1349", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807731", + "values_compared": 2564 + }, + { + "max_rel_err": 0.0, + "name": "gen1350", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807732", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen1351", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807733", + "values_compared": 5464 + }, + { + "max_rel_err": 0.0, + "name": "gen1352", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807734", + "values_compared": 5491 + }, + { + "max_rel_err": 0.0, + "name": "gen1353", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807735", + "values_compared": 3786 + }, + { + "max_rel_err": 0.0, + "name": "gen1354", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807736", + "values_compared": 463 + }, + { + "max_rel_err": 0.0, + "name": "gen1355", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807737", + "values_compared": 578 + }, + { + "max_rel_err": 0.0, + "name": "gen1356", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807738", + "values_compared": 3553 + }, + { + "max_rel_err": 0.0, + "name": "gen1357", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807739", + "values_compared": 7552 + }, + { + "max_rel_err": 0.0, + "name": "gen1358", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807740", + "values_compared": 3355 + }, + { + "max_rel_err": 0.0, + "name": "gen1359", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807741", + "values_compared": 5081 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1360", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807742", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1361", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807743", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1362", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807744", + "values_compared": 4988 + }, + { + "max_rel_err": 0.0, + "name": "gen1363", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807745", + "values_compared": 1586 + }, + { + "max_rel_err": 0.0, + "name": "gen1364", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807746", + "values_compared": 2400 + }, + { + "max_rel_err": 0.0, + "name": "gen1365", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807747", + "values_compared": 4434 + }, + { + "max_rel_err": 0.0, + "name": "gen1366", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807748", + "values_compared": 6779 + }, + { + "max_rel_err": 0.0, + "name": "gen1367", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807749", + "values_compared": 4307 + }, + { + "max_rel_err": 0.0, + "name": "gen1368", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807750", + "values_compared": 4248 + }, + { + "max_rel_err": 0.0, + "name": "gen1369", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807751", + "values_compared": 4410 + }, + { + "max_rel_err": 0.0, + "name": "gen1370", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807752", + "values_compared": 2418 + }, + { + "max_rel_err": 0.0, + "name": "gen1371", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807753", + "values_compared": 3143 + }, + { + "max_rel_err": 0.0, + "name": "gen1372", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807754", + "values_compared": 3097 + }, + { + "max_rel_err": 0.0, + "name": "gen1373", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807755", + "values_compared": 5613 + }, + { + "max_rel_err": 0.0, + "name": "gen1374", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807756", + "values_compared": 3815 + }, + { + "max_rel_err": 0.0, + "name": "gen1375", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807757", + "values_compared": 552 + }, + { + "max_rel_err": 0.0, + "name": "gen1376", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807758", + "values_compared": 1822 + }, + { + "max_rel_err": 0.0, + "name": "gen1377", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807759", + "values_compared": 578 + }, + { + "max_rel_err": 0.0, + "name": "gen1378", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807760", + "values_compared": 3207 + }, + { + "max_rel_err": 0.0, + "name": "gen1379", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807761", + "values_compared": 2386 + }, + { + "max_rel_err": 0.0, + "name": "gen1380", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807762", + "values_compared": 7082 + }, + { + "max_rel_err": 0.0, + "name": "gen1381", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807763", + "values_compared": 3452 + }, + { + "max_rel_err": 0.0, + "name": "gen1382", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807764", + "values_compared": 1503 + }, + { + "max_rel_err": 0.0, + "name": "gen1383", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807765", + "values_compared": 5079 + }, + { + "max_rel_err": 0.0, + "name": "gen1384", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807766", + "values_compared": 5450 + }, + { + "max_rel_err": 0.0, + "name": "gen1385", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807767", + "values_compared": 579 + }, + { + "max_rel_err": 0.0, + "name": "gen1386", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807768", + "values_compared": 499 + }, + { + "max_rel_err": 0.0, + "name": "gen1387", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807769", + "values_compared": 4749 + }, + { + "max_rel_err": 0.0, + "name": "gen1388", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807770", + "values_compared": 773 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1389", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807771", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1390", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807772", + "values_compared": 6077 + }, + { + "max_rel_err": 0.0, + "name": "gen1391", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807773", + "values_compared": 1046 + }, + { + "max_rel_err": 0.0, + "name": "gen1392", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807774", + "values_compared": 565 + }, + { + "max_rel_err": 0.0, + "name": "gen1393", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807775", + "values_compared": 3341 + }, + { + "max_rel_err": 0.0, + "name": "gen1394", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807776", + "values_compared": 6857 + }, + { + "max_rel_err": 0.0, + "name": "gen1395", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807777", + "values_compared": 3381 + }, + { + "max_rel_err": 0.0, + "name": "gen1396", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807778", + "values_compared": 2748 + }, + { + "max_rel_err": 0.0, + "name": "gen1397", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807779", + "values_compared": 1212 + }, + { + "max_rel_err": 0.0, + "name": "gen1398", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807780", + "values_compared": 1314 + }, + { + "max_rel_err": 0.0, + "name": "gen1399", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807781", + "values_compared": 3731 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1400", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807782", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1401", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807783", + "values_compared": 1242 + }, + { + "max_rel_err": 0.0, + "name": "gen1402", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807784", + "values_compared": 6442 + }, + { + "max_rel_err": 0.0, + "name": "gen1403", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807785", + "values_compared": 4201 + }, + { + "max_rel_err": 0.0, + "name": "gen1404", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807786", + "values_compared": 3479 + }, + { + "max_rel_err": 0.0, + "name": "gen1405", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807787", + "values_compared": 3198 + }, + { + "max_rel_err": 0.0, + "name": "gen1406", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807788", + "values_compared": 7409 + }, + { + "max_rel_err": 0.0, + "name": "gen1407", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807789", + "values_compared": 3708 + }, + { + "max_rel_err": 0.0, + "name": "gen1408", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807790", + "values_compared": 943 + }, + { + "max_rel_err": 0.0, + "name": "gen1409", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807791", + "values_compared": 4411 + }, + { + "max_rel_err": 0.0, + "name": "gen1410", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807792", + "values_compared": 1079 + }, + { + "max_rel_err": 0.0, + "name": "gen1411", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807793", + "values_compared": 1001 + }, + { + "max_rel_err": 0.0, + "name": "gen1412", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807794", + "values_compared": 2787 + }, + { + "max_rel_err": 0.0, + "name": "gen1413", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807795", + "values_compared": 4228 + }, + { + "deferred": { + "symbol": "SmEdge::GetTolerance", + "unit": "topology.edge" + }, + "max_rel_err": 0.0, + "name": "gen1414", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807796", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1415", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807797", + "values_compared": 4249 + }, + { + "max_rel_err": 0.0, + "name": "gen1416", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807798", + "values_compared": 693 + }, + { + "max_rel_err": 0.0, + "name": "gen1417", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807799", + "values_compared": 1587 + }, + { + "max_rel_err": 0.0, + "name": "gen1418", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807800", + "values_compared": 7087 + }, + { + "max_rel_err": 0.0, + "name": "gen1419", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807801", + "values_compared": 2320 + }, + { + "max_rel_err": 0.0, + "name": "gen1420", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807802", + "values_compared": 787 + }, + { + "max_rel_err": 0.0, + "name": "gen1421", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807803", + "values_compared": 8488 + }, + { + "max_rel_err": 0.0, + "name": "gen1422", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807804", + "values_compared": 410 + }, + { + "max_rel_err": 0.0, + "name": "gen1423", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807805", + "values_compared": 2634 + }, + { + "max_rel_err": 0.0, + "name": "gen1424", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807806", + "values_compared": 5275 + }, + { + "max_rel_err": 0.0, + "name": "gen1425", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807807", + "values_compared": 2857 + }, + { + "max_rel_err": 0.0, + "name": "gen1426", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807808", + "values_compared": 2640 + }, + { + "max_rel_err": 0.0, + "name": "gen1427", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807809", + "values_compared": 1245 + }, + { + "max_rel_err": 0.0, + "name": "gen1428", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807810", + "values_compared": 2494 + }, + { + "max_rel_err": 0.0, + "name": "gen1429", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807811", + "values_compared": 3997 + }, + { + "max_rel_err": 0.0, + "name": "gen1430", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807812", + "values_compared": 2170 + }, + { + "max_rel_err": 0.0, + "name": "gen1431", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807813", + "values_compared": 4858 + }, + { + "max_rel_err": 0.0, + "name": "gen1432", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807814", + "values_compared": 6763 + }, + { + "max_rel_err": 0.0, + "name": "gen1433", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807815", + "values_compared": 5352 + }, + { + "max_rel_err": 0.0, + "name": "gen1434", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807816", + "values_compared": 5133 + }, + { + "max_rel_err": 0.0, + "name": "gen1435", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807817", + "values_compared": 3275 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1436", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807818", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1437", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807819", + "values_compared": 2525 + }, + { + "max_rel_err": 0.0, + "name": "gen1438", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807820", + "values_compared": 5153 + }, + { + "max_rel_err": 0.0, + "name": "gen1439", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807821", + "values_compared": 5342 + }, + { + "max_rel_err": 0.0, + "name": "gen1440", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807822", + "values_compared": 6298 + }, + { + "max_rel_err": 0.0, + "name": "gen1441", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807823", + "values_compared": 6383 + }, + { + "max_rel_err": 0.0, + "name": "gen1442", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807824", + "values_compared": 3066 + }, + { + "max_rel_err": 0.0, + "name": "gen1443", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807825", + "values_compared": 6140 + }, + { + "max_rel_err": 0.0, + "name": "gen1444", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807826", + "values_compared": 4034 + }, + { + "max_rel_err": 0.0, + "name": "gen1445", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807827", + "values_compared": 3745 + }, + { + "max_rel_err": 0.0, + "name": "gen1446", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807828", + "values_compared": 892 + }, + { + "max_rel_err": 0.0, + "name": "gen1447", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807829", + "values_compared": 1008 + }, + { + "max_rel_err": 0.0, + "name": "gen1448", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807830", + "values_compared": 4752 + }, + { + "max_rel_err": 0.0, + "name": "gen1449", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807831", + "values_compared": 4946 + }, + { + "max_rel_err": 0.0, + "name": "gen1450", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807832", + "values_compared": 7083 + }, + { + "max_rel_err": 0.0, + "name": "gen1451", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807833", + "values_compared": 1643 + }, + { + "max_rel_err": 0.0, + "name": "gen1452", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807834", + "values_compared": 1287 + }, + { + "deferred": { + "symbol": "SmFace::GetTolerance", + "unit": "topology.face_p2" + }, + "max_rel_err": 0.0, + "name": "gen1453", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807835", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1454", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807836", + "values_compared": 1602 + }, + { + "max_rel_err": 0.0, + "name": "gen1455", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807837", + "values_compared": 1947 + }, + { + "max_rel_err": 0.0, + "name": "gen1456", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807838", + "values_compared": 3173 + }, + { + "max_rel_err": 0.0, + "name": "gen1457", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807839", + "values_compared": 683 + }, + { + "max_rel_err": 0.0, + "name": "gen1458", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807840", + "values_compared": 1781 + }, + { + "max_rel_err": 0.0, + "name": "gen1459", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807841", + "values_compared": 2588 + }, + { + "max_rel_err": 0.0, + "name": "gen1460", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807842", + "values_compared": 4601 + }, + { + "max_rel_err": 0.0, + "name": "gen1461", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807843", + "values_compared": 7651 + }, + { + "max_rel_err": 0.0, + "name": "gen1462", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807844", + "values_compared": 3035 + }, + { + "max_rel_err": 0.0, + "name": "gen1463", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807845", + "values_compared": 1197 + }, + { + "max_rel_err": 0.0, + "name": "gen1464", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807846", + "values_compared": 3172 + }, + { + "max_rel_err": 0.0, + "name": "gen1465", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807847", + "values_compared": 3249 + }, + { + "max_rel_err": 0.0, + "name": "gen1466", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807848", + "values_compared": 3383 + }, + { + "max_rel_err": 0.0, + "name": "gen1467", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807849", + "values_compared": 3249 + }, + { + "max_rel_err": 0.0, + "name": "gen1468", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807850", + "values_compared": 3779 + }, + { + "max_rel_err": 0.0, + "name": "gen1469", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807851", + "values_compared": 2087 + }, + { + "max_rel_err": 0.0, + "name": "gen1470", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807852", + "values_compared": 2685 + }, + { + "max_rel_err": 0.0, + "name": "gen1471", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807853", + "values_compared": 3691 + }, + { + "max_rel_err": 0.0, + "name": "gen1472", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807854", + "values_compared": 642 + }, + { + "max_rel_err": 0.0, + "name": "gen1473", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807855", + "values_compared": 2599 + }, + { + "max_rel_err": 0.0, + "name": "gen1474", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807856", + "values_compared": 2026 + }, + { + "max_rel_err": 0.0, + "name": "gen1475", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807857", + "values_compared": 1997 + }, + { + "max_rel_err": 0.0, + "name": "gen1476", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807858", + "values_compared": 2186 + }, + { + "max_rel_err": 0.0, + "name": "gen1477", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807859", + "values_compared": 3516 + }, + { + "max_rel_err": 0.0, + "name": "gen1478", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807860", + "values_compared": 1908 + }, + { + "max_rel_err": 0.0, + "name": "gen1479", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807861", + "values_compared": 4555 + }, + { + "max_rel_err": 0.0, + "name": "gen1480", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807862", + "values_compared": 7522 + }, + { + "max_rel_err": 0.0, + "name": "gen1481", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807863", + "values_compared": 4646 + }, + { + "max_rel_err": 0.0, + "name": "gen1482", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807864", + "values_compared": 1411 + }, + { + "max_rel_err": 0.0, + "name": "gen1483", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807865", + "values_compared": 9311 + }, + { + "max_rel_err": 0.0, + "name": "gen1484", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807866", + "values_compared": 3789 + }, + { + "max_rel_err": 0.0, + "name": "gen1485", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807867", + "values_compared": 2561 + }, + { + "max_rel_err": 0.0, + "name": "gen1486", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807868", + "values_compared": 2039 + }, + { + "max_rel_err": 0.0, + "name": "gen1487", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807869", + "values_compared": 3579 + }, + { + "max_rel_err": 0.0, + "name": "gen1488", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807870", + "values_compared": 31 + }, + { + "max_rel_err": 0.0, + "name": "gen1489", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807871", + "values_compared": 578 + }, + { + "deferred": { + "symbol": "SmFace::GetTolerance", + "unit": "topology.face_p2" + }, + "max_rel_err": 0.0, + "name": "gen1490", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807872", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1491", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807873", + "values_compared": 4054 + }, + { + "max_rel_err": 0.0, + "name": "gen1492", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807874", + "values_compared": 2249 + }, + { + "max_rel_err": 0.0, + "name": "gen1493", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807875", + "values_compared": 963 + }, + { + "max_rel_err": 0.0, + "name": "gen1494", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807876", + "values_compared": 4610 + }, + { + "max_rel_err": 0.0, + "name": "gen1495", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807877", + "values_compared": 4957 + }, + { + "max_rel_err": 0.0, + "name": "gen1496", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807878", + "values_compared": 2919 + }, + { + "max_rel_err": 0.0, + "name": "gen1497", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807879", + "values_compared": 4351 + }, + { + "max_rel_err": 0.0, + "name": "gen1498", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807880", + "values_compared": 963 + }, + { + "max_rel_err": 0.0, + "name": "gen1499", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807881", + "values_compared": 2485 + }, + { + "max_rel_err": 0.0, + "name": "gen1500", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807882", + "values_compared": 5447 + }, + { + "max_rel_err": 0.0, + "name": "gen1501", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807883", + "values_compared": 6851 + }, + { + "max_rel_err": 0.0, + "name": "gen1502", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807884", + "values_compared": 3547 + }, + { + "max_rel_err": 0.0, + "name": "gen1503", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807885", + "values_compared": 3913 + }, + { + "max_rel_err": 0.0, + "name": "gen1504", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807886", + "values_compared": 2343 + }, + { + "max_rel_err": 0.0, + "name": "gen1505", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807887", + "values_compared": 7155 + }, + { + "max_rel_err": 0.0, + "name": "gen1506", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807888", + "values_compared": 4339 + }, + { + "max_rel_err": 0.0, + "name": "gen1507", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807889", + "values_compared": 4511 + }, + { + "max_rel_err": 0.0, + "name": "gen1508", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807890", + "values_compared": 3664 + }, + { + "max_rel_err": 0.0, + "name": "gen1509", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807891", + "values_compared": 7038 + }, + { + "max_rel_err": 0.0, + "name": "gen1510", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807892", + "values_compared": 1103 + }, + { + "max_rel_err": 0.0, + "name": "gen1511", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807893", + "values_compared": 8066 + }, + { + "max_rel_err": 0.0, + "name": "gen1512", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807894", + "values_compared": 2736 + }, + { + "max_rel_err": 0.0, + "name": "gen1513", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807895", + "values_compared": 2514 + }, + { + "max_rel_err": 0.0, + "name": "gen1514", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807896", + "values_compared": 4988 + }, + { + "max_rel_err": 0.0, + "name": "gen1515", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807897", + "values_compared": 3868 + }, + { + "max_rel_err": 0.0, + "name": "gen1516", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807898", + "values_compared": 2589 + }, + { + "max_rel_err": 0.0, + "name": "gen1517", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807899", + "values_compared": 8976 + }, + { + "max_rel_err": 0.0, + "name": "gen1518", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807900", + "values_compared": 3367 + }, + { + "max_rel_err": 0.0, + "name": "gen1519", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807901", + "values_compared": 5124 + }, + { + "max_rel_err": 0.0, + "name": "gen1520", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807902", + "values_compared": 409 + }, + { + "max_rel_err": 0.0, + "name": "gen1521", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807903", + "values_compared": 3106 + }, + { + "max_rel_err": 0.0, + "name": "gen1522", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807904", + "values_compared": 4948 + }, + { + "max_rel_err": 0.0, + "name": "gen1523", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807905", + "values_compared": 6391 + }, + { + "max_rel_err": 0.0, + "name": "gen1524", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807906", + "values_compared": 5306 + }, + { + "max_rel_err": 0.0, + "name": "gen1525", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807907", + "values_compared": 3629 + }, + { + "max_rel_err": 0.0, + "name": "gen1526", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807908", + "values_compared": 4742 + }, + { + "max_rel_err": 0.0, + "name": "gen1527", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807909", + "values_compared": 2730 + }, + { + "max_rel_err": 0.0, + "name": "gen1528", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807910", + "values_compared": 4221 + }, + { + "max_rel_err": 0.0, + "name": "gen1529", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807911", + "values_compared": 4306 + }, + { + "max_rel_err": 0.0, + "name": "gen1530", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807912", + "values_compared": 6998 + }, + { + "max_rel_err": 0.0, + "name": "gen1531", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807913", + "values_compared": 6176 + }, + { + "max_rel_err": 0.0, + "name": "gen1532", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807914", + "values_compared": 1155 + }, + { + "max_rel_err": 0.0, + "name": "gen1533", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807915", + "values_compared": 4019 + }, + { + "max_rel_err": 0.0, + "name": "gen1534", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807916", + "values_compared": 82 + }, + { + "max_rel_err": 0.0, + "name": "gen1535", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807917", + "values_compared": 2697 + }, + { + "max_rel_err": 0.0, + "name": "gen1536", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807918", + "values_compared": 5643 + }, + { + "max_rel_err": 0.0, + "name": "gen1537", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807919", + "values_compared": 6197 + }, + { + "max_rel_err": 0.0, + "name": "gen1538", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807920", + "values_compared": 3961 + }, + { + "max_rel_err": 0.0, + "name": "gen1539", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807921", + "values_compared": 6244 + }, + { + "max_rel_err": 0.0, + "name": "gen1540", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807922", + "values_compared": 4253 + }, + { + "max_rel_err": 0.0, + "name": "gen1541", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807923", + "values_compared": 4605 + }, + { + "max_rel_err": 0.0, + "name": "gen1542", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807924", + "values_compared": 2737 + }, + { + "max_rel_err": 0.0, + "name": "gen1543", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807925", + "values_compared": 448 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1544", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807926", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1545", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807927", + "values_compared": 4647 + }, + { + "max_rel_err": 0.0, + "name": "gen1546", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807928", + "values_compared": 5912 + }, + { + "max_rel_err": 0.0, + "name": "gen1547", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807929", + "values_compared": 7361 + }, + { + "max_rel_err": 0.0, + "name": "gen1548", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807930", + "values_compared": 3774 + }, + { + "max_rel_err": 0.0, + "name": "gen1549", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807931", + "values_compared": 2812 + }, + { + "max_rel_err": 0.0, + "name": "gen1550", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807932", + "values_compared": 2848 + }, + { + "max_rel_err": 0.0, + "name": "gen1551", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807933", + "values_compared": 2970 + }, + { + "max_rel_err": 0.0, + "name": "gen1552", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807934", + "values_compared": 4053 + }, + { + "max_rel_err": 0.0, + "name": "gen1553", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807935", + "values_compared": 2038 + }, + { + "max_rel_err": 0.0, + "name": "gen1554", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807936", + "values_compared": 4519 + }, + { + "max_rel_err": 0.0, + "name": "gen1555", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807937", + "values_compared": 1194 + }, + { + "max_rel_err": 0.0, + "name": "gen1556", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807938", + "values_compared": 2382 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1557", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807939", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1558", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807940", + "values_compared": 3839 + }, + { + "max_rel_err": 0.0, + "name": "gen1559", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807941", + "values_compared": 2002 + }, + { + "max_rel_err": 0.0, + "name": "gen1560", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807942", + "values_compared": 2812 + }, + { + "max_rel_err": 0.0, + "name": "gen1561", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807943", + "values_compared": 2869 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen1562", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807944", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1563", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807945", + "values_compared": 2512 + }, + { + "max_rel_err": 0.0, + "name": "gen1564", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807946", + "values_compared": 4983 + }, + { + "max_rel_err": 0.0, + "name": "gen1565", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807947", + "values_compared": 114 + }, + { + "max_rel_err": 0.0, + "name": "gen1566", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807948", + "values_compared": 1560 + }, + { + "max_rel_err": 0.0, + "name": "gen1567", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807949", + "values_compared": 448 + }, + { + "max_rel_err": 0.0, + "name": "gen1568", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807950", + "values_compared": 2421 + }, + { + "max_rel_err": 0.0, + "name": "gen1569", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807951", + "values_compared": 7387 + }, + { + "max_rel_err": 0.0, + "name": "gen1570", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807952", + "values_compared": 5251 + }, + { + "max_rel_err": 0.0, + "name": "gen1571", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807953", + "values_compared": 2858 + }, + { + "max_rel_err": 0.0, + "name": "gen1572", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807954", + "values_compared": 3024 + }, + { + "max_rel_err": 0.0, + "name": "gen1573", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807955", + "values_compared": 1855 + }, + { + "max_rel_err": 0.0, + "name": "gen1574", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807956", + "values_compared": 966 + }, + { + "max_rel_err": 0.0, + "name": "gen1575", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807957", + "values_compared": 5504 + }, + { + "max_rel_err": 0.0, + "name": "gen1576", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807958", + "values_compared": 3773 + }, + { + "max_rel_err": 0.0, + "name": "gen1577", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807959", + "values_compared": 1724 + }, + { + "max_rel_err": 0.0, + "name": "gen1578", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807960", + "values_compared": 2259 + }, + { + "max_rel_err": 0.0, + "name": "gen1579", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807961", + "values_compared": 1801 + }, + { + "max_rel_err": 0.0, + "name": "gen1580", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807962", + "values_compared": 2027 + }, + { + "max_rel_err": 0.0, + "name": "gen1581", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807963", + "values_compared": 3658 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1582", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807964", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1583", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807965", + "values_compared": 4133 + }, + { + "max_rel_err": 0.0, + "name": "gen1584", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807966", + "values_compared": 573 + }, + { + "max_rel_err": 0.0, + "name": "gen1585", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807967", + "values_compared": 3421 + }, + { + "max_rel_err": 0.0, + "name": "gen1586", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807968", + "values_compared": 771 + }, + { + "max_rel_err": 0.0, + "name": "gen1587", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807969", + "values_compared": 3680 + }, + { + "max_rel_err": 0.0, + "name": "gen1588", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807970", + "values_compared": 4118 + }, + { + "max_rel_err": 0.0, + "name": "gen1589", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807971", + "values_compared": 1465 + }, + { + "max_rel_err": 0.0, + "name": "gen1590", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807972", + "values_compared": 3184 + }, + { + "max_rel_err": 0.0, + "name": "gen1591", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807973", + "values_compared": 2806 + }, + { + "max_rel_err": 0.0, + "name": "gen1592", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807974", + "values_compared": 1897 + }, + { + "max_rel_err": 0.0, + "name": "gen1593", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807975", + "values_compared": 6155 + }, + { + "max_rel_err": 0.0, + "name": "gen1594", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807976", + "values_compared": 6062 + }, + { + "max_rel_err": 0.0, + "name": "gen1595", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807977", + "values_compared": 1390 + }, + { + "max_rel_err": 0.0, + "name": "gen1596", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807978", + "values_compared": 4434 + }, + { + "max_rel_err": 0.0, + "name": "gen1597", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807979", + "values_compared": 3355 + }, + { + "max_rel_err": 0.0, + "name": "gen1598", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807980", + "values_compared": 7053 + }, + { + "max_rel_err": 0.0, + "name": "gen1599", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807981", + "values_compared": 2671 + }, + { + "max_rel_err": 0.0, + "name": "gen1600", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807982", + "values_compared": 3804 + }, + { + "max_rel_err": 0.0, + "name": "gen1601", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807983", + "values_compared": 4022 + }, + { + "max_rel_err": 0.0, + "name": "gen1602", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807984", + "values_compared": 63 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1603", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807985", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1604", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807986", + "values_compared": 5307 + }, + { + "max_rel_err": 0.0, + "name": "gen1605", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807987", + "values_compared": 623 + }, + { + "max_rel_err": 0.0, + "name": "gen1606", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807988", + "values_compared": 2056 + }, + { + "max_rel_err": 0.0, + "name": "gen1607", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807989", + "values_compared": 1386 + }, + { + "max_rel_err": 0.0, + "name": "gen1608", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807990", + "values_compared": 3263 + }, + { + "max_rel_err": 0.0, + "name": "gen1609", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807991", + "values_compared": 2672 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1610", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807992", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1611", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143807993", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1612", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807994", + "values_compared": 2514 + }, + { + "max_rel_err": 0.0, + "name": "gen1613", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807995", + "values_compared": 2712 + }, + { + "max_rel_err": 0.0, + "name": "gen1614", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807996", + "values_compared": 3320 + }, + { + "max_rel_err": 0.0, + "name": "gen1615", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807997", + "values_compared": 3641 + }, + { + "max_rel_err": 0.0, + "name": "gen1616", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807998", + "values_compared": 3777 + }, + { + "max_rel_err": 0.0, + "name": "gen1617", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143807999", + "values_compared": 605 + }, + { + "max_rel_err": 0.0, + "name": "gen1618", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808000", + "values_compared": 3846 + }, + { + "max_rel_err": 0.0, + "name": "gen1619", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808001", + "values_compared": 4256 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1620", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808002", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1621", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808003", + "values_compared": 544 + }, + { + "max_rel_err": 0.0, + "name": "gen1622", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808004", + "values_compared": 3597 + }, + { + "max_rel_err": 0.0, + "name": "gen1623", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808005", + "values_compared": 5136 + }, + { + "max_rel_err": 0.0, + "name": "gen1624", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808006", + "values_compared": 2330 + }, + { + "max_rel_err": 0.0, + "name": "gen1625", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808007", + "values_compared": 2106 + }, + { + "max_rel_err": 0.0, + "name": "gen1626", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808008", + "values_compared": 3197 + }, + { + "max_rel_err": 0.0, + "name": "gen1627", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808009", + "values_compared": 2105 + }, + { + "max_rel_err": 0.0, + "name": "gen1628", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808010", + "values_compared": 4121 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1629", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808011", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1630", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808012", + "values_compared": 2973 + }, + { + "max_rel_err": 0.0, + "name": "gen1631", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808013", + "values_compared": 2842 + }, + { + "max_rel_err": 0.0, + "name": "gen1632", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808014", + "values_compared": 605 + }, + { + "max_rel_err": 0.0, + "name": "gen1633", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808015", + "values_compared": 1119 + }, + { + "max_rel_err": 0.0, + "name": "gen1634", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808016", + "values_compared": 3556 + }, + { + "max_rel_err": 0.0, + "name": "gen1635", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808017", + "values_compared": 2775 + }, + { + "max_rel_err": 0.0, + "name": "gen1636", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808018", + "values_compared": 4580 + }, + { + "max_rel_err": 0.0, + "name": "gen1637", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808019", + "values_compared": 5281 + }, + { + "max_rel_err": 0.0, + "name": "gen1638", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808020", + "values_compared": 3537 + }, + { + "max_rel_err": 0.0, + "name": "gen1639", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808021", + "values_compared": 5224 + }, + { + "max_rel_err": 0.0, + "name": "gen1640", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808022", + "values_compared": 5566 + }, + { + "max_rel_err": 0.0, + "name": "gen1641", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808023", + "values_compared": 3585 + }, + { + "max_rel_err": 0.0, + "name": "gen1642", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808024", + "values_compared": 3143 + }, + { + "max_rel_err": 0.0, + "name": "gen1643", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808025", + "values_compared": 6011 + }, + { + "max_rel_err": 0.0, + "name": "gen1644", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808026", + "values_compared": 3907 + }, + { + "max_rel_err": 0.0, + "name": "gen1645", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808027", + "values_compared": 3034 + }, + { + "max_rel_err": 0.0, + "name": "gen1646", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808028", + "values_compared": 2569 + }, + { + "max_rel_err": 0.0, + "name": "gen1647", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808029", + "values_compared": 3479 + }, + { + "max_rel_err": 0.0, + "name": "gen1648", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808030", + "values_compared": 7177 + }, + { + "max_rel_err": 0.0, + "name": "gen1649", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808031", + "values_compared": 3243 + }, + { + "max_rel_err": 0.0, + "name": "gen1650", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808032", + "values_compared": 2011 + }, + { + "max_rel_err": 0.0, + "name": "gen1651", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808033", + "values_compared": 2392 + }, + { + "max_rel_err": 0.0, + "name": "gen1652", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808034", + "values_compared": 6067 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1653", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808035", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1654", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808036", + "values_compared": 1579 + }, + { + "max_rel_err": 0.0, + "name": "gen1655", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808037", + "values_compared": 2639 + }, + { + "max_rel_err": 0.0, + "name": "gen1656", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808038", + "values_compared": 5451 + }, + { + "max_rel_err": 0.0, + "name": "gen1657", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808039", + "values_compared": 5313 + }, + { + "max_rel_err": 0.0, + "name": "gen1658", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808040", + "values_compared": 3802 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1659", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808041", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1660", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808042", + "values_compared": 1335 + }, + { + "max_rel_err": 0.0, + "name": "gen1661", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808043", + "values_compared": 6768 + }, + { + "max_rel_err": 0.0, + "name": "gen1662", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808044", + "values_compared": 5157 + }, + { + "max_rel_err": 0.0, + "name": "gen1663", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808045", + "values_compared": 4764 + }, + { + "max_rel_err": 0.0, + "name": "gen1664", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808046", + "values_compared": 3405 + }, + { + "max_rel_err": 0.0, + "name": "gen1665", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808047", + "values_compared": 3182 + }, + { + "max_rel_err": 0.0, + "name": "gen1666", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808048", + "values_compared": 4487 + }, + { + "max_rel_err": 0.0, + "name": "gen1667", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808049", + "values_compared": 3515 + }, + { + "max_rel_err": 0.0, + "name": "gen1668", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808050", + "values_compared": 4084 + }, + { + "max_rel_err": 0.0, + "name": "gen1669", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808051", + "values_compared": 2262 + }, + { + "max_rel_err": 0.0, + "name": "gen1670", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808052", + "values_compared": 3127 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1671", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808053", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1672", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808054", + "values_compared": 6734 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen1673", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808055", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1674", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808056", + "values_compared": 5161 + }, + { + "max_rel_err": 0.0, + "name": "gen1675", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808057", + "values_compared": 2605 + }, + { + "max_rel_err": 0.0, + "name": "gen1676", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808058", + "values_compared": 6957 + }, + { + "max_rel_err": 0.0, + "name": "gen1677", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808059", + "values_compared": 3567 + }, + { + "max_rel_err": 0.0, + "name": "gen1678", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808060", + "values_compared": 3501 + }, + { + "max_rel_err": 0.0, + "name": "gen1679", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808061", + "values_compared": 6141 + }, + { + "max_rel_err": 0.0, + "name": "gen1680", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808062", + "values_compared": 4752 + }, + { + "max_rel_err": 0.0, + "name": "gen1681", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808063", + "values_compared": 5308 + }, + { + "max_rel_err": 0.0, + "name": "gen1682", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808064", + "values_compared": 581 + }, + { + "max_rel_err": 0.0, + "name": "gen1683", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808065", + "values_compared": 2578 + }, + { + "max_rel_err": 0.0, + "name": "gen1684", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808066", + "values_compared": 2870 + }, + { + "max_rel_err": 0.0, + "name": "gen1685", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808067", + "values_compared": 3729 + }, + { + "max_rel_err": 0.0, + "name": "gen1686", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808068", + "values_compared": 3654 + }, + { + "max_rel_err": 0.0, + "name": "gen1687", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808069", + "values_compared": 4244 + }, + { + "max_rel_err": 0.0, + "name": "gen1688", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808070", + "values_compared": 3801 + }, + { + "max_rel_err": 0.0, + "name": "gen1689", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808071", + "values_compared": 2957 + }, + { + "max_rel_err": 0.0, + "name": "gen1690", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808072", + "values_compared": 2052 + }, + { + "max_rel_err": 0.0, + "name": "gen1691", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808073", + "values_compared": 4423 + }, + { + "max_rel_err": 0.0, + "name": "gen1692", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808074", + "values_compared": 3507 + }, + { + "max_rel_err": 0.0, + "name": "gen1693", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808075", + "values_compared": 4104 + }, + { + "max_rel_err": 0.0, + "name": "gen1694", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808076", + "values_compared": 4947 + }, + { + "max_rel_err": 0.0, + "name": "gen1695", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808077", + "values_compared": 416 + }, + { + "max_rel_err": 0.0, + "name": "gen1696", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808078", + "values_compared": 5478 + }, + { + "max_rel_err": 0.0, + "name": "gen1697", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808079", + "values_compared": 2871 + }, + { + "max_rel_err": 0.0, + "name": "gen1698", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808080", + "values_compared": 1122 + }, + { + "max_rel_err": 0.0, + "name": "gen1699", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808081", + "values_compared": 6520 + }, + { + "max_rel_err": 0.0, + "name": "gen1700", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808082", + "values_compared": 37 + }, + { + "max_rel_err": 0.0, + "name": "gen1701", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808083", + "values_compared": 4587 + }, + { + "max_rel_err": 0.0, + "name": "gen1702", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808084", + "values_compared": 6761 + }, + { + "max_rel_err": 0.0, + "name": "gen1703", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808085", + "values_compared": 3786 + }, + { + "max_rel_err": 0.0, + "name": "gen1704", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808086", + "values_compared": 1403 + }, + { + "max_rel_err": 0.0, + "name": "gen1705", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808087", + "values_compared": 1312 + }, + { + "max_rel_err": 0.0, + "name": "gen1706", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808088", + "values_compared": 1351 + }, + { + "max_rel_err": 0.0, + "name": "gen1707", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808089", + "values_compared": 4481 + }, + { + "max_rel_err": 0.0, + "name": "gen1708", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808090", + "values_compared": 2909 + }, + { + "max_rel_err": 0.0, + "name": "gen1709", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808091", + "values_compared": 5208 + }, + { + "max_rel_err": 0.0, + "name": "gen1710", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808092", + "values_compared": 4720 + }, + { + "max_rel_err": 0.0, + "name": "gen1711", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808093", + "values_compared": 4601 + }, + { + "max_rel_err": 0.0, + "name": "gen1712", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808094", + "values_compared": 5145 + }, + { + "max_rel_err": 0.0, + "name": "gen1713", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808095", + "values_compared": 8305 + }, + { + "max_rel_err": 0.0, + "name": "gen1714", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808096", + "values_compared": 6147 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1715", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808097", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1716", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808098", + "values_compared": 4475 + }, + { + "max_rel_err": 0.0, + "name": "gen1717", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808099", + "values_compared": 2642 + }, + { + "max_rel_err": 0.0, + "name": "gen1718", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808100", + "values_compared": 3420 + }, + { + "max_rel_err": 0.0, + "name": "gen1719", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808101", + "values_compared": 3107 + }, + { + "max_rel_err": 0.0, + "name": "gen1720", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808102", + "values_compared": 4854 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1721", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808103", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1722", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808104", + "values_compared": 2860 + }, + { + "max_rel_err": 0.0, + "name": "gen1723", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808105", + "values_compared": 2241 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1724", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808106", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1725", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808107", + "values_compared": 4882 + }, + { + "max_rel_err": 0.0, + "name": "gen1726", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808108", + "values_compared": 6225 + }, + { + "max_rel_err": 0.0, + "name": "gen1727", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808109", + "values_compared": 4926 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1728", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808110", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1729", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808111", + "values_compared": 3497 + }, + { + "max_rel_err": 0.0, + "name": "gen1730", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808112", + "values_compared": 4983 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen1731", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808113", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1732", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808114", + "values_compared": 658 + }, + { + "max_rel_err": 0.0, + "name": "gen1733", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808115", + "values_compared": 2629 + }, + { + "max_rel_err": 0.0, + "name": "gen1734", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808116", + "values_compared": 1509 + }, + { + "max_rel_err": 0.0, + "name": "gen1735", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808117", + "values_compared": 3588 + }, + { + "max_rel_err": 0.0, + "name": "gen1736", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808118", + "values_compared": 63 + }, + { + "max_rel_err": 0.0, + "name": "gen1737", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808119", + "values_compared": 1554 + }, + { + "max_rel_err": 0.0, + "name": "gen1738", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808120", + "values_compared": 5290 + }, + { + "max_rel_err": 0.0, + "name": "gen1739", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808121", + "values_compared": 333 + }, + { + "max_rel_err": 0.0, + "name": "gen1740", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808122", + "values_compared": 3733 + }, + { + "max_rel_err": 0.0, + "name": "gen1741", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808123", + "values_compared": 79 + }, + { + "max_rel_err": 0.0, + "name": "gen1742", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808124", + "values_compared": 5308 + }, + { + "max_rel_err": 0.0, + "name": "gen1743", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808125", + "values_compared": 4471 + }, + { + "max_rel_err": 0.0, + "name": "gen1744", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808126", + "values_compared": 2556 + }, + { + "max_rel_err": 0.0, + "name": "gen1745", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808127", + "values_compared": 5407 + }, + { + "max_rel_err": 0.0, + "name": "gen1746", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808128", + "values_compared": 5120 + }, + { + "max_rel_err": 0.0, + "name": "gen1747", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808129", + "values_compared": 540 + }, + { + "max_rel_err": 0.0, + "name": "gen1748", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808130", + "values_compared": 3252 + }, + { + "max_rel_err": 0.0, + "name": "gen1749", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808131", + "values_compared": 3997 + }, + { + "max_rel_err": 0.0, + "name": "gen1750", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808132", + "values_compared": 5076 + }, + { + "max_rel_err": 0.0, + "name": "gen1751", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808133", + "values_compared": 5958 + }, + { + "max_rel_err": 0.0, + "name": "gen1752", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808134", + "values_compared": 581 + }, + { + "max_rel_err": 0.0, + "name": "gen1753", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808135", + "values_compared": 5212 + }, + { + "max_rel_err": 0.0, + "name": "gen1754", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808136", + "values_compared": 6650 + }, + { + "max_rel_err": 0.0, + "name": "gen1755", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808137", + "values_compared": 1002 + }, + { + "max_rel_err": 0.0, + "name": "gen1756", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808138", + "values_compared": 3615 + }, + { + "max_rel_err": 0.0, + "name": "gen1757", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808139", + "values_compared": 4021 + }, + { + "max_rel_err": 0.0, + "name": "gen1758", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808140", + "values_compared": 2565 + }, + { + "max_rel_err": 0.0, + "name": "gen1759", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808141", + "values_compared": 7061 + }, + { + "max_rel_err": 0.0, + "name": "gen1760", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808142", + "values_compared": 63 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1761", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808143", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1762", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808144", + "values_compared": 3354 + }, + { + "max_rel_err": 0.0, + "name": "gen1763", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808145", + "values_compared": 5335 + }, + { + "max_rel_err": 0.0, + "name": "gen1764", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808146", + "values_compared": 3386 + }, + { + "max_rel_err": 0.0, + "name": "gen1765", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808147", + "values_compared": 1937 + }, + { + "max_rel_err": 0.0, + "name": "gen1766", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808148", + "values_compared": 4395 + }, + { + "max_rel_err": 0.0, + "name": "gen1767", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808149", + "values_compared": 4041 + }, + { + "max_rel_err": 0.0, + "name": "gen1768", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808150", + "values_compared": 4749 + }, + { + "max_rel_err": 0.0, + "name": "gen1769", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808151", + "values_compared": 3346 + }, + { + "max_rel_err": 0.0, + "name": "gen1770", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808152", + "values_compared": 515 + }, + { + "max_rel_err": 0.0, + "name": "gen1771", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808153", + "values_compared": 7081 + }, + { + "max_rel_err": 0.0, + "name": "gen1772", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808154", + "values_compared": 4643 + }, + { + "max_rel_err": 0.0, + "name": "gen1773", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808155", + "values_compared": 2517 + }, + { + "max_rel_err": 0.0, + "name": "gen1774", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808156", + "values_compared": 8867 + }, + { + "max_rel_err": 0.0, + "name": "gen1775", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808157", + "values_compared": 2421 + }, + { + "max_rel_err": 0.0, + "name": "gen1776", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808158", + "values_compared": 4126 + }, + { + "max_rel_err": 0.0, + "name": "gen1777", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808159", + "values_compared": 1862 + }, + { + "max_rel_err": 0.0, + "name": "gen1778", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808160", + "values_compared": 4391 + }, + { + "max_rel_err": 0.0, + "name": "gen1779", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808161", + "values_compared": 4869 + }, + { + "max_rel_err": 0.0, + "name": "gen1780", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808162", + "values_compared": 3514 + }, + { + "max_rel_err": 0.0, + "name": "gen1781", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808163", + "values_compared": 7553 + }, + { + "max_rel_err": 0.0, + "name": "gen1782", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808164", + "values_compared": 1238 + }, + { + "max_rel_err": 0.0, + "name": "gen1783", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808165", + "values_compared": 2777 + }, + { + "max_rel_err": 0.0, + "name": "gen1784", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808166", + "values_compared": 2488 + }, + { + "max_rel_err": 0.0, + "name": "gen1785", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808167", + "values_compared": 3008 + }, + { + "max_rel_err": 0.0, + "name": "gen1786", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808168", + "values_compared": 6632 + }, + { + "max_rel_err": 0.0, + "name": "gen1787", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808169", + "values_compared": 2856 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1788", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808170", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1789", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808171", + "values_compared": 7887 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1790", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808172", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1791", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808173", + "values_compared": 3085 + }, + { + "max_rel_err": 0.0, + "name": "gen1792", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808174", + "values_compared": 2775 + }, + { + "max_rel_err": 0.0, + "name": "gen1793", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808175", + "values_compared": 5404 + }, + { + "max_rel_err": 0.0, + "name": "gen1794", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808176", + "values_compared": 1804 + }, + { + "max_rel_err": 0.0, + "name": "gen1795", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808177", + "values_compared": 1778 + }, + { + "max_rel_err": 0.0, + "name": "gen1796", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808178", + "values_compared": 6960 + }, + { + "max_rel_err": 0.0, + "name": "gen1797", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808179", + "values_compared": 3570 + }, + { + "max_rel_err": 0.0, + "name": "gen1798", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808180", + "values_compared": 4013 + }, + { + "max_rel_err": 0.0, + "name": "gen1799", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808181", + "values_compared": 4160 + }, + { + "max_rel_err": 0.0, + "name": "gen1800", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808182", + "values_compared": 422 + }, + { + "max_rel_err": 0.0, + "name": "gen1801", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808183", + "values_compared": 1588 + }, + { + "max_rel_err": 0.0, + "name": "gen1802", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808184", + "values_compared": 3611 + }, + { + "max_rel_err": 0.0, + "name": "gen1803", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808185", + "values_compared": 3137 + }, + { + "max_rel_err": 0.0, + "name": "gen1804", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808186", + "values_compared": 1253 + }, + { + "max_rel_err": 0.0, + "name": "gen1805", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808187", + "values_compared": 4489 + }, + { + "max_rel_err": 0.0, + "name": "gen1806", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808188", + "values_compared": 2600 + }, + { + "max_rel_err": 0.0, + "name": "gen1807", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808189", + "values_compared": 1969 + }, + { + "max_rel_err": 0.0, + "name": "gen1808", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808190", + "values_compared": 3466 + }, + { + "max_rel_err": 0.0, + "name": "gen1809", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808191", + "values_compared": 1953 + }, + { + "max_rel_err": 0.0, + "name": "gen1810", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808192", + "values_compared": 4361 + }, + { + "max_rel_err": 0.0, + "name": "gen1811", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808193", + "values_compared": 2517 + }, + { + "max_rel_err": 0.0, + "name": "gen1812", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808194", + "values_compared": 1168 + }, + { + "max_rel_err": 0.0, + "name": "gen1813", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808195", + "values_compared": 2604 + }, + { + "max_rel_err": 0.0, + "name": "gen1814", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808196", + "values_compared": 682 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1815", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808197", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1816", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808198", + "values_compared": 6046 + }, + { + "max_rel_err": 0.0, + "name": "gen1817", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808199", + "values_compared": 3252 + }, + { + "max_rel_err": 0.0, + "name": "gen1818", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808200", + "values_compared": 4393 + }, + { + "max_rel_err": 0.0, + "name": "gen1819", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808201", + "values_compared": 7329 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1820", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808202", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1821", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808203", + "values_compared": 1804 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1822", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808204", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1823", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808205", + "values_compared": 110 + }, + { + "max_rel_err": 0.0, + "name": "gen1824", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808206", + "values_compared": 422 + }, + { + "max_rel_err": 0.0, + "name": "gen1825", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808207", + "values_compared": 7239 + }, + { + "max_rel_err": 0.0, + "name": "gen1826", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808208", + "values_compared": 4873 + }, + { + "max_rel_err": 0.0, + "name": "gen1827", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808209", + "values_compared": 3817 + }, + { + "max_rel_err": 0.0, + "name": "gen1828", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808210", + "values_compared": 2604 + }, + { + "max_rel_err": 0.0, + "name": "gen1829", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808211", + "values_compared": 1969 + }, + { + "max_rel_err": 0.0, + "name": "gen1830", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808212", + "values_compared": 3343 + }, + { + "max_rel_err": 0.0, + "name": "gen1831", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808213", + "values_compared": 6851 + }, + { + "max_rel_err": 0.0, + "name": "gen1832", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808214", + "values_compared": 5472 + }, + { + "max_rel_err": 0.0, + "name": "gen1833", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808215", + "values_compared": 3124 + }, + { + "max_rel_err": 0.0, + "name": "gen1834", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808216", + "values_compared": 541 + }, + { + "max_rel_err": 0.0, + "name": "gen1835", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808217", + "values_compared": 6054 + }, + { + "max_rel_err": 0.0, + "name": "gen1836", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808218", + "values_compared": 3169 + }, + { + "max_rel_err": 0.0, + "name": "gen1837", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808219", + "values_compared": 6852 + }, + { + "max_rel_err": 0.0, + "name": "gen1838", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808220", + "values_compared": 1417 + }, + { + "max_rel_err": 0.0, + "name": "gen1839", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808221", + "values_compared": 4564 + }, + { + "max_rel_err": 0.0, + "name": "gen1840", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808222", + "values_compared": 6813 + }, + { + "max_rel_err": 0.0, + "name": "gen1841", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808223", + "values_compared": 2589 + }, + { + "max_rel_err": 0.0, + "name": "gen1842", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808224", + "values_compared": 3418 + }, + { + "max_rel_err": 0.0, + "name": "gen1843", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808225", + "values_compared": 1233 + }, + { + "max_rel_err": 0.0, + "name": "gen1844", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808226", + "values_compared": 3355 + }, + { + "max_rel_err": 0.0, + "name": "gen1845", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808227", + "values_compared": 5958 + }, + { + "max_rel_err": 0.0, + "name": "gen1846", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808228", + "values_compared": 3660 + }, + { + "max_rel_err": 0.0, + "name": "gen1847", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808229", + "values_compared": 848 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1848", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808230", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1849", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808231", + "values_compared": 5882 + }, + { + "max_rel_err": 0.0, + "name": "gen1850", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808232", + "values_compared": 2287 + }, + { + "max_rel_err": 0.0, + "name": "gen1851", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808233", + "values_compared": 4280 + }, + { + "max_rel_err": 0.0, + "name": "gen1852", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808234", + "values_compared": 1103 + }, + { + "max_rel_err": 0.0, + "name": "gen1853", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808235", + "values_compared": 570 + }, + { + "max_rel_err": 0.0, + "name": "gen1854", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808236", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen1855", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808237", + "values_compared": 6043 + }, + { + "max_rel_err": 0.0, + "name": "gen1856", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808238", + "values_compared": 4646 + }, + { + "max_rel_err": 0.0, + "name": "gen1857", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808239", + "values_compared": 3408 + }, + { + "max_rel_err": 0.0, + "name": "gen1858", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808240", + "values_compared": 2588 + }, + { + "max_rel_err": 0.0, + "name": "gen1859", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808241", + "values_compared": 2305 + }, + { + "max_rel_err": 0.0, + "name": "gen1860", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808242", + "values_compared": 5680 + }, + { + "max_rel_err": 0.0, + "name": "gen1861", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808243", + "values_compared": 3777 + }, + { + "max_rel_err": 0.0, + "name": "gen1862", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808244", + "values_compared": 3537 + }, + { + "deferred": { + "symbol": "SmFace::GetTolerance", + "unit": "topology.face_p2" + }, + "max_rel_err": 0.0, + "name": "gen1863", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808245", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1864", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808246", + "values_compared": 4000 + }, + { + "max_rel_err": 0.0, + "name": "gen1865", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808247", + "values_compared": 3072 + }, + { + "max_rel_err": 0.0, + "name": "gen1866", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808248", + "values_compared": 5993 + }, + { + "max_rel_err": 0.0, + "name": "gen1867", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808249", + "values_compared": 2997 + }, + { + "max_rel_err": 0.0, + "name": "gen1868", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808250", + "values_compared": 4386 + }, + { + "max_rel_err": 0.0, + "name": "gen1869", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808251", + "values_compared": 4243 + }, + { + "max_rel_err": 0.0, + "name": "gen1870", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808252", + "values_compared": 6120 + }, + { + "max_rel_err": 0.0, + "name": "gen1871", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808253", + "values_compared": 3887 + }, + { + "max_rel_err": 0.0, + "name": "gen1872", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808254", + "values_compared": 937 + }, + { + "max_rel_err": 0.0, + "name": "gen1873", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808255", + "values_compared": 6921 + }, + { + "max_rel_err": 0.0, + "name": "gen1874", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808256", + "values_compared": 602 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1875", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808257", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1876", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808258", + "values_compared": 1775 + }, + { + "max_rel_err": 0.0, + "name": "gen1877", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808259", + "values_compared": 5951 + }, + { + "max_rel_err": 0.0, + "name": "gen1878", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808260", + "values_compared": 4357 + }, + { + "max_rel_err": 0.0, + "name": "gen1879", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808261", + "values_compared": 5635 + }, + { + "max_rel_err": 0.0, + "name": "gen1880", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808262", + "values_compared": 7744 + }, + { + "max_rel_err": 0.0, + "name": "gen1881", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808263", + "values_compared": 3462 + }, + { + "max_rel_err": 0.0, + "name": "gen1882", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808264", + "values_compared": 5579 + }, + { + "max_rel_err": 0.0, + "name": "gen1883", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808265", + "values_compared": 2939 + }, + { + "max_rel_err": 0.0, + "name": "gen1884", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808266", + "values_compared": 2774 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1885", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808267", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1886", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808268", + "values_compared": 6046 + }, + { + "max_rel_err": 0.0, + "name": "gen1887", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808269", + "values_compared": 3074 + }, + { + "max_rel_err": 0.0, + "name": "gen1888", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808270", + "values_compared": 7520 + }, + { + "max_rel_err": 0.0, + "name": "gen1889", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808271", + "values_compared": 1241 + }, + { + "max_rel_err": 0.0, + "name": "gen1890", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808272", + "values_compared": 4302 + }, + { + "max_rel_err": 0.0, + "name": "gen1891", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808273", + "values_compared": 1597 + }, + { + "max_rel_err": 0.0, + "name": "gen1892", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808274", + "values_compared": 4519 + }, + { + "max_rel_err": 0.0, + "name": "gen1893", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808275", + "values_compared": 2552 + }, + { + "max_rel_err": 0.0, + "name": "gen1894", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808276", + "values_compared": 1200 + }, + { + "max_rel_err": 0.0, + "name": "gen1895", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808277", + "values_compared": 410 + }, + { + "max_rel_err": 0.0, + "name": "gen1896", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808278", + "values_compared": 1652 + }, + { + "max_rel_err": 0.0, + "name": "gen1897", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808279", + "values_compared": 6049 + }, + { + "max_rel_err": 0.0, + "name": "gen1898", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808280", + "values_compared": 1097 + }, + { + "max_rel_err": 0.0, + "name": "gen1899", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808281", + "values_compared": 2075 + }, + { + "max_rel_err": 0.0, + "name": "gen1900", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808282", + "values_compared": 6738 + }, + { + "max_rel_err": 0.0, + "name": "gen1901", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808283", + "values_compared": 3613 + }, + { + "max_rel_err": 0.0, + "name": "gen1902", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808284", + "values_compared": 2470 + }, + { + "max_rel_err": 0.0, + "name": "gen1903", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808285", + "values_compared": 3311 + }, + { + "max_rel_err": 0.0, + "name": "gen1904", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808286", + "values_compared": 1992 + }, + { + "max_rel_err": 0.0, + "name": "gen1905", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808287", + "values_compared": 4331 + }, + { + "max_rel_err": 0.0, + "name": "gen1906", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808288", + "values_compared": 2365 + }, + { + "max_rel_err": 0.0, + "name": "gen1907", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808289", + "values_compared": 6045 + }, + { + "max_rel_err": 0.0, + "name": "gen1908", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808290", + "values_compared": 4354 + }, + { + "max_rel_err": 0.0, + "name": "gen1909", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808291", + "values_compared": 3225 + }, + { + "max_rel_err": 0.0, + "name": "gen1910", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808292", + "values_compared": 3289 + }, + { + "max_rel_err": 0.0, + "name": "gen1911", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808293", + "values_compared": 2476 + }, + { + "max_rel_err": 0.0, + "name": "gen1912", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808294", + "values_compared": 1605 + }, + { + "max_rel_err": 0.0, + "name": "gen1913", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808295", + "values_compared": 1985 + }, + { + "max_rel_err": 0.0, + "name": "gen1914", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808296", + "values_compared": 3542 + }, + { + "max_rel_err": 0.0, + "name": "gen1915", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808297", + "values_compared": 6430 + }, + { + "max_rel_err": 0.0, + "name": "gen1916", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808298", + "values_compared": 4864 + }, + { + "max_rel_err": 0.0, + "name": "gen1917", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808299", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen1918", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808300", + "values_compared": 5449 + }, + { + "max_rel_err": 0.0, + "name": "gen1919", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808301", + "values_compared": 5248 + }, + { + "max_rel_err": 0.0, + "name": "gen1920", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808302", + "values_compared": 1479 + }, + { + "max_rel_err": 0.0, + "name": "gen1921", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808303", + "values_compared": 6627 + }, + { + "max_rel_err": 0.0, + "name": "gen1922", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808304", + "values_compared": 3672 + }, + { + "max_rel_err": 0.0, + "name": "gen1923", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808305", + "values_compared": 3774 + }, + { + "max_rel_err": 0.0, + "name": "gen1924", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808306", + "values_compared": 3110 + }, + { + "max_rel_err": 0.0, + "name": "gen1925", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808307", + "values_compared": 2408 + }, + { + "max_rel_err": 0.0, + "name": "gen1926", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808308", + "values_compared": 525 + }, + { + "max_rel_err": 0.0, + "name": "gen1927", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808309", + "values_compared": 3243 + }, + { + "max_rel_err": 0.0, + "name": "gen1928", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808310", + "values_compared": 4579 + }, + { + "max_rel_err": 0.0, + "name": "gen1929", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808311", + "values_compared": 1804 + }, + { + "max_rel_err": 0.0, + "name": "gen1930", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808312", + "values_compared": 3721 + }, + { + "max_rel_err": 0.0, + "name": "gen1931", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808313", + "values_compared": 4085 + }, + { + "max_rel_err": 0.0, + "name": "gen1932", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808314", + "values_compared": 1580 + }, + { + "max_rel_err": 0.0, + "name": "gen1933", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808315", + "values_compared": 2854 + }, + { + "max_rel_err": 0.0, + "name": "gen1934", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808316", + "values_compared": 3366 + }, + { + "max_rel_err": 0.0, + "name": "gen1935", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808317", + "values_compared": 1200 + }, + { + "max_rel_err": 0.0, + "name": "gen1936", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808318", + "values_compared": 5448 + }, + { + "max_rel_err": 0.0, + "name": "gen1937", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808319", + "values_compared": 602 + }, + { + "max_rel_err": 0.0, + "name": "gen1938", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808320", + "values_compared": 463 + }, + { + "max_rel_err": 0.0, + "name": "gen1939", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808321", + "values_compared": 1213 + }, + { + "max_rel_err": 0.0, + "name": "gen1940", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808322", + "values_compared": 6983 + }, + { + "max_rel_err": 0.0, + "name": "gen1941", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808323", + "values_compared": 2741 + }, + { + "max_rel_err": 0.0, + "name": "gen1942", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808324", + "values_compared": 3495 + }, + { + "max_rel_err": 0.0, + "name": "gen1943", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808325", + "values_compared": 854 + }, + { + "max_rel_err": 0.0, + "name": "gen1944", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808326", + "values_compared": 7038 + }, + { + "max_rel_err": 0.0, + "name": "gen1945", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808327", + "values_compared": 1165 + }, + { + "max_rel_err": 0.0, + "name": "gen1946", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808328", + "values_compared": 3681 + }, + { + "max_rel_err": 0.0, + "name": "gen1947", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808329", + "values_compared": 3579 + }, + { + "max_rel_err": 0.0, + "name": "gen1948", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808330", + "values_compared": 658 + }, + { + "max_rel_err": 0.0, + "name": "gen1949", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808331", + "values_compared": 4965 + }, + { + "max_rel_err": 0.0, + "name": "gen1950", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808332", + "values_compared": 6232 + }, + { + "max_rel_err": 0.0, + "name": "gen1951", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808333", + "values_compared": 2800 + }, + { + "max_rel_err": 0.0, + "name": "gen1952", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808334", + "values_compared": 3729 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1953", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808335", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1954", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808336", + "values_compared": 1592 + }, + { + "max_rel_err": 0.0, + "name": "gen1955", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808337", + "values_compared": 1506 + }, + { + "max_rel_err": 0.0, + "name": "gen1956", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808338", + "values_compared": 3553 + }, + { + "max_rel_err": 0.0, + "name": "gen1957", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808339", + "values_compared": 1656 + }, + { + "max_rel_err": 0.0, + "name": "gen1958", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808340", + "values_compared": 4759 + }, + { + "max_rel_err": 0.0, + "name": "gen1959", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808341", + "values_compared": 1579 + }, + { + "max_rel_err": 0.0, + "name": "gen1960", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808342", + "values_compared": 1873 + }, + { + "max_rel_err": 0.0, + "name": "gen1961", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808343", + "values_compared": 1878 + }, + { + "max_rel_err": 0.0, + "name": "gen1962", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808344", + "values_compared": 7440 + }, + { + "max_rel_err": 0.0, + "name": "gen1963", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808345", + "values_compared": 2411 + }, + { + "max_rel_err": 0.0, + "name": "gen1964", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808346", + "values_compared": 2962 + }, + { + "max_rel_err": 0.0, + "name": "gen1965", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808347", + "values_compared": 1710 + }, + { + "max_rel_err": 0.0, + "name": "gen1966", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808348", + "values_compared": 2014 + }, + { + "max_rel_err": 0.0, + "name": "gen1967", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808349", + "values_compared": 2146 + }, + { + "max_rel_err": 0.0, + "name": "gen1968", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808350", + "values_compared": 3131 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen1969", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808351", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1970", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808352", + "values_compared": 4704 + }, + { + "max_rel_err": 0.0, + "name": "gen1971", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808353", + "values_compared": 2949 + }, + { + "max_rel_err": 0.0, + "name": "gen1972", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808354", + "values_compared": 1843 + }, + { + "max_rel_err": 0.0, + "name": "gen1973", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808355", + "values_compared": 3035 + }, + { + "max_rel_err": 0.0, + "name": "gen1974", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808356", + "values_compared": 6275 + }, + { + "max_rel_err": 0.0, + "name": "gen1975", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808357", + "values_compared": 4937 + }, + { + "max_rel_err": 0.0, + "name": "gen1976", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808358", + "values_compared": 6563 + }, + { + "deferred": { + "symbol": "SmSurface::CacheMakeOrValidate", + "unit": "surface.surface_p1" + }, + "max_rel_err": 0.0, + "name": "gen1977", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808359", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmFace::GetTolerance", + "unit": "topology.face_p2" + }, + "max_rel_err": 0.0, + "name": "gen1978", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808360", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1979", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808361", + "values_compared": 1644 + }, + { + "max_rel_err": 0.0, + "name": "gen1980", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808362", + "values_compared": 3691 + }, + { + "max_rel_err": 0.0, + "name": "gen1981", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808363", + "values_compared": 2379 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalPointSolve", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen1982", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808364", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1983", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808365", + "values_compared": 1781 + }, + { + "max_rel_err": 0.0, + "name": "gen1984", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808366", + "values_compared": 8069 + }, + { + "max_rel_err": 0.0, + "name": "gen1985", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808367", + "values_compared": 6790 + }, + { + "max_rel_err": 0.0, + "name": "gen1986", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808368", + "values_compared": 958 + }, + { + "max_rel_err": 0.0, + "name": "gen1987", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808369", + "values_compared": 2953 + }, + { + "max_rel_err": 0.0, + "name": "gen1988", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808370", + "values_compared": 3727 + }, + { + "max_rel_err": 0.0, + "name": "gen1989", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808371", + "values_compared": 4549 + }, + { + "deferred": { + "symbol": "SmCrvOnSurf::SmCrvOnSurf", + "unit": "curve.crv_on_surf" + }, + "max_rel_err": 0.0, + "name": "gen1990", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=12816351487143808372", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1991", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808373", + "values_compared": 2120 + }, + { + "max_rel_err": 0.0, + "name": "gen1992", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808374", + "values_compared": 3111 + }, + { + "max_rel_err": 0.0, + "name": "gen1993", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808375", + "values_compared": 2929 + }, + { + "max_rel_err": 0.0, + "name": "gen1994", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808376", + "values_compared": 2991 + }, + { + "max_rel_err": 0.0, + "name": "gen1995", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808377", + "values_compared": 2152 + }, + { + "max_rel_err": 0.0, + "name": "gen1996", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808378", + "values_compared": 1097 + }, + { + "max_rel_err": 0.0, + "name": "gen1997", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808379", + "values_compared": 4614 + }, + { + "max_rel_err": 0.0, + "name": "gen1998", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808380", + "values_compared": 2645 + }, + { + "max_rel_err": 0.0, + "name": "gen1999", + "outcome": "pass", + "pass": true, + "source": "generated:seed=12816351487143808381", + "values_compared": 499 + }, + { + "max_rel_err": 0.0, + "name": "edge_containers_unit", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8665 + }, + { + "max_rel_err": 0.0, + "name": "edge_containers_huge", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8665 + }, + { + "max_rel_err": 0.0, + "name": "edge_containers_tiny", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8665 + }, + { + "max_rel_err": 0.0, + "name": "edge_touches_in_out", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 102 + }, + { + "max_rel_err": 0.0, + "name": "edge_touches_out_in", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 90 + }, + { + "max_rel_err": 0.0, + "name": "edge_touches_balanced", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 90 + }, + { + "max_rel_err": 0.0, + "name": "edge_touches_empty", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 78 + }, + { + "max_rel_err": 0.0, + "name": "edge_angles", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 203 + }, + { + "deferred": { + "symbol": "SmEdge::GetCurve", + "unit": "topology.edge" + }, + "max_rel_err": 0.0, + "name": "edge_topology_edge_through", + "outcome": "deferred", + "pass": false, + "source": "inline", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmEdge::GetFaces", + "unit": "topology.edge" + }, + "max_rel_err": 0.0, + "name": "edge_topology_cci_geometry", + "outcome": "deferred", + "pass": false, + "source": "inline", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmFace::GetSurface", + "unit": "topology.face_p2" + }, + "max_rel_err": 0.0, + "name": "edge_topology_face_point_class", + "outcome": "deferred", + "pass": false, + "source": "inline", + "values_compared": 0 + } + ], + "cases_both_errored": 0, + "cases_deferred": 160, + "cases_failed": 0, + "cases_passed": 1853, + "cases_total": 2013, + "deferred_by_unit": { + "curve.crv_on_surf": 24, + "intersect.curve_class_p4": 6, + "surface.surface_p1": 55, + "surface.surface_p4": 54, + "topology.edge": 9, + "topology.face_p2": 10, + "topology.vertex": 2 + }, + "max_rel_err": 0.0, + "pass": true, + "rel_tol": 1e-9, + "seeds": 16, + "status": "partial", + "unit": "intersect.curve_class_p1" +} From c8324c5fd2bbc60748ff164acbf4505a728c428f Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 09:26:50 -0400 Subject: [PATCH 25/54] surface.plane_p2: review fixes (clippy, SmApproxTol3d in runners, adversarial cases) - difftest: name plane_data's return type (PlaneData) so clippy with the cpp feature passes (type_complexity). - difftest: apply approx_tol3d to the plane/plane and SoR/plane tolerances as the shims' SmApproxTol3d does (|tol|, SM_USE_DEFAULT -> zone tol / 2); a negative or USE_DEFAULT tolerance used to disagree with the C++. - ffi: surf_of_revolution_p1 accepts any finite plane tolerance (the C++ takes |tol|). - fixtures: 91 plane_p2 and 51 surf_of_revolution_p1 adversarial cases. - plan: notes and findings updated. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm --- crates/difftest/src/units/surface_plane_p2.rs | 12 +- .../units/surface_surf_of_revolution_p1.rs | 5 +- .../units/surface_surf_of_revolution_p1.rs | 4 +- fixtures/surface.plane_p2/adv.json | 5975 +++++++++++++++++ .../surface.surf_of_revolution_p1/adv.json | 3261 +++++++++ plan/findings.md | 17 + plan/modules.toml | 4 +- reports/difftest/surface.plane_p2.json | 732 +- .../surface.surf_of_revolution_p1.json | 412 +- 9 files changed, 10411 insertions(+), 11 deletions(-) create mode 100644 fixtures/surface.plane_p2/adv.json create mode 100644 fixtures/surface.surf_of_revolution_p1/adv.json diff --git a/crates/difftest/src/units/surface_plane_p2.rs b/crates/difftest/src/units/surface_plane_p2.rs index 69b62f5eb8..a7ae1a2b39 100644 --- a/crates/difftest/src/units/surface_plane_p2.rs +++ b/crates/difftest/src/units/surface_plane_p2.rs @@ -18,6 +18,7 @@ use solidcore::curve::line::Line; use solidcore::geom::axis2_placement::Axis2Placement; use solidcore::geom::extent1d::Extent1d; use solidcore::geom::extent2d::Extent2d; +use solidcore::geom::tol::approx_tol3d; use solidcore::geom::vector2d::Vec2; use solidcore::geom::vector3d::Vec3; use solidcore::kernel::Kernel; @@ -797,6 +798,8 @@ fn rust_op(k: &Kernel, i: &Inputs, o: &mut Vec) -> Result<(), Fail> { db, tol, } => { + // the shim passes `SmApproxTol3d(tol)`: |tol|, SM_USE_DEFAULT -> zone tol / 2 + let tol = tol.map(|t| approx_tol3d(k, t)); let a = rust_plane(a)?; if *global { let sa = Surface::from(a); @@ -811,7 +814,7 @@ fn rust_op(k: &Kernel, i: &Inputs, o: &mut Vec) -> Result<(), Fail> { other_ref, &ext(*db), [true, true], - *tol, + tol, None, ); if let Some(x) = st(o, r)? { @@ -826,7 +829,7 @@ fn rust_op(k: &Kernel, i: &Inputs, o: &mut Vec) -> Result<(), Fail> { } }; let other_ref = other.as_ref().unwrap_or(&a); - let r = a.intersect_with_plane(&ext(*da), other_ref, &ext(*db), *tol); + let r = a.intersect_with_plane(&ext(*da), other_ref, &ext(*db), tol); if let Some((more, x)) = st(o, r)? { o.push(fl(more)); put_intersection(o, &x)?; @@ -1035,9 +1038,12 @@ fn gen_plane(rng: &mut Rng, s: f64) -> PlaneIn { } } +/// Origin, X, Y, scale and domain of a plane input. +type PlaneData = ([f64; 3], [f64; 3], [f64; 3], [f64; 2], [f64; 4]); + /// Origin, X, Y, scale and domain of a plane input (for points on it); an infinite /// plane gets a finite stand-in domain. -fn plane_data(p: &PlaneIn) -> ([f64; 3], [f64; 3], [f64; 3], [f64; 2], [f64; 4]) { +fn plane_data(p: &PlaneIn) -> PlaneData { match &p.make { MakeIn::Bounded { o, diff --git a/crates/difftest/src/units/surface_surf_of_revolution_p1.rs b/crates/difftest/src/units/surface_surf_of_revolution_p1.rs index 5a3e0cc538..30d7a9e4bc 100644 --- a/crates/difftest/src/units/surface_surf_of_revolution_p1.rs +++ b/crates/difftest/src/units/surface_surf_of_revolution_p1.rs @@ -29,6 +29,7 @@ use solidcore::curve::line::Line; use solidcore::geom::axis2_placement::Axis2Placement; use solidcore::geom::extent1d::Extent1d; use solidcore::geom::extent2d::Extent2d; +use solidcore::geom::tol::approx_tol3d; use solidcore::geom::vector2d::Point2; use solidcore::geom::vector3d::Vec3; use solidcore::kernel::Kernel; @@ -665,7 +666,9 @@ fn rust_op( Ok(p) => p, }; let [a, b, c, d] = *dom; - s.intersect_with_plane(k, &plane, &Extent2d::from_bounds(a, b, c, d), *tol) + // the shim passes `SmApproxTol3d(tol)`: |tol|, SM_USE_DEFAULT -> zone tol / 2 + let tol = tol.map(|t| approx_tol3d(k, t)); + s.intersect_with_plane(k, &plane, &Extent2d::from_bounds(a, b, c, d), tol) .map(|(more, x)| { o.extend([0.0, flag(more), x.curves_3d.len() as f64]); for c in &x.curves_3d { diff --git a/crates/solidcore-ffi/src/units/surface_surf_of_revolution_p1.rs b/crates/solidcore-ffi/src/units/surface_surf_of_revolution_p1.rs index 881e55e281..34fbe36b33 100644 --- a/crates/solidcore-ffi/src/units/surface_surf_of_revolution_p1.rs +++ b/crates/solidcore-ffi/src/units/surface_surf_of_revolution_p1.rs @@ -539,8 +539,10 @@ fn push_op(o: &mut Vec, op: &Op) -> Result<(), FfiError> { finite(origin, "plane")?; axes(*x, *y, "plane")?; domain(*dom, "plane domain")?; + // the shim reads it into an `SmApproxTol3d`, which takes |tol| (and maps + // SM_USE_DEFAULT to the zone tolerance), so any finite value is valid let t = tol.unwrap_or(0.0); - if !(t.is_finite() && t >= 0.0) { + if !t.is_finite() { return Err(bad("plane: tolerance")); } o.extend_from_slice(origin); diff --git a/fixtures/surface.plane_p2/adv.json b/fixtures/surface.plane_p2/adv.json new file mode 100644 index 0000000000..251ba159f7 --- /dev/null +++ b/fixtures/surface.plane_p2/adv.json @@ -0,0 +1,5975 @@ +{ + "cases": [ + { + "name": "adv_pp_ang_0", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1.0, + 0, + 1e-08 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "adv_pp_ang_inf_0", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "normal", + "o": [ + 0, + 0, + 0 + ], + "n": [ + 0, + 0, + 1 + ] + }, + "nurb": false + }, + "da": [ + 0, + 0, + 1, + 1 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "normal", + "o": [ + 1, + 1, + 1 + ], + "n": [ + 1e-08, + 0, + 1.0 + ] + }, + "nurb": false + } + }, + "db": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "adv_pp_ang_1", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1.0, + 0, + 1.0000001e-08 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "adv_pp_ang_inf_1", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "normal", + "o": [ + 0, + 0, + 0 + ], + "n": [ + 0, + 0, + 1 + ] + }, + "nurb": false + }, + "da": [ + 0, + 0, + 1, + 1 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "normal", + "o": [ + 1, + 1, + 1 + ], + "n": [ + 1.0000001e-08, + 0, + 1.0 + ] + }, + "nurb": false + } + }, + "db": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "adv_pp_ang_2", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 0.9999999999999998, + 0, + 2e-08 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "adv_pp_ang_inf_2", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "normal", + "o": [ + 0, + 0, + 0 + ], + "n": [ + 0, + 0, + 1 + ] + }, + "nurb": false + }, + "da": [ + 0, + 0, + 1, + 1 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "normal", + "o": [ + 1, + 1, + 1 + ], + "n": [ + 2e-08, + 0, + 0.9999999999999998 + ] + }, + "nurb": false + } + }, + "db": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "adv_pp_ang_3", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 0.999999999999995, + 0, + 9.999999999999982e-08 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "adv_pp_ang_inf_3", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "normal", + "o": [ + 0, + 0, + 0 + ], + "n": [ + 0, + 0, + 1 + ] + }, + "nurb": false + }, + "da": [ + 0, + 0, + 1, + 1 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "normal", + "o": [ + 1, + 1, + 1 + ], + "n": [ + 9.999999999999982e-08, + 0, + 0.999999999999995 + ] + }, + "nurb": false + } + }, + "db": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "adv_pp_ang_4", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 0.9999999999995, + 0, + 9.999999999998333e-07 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "adv_pp_ang_inf_4", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "normal", + "o": [ + 0, + 0, + 0 + ], + "n": [ + 0, + 0, + 1 + ] + }, + "nurb": false + }, + "da": [ + 0, + 0, + 1, + 1 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "normal", + "o": [ + 1, + 1, + 1 + ], + "n": [ + 9.999999999998333e-07, + 0, + 0.9999999999995 + ] + }, + "nurb": false + } + }, + "db": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "adv_pp_scaled_uv", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 1, + 2, + 3 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 3.5, + 0.25 + ], + "domain": [ + -2, + -7, + 4, + 9 + ] + }, + "nurb": true + }, + "da": [ + -1, + -5, + 3, + 8 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 0.1, + 10 + ], + "domain": [ + -100, + -1, + 100, + 1 + ] + }, + "nurb": true + } + }, + "db": [ + -90, + -0.5, + 50, + 0.9 + ] + } + }, + { + "name": "adv_pp_parallel_one_nurb", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 1e-09 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": false + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "adv_pp_coincident_flipped", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 1, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + -1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "adv_pp_coincident_tol_given", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0.01 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ], + "tol": 0.05 + } + }, + { + "name": "adv_pp_parallel_tol_given", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0.01 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ], + "tol": 0.001 + } + }, + { + "name": "adv_pp_parallel_boxes_disjoint", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 20, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "adv_pp_bounded_touch_tol", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 5.0000001, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ], + "tol": 1e-06 + } + }, + { + "name": "adv_pp_bounded_gap", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 5.001, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ], + "tol": 1e-06 + } + }, + { + "name": "adv_pp_zero_tol", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 1, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ], + "tol": 0.0 + } + }, + { + "name": "adv_pp_huge_tol", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 1, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ], + "tol": 100.0 + } + }, + { + "name": "adv_pp_global_parallel_nonurb", + "inputs": { + "op": "intersect", + "global": true, + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": false + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": false + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "adv_pp_far", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 10000000.0, + 10000000.0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -1, + -1, + 1, + 1 + ] + }, + "nurb": true + }, + "da": [ + -1, + -1, + 1, + 1 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 10000000.0, + 10000000.0, + 0 + ], + "x": [ + 0.6, + 0.8, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -1, + -1, + 1, + 1 + ] + }, + "nurb": true + } + }, + "db": [ + -1, + -1, + 1, + 1 + ] + } + }, + { + "name": "adv_pp_canonical_both", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "canonical", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ] + }, + "nurb": false + }, + "da": [ + 0, + 0, + 1, + 1 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "canonical", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ] + }, + "nurb": true + } + }, + "db": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "name": "adv_isp_c0_kink_flat", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 2, + "q": 1, + "net": [ + [ + [ + 0, + 0, + 0 + ], + [ + 0, + 3, + 0 + ] + ], + [ + [ + 1, + 0, + 0 + ], + [ + 1, + 3, + 0 + ] + ], + [ + [ + 1.2, + 0, + 0 + ], + [ + 1.2, + 3, + 0 + ] + ], + [ + [ + 1.4, + 0, + 0 + ], + [ + 1.4, + 3, + 0 + ] + ], + [ + [ + 4, + 0, + 0 + ], + [ + 4, + 3, + 0 + ] + ] + ], + "u": [ + 0, + 0, + 0, + 0.45, + 0.45, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + }, + "scale": 1.0 + } + }, + { + "name": "adv_isp_c0_fold", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 2, + "q": 1, + "net": [ + [ + [ + 0, + 0, + 0 + ], + [ + 0, + 3, + 0 + ] + ], + [ + [ + 0.5, + 0, + 0 + ], + [ + 0.5, + 3, + 0 + ] + ], + [ + [ + 1, + 0, + 0 + ], + [ + 1, + 3, + 0 + ] + ], + [ + [ + 1.5, + 0, + 0.5 + ], + [ + 1.5, + 3, + 0.5 + ] + ], + [ + [ + 2, + 0, + 1 + ], + [ + 2, + 3, + 1 + ] + ] + ], + "u": [ + 0, + 0, + 0, + 0.45, + 0.45, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + }, + "scale": 1.0 + } + }, + { + "name": "adv_isp_c0_fold_mid", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 2, + "q": 1, + "net": [ + [ + [ + 0, + 0, + 0 + ], + [ + 0, + 3, + 0 + ] + ], + [ + [ + 0.5, + 0, + 0 + ], + [ + 0.5, + 3, + 0 + ] + ], + [ + [ + 1, + 0, + 0 + ], + [ + 1, + 3, + 0 + ] + ], + [ + [ + 1.5, + 0, + 0.5 + ], + [ + 1.5, + 3, + 0.5 + ] + ], + [ + [ + 2, + 0, + 0 + ], + [ + 2, + 3, + 0 + ] + ] + ], + "u": [ + 0, + 0, + 0, + 0.45, + 0.45, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + }, + "scale": 1.0 + } + }, + { + "name": "adv_isp_degenerate_edge", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 1, + "q": 1, + "net": [ + [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ], + [ + [ + 2, + 0, + 0 + ], + [ + 2, + 3, + 0 + ] + ] + ], + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + }, + "scale": 1.0 + } + }, + { + "name": "adv_isp_collapsed_max", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 1, + "q": 1, + "net": [ + [ + [ + 0, + 0, + 0 + ], + [ + 0, + 3, + 0 + ] + ], + [ + [ + 2, + 0, + 0 + ], + [ + 2, + 0, + 0 + ] + ] + ], + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + }, + "scale": 1.0 + } + }, + { + "name": "adv_isp_tiny", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 1, + "q": 1, + "net": [ + [ + [ + 0, + 0, + 0 + ], + [ + 0, + 3e-06, + 0 + ] + ], + [ + [ + 2e-06, + 0, + 0 + ], + [ + 2e-06, + 3e-06, + 0 + ] + ] + ], + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + }, + "scale": 1.0 + } + }, + { + "name": "adv_isp_huge_offset", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 1, + "q": 1, + "net": [ + [ + [ + 1000000.0, + 1000000.0, + 1000000.0 + ], + [ + 1000000.0, + 1000003.0, + 1000000.0 + ] + ], + [ + [ + 1000002.0, + 1000000.0, + 1000000.0 + ], + [ + 1000002.0, + 1000003.0, + 1000000.0001 + ] + ] + ], + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + }, + "scale": 1000.0 + } + }, + { + "name": "adv_isp_skew_small", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 1, + "q": 1, + "net": [ + [ + [ + 0, + 0, + 0 + ], + [ + 1e-07, + 3, + 0 + ] + ], + [ + [ + 2, + 0, + 0 + ], + [ + 2.0000001, + 3, + 0 + ] + ] + ], + "u": [ + -3, + -3, + 7, + 7 + ], + "v": [ + 2, + 2, + 2.5, + 2.5 + ] + }, + "scale": 10.0 + } + }, + { + "name": "adv_isp_reverse_normal", + "inputs": { + "op": "is_nurb_plane", + "s": { + "p": 1, + "q": 1, + "net": [ + [ + [ + 0, + 0, + 0 + ], + [ + 2, + 0, + 0 + ] + ], + [ + [ + 0, + 3, + 0 + ], + [ + 2, + 3, + 0 + ] + ] + ], + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + }, + "scale": 1.0 + } + }, + { + "name": "adv_xf_neg_iso", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "frame": [ + [ + 0, + 0, + 0 + ], + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "scale": [ + -2, + -2, + -2 + ] + } + }, + { + "name": "adv_xf_iso_neg_rot", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 1, + 2, + 3 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 2, + 3 + ], + "domain": [ + -1, + -2, + 4, + 5 + ] + }, + "nurb": true + }, + "frame": [ + [ + 5, + -1, + 2 + ], + [ + 0, + 0.6, + 0.8 + ], + [ + 1, + 0, + 0 + ] + ], + "scale": [ + 0.5, + 0.5, + 0.5 + ] + } + }, + { + "name": "adv_xf_near_identity", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "frame": [ + [ + 1e-13, + 0, + 0 + ], + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ] + } + }, + { + "name": "adv_xf_huge_scale", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "frame": [ + [ + 0, + 0, + 0 + ], + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "scale": [ + 100000.0, + 100000.0, + 100000.0 + ] + } + }, + { + "name": "adv_xf_tiny_scale", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "frame": [ + [ + 0, + 0, + 0 + ], + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "scale": [ + 1e-05, + 1e-05, + 1e-05 + ] + } + }, + { + "name": "adv_xf_nearly_iso", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "frame": [ + [ + 0, + 0, + 0 + ], + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "scale": [ + 2, + 2, + 2.0000000000001 + ] + } + }, + { + "name": "adv_xf_normal_plane", + "inputs": { + "op": "transform", + "a": { + "make": { + "kind": "normal", + "o": [ + 1, + 2, + 3 + ], + "n": [ + 1, + 1, + 1 + ] + }, + "nurb": true + }, + "frame": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + } + }, + { + "name": "adv_off_scaled", + "inputs": { + "op": "offset", + "a": { + "make": { + "kind": "bounded", + "o": [ + 1, + 2, + 3 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 3.5, + 0.25 + ], + "domain": [ + -2, + -7, + 4, + 9 + ] + }, + "nurb": true + }, + "dist": -1e-07 + } + }, + { + "name": "adv_off_huge", + "inputs": { + "op": "offset", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dist": 1000000000.0 + } + }, + { + "name": "adv_off_normal_nonurb", + "inputs": { + "op": "offset", + "a": { + "make": { + "kind": "normal", + "o": [ + 1, + 2, + 3 + ], + "n": [ + 1, + -2, + 0.5 + ] + }, + "nurb": false + }, + "dist": 2.5 + } + }, + { + "name": "adv_trimdom_inverted", + "inputs": { + "op": "trim_domain", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + 1, + 1, + -1, + -1 + ] + } + }, + { + "name": "adv_trimdom_degenerate", + "inputs": { + "op": "trim_domain", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + 1, + -1, + 1, + 1 + ] + } + }, + { + "name": "adv_trimdom_eps_out", + "inputs": { + "op": "trim_domain", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5.000000000001, + -3, + 0, + 0 + ] + } + }, + { + "name": "adv_trimdom_scaled", + "inputs": { + "op": "trim_domain", + "a": { + "make": { + "kind": "bounded", + "o": [ + 1, + 2, + 3 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 3.5, + 0.25 + ], + "domain": [ + -2, + -7, + 4, + 9 + ] + }, + "nurb": true + }, + "dom": [ + -1, + 0, + 3.9, + 8.5 + ] + } + }, + { + "name": "adv_trimdom_normal", + "inputs": { + "op": "trim_domain", + "a": { + "make": { + "kind": "normal", + "o": [ + 0, + 0, + 0 + ], + "n": [ + 0, + 0, + 1 + ] + }, + "nurb": true + }, + "dom": [ + -1, + 0, + 3, + 8 + ] + } + }, + { + "name": "adv_tc_bspline_c0_corner", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "b_spline", + "dim": 3, + "p": 1, + "cpts": [ + [ + -8, + 0, + 0 + ], + [ + -5, + -3, + 0 + ], + [ + 0, + -3, + 0 + ], + [ + 5, + 3, + 0 + ], + [ + 8, + 3, + 0 + ] + ], + "knots": [ + 0, + 0, + 0.25, + 0.5, + 0.75, + 1, + 1 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "adv_tc_bspline_dim2", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "b_spline", + "dim": 2, + "p": 2, + "cpts": [ + [ + -8, + 0, + 0 + ], + [ + 0, + 6, + 0 + ], + [ + 8, + 0, + 0 + ] + ], + "knots": [ + 0, + 0, + 0, + 1, + 1, + 1 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "adv_tc_segment_along_edge_part", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + -8, + 3, + 0 + ], + "b": [ + 2, + 3, + 0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "adv_tc_segment_on_edge_exact", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + -5, + 3, + 0 + ], + "b": [ + 5, + 3, + 0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "adv_tc_segment_diag_corner_touch", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + 3, + 5, + 0 + ], + "b": [ + 7, + 1, + 0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "adv_tc_segment_end_on_edge", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + 0, + 0, + 0 + ], + "b": [ + 5, + 0, + 0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "adv_tc_segment_inside_tiny", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + 0, + 0, + 0 + ], + "b": [ + 1e-07, + 0, + 0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "adv_tc_circle_partial_dom", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -2, + -1, + 4, + 2 + ], + "curve": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -90, + 200 + ], + "r": 3 + }, + "tol": 1e-06 + } + }, + { + "name": "adv_tc_ellipse_offplane", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "ellipse", + "c": [ + 0, + 0, + 0.5 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0.6, + 0.8 + ], + "dom": [ + 0, + 360 + ], + "r": [ + 6, + 2 + ] + }, + "tol": 0.001 + } + }, + { + "name": "adv_tc_circle_corner_pass", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 360 + ], + "r": 5.830951894845301 + }, + "tol": 1e-06 + } + }, + { + "name": "adv_tc_bspline_rational_huge", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -500000.0, + -300000.0, + 500000.0, + 300000.0 + ] + }, + "nurb": true + }, + "dom": [ + -500000.0, + -300000.0, + 500000.0, + 300000.0 + ], + "curve": { + "kind": "b_spline", + "dim": 3, + "p": 2, + "cpts": [ + [ + 600000.0, + 0, + 0 + ], + [ + 600000.0, + 600000.0, + 0 + ], + [ + 0, + 600000.0, + 0 + ] + ], + "w": [ + 1, + 0.7071067811865476, + 1 + ], + "knots": [ + 0, + 0, + 0, + 1, + 1, + 1 + ] + }, + "tol": 0.1 + } + }, + { + "name": "adv_tc_big_tol", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + -8, + 0, + 0 + ], + "b": [ + 8, + 0, + 0 + ] + }, + "tol": 3.5 + } + }, + { + "name": "adv_line_scaled_plane", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 1, + 2, + 3 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 3.5, + 0.25 + ], + "domain": [ + -2, + -7, + 4, + 9 + ] + }, + "nurb": true + }, + "dom": [ + -2, + -7, + 4, + 9 + ], + "p": [ + [ + 1, + -20, + -10 + ], + [ + 1, + 20, + 10 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "adv_line_along_edge", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + -10, + 3, + 0 + ], + [ + 10, + 3, + 0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "adv_line_through_corner", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + 3, + 5, + 0 + ], + [ + 7, + 1, + 0 + ] + ], + "tol": 1e-06 + } + }, + { + "name": "adv_line_neg_tol", + "inputs": { + "op": "line", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "p": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ], + "tol": -1.0 + } + }, + { + "name": "adv_e_tangent_two_sides", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06, + "r": [ + 5, + 3 + ] + } + }, + { + "name": "adv_e_tangent_two_sides_c", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 2, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06, + "r": [ + 3, + 3 + ] + } + }, + { + "name": "adv_e_ivl_neg", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + -200, + -20 + ], + "tol": 1e-06, + "r": [ + 4, + 4 + ] + } + }, + { + "name": "adv_e_ivl_over360", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 300, + 700 + ], + "tol": 1e-06, + "r": [ + 4, + 4 + ] + } + }, + { + "name": "adv_e_ivl_tiny", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 89.9999, + 90.0001 + ], + "tol": 1e-06, + "r": [ + 4, + 4 + ] + } + }, + { + "name": "adv_e_rx_lt_tol", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06, + "r": [ + 1e-07, + 2 + ] + } + }, + { + "name": "adv_e_ry_lt_tol_rect", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06, + "r": [ + 7, + 1e-07 + ] + } + }, + { + "name": "adv_e_big_tol", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 0.5, + "r": [ + 4, + 4 + ] + } + }, + { + "name": "adv_e_cross_corner_only", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 5, + 3, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06, + "r": [ + 2, + 2 + ] + } + }, + { + "name": "adv_e_rot_axes_opp", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 0.6, + 0.8, + 0 + ], + [ + 0.8, + -0.6, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06, + "r": [ + 6, + 2 + ] + } + }, + { + "name": "adv_e_nonunit_axes", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 2, + 0, + 0 + ], + [ + 0, + 2, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06, + "r": [ + 4, + 4 + ] + } + }, + { + "name": "adv_e_nonperp_axes", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0.6, + 0.8, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06, + "r": [ + 4, + 2 + ] + } + }, + { + "name": "adv_e_scaled_plane", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 1, + 2, + 3 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 3.5, + 0.25 + ], + "domain": [ + -2, + -7, + 4, + 9 + ] + }, + "nurb": true + }, + "dom": [ + -1, + -5, + 1, + 5 + ], + "c": [ + 1, + 2, + 3 + ], + "axes": [ + [ + 0, + 1, + 0 + ], + [ + 0, + 0, + 1 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06, + "r": [ + 4, + 2 + ] + } + }, + { + "name": "adv_e_partial_dom", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -3, + -2, + 3, + 2 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 45, + 315 + ], + "tol": 1e-06, + "r": [ + 4, + 4 + ] + } + }, + { + "name": "adv_e_tangent_inside_partial", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 10, + 350 + ], + "tol": 1e-06, + "r": [ + 3, + 3 + ] + } + }, + { + "name": "adv_e_two_in_one_side_close", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 1e-06, + "r": [ + 3.0000001, + 3.0000001 + ] + } + }, + { + "name": "adv_tc_neg_tol", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + -8, + 0, + 0 + ], + "b": [ + 8, + 0, + 0 + ] + }, + "tol": -1e-06 + } + }, + { + "name": "adv_tc_zero_tol", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + -8, + 0, + 0 + ], + "b": [ + 8, + 1, + 0 + ] + }, + "tol": 0.0 + } + }, + { + "name": "adv_tc_zero_tol_circle", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "curve": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 360 + ], + "r": 4 + }, + "tol": 0.0 + } + }, + { + "name": "adv_e_zero_tol", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 0.0, + "r": [ + 4, + 4 + ] + } + }, + { + "name": "adv_e_neg_tol", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": -1.0, + "r": [ + 4, + 2 + ] + } + }, + { + "name": "adv_e_zero_ry_zero_tol", + "inputs": { + "op": "ellipse", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + -5, + -3, + 5, + 3 + ], + "c": [ + 0, + 0, + 0 + ], + "axes": [ + [ + 1, + 0, + 0 + ], + [ + 0, + 1, + 0 + ] + ], + "ivl": [ + 0, + 360 + ], + "tol": 0.0, + "r": [ + 4, + 1e-300 + ] + } + }, + { + "name": "adv_pp_neg_tol", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 1, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ], + "tol": -1.0 + } + }, + { + "name": "adv_pp_dom_degenerate", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + 0, + 0, + 0, + 0 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ] + } + }, + { + "name": "adv_tc_dom_degenerate", + "inputs": { + "op": "trim_curve", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "dom": [ + 0, + -3, + 0, + 3 + ], + "curve": { + "kind": "segment", + "a": [ + -8, + 0, + 0 + ], + "b": [ + 8, + 0, + 0 + ] + }, + "tol": 1e-06 + } + }, + { + "name": "adv_pp_use_default_tol", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 1, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ], + "tol": 9876543.21 + } + }, + { + "name": "adv_pp_global_neg_tol", + "inputs": { + "op": "intersect", + "global": true, + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0.01 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ], + "tol": -0.05 + } + }, + { + "name": "adv_pp_neg_tol_coincident", + "inputs": { + "op": "intersect", + "a": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + }, + "da": [ + -5, + -3, + 5, + 3 + ], + "b": { + "kind": "plane", + "plane": { + "make": { + "kind": "bounded", + "o": [ + 0, + 0, + 0.01 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "domain": [ + -5, + -3, + 5, + 3 + ] + }, + "nurb": true + } + }, + "db": [ + -5, + -3, + 5, + 3 + ], + "tol": -0.05 + } + } + ] +} \ No newline at end of file diff --git a/fixtures/surface.surf_of_revolution_p1/adv.json b/fixtures/surface.surf_of_revolution_p1/adv.json new file mode 100644 index 0000000000..c870ad5d87 --- /dev/null +++ b/fixtures/surface.surf_of_revolution_p1/adv.json @@ -0,0 +1,3261 @@ +{ + "cases": [ + { + "name": "adv_sor_line_axial_small", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -2.5, + 0.5, + 1.5, + 2.0 + ] + } + }, + { + "name": "adv_sor_line_axial_tilted", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 0.6, + 0.8, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -3, + -1, + 3.5, + 2.5 + ] + } + }, + { + "name": "adv_sor_line_normal_small", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -1, + -3, + 3, + 0.5 + ] + } + }, + { + "name": "adv_sor_line_normal_corner", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0.5 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 0, + 5, + 5 + ] + } + }, + { + "name": "adv_sor_line_normal_tol", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -10, + -10, + 10, + 10 + ], + "tol": 0.001 + } + }, + { + "name": "adv_sor_line_axial_tiny_dom", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + 2.9, + 0.9, + 3.1, + 1.1 + ] + } + }, + { + "name": "adv_sor_torus_axial_small", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -2.5, + 0.5, + 1.5, + 2.0 + ] + } + }, + { + "name": "adv_sor_torus_axial_tilted", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 0.6, + 0.8, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -3, + -1, + 3.5, + 2.5 + ] + } + }, + { + "name": "adv_sor_torus_normal_small", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -1, + -3, + 3, + 0.5 + ] + } + }, + { + "name": "adv_sor_torus_normal_corner", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0.5 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 0, + 5, + 5 + ] + } + }, + { + "name": "adv_sor_torus_normal_tol", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -10, + -10, + 10, + 10 + ], + "tol": 0.001 + } + }, + { + "name": "adv_sor_torus_axial_tiny_dom", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + 2.9, + 0.9, + 3.1, + 1.1 + ] + } + }, + { + "name": "adv_sor_half_axial_small", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "ctor", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "domain": [ + 30, + 0, + 200, + 360 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -2.5, + 0.5, + 1.5, + 2.0 + ] + } + }, + { + "name": "adv_sor_half_axial_tilted", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "ctor", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "domain": [ + 30, + 0, + 200, + 360 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 0.6, + 0.8, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -3, + -1, + 3.5, + 2.5 + ] + } + }, + { + "name": "adv_sor_half_normal_small", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "ctor", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "domain": [ + 30, + 0, + 200, + 360 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -1, + -3, + 3, + 0.5 + ] + } + }, + { + "name": "adv_sor_half_normal_corner", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "ctor", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "domain": [ + 30, + 0, + 200, + 360 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0.5 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 0, + 5, + 5 + ] + } + }, + { + "name": "adv_sor_half_normal_tol", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "ctor", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "domain": [ + 30, + 0, + 200, + 360 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -10, + -10, + 10, + 10 + ], + "tol": 0.001 + } + }, + { + "name": "adv_sor_half_axial_tiny_dom", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "ctor", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "domain": [ + 30, + 0, + 200, + 360 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + 2.9, + 0.9, + 3.1, + 1.1 + ] + } + }, + { + "name": "adv_sor_flat_axial_small", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 1, + 0, + 1 + ], + "b": [ + 3, + 0, + 1 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -2.5, + 0.5, + 1.5, + 2.0 + ] + } + }, + { + "name": "adv_sor_flat_axial_tilted", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 1, + 0, + 1 + ], + "b": [ + 3, + 0, + 1 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 0.6, + 0.8, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -3, + -1, + 3.5, + 2.5 + ] + } + }, + { + "name": "adv_sor_flat_normal_small", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 1, + 0, + 1 + ], + "b": [ + 3, + 0, + 1 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -1, + -3, + 3, + 0.5 + ] + } + }, + { + "name": "adv_sor_flat_normal_corner", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 1, + 0, + 1 + ], + "b": [ + 3, + 0, + 1 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0.5 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 0, + 5, + 5 + ] + } + }, + { + "name": "adv_sor_flat_normal_tol", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 1, + 0, + 1 + ], + "b": [ + 3, + 0, + 1 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -10, + -10, + 10, + 10 + ], + "tol": 0.001 + } + }, + { + "name": "adv_sor_flat_axial_tiny_dom", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 1, + 0, + 1 + ], + "b": [ + 3, + 0, + 1 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + 2.9, + 0.9, + 3.1, + 1.1 + ] + } + }, + { + "name": "adv_sor_bsp_axial_small", + "inputs": { + "surf": { + "gen": { + "kind": "b_spline", + "cpts": [ + [ + 1, + 0, + 0 + ], + [ + 3, + 0, + 1 + ], + [ + 1, + 0, + 2 + ], + [ + 2, + 0, + 3 + ] + ], + "p": 2, + "u": [ + 0, + 0, + 0, + 0.5, + 1, + 1, + 1 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -2.5, + 0.5, + 1.5, + 2.0 + ] + } + }, + { + "name": "adv_sor_bsp_axial_tilted", + "inputs": { + "surf": { + "gen": { + "kind": "b_spline", + "cpts": [ + [ + 1, + 0, + 0 + ], + [ + 3, + 0, + 1 + ], + [ + 1, + 0, + 2 + ], + [ + 2, + 0, + 3 + ] + ], + "p": 2, + "u": [ + 0, + 0, + 0, + 0.5, + 1, + 1, + 1 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 0.6, + 0.8, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -3, + -1, + 3.5, + 2.5 + ] + } + }, + { + "name": "adv_sor_bsp_normal_small", + "inputs": { + "surf": { + "gen": { + "kind": "b_spline", + "cpts": [ + [ + 1, + 0, + 0 + ], + [ + 3, + 0, + 1 + ], + [ + 1, + 0, + 2 + ], + [ + 2, + 0, + 3 + ] + ], + "p": 2, + "u": [ + 0, + 0, + 0, + 0.5, + 1, + 1, + 1 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -1, + -3, + 3, + 0.5 + ] + } + }, + { + "name": "adv_sor_bsp_normal_corner", + "inputs": { + "surf": { + "gen": { + "kind": "b_spline", + "cpts": [ + [ + 1, + 0, + 0 + ], + [ + 3, + 0, + 1 + ], + [ + 1, + 0, + 2 + ], + [ + 2, + 0, + 3 + ] + ], + "p": 2, + "u": [ + 0, + 0, + 0, + 0.5, + 1, + 1, + 1 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0.5 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 0, + 5, + 5 + ] + } + }, + { + "name": "adv_sor_bsp_normal_tol", + "inputs": { + "surf": { + "gen": { + "kind": "b_spline", + "cpts": [ + [ + 1, + 0, + 0 + ], + [ + 3, + 0, + 1 + ], + [ + 1, + 0, + 2 + ], + [ + 2, + 0, + 3 + ] + ], + "p": 2, + "u": [ + 0, + 0, + 0, + 0.5, + 1, + 1, + 1 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -10, + -10, + 10, + 10 + ], + "tol": 0.001 + } + }, + { + "name": "adv_sor_bsp_axial_tiny_dom", + "inputs": { + "surf": { + "gen": { + "kind": "b_spline", + "cpts": [ + [ + 1, + 0, + 0 + ], + [ + 3, + 0, + 1 + ], + [ + 1, + 0, + 2 + ], + [ + 2, + 0, + 3 + ] + ], + "p": 2, + "u": [ + 0, + 0, + 0, + 0.5, + 1, + 1, + 1 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + 2.9, + 0.9, + 3.1, + 1.1 + ] + } + }, + { + "name": "adv_sor_swap_axial_small", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + }, + "swap": true + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -2.5, + 0.5, + 1.5, + 2.0 + ] + } + }, + { + "name": "adv_sor_swap_axial_tilted", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + }, + "swap": true + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 0.6, + 0.8, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -3, + -1, + 3.5, + 2.5 + ] + } + }, + { + "name": "adv_sor_swap_normal_small", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + }, + "swap": true + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -1, + -3, + 3, + 0.5 + ] + } + }, + { + "name": "adv_sor_swap_normal_corner", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + }, + "swap": true + }, + "op": "plane", + "origin": [ + 0, + 0, + 0.5 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 0, + 5, + 5 + ] + } + }, + { + "name": "adv_sor_swap_normal_tol", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + }, + "swap": true + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -10, + -10, + 10, + 10 + ], + "tol": 0.001 + } + }, + { + "name": "adv_sor_swap_axial_tiny_dom", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + }, + "swap": true + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + 2.9, + 0.9, + 3.1, + 1.1 + ] + } + }, + { + "name": "adv_sor_oob_axial_small", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + }, + "oob": true + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -2.5, + 0.5, + 1.5, + 2.0 + ] + } + }, + { + "name": "adv_sor_oob_axial_tilted", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + }, + "oob": true + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 0.6, + 0.8, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -3, + -1, + 3.5, + 2.5 + ] + } + }, + { + "name": "adv_sor_oob_normal_small", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + }, + "oob": true + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -1, + -3, + 3, + 0.5 + ] + } + }, + { + "name": "adv_sor_oob_normal_corner", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + }, + "oob": true + }, + "op": "plane", + "origin": [ + 0, + 0, + 0.5 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 0, + 5, + 5 + ] + } + }, + { + "name": "adv_sor_oob_normal_tol", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + }, + "oob": true + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -10, + -10, + 10, + 10 + ], + "tol": 0.001 + } + }, + { + "name": "adv_sor_oob_axial_tiny_dom", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + }, + "oob": true + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + 2.9, + 0.9, + 3.1, + 1.1 + ] + } + }, + { + "name": "adv_sor_torus_top_tangent", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -5, + -5, + 5, + 5 + ] + } + }, + { + "name": "adv_sor_torus_top_tangent_small", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + 0, + 0, + 5, + 5 + ] + } + }, + { + "name": "adv_sor_torus_equator", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -3.5, + -3.5, + 1, + 1 + ] + } + }, + { + "name": "adv_sor_flat_on", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 1, + 0, + 1 + ], + "b": [ + 3, + 0, + 1 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 1 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "dom": [ + -5, + -5, + 5, + 5 + ] + } + }, + { + "name": "adv_sor_line_axial_offset_tol", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 1e-07, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -5, + -5, + 5, + 5 + ], + "tol": 1e-06 + } + }, + { + "name": "adv_sor_half_axial_neg_side", + "inputs": { + "surf": { + "gen": { + "kind": "circle", + "c": [ + 3, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "d": [ + 0, + 360 + ], + "r": 1 + }, + "build": { + "mode": "ctor", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "domain": [ + 30, + 0, + 200, + 360 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -5, + -5, + 5, + 5 + ] + } + }, + { + "name": "adv_sor_line_axial_use_default", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -5, + -5, + 5, + 5 + ], + "tol": 9876543.21 + } + }, + { + "name": "adv_sor_line_axial_neg_tol", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -5, + -5, + 5, + 5 + ], + "tol": -0.001 + } + }, + { + "name": "adv_sor_line_axial_neg_tol_big", + "inputs": { + "surf": { + "gen": { + "kind": "line", + "a": [ + 2, + 0, + 0 + ], + "b": [ + 1, + 0, + 3 + ] + }, + "build": { + "mode": "canonical", + "point": [ + 0, + 0, + 0 + ], + "axis": [ + 0, + 0, + 1 + ] + } + }, + "op": "plane", + "origin": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "dom": [ + -5, + -5, + 5, + 5 + ], + "tol": -0.5 + } + } + ] +} diff --git a/plan/findings.md b/plan/findings.md index 159dbd36ba..b4f11cb17f 100644 --- a/plan/findings.md +++ b/plan/findings.md @@ -2894,3 +2894,20 @@ with `CreateCanonical`, `MakeNurb` and `MakeNurbWithSweepParams` co-ported (unit - **`SmSpaceBend` / `SmSpaceUnbend` type queries** are compared through the static `GetClassType` / `GetClassTypeString` (an instance needs the unported bend units); the `IsKindOf` chains are unit-tested only. + +## surface.plane_p2 (`SmPlane`, part 2, review fixes 2026-10-14) + +- **Difftest runners must convert a raw tolerance the way the shim does.** The shims read + `IntersectWithPlane` / `GlobalSurfaceIntersect` tolerances into an `SmApproxTol3d`, whose + `double` constructor stores `fabs(tol)` and maps `SM_USE_DEFAULT` (9876543.21) to + `s_ZoneTol3d / 2` (`SmTol.cpp`). The library functions take an already-converted + `SmApproxTol3d` (non-negative by type), so the runner applies + `geom::tol::approx_tol3d(k, t)` first. Before this fix, plane z=0 against plane x=1 over + [-5,5]x[-3,3] with tol=-1 gave the C++ crossing line (44 values) but no curve in Rust + (7 values: `TrimPlaneLineToPlaneDomain` saw a negative tolUV); tol=9876543.21 gave 44 vs + 34 values. The generator only produced positive tolerances. The same conversion is now + applied in the `surface.surf_of_revolution_p1` runner, whose FFI guard used to reject a + negative plane tolerance (now accepts any finite value, as the C++ does). +- **`MakeNewPlaneEllipse` with a zero radius** appends the degenerate line curve to + `rCrvs` even when it is `NULL`; the port drops the `None` (documented inline). No input + in the difftest reaches it (unreachable in practice). diff --git a/plan/modules.toml b/plan/modules.toml index af9161c6a4..710292cdfc 100644 --- a/plan/modules.toml +++ b/plan/modules.toml @@ -1582,7 +1582,7 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test: status = "green" claimed_by = "" claimed_at = "" -notes = "GREEN (promoted by surface.plane_p2, which ported the IntersectWithPlane body below the plane box; a bare plane's zone tolerance is SM_ZONE_TOL_3D): difftest 807 cases (207 fixture + 600 generated), 807 bit-identical (max_rel_err 0), 0 deferred; 20k-seed run clean; perturbation 807/807 detected. Co-ports CreateCanonical/MakeNurb (_p2) and MakeNurbWithSweepParams (_p3). The 4 UNPORTED(surface.surf_of_revolution_p1) stubs in line/ellipse/hyperbola/parabola MakeNurb stay: an owner ObjectRef cannot reach the surface (see findings.md). 31 fns; largest: SmSurfOfRevolution::IntersectWithPlane, sm_TestForIsoCircles, SmSurfOfRevolution::CreateIsoParametricCurve, SmSurfOfRevolution::EvaluateSTEP; cycle back-edges (call into later units; stub or co-port): surface.cone_p1(6), surface.sphere(3), surface.torus(3), surface.surface_p1(2), surface.plane_p1(1), surface.plane_p2(1), surface.surface_p5(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit" +notes = "GREEN (promoted by surface.plane_p2, which ported the IntersectWithPlane body below the plane box; a bare plane's zone tolerance is SM_ZONE_TOL_3D): difftest 858 cases (258 fixture, incl. 51 IntersectWithPlane adversarial cases from the surface.plane_p2 review: small domains, a domain corner, tiny domain, partial sweep, swap/oob surfaces, flat generator, torus top tangent, SM_USE_DEFAULT and negative tolerances + 600 generated), 858 bit-identical (max_rel_err 0), 0 deferred; 20k-seed run clean; perturbation 858/858 detected. The plane tolerance goes through approx_tol3d as the shim's SmApproxTol3d does, and the FFI accepts any finite value. Co-ports CreateCanonical/MakeNurb (_p2) and MakeNurbWithSweepParams (_p3). The 4 UNPORTED(surface.surf_of_revolution_p1) stubs in line/ellipse/hyperbola/parabola MakeNurb stay: an owner ObjectRef cannot reach the surface (see findings.md). 31 fns; largest: SmSurfOfRevolution::IntersectWithPlane, sm_TestForIsoCircles, SmSurfOfRevolution::CreateIsoParametricCurve, SmSurfOfRevolution::EvaluateSTEP; cycle back-edges (call into later units; stub or co-port): surface.cone_p1(6), surface.sphere(3), surface.torus(3), surface.surface_p1(2), surface.plane_p1(1), surface.plane_p2(1), surface.surface_p5(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit" [[unit]] id = "surface.surface_p9" @@ -1820,7 +1820,7 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin status = "partial" claimed_by = "" claimed_at = "" -notes = "PARTIAL: difftest 2127 cases (127 fixture: 25 derived from SM_API_test TestSmCreateRectangle / TestSmCreateRegularPolygon (rectangle/hexagon edges and circumcircle trimmed to the rectangle plane, the 1e10 far rectangle), 102 edge cases (plane/plane: infinite, bounded, touching, disjoint, parallel, coincident with/without NURB, near-parallel, huge/tiny, sub-domains; trim of segments/arcs/B-splines/rational arcs incl. along-edge and tangent cases; MakeNewPlaneEllipse zero radii/tangent/corner/opposite-normal/partial arcs; Transform identity/rotate/iso/aniso/zero scale; TrimWithDomain; IsNurbSurfacePlane flat/twisted/skewed/rational/cylinder; ReadFromDB ASCII+binary v30/v33/truncated/bad rat) + 2000 generated over 1e-4/1/1e5 scales), 2118 pass bit-identical (max_rel_err 0), 9 deferred (intersect.adv_surface_intersector 9: the general SmSurface::GlobalSurfaceIntersect after coincident planes or for a B-spline other); 60k-seed run clean; perturbation 2118/2118. Builds on PR #24 (surface.surface_p7: SmSurface::EvaluateNormal for IsNurbSurfacePlane). Wired UNPORTED(surface.plane_p2) in surface.surface_p2 (Transform/TrimWithDomain/ReadFromDB/IntersectWithPlane/GlobalSurfaceIntersect plane dispatch), nurbs.b_spline_surface_p2 (CopyAndAddAnalytics returns the recognised plane; the cone recogniser is UNPORTED(surface.cone_p2)) and surface.surf_of_revolution_p1 (ported the IntersectWithPlane body below the plane box: 31 deferred -> 0, GREEN). A bare Plane has no owner: its CalculateBoundingBox zone tolerance is SM_ZONE_TOL_3D (owned planes through Surface::global_surface_intersect return UNPORTED(surface.surface_p1) GetFace). 10 fns; largest: SmPlane::MakeNewPlaneEllipse, SmPlane::IntersectWithPlane, SmPlane::TrimCurveToPlaneDomain, SmPlane::IsNurbSurfacePlane; cycle back-edges (call into later units; stub or co-port): surface.cone_p3(1), surface.sphere(1), surface.surf_of_extrusion_p2(1), surface.surface_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit" +notes = "PARTIAL: difftest 2218 cases (218 fixture: 25 derived from SM_API_test TestSmCreateRectangle / TestSmCreateRegularPolygon (rectangle/hexagon edges and circumcircle trimmed to the rectangle plane, the 1e10 far rectangle), 102 edge cases (plane/plane: infinite, bounded, touching, disjoint, parallel, coincident with/without NURB, near-parallel, huge/tiny, sub-domains; trim of segments/arcs/B-splines/rational arcs incl. along-edge and tangent cases; MakeNewPlaneEllipse zero radii/tangent/corner/opposite-normal/partial arcs; Transform identity/rotate/iso/aniso/zero scale; TrimWithDomain; IsNurbSurfacePlane flat/twisted/skewed/rational/cylinder; ReadFromDB ASCII+binary v30/v33/truncated/bad rat), 91 review adversarial cases (plane/plane at 1e-8..1e-6 rad either side of the 1e-16 cross-product threshold, uv-scaled, parallel with one NURB, coincident with flipped Y; zero, huge, negative and SM_USE_DEFAULT tolerances, including negative/USE_DEFAULT through IntersectWithPlane and GlobalSurfaceIntersect; degenerate domains; IsNurbSurfacePlane C0 kinks/folds/degenerate edges/tiny+huge scale/reversed normal; Transform negative-iso/near-identity/nearly-iso scales; trims of dim-2 B-splines, segments along an edge or through a corner, zero/negative tol; ellipses with negative or >360 intervals, non-unit or non-perpendicular axes, zero/negative tol) + 2000 generated over 1e-4/1/1e5 scales), 2209 pass bit-identical (max_rel_err 0), 9 deferred (intersect.adv_surface_intersector 9: the general SmSurface::GlobalSurfaceIntersect after coincident planes or for a B-spline other); 60k-seed run clean; perturbation 2209/2209. The runner converts the tolerance with approx_tol3d as the shim does (SmApproxTol3d: |tol|, SM_USE_DEFAULT -> zone tol / 2; see findings.md). Builds on PR #24 (surface.surface_p7: SmSurface::EvaluateNormal for IsNurbSurfacePlane). Wired UNPORTED(surface.plane_p2) in surface.surface_p2 (Transform/TrimWithDomain/ReadFromDB/IntersectWithPlane/GlobalSurfaceIntersect plane dispatch), nurbs.b_spline_surface_p2 (CopyAndAddAnalytics returns the recognised plane; the cone recogniser is UNPORTED(surface.cone_p2)) and surface.surf_of_revolution_p1 (ported the IntersectWithPlane body below the plane box: 31 deferred -> 0, GREEN). A bare Plane has no owner: its CalculateBoundingBox zone tolerance is SM_ZONE_TOL_3D (owned planes through Surface::global_surface_intersect return UNPORTED(surface.surface_p1) GetFace). 10 fns; largest: SmPlane::MakeNewPlaneEllipse, SmPlane::IntersectWithPlane, SmPlane::TrimCurveToPlaneDomain, SmPlane::IsNurbSurfacePlane; cycle back-edges (call into later units; stub or co-port): surface.cone_p3(1), surface.sphere(1), surface.surf_of_extrusion_p2(1), surface.surface_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit" [[unit]] id = "surface.surface_p4" diff --git a/reports/difftest/surface.plane_p2.json b/reports/difftest/surface.plane_p2.json index 1583ce9407..ba63f5489b 100644 --- a/reports/difftest/surface.plane_p2.json +++ b/reports/difftest/surface.plane_p2.json @@ -1,6 +1,734 @@ { "abs_floors": [], "cases": [ + { + "max_rel_err": 0.0, + "name": "adv_pp_ang_0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#0", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_ang_inf_0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#1", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_ang_1", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#2", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_ang_inf_1", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#3", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_ang_2", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#4", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_ang_inf_2", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#5", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_ang_3", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#6", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_ang_inf_3", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#7", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_ang_4", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#8", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_ang_inf_4", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#9", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_scaled_uv", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#10", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_parallel_one_nurb", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#11", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_coincident_flipped", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#12", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_coincident_tol_given", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#13", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_parallel_tol_given", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#14", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_parallel_boxes_disjoint", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#15", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_bounded_touch_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#16", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_bounded_gap", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#17", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_zero_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#18", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_huge_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#19", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_global_parallel_nonurb", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#20", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_far", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#21", + "values_compared": 34 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_canonical_both", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#22", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_isp_c0_kink_flat", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#23", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "adv_isp_c0_fold", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#24", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "adv_isp_c0_fold_mid", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#25", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "adv_isp_degenerate_edge", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#26", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "adv_isp_collapsed_max", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#27", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "adv_isp_tiny", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#28", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_isp_huge_offset", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#29", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_isp_skew_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#30", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_isp_reverse_normal", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#31", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_xf_neg_iso", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#32", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_xf_iso_neg_rot", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#33", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_xf_near_identity", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#34", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_xf_huge_scale", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#35", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_xf_tiny_scale", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#36", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_xf_nearly_iso", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#37", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_xf_normal_plane", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#38", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_off_scaled", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#39", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_off_huge", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#40", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_off_normal_nonurb", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#41", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_trimdom_inverted", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#42", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_trimdom_degenerate", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#43", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_trimdom_eps_out", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#44", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_trimdom_scaled", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#45", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_trimdom_normal", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#46", + "values_compared": 54 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_bspline_c0_corner", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#47", + "values_compared": 30 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_bspline_dim2", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#48", + "values_compared": 31 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_segment_along_edge_part", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#49", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_segment_on_edge_exact", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#50", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_segment_diag_corner_touch", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#51", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_segment_end_on_edge", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#52", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_segment_inside_tiny", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#53", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_circle_partial_dom", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#54", + "values_compared": 55 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_ellipse_offplane", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#55", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_circle_corner_pass", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#56", + "values_compared": 94 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_bspline_rational_huge", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#57", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_big_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#58", + "values_compared": 68 + }, + { + "max_rel_err": 0.0, + "name": "adv_line_scaled_plane", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#59", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "adv_line_along_edge", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#60", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "adv_line_through_corner", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#61", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "adv_line_neg_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#62", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_tangent_two_sides", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#63", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_tangent_two_sides_c", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#64", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_ivl_neg", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#65", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_ivl_over360", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#66", + "values_compared": 108 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_ivl_tiny", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#67", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_rx_lt_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#68", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_ry_lt_tol_rect", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#69", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_big_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#70", + "values_compared": 141 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_cross_corner_only", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#71", + "values_compared": 45 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_rot_axes_opp", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#72", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_nonunit_axes", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#73", + "values_compared": 141 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_nonperp_axes", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#74", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_scaled_plane", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#75", + "values_compared": 174 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_partial_dom", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#76", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_tangent_inside_partial", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#77", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_two_in_one_side_close", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#78", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_neg_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#79", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_zero_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#80", + "values_compared": 35 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_zero_tol_circle", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#81", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_zero_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#82", + "values_compared": 141 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_neg_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#83", + "values_compared": 75 + }, + { + "max_rel_err": 0.0, + "name": "adv_e_zero_ry_zero_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#84", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_neg_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#85", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_dom_degenerate", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#86", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "adv_tc_dom_degenerate", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#87", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_use_default_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#88", + "values_compared": 44 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_global_neg_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#89", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "adv_pp_neg_tol_coincident", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.plane_p2/adv.json#90", + "values_compared": 7 + }, { "max_rel_err": 0.0, "name": "pp_infinite_perp", @@ -17057,8 +17785,8 @@ "cases_both_errored": 0, "cases_deferred": 9, "cases_failed": 0, - "cases_passed": 2118, - "cases_total": 2127, + "cases_passed": 2209, + "cases_total": 2218, "deferred_by_unit": { "intersect.adv_surface_intersector": 9 }, diff --git a/reports/difftest/surface.surf_of_revolution_p1.json b/reports/difftest/surface.surf_of_revolution_p1.json index 8de9189ba1..eb28abe7b4 100644 --- a/reports/difftest/surface.surf_of_revolution_p1.json +++ b/reports/difftest/surface.surf_of_revolution_p1.json @@ -1,6 +1,414 @@ { "abs_floors": [], "cases": [ + { + "max_rel_err": 0.0, + "name": "adv_sor_line_axial_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#0", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_line_axial_tilted", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#1", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_line_normal_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#2", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_line_normal_corner", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#3", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_line_normal_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#4", + "values_compared": 62 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_line_axial_tiny_dom", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#5", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_torus_axial_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#6", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_torus_axial_tilted", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#7", + "values_compared": 100 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_torus_normal_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#8", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_torus_normal_corner", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#9", + "values_compared": 60 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_torus_normal_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#10", + "values_compared": 62 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_torus_axial_tiny_dom", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#11", + "values_compared": 42 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_half_axial_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#12", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_half_axial_tilted", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#13", + "values_compared": 62 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_half_normal_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#14", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_half_normal_corner", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#15", + "values_compared": 60 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_half_normal_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#16", + "values_compared": 42 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_half_axial_tiny_dom", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#17", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_flat_axial_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#18", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_flat_axial_tilted", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#19", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_flat_normal_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#20", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_flat_normal_corner", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#21", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_flat_normal_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#22", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_flat_axial_tiny_dom", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#23", + "values_compared": 26 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_bsp_axial_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#24", + "values_compared": 37 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_bsp_axial_tilted", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#25", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_bsp_normal_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#26", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_bsp_normal_corner", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#27", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_bsp_normal_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#28", + "values_compared": 62 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_bsp_axial_tiny_dom", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#29", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_swap_axial_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#30", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_swap_axial_tilted", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#31", + "values_compared": 100 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_swap_normal_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#32", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_swap_normal_corner", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#33", + "values_compared": 60 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_swap_normal_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#34", + "values_compared": 62 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_swap_axial_tiny_dom", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#35", + "values_compared": 42 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_oob_axial_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#36", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_oob_axial_tilted", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#37", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_oob_normal_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#38", + "values_compared": 70 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_oob_normal_corner", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#39", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_oob_normal_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#40", + "values_compared": 62 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_oob_axial_tiny_dom", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#41", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_torus_top_tangent", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#42", + "values_compared": 62 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_torus_top_tangent_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#43", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_torus_equator", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#44", + "values_compared": 80 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_flat_on", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#45", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_line_axial_offset_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#46", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_half_axial_neg_side", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#47", + "values_compared": 62 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_line_axial_use_default", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#48", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_line_axial_neg_tol", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#49", + "values_compared": 48 + }, + { + "max_rel_err": 0.0, + "name": "adv_sor_line_axial_neg_tol_big", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_revolution_p1/adv.json#50", + "values_compared": 48 + }, { "max_rel_err": 0.0, "name": "general_bezier_build", @@ -6461,8 +6869,8 @@ "cases_both_errored": 0, "cases_deferred": 0, "cases_failed": 0, - "cases_passed": 807, - "cases_total": 807, + "cases_passed": 858, + "cases_total": 858, "deferred_by_unit": {}, "max_rel_err": 0.0, "pass": true, From 096409c7450c0d8f2e204b9988146f1e4a16e1df Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 09:27:39 -0400 Subject: [PATCH 26/54] intersect.adv_surface_intersector: review fixes Retag the CreateParallelProjectionCurves stub in surface.surface_p7 to the next unported callee (intersect.surface_intersector_p5 DoIntersection) and update its file header. Add the reviewer's 398 adversarial singular-point programs as fixtures (all bit-identical). Record the uncompared lazy polar-box path and the FindInteriorCurves re-check in plan/findings.md. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm --- crates/solidcore/src/surface/surface/p7.rs | 14 +- .../review_adversarial_singular.json | 400 +++ plan/findings.md | 22 + plan/modules.toml | 2 +- .../intersect.adv_surface_intersector.json | 3188 ++++++++++++++++- 5 files changed, 3616 insertions(+), 10 deletions(-) create mode 100644 fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json diff --git a/crates/solidcore/src/surface/surface/p7.rs b/crates/solidcore/src/surface/surface/p7.rs index bf27fa57a2..9a6bdfccb8 100644 --- a/crates/solidcore/src/surface/surface/p7.rs +++ b/crates/solidcore/src/surface/surface/p7.rs @@ -79,8 +79,8 @@ //! `SmFindSingularParamWithGivenTangentDirEFO`, `sm_IsNodeValid`, `IsFlatCorner`, //! `EvaluateSTEP`, `GetFace` and the base `CalculateBoundingBox` //! (`surface.surface_p1`); the patch data of a tree node -//! (`surface.surface_cache_p3`); `SmAdvSurfaceIntersector` -//! (`intersect.adv_surface_intersector`). +//! (`surface.surface_cache_p3`); `SmSurfaceIntersector::DoIntersection` +//! (`intersect.surface_intersector_p5`). use crate::curve::curve::Curve; use crate::error::{ignored, Result, SolidError}; @@ -1345,12 +1345,12 @@ impl Surface { // then: the cache's SurfaceCache::surface_continuity (only reported), the curve's // CalculateContinuities (only reported), the projection distance (given, or 4x the // largest box distance), the curve's linear sweep along the unit vector times the - // distance (translated back by half when not given), and: - // UNPORTED(intersect.adv_surface_intersector): SmAdvSurfaceIntersector::SmAdvSurfaceIntersector - // (then DoIntersection) + // distance (translated back by half when not given), the intersector + // (`AdvSurfaceIntersector::new` of this surface and the sweep), and: + // UNPORTED(intersect.surface_intersector_p5): SmSurfaceIntersector::DoIntersection Err(SolidError::unported( - "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", - "intersect.adv_surface_intersector", + "SmSurfaceIntersector::DoIntersection", + "intersect.surface_intersector_p5", )) } } diff --git a/fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json b/fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json new file mode 100644 index 0000000000..56d9632d40 --- /dev/null +++ b/fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json @@ -0,0 +1,400 @@ +{"cases": [ +{"name":"adv_sing_000","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.5131980205632185,2.0,0,0,0.0,1.7661451116428228,0,0,-688.3392397494379,526.2905608403825,-47.14043259769496,1.104806992629774,-1.7015614505427397,1.4886623184880905,-991.0732542286527,1029.023297171721,1911.710265191827,-1.548268611652172,-0.7724634965813725,-0.38686023224289445,-1470.7283826206249,1527.0453148351685,2836.931109147003,1.23456e-61,1.23456e-61,1.23456e-61,-2161.905753303715,2244.6891558692473,4170.163409550009,1.23456e-61,1.23456e-61,1.23456e-61,0.4152697036430008,-0.43117115494235275,-0.8010259099317151,-688.3392397494379,526.2905608403825,-47.14043259769496,-1.3011388540703528,0.2907332611072615,-0.8310334710105827,-2417.050696057895,2509.604074246232,4662.319972239788,-1.3016062231314445,-0.7526973291800995,-0.26962455410897257,-1255.7667607947676,1303.852411674056,2422.285332648261,1.23456e-61,1.23456e-61,1.23456e-61,-650.398141599026,676.0788278637743,1256.4025818803264,1.23456e-61,1.23456e-61,1.23456e-61,0.4152697036430008,-0.43117115494235275,-0.8010259099317151,-688.3392397494379,526.2905608403825,-47.14043259769496,-0.1992801226241854,-0.9022697585218945,0.382356790947581,0,0,0,0,0,0,0],[1,1,1,1,1,0.5131980205632185,2.0,0,0,0.0,1.7661451116428228,0,0,-688.3392397494379,526.2905608403825,-47.14043259769496,1.104806992629774,-1.7015614505427397,1.4886623184880905,-991.0732542286527,1029.023297171721,1911.710265191827,-1.548268611652172,-0.7724634965813725,-0.38686023224289445,-1470.7283826206249,1527.0453148351685,2836.931109147003,1.23456e-61,1.23456e-61,1.23456e-61,-2161.905753303715,2244.6891558692473,4170.163409550009,1.23456e-61,1.23456e-61,1.23456e-61,0.4152697036430008,-0.43117115494235275,-0.8010259099317151,-688.3392397494379,526.2905608403825,-47.14043259769496,-1.3011388540703528,0.2907332611072615,-0.8310334710105827,-2417.050696057895,2509.604074246232,4662.319972239788,-1.3016062231314445,-0.7526973291800995,-0.26962455410897257,-1255.7667607947676,1303.852411674056,2422.285332648261,1.23456e-61,1.23456e-61,1.23456e-61,-650.398141599026,676.0788278637743,1256.4025818803264,1.23456e-61,1.23456e-61,1.23456e-61,0.4152697036430008,-0.43117115494235275,-0.8010259099317151,-688.3392397494379,526.2905608403825,-47.14043259769496,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.5131980205632185,2.0,0,0,0.0,1.7661451116428228,0,0,-688.3392397494379,526.2905608403825,-47.14043259769496,1.104806992629774,-1.7015614505427397,1.4886623184880905,-991.0732542286527,1029.023297171721,1911.710265191827,-1.548268611652172,-0.7724634965813725,-0.38686023224289445,-1470.7283826206249,1527.0453148351685,2836.931109147003,1.23456e-61,1.23456e-61,1.23456e-61,-2161.905753303715,2244.6891558692473,4170.163409550009,1.23456e-61,1.23456e-61,1.23456e-61,0.4152697036430008,-0.43117115494235275,-0.8010259099317151,-688.3392397494379,526.2905608403825,-47.14043259769496,-1.3011388540703528,0.2907332611072615,-0.8310334710105827,-2417.050696057895,2509.604074246232,4662.319972239788,-1.3016062231314445,-0.7526973291800995,-0.26962455410897257,-1255.7667607947676,1303.852411674056,2422.285332648261,1.23456e-61,1.23456e-61,1.23456e-61,-650.398141599026,676.0788278637743,1256.4025818803264,1.23456e-61,1.23456e-61,1.23456e-61,0.4152697036430008,-0.43117115494235275,-0.8010259099317151,-688.3392397494379,526.2905608403825,-47.14043259769496,-0.20270787970538937,0.7084810005695646,0.6759912627669784,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-688.3392397494379,526.2905608403825,-47.14043259769496],[-1.3011388540703528,0.2907332611072615,-0.8310334710105827],[-2417.050696057895,2509.604074246232,4662.319972239788]],[[-1.3016062231314445,-0.7526973291800995,-0.26962455410897257],[-1255.7667607947676,1303.852411674056,2422.285332648261],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-650.398141599026,676.0788278637743,1256.4025818803264],[1.23456e-61,1.23456e-61,1.23456e-61],[0.4152697036430008,-0.43117115494235275,-0.8010259099317151]]],"normal":[0.4152697036430008,-0.43117115494235275,-0.8010259099317151]},{"op":"state"}]}}, +{"name":"adv_sing_001","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,2.0,0.1914390301726836,0,0,1.7010587281799072,-0.5923200474896184,-1.3503750025423042,-0.0,1.8706141807296284,2.265240235089161,0.0,-0.03084164055914007,-0.004717074232449626,0.0,-0.8408962928973704,-0.3919164419701167,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.7979902823063609,-0.12204861123371742,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,1.7010587281799072,-0.5923200474896184,-1.3503750025423042,0.0,0.0052290536304632216,-0.03418911481735631,-4.033935717359033,-0.0,-0.0,0.0,-0.03241572986106839,-0.004957823296088531,3.4204012540576847,0.14909498142443367,-0.974827530724715,1.23456e-61,1.23456e-61,1.23456e-61,-9.278005142550956,0.7872534978003236,0.12040647389554059,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,1.7010587281799072,-0.5923200474896184,-1.3503750025423042,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,2.0,0.1914390301726836,0,0,1.7010587281799072,-0.5923200474896184,-1.3503750025423042,-0.0,1.8706141807296284,2.265240235089161,0.0,-0.03084164055914007,-0.004717074232449626,0.0,-0.8408962928973704,-0.3919164419701167,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.7979902823063609,-0.12204861123371742,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,1.7010587281799072,-0.5923200474896184,-1.3503750025423042,0.0,0.0052290536304632216,-0.03418911481735631,-4.033935717359033,-0.0,-0.0,0.0,-0.03241572986106839,-0.004957823296088531,3.4204012540576847,0.14909498142443367,-0.974827530724715,1.23456e-61,1.23456e-61,1.23456e-61,-9.278005142550956,0.7872534978003236,0.12040647389554059,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,1.7010587281799072,-0.5923200474896184,-1.3503750025423042,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.7010587281799072,-0.5923200474896184,-1.3503750025423042],[0.0,0.0052290536304632216,-0.03418911481735631],[-4.033935717359033,-0.0,-0.0]],[[0.0,-0.03241572986106839,-0.004957823296088531],[3.4204012540576847,0.14909498142443367,-0.974827530724715],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-9.278005142550956,0.7872534978003236,0.12040647389554059],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_002","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,1.0359875854637255,0,0,0.0,0.0,0,0,-0.9464540928562406,-0.39907903361417096,1.1291469055471848,-0.13217050994200605,-0.11073028738770761,0.0,-0.0,0.0,-0.18401026236640344,-0.06581688231210638,0.07856071814864447,0.0,-0.6643137808763786,-0.5565511996914638,-0.0395834105708879,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,-0.008514994611026405,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.9464540928562406,-0.39907903361417096,1.1291469055471848,-0.024957184257154805,-0.020908720004146935,0.0,0.3584835596063578,-0.4278951675895108,0.0,-0.029279556535484745,0.03494882935344409,0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.9464540928562406,-0.39907903361417096,1.1291469055471848,0.4437147011086377,0.3436027134862347,-0.8276801551958152,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.0359875854637255,0,0,0.0,0.0,0,0,-0.9464540928562406,-0.39907903361417096,1.1291469055471848,-0.13217050994200605,-0.11073028738770761,0.0,-0.0,0.0,-0.18401026236640344,-0.06581688231210638,0.07856071814864447,0.0,-0.6643137808763786,-0.5565511996914638,-0.0395834105708879,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,-0.008514994611026405,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.9464540928562406,-0.39907903361417096,1.1291469055471848,-0.024957184257154805,-0.020908720004146935,0.0,0.3584835596063578,-0.4278951675895108,0.0,-0.029279556535484745,0.03494882935344409,0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.9464540928562406,-0.39907903361417096,1.1291469055471848,0.41670534983135976,0.4105357475780921,-0.8110592157064866,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.9464540928562406,-0.39907903361417096,1.1291469055471848],[-0.024957184257154805,-0.020908720004146935,0.0],[0.3584835596063578,-0.4278951675895108,0.0]],[[-0.029279556535484745,0.03494882935344409,0.0],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_003","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,1.8016441558758882,2.0,0,0,154.08169395195225,352.37232608912495,-73.60321457624065,-0.06092103818038737,-0.2632246295560694,0.09697717619380944,-0.018715678988230507,0.030814757854151293,0.07188314715282551,-0.5304288955604188,0.06207863644742111,-0.16471559126732271,-0.007040801023629729,0.011592450307512108,0.0270422962679374,1.23456e-61,1.23456e-61,1.23456e-61,-0.25602012382071243,-0.022946123372543106,-0.2231143183574761,1.23456e-61,1.23456e-61,1.23456e-61,-0.23273072785449128,0.38318358786589624,0.8938717728525372,154.08169395195225,352.37232608912495,-73.60321457624065,-2.1393746477884,-9.243704900075741,3.4055642904315566,-23.076577188978707,38.00092849977498,88.64901644441066,-18.37153993227747,2.1501093887997382,-5.704966467256922,-8.373232464801546,14.918709957439,32.58670037845137,1.23456e-61,1.23456e-61,1.23456e-61,41.99681277579495,-68.38572353539361,-159.23661541863643,1.23456e-61,1.23456e-61,1.23456e-61,0.23273072785449128,-0.38318358786589624,-0.8938717728525372,154.08169395195225,352.37232608912495,-73.60321457624065,-0.23273072785449128,0.38318358786589624,0.8938717728525372,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,1.8016441558758882,2.0,0,0,154.08169395195225,352.37232608912495,-73.60321457624065,-0.06092103818038737,-0.2632246295560694,0.09697717619380944,-0.018715678988230507,0.030814757854151293,0.07188314715282551,-0.5304288955604188,0.06207863644742111,-0.16471559126732271,-0.007040801023629729,0.011592450307512108,0.0270422962679374,1.23456e-61,1.23456e-61,1.23456e-61,-0.25602012382071243,-0.022946123372543106,-0.2231143183574761,1.23456e-61,1.23456e-61,1.23456e-61,-0.23273072785449128,0.38318358786589624,0.8938717728525372,154.08169395195225,352.37232608912495,-73.60321457624065,-2.1393746477884,-9.243704900075741,3.4055642904315566,-23.076577188978707,38.00092849977498,88.64901644441066,-18.37153993227747,2.1501093887997382,-5.704966467256922,-8.373232464801546,14.918709957439,32.58670037845137,1.23456e-61,1.23456e-61,1.23456e-61,41.99681277579495,-68.38572353539361,-159.23661541863643,1.23456e-61,1.23456e-61,1.23456e-61,0.23273072785449128,-0.38318358786589624,-0.8938717728525372,154.08169395195225,352.37232608912495,-73.60321457624065,0.9491033650594771,-0.11107811667820434,0.294727763246017,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[154.08169395195225,352.37232608912495,-73.60321457624065],[-2.1393746477884,-9.243704900075741,3.4055642904315566],[-23.076577188978707,38.00092849977498,88.64901644441066]],[[-18.37153993227747,2.1501093887997382,-5.704966467256922],[-8.373232464801546,14.918709957439,32.58670037845137],[1.23456e-61,1.23456e-61,1.23456e-61]],[[41.99681277579495,-68.38572353539361,-159.23661541863643],[1.23456e-61,1.23456e-61,1.23456e-61],[0.23273072785449128,-0.38318358786589624,-0.8938717728525372]]],"normal":[-0.23273072785449128,0.38318358786589624,0.8938717728525372]},{"op":"state"}]}}, +{"name":"adv_sing_004","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.8467057101505138,0.0,0,0,2.0,2.0,0,0,-0.5537485201986652,0.12380843544428144,0.8236716813296767,-40.19705619374341,94.86073618551472,3.8064275750968,-0.03455984001677502,-0.01482315385554729,0.0044481224962880685,60.30990646181953,25.37843954022687,4.43020147552462,0.18573095034917544,-0.4388611960874916,-0.014402033749042304,1.23456e-61,1.23456e-61,1.23456e-61,-0.29704080857228543,-0.12505415605411266,-0.020343686077305186,1.23456e-61,1.23456e-61,1.23456e-61,-0.04786854357280626,-0.060291604625435265,0.9970323590274834,-0.5537485201986652,0.12380843544428144,0.8236716813296767,-0.017728704296310818,-0.05878665141624029,-0.00440606441582655,8.24765076836878e-19,1.038811841974757e-18,-1.7178660740982062e-17,0.041999483912473316,-0.01124025707724524,0.0013367279186505784,5.674535218309644e-17,7.14721627774346e-17,-1.1819234120818105e-15,1.23456e-61,1.23456e-61,1.23456e-61,-0.6994086590295127,-0.294311522076868,-0.05137665526290829,1.23456e-61,1.23456e-61,1.23456e-61,0.04786854357280626,0.060291604625435265,-0.9970323590274834,-0.5537485201986652,0.12380843544428144,0.8236716813296767,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.8467057101505138,0.0,0,0,2.0,2.0,0,0,-0.5537485201986652,0.12380843544428144,0.8236716813296767,-40.19705619374341,94.86073618551472,3.8064275750968,-0.03455984001677502,-0.01482315385554729,0.0044481224962880685,60.30990646181953,25.37843954022687,4.43020147552462,0.18573095034917544,-0.4388611960874916,-0.014402033749042304,1.23456e-61,1.23456e-61,1.23456e-61,-0.29704080857228543,-0.12505415605411266,-0.020343686077305186,1.23456e-61,1.23456e-61,1.23456e-61,-0.04786854357280626,-0.060291604625435265,0.9970323590274834,-0.5537485201986652,0.12380843544428144,0.8236716813296767,-0.017728704296310818,-0.05878665141624029,-0.00440606441582655,8.24765076836878e-19,1.038811841974757e-18,-1.7178660740982062e-17,0.041999483912473316,-0.01124025707724524,0.0013367279186505784,5.674535218309644e-17,7.14721627774346e-17,-1.1819234120818105e-15,1.23456e-61,1.23456e-61,1.23456e-61,-0.6994086590295127,-0.294311522076868,-0.05137665526290829,1.23456e-61,1.23456e-61,1.23456e-61,0.04786854357280626,0.060291604625435265,-0.9970323590274834,-0.5537485201986652,0.12380843544428144,0.8236716813296767,-0.3898980647034342,0.9201175647492321,0.03692108043461721,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.5537485201986652,0.12380843544428144,0.8236716813296767],[-0.017728704296310818,-0.05878665141624029,-0.00440606441582655],[8.24765076836878e-19,1.038811841974757e-18,-1.7178660740982062e-17]],[[0.041999483912473316,-0.01124025707724524,0.0013367279186505784],[5.674535218309644e-17,7.14721627774346e-17,-1.1819234120818105e-15],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.6994086590295127,-0.294311522076868,-0.05137665526290829],[1.23456e-61,1.23456e-61,1.23456e-61],[0.04786854357280626,0.060291604625435265,-0.9970323590274834]]],"normal":[-0.04786854357280626,-0.060291604625435265,0.9970323590274834]},{"op":"state"}]}}, +{"name":"adv_sing_005","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.10311875336805043,0.0,0,0,0.0,0.0,0,0,617.1527662703737,-287.11116915467215,-782.6046364307562,-0.05522001947587002,0.0,-3.8023936397588876,-0.0,3.453229895296499e-05,0.0,-2.4639331880467057,0.0,0.035782312806469235,-0.0,8.637019750221566e-06,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.07221280635257794,9.788948625870605e-06,0.0010487058813430585,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,617.1527662703737,-287.11116915467215,-782.6046364307562,-0.005387943502149755,0.0,-0.061064101098215445,0.0,0.0,0.0,0.03193986136043789,-0.0,-0.07904078670250644,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.36153868426366315,0.0,0.00525042251742927,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,617.1527662703737,-287.11116915467215,-782.6046364307562,0.014520905157331324,0.0,0.9998945660985522,0,0,0,0,0,0,0],[1,1,1,1,1,0.10311875336805043,0.0,0,0,0.0,0.0,0,0,617.1527662703737,-287.11116915467215,-782.6046364307562,-0.05522001947587002,0.0,-3.8023936397588876,-0.0,3.453229895296499e-05,0.0,-2.4639331880467057,0.0,0.035782312806469235,-0.0,8.637019750221566e-06,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.07221280635257794,9.788948625870605e-06,0.0010487058813430585,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,617.1527662703737,-287.11116915467215,-782.6046364307562,-0.005387943502149755,0.0,-0.061064101098215445,0.0,0.0,0.0,0.03193986136043789,-0.0,-0.07904078670250644,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.36153868426366315,0.0,0.00525042251742927,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,617.1527662703737,-287.11116915467215,-782.6046364307562,-0.7764741185457578,0.08783950789521439,0.6239969263396374,0,0,0,0,0,0,0],[1,1,1,1,1,0.10311875336805043,0.0,0,0,0.0,0.0,0,0,617.1527662703737,-287.11116915467215,-782.6046364307562,-0.05522001947587002,0.0,-3.8023936397588876,-0.0,3.453229895296499e-05,0.0,-2.4639331880467057,0.0,0.035782312806469235,-0.0,8.637019750221566e-06,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.07221280635257794,9.788948625870605e-06,0.0010487058813430585,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,617.1527662703737,-287.11116915467215,-782.6046364307562,-0.005387943502149755,0.0,-0.061064101098215445,0.0,0.0,0.0,0.03193986136043789,-0.0,-0.07904078670250644,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.36153868426366315,0.0,0.00525042251742927,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,617.1527662703737,-287.11116915467215,-782.6046364307562,-0.48713519180914666,-0.14639762679612883,0.8609686636396978,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[617.1527662703737,-287.11116915467215,-782.6046364307562],[-0.005387943502149755,0.0,-0.061064101098215445],[0.0,0.0,0.0]],[[0.03193986136043789,-0.0,-0.07904078670250644],[0.0,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.36153868426366315,0.0,0.00525042251742927],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_006","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,0.0,2.0,0,0,-0.17428384756723658,-0.523051832047853,0.6026522697150349,-3.284580494260492,3.739821358359851,5.808156643735834,-5.165110827864032e-05,-2.3674245218362052e-05,-1.3965665842666775e-05,-2.4579958665389325,7.394964080501055,-3.4450188708311082,-1.3877428336811484e-05,-6.360708460960247e-06,-3.75224333739245e-06,1.23456e-61,1.23456e-61,1.23456e-61,-6.408598284253644e-05,-2.9373760281952457e-05,-1.732786481075098e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.8827834906084991,-0.40462312480582036,-0.2386910881902534,-0.17428384756723658,-0.523051832047853,0.6026522697150349,34.44569991183676,-70.3368207898445,-8.161976228360118,-5370.935142484435,-2461.552146110509,-1452.0515224656704,12.042222891999176,-9.36387077618581,-28.66398137199402,7564.521302572686,3466.5860651973885,2046.0437896211754,1.23456e-61,1.23456e-61,1.23456e-61,6509.108446144764,2983.4309095316316,1759.9519585248258,1.23456e-61,1.23456e-61,1.23456e-61,-0.8827834906084991,-0.40462312480582036,-0.2386910881902534,-0.17428384756723658,-0.523051832047853,0.6026522697150349,0.777295481401703,-0.6026363428883955,-0.18066868246211024,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.17428384756723658,-0.523051832047853,0.6026522697150349],[34.44569991183676,-70.3368207898445,-8.161976228360118],[-5370.935142484435,-2461.552146110509,-1452.0515224656704]],[[12.042222891999176,-9.36387077618581,-28.66398137199402],[7564.521302572686,3466.5860651973885,2046.0437896211754],[1.23456e-61,1.23456e-61,1.23456e-61]],[[6509.108446144764,2983.4309095316316,1759.9519585248258],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.8827834906084991,-0.40462312480582036,-0.2386910881902534]]],"normal":[0.8827834906084991,0.40462312480582036,0.2386910881902534]},{"op":"state"}]}}, +{"name":"adv_sing_007","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,1.6303494509811212,0.13648735516189037,0,0,-0.0003379834363633898,-0.0005584509650727363,-0.0009148024574607338,-0.006501106554766951,0.002228800530508192,-0.010725424671003004,7.107268950549406e-06,1.2754472525760631e-05,-1.6575509291678588e-06,-0.010528169791458597,0.003994620792365226,-0.014405139955415161,-0.21133251622181934,0.2115695747995566,0.7216954145105163,1.23456e-61,1.23456e-61,1.23456e-61,-0.4979320244969055,0.24904578975926345,-0.2188177118814054,1.23456e-61,1.23456e-61,1.23456e-61,-0.4836585841900886,-0.8679578846420198,0.11279842386748574,-0.0003379834363633898,-0.0005584509650727363,-0.0009148024574607338,0.23114104044736297,-0.13660011195219127,-0.06001675917781035,-0.24364924742799468,-0.4372449746681371,0.056823660294170075,0.06858414035933852,-0.06141961281396302,-0.17853377998530837,-0.14480152704447158,-0.061247378752508116,0.2598058407952466,1.23456e-61,1.23456e-61,1.23456e-61,-0.08151359523469523,-0.08614662847019876,0.0013826663956379506,1.23456e-61,1.23456e-61,1.23456e-61,0.4836585841900886,0.8679578846420198,-0.11279842386748574,-0.0003379834363633898,-0.0005584509650727363,-0.0009148024574607338,-0.31082361596962615,-0.7198996824866527,-0.6205909497496583,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0003379834363633898,-0.0005584509650727363,-0.0009148024574607338],[0.23114104044736297,-0.13660011195219127,-0.06001675917781035],[-0.24364924742799468,-0.4372449746681371,0.056823660294170075]],[[0.06858414035933852,-0.06141961281396302,-0.17853377998530837],[-0.14480152704447158,-0.061247378752508116,0.2598058407952466],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.08151359523469523,-0.08614662847019876,0.0013826663956379506],[1.23456e-61,1.23456e-61,1.23456e-61],[0.4836585841900886,0.8679578846420198,-0.11279842386748574]]],"normal":[0.4836585841900886,0.8679578846420198,-0.11279842386748574]},{"op":"state"}]}}, +{"name":"adv_sing_008","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.45993430364130594,0.0,0,0,0.0,0.08458951878878151,0,0,-0.0003863356563475335,0.0004931993771314098,-0.0008820038959703074,0.4231849131775368,0.7764516188558582,-0.04719048679895088,-0.0,0.0,0.0,-0.2562440756372501,0.2657022206251999,0.3626846310096441,0.30983447750988125,-0.6255867979038117,-0.5767087518566759,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.6520741935460564,-0.31343998338237317,0.6903293582982821,-0.0003863356563475335,0.0004931993771314098,-0.0008820038959703074,3.4904852102864945,-7.047638737248347,-6.496996025674106,0.060043632655338665,-0.02886186174515032,0.0635662058261321,-3.9237304817300194,-3.7784712603493977,1.990701110987231,0.00812118281805857,-0.003903702113550522,0.008597627354221359,1.23456e-61,1.23456e-61,1.23456e-61,0.01349189198959841,-0.006485302505255194,0.01428341932803596,1.23456e-61,1.23456e-61,1.23456e-61,0.6520741935460564,-0.31343998338237317,0.6903293582982821,-0.0003863356563475335,0.0004931993771314098,-0.0008820038959703074,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.45993430364130594,0.0,0,0,0.0,0.08458951878878151,0,0,-0.0003863356563475335,0.0004931993771314098,-0.0008820038959703074,0.4231849131775368,0.7764516188558582,-0.04719048679895088,-0.0,0.0,0.0,-0.2562440756372501,0.2657022206251999,0.3626846310096441,0.30983447750988125,-0.6255867979038117,-0.5767087518566759,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.6520741935460564,-0.31343998338237317,0.6903293582982821,-0.0003863356563475335,0.0004931993771314098,-0.0008820038959703074,3.4904852102864945,-7.047638737248347,-6.496996025674106,0.060043632655338665,-0.02886186174515032,0.0635662058261321,-3.9237304817300194,-3.7784712603493977,1.990701110987231,0.00812118281805857,-0.003903702113550522,0.008597627354221359,1.23456e-61,1.23456e-61,1.23456e-61,0.01349189198959841,-0.006485302505255194,0.01428341932803596,1.23456e-61,1.23456e-61,1.23456e-61,0.6520741935460564,-0.31343998338237317,0.6903293582982821,-0.0003863356563475335,0.0004931993771314098,-0.0008820038959703074,-0.3582107667058253,-0.907885612989696,-0.21778145086840767,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.0003863356563475335,0.0004931993771314098,-0.0008820038959703074],[3.4904852102864945,-7.047638737248347,-6.496996025674106],[0.060043632655338665,-0.02886186174515032,0.0635662058261321]],[[-3.9237304817300194,-3.7784712603493977,1.990701110987231],[0.00812118281805857,-0.003903702113550522,0.008597627354221359],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.01349189198959841,-0.006485302505255194,0.01428341932803596],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6520741935460564,-0.31343998338237317,0.6903293582982821]]],"normal":[-0.6520741935460564,0.31343998338237317,-0.6903293582982821]},{"op":"state"}]}}, +{"name":"adv_sing_009","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,2.0,0.0,0,0,-0.0009992072247118795,0.00017735080972427976,-0.000917212122554758,0.0,-118.52716429406118,-21.68232960754664,0.0,0.0,0.0,0.0,-13.831417471736245,75.60989620421734,0.0,0.5928819241263655,0.10845666791935916,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.06256043816371708,-0.3419886823396727,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.0009992072247118795,0.00017735080972427976,-0.000917212122554758,0.0,-0.03756026049883702,-0.0068709477117044615,0.0,0.15029274301748421,-0.8215801976203838,0.0,-0.004095566831800101,0.022388550102158757,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.03018783203601963,0.16502277163840615,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.0009992072247118795,0.00017735080972427976,-0.000917212122554758,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,0.0,0,0,-0.0009992072247118795,0.00017735080972427976,-0.000917212122554758,0.0,-118.52716429406118,-21.68232960754664,0.0,0.0,0.0,0.0,-13.831417471736245,75.60989620421734,0.0,0.5928819241263655,0.10845666791935916,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.06256043816371708,-0.3419886823396727,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.0009992072247118795,0.00017735080972427976,-0.000917212122554758,0.0,-0.03756026049883702,-0.0068709477117044615,0.0,0.15029274301748421,-0.8215801976203838,0.0,-0.004095566831800101,0.022388550102158757,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.03018783203601963,0.16502277163840615,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.0009992072247118795,0.00017735080972427976,-0.000917212122554758,0.0,-0.9836766262836152,-0.17994525529528327,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0009992072247118795,0.00017735080972427976,-0.000917212122554758],[0.0,-0.03756026049883702,-0.0068709477117044615],[0.0,0.15029274301748421,-0.8215801976203838]],[[0.0,-0.004095566831800101,0.022388550102158757],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-0.03018783203601963,0.16502277163840615],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_010","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.3093209371482313,2.0,0,0,0.9630949815015721,0.0,0,0,0.01942496590487197,0.18460998390188688,-0.44156366648609935,55.354639530422524,0.0,38.15101285695991,0.1874880698512954,-4.519635899554937e-06,-0.2720330011102133,32.94493611980418,0.0,-47.800960621989546,0.4782111232934722,0.0,0.32958824893229755,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-3.3703006523229736e-06,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.01942496590487197,0.18460998390188688,-0.44156366648609935,11.45019569473349,0.0,-9.674352241726814,0.0,2.247229060997031,-0.0,-0.3778496050649077,0.0,-2.2387398104574183,0.0,2.223700948419755,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,2.200418980374358,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.01942496590487197,0.18460998390188688,-0.44156366648609935,0,-1,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.3093209371482313,2.0,0,0,0.9630949815015721,0.0,0,0,0.01942496590487197,0.18460998390188688,-0.44156366648609935,55.354639530422524,0.0,38.15101285695991,0.1874880698512954,-4.519635899554937e-06,-0.2720330011102133,32.94493611980418,0.0,-47.800960621989546,0.4782111232934722,0.0,0.32958824893229755,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-3.3703006523229736e-06,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.01942496590487197,0.18460998390188688,-0.44156366648609935,11.45019569473349,0.0,-9.674352241726814,0.0,2.247229060997031,-0.0,-0.3778496050649077,0.0,-2.2387398104574183,0.0,2.223700948419755,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,2.200418980374358,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.01942496590487197,0.18460998390188688,-0.44156366648609935,1.3908687189892133,0.0,-0.25589882089862226,0,0,0,0,0,0,0],[1,1,1,1,1,1.3093209371482313,2.0,0,0,0.9630949815015721,0.0,0,0,0.01942496590487197,0.18460998390188688,-0.44156366648609935,55.354639530422524,0.0,38.15101285695991,0.1874880698512954,-4.519635899554937e-06,-0.2720330011102133,32.94493611980418,0.0,-47.800960621989546,0.4782111232934722,0.0,0.32958824893229755,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-3.3703006523229736e-06,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.01942496590487197,0.18460998390188688,-0.44156366648609935,11.45019569473349,0.0,-9.674352241726814,0.0,2.247229060997031,-0.0,-0.3778496050649077,0.0,-2.2387398104574183,0.0,2.223700948419755,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,2.200418980374358,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.01942496590487197,0.18460998390188688,-0.44156366648609935,-0.5674849490452955,-0.0,0.8233837699439177,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.01942496590487197,0.18460998390188688,-0.44156366648609935],[11.45019569473349,0.0,-9.674352241726814],[0.0,2.247229060997031,-0.0]],[[-0.3778496050649077,0.0,-2.2387398104574183],[0.0,2.223700948419755,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,2.200418980374358,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_011","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.3771814776795537,0.09892196033792677,0,0,0.0,2.0,0,0,-0.00068052252654713,0.0009195142565912546,-0.0005400090787642732,-4.603925850104221,-0.25262623799379064,-0.3136520219106079,3935.145118407026,123592.88405157968,-157307.8387148448,0.43232438533463535,-3.995114699397168,-3.1280481166155805,-1125.9114970739968,-35362.012053709914,45008.43014922993,1.23456e-61,1.23456e-61,1.23456e-61,322.6817577563694,10134.812895935378,-12899.398881336818,1.23456e-61,1.23456e-61,1.23456e-61,0.019666768809632564,0.6176831105385242,-0.7861811452585479,-0.00068052252654713,0.0009195142565912546,-0.0005400090787642732,-0.01731468777756866,-0.04034819764379983,-0.032133719231424385,0.013907405785951874,0.43679618896932143,-0.5559500045081007,-0.09007500559047595,0.011937917037371657,0.00712604906936288,0.4458023000467767,4.739999090333212,-5.992269983318313,1.23456e-61,1.23456e-61,1.23456e-61,1.6755034945956642,50.90359572135602,-65.59332094474892,1.23456e-61,1.23456e-61,1.23456e-61,-0.019666768809632564,-0.6176831105385242,0.7861811452585479,-0.00068052252654713,0.0009195142565912546,-0.0005400090787642732,0.08489601030726336,-0.7845250238109782,-0.6142582147991943,0,0,0,0,0,0,0],[1,1,1,1,1,1.3771814776795537,0.09892196033792677,0,0,0.0,2.0,0,0,-0.00068052252654713,0.0009195142565912546,-0.0005400090787642732,-4.603925850104221,-0.25262623799379064,-0.3136520219106079,3935.145118407026,123592.88405157968,-157307.8387148448,0.43232438533463535,-3.995114699397168,-3.1280481166155805,-1125.9114970739968,-35362.012053709914,45008.43014922993,1.23456e-61,1.23456e-61,1.23456e-61,322.6817577563694,10134.812895935378,-12899.398881336818,1.23456e-61,1.23456e-61,1.23456e-61,0.019666768809632564,0.6176831105385242,-0.7861811452585479,-0.00068052252654713,0.0009195142565912546,-0.0005400090787642732,-0.01731468777756866,-0.04034819764379983,-0.032133719231424385,0.013907405785951874,0.43679618896932143,-0.5559500045081007,-0.09007500559047595,0.011937917037371657,0.00712604906936288,0.4458023000467767,4.739999090333212,-5.992269983318313,1.23456e-61,1.23456e-61,1.23456e-61,1.6755034945956642,50.90359572135602,-65.59332094474892,1.23456e-61,1.23456e-61,1.23456e-61,-0.019666768809632564,-0.6176831105385242,0.7861811452585479,-0.00068052252654713,0.0009195142565912546,-0.0005400090787642732,-0.6105781385480921,-0.587467197922044,-0.5311088665168081,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.00068052252654713,0.0009195142565912546,-0.0005400090787642732],[-0.01731468777756866,-0.04034819764379983,-0.032133719231424385],[0.013907405785951874,0.43679618896932143,-0.5559500045081007]],[[-0.09007500559047595,0.011937917037371657,0.00712604906936288],[0.4458023000467767,4.739999090333212,-5.992269983318313],[1.23456e-61,1.23456e-61,1.23456e-61]],[[1.6755034945956642,50.90359572135602,-65.59332094474892],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.019666768809632564,-0.6176831105385242,0.7861811452585479]]],"normal":[-0.019666768809632564,-0.6176831105385242,0.7861811452585479]},{"op":"state"}]}}, +{"name":"adv_sing_012","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.8851877935280217,0.0,0,0,0.7633911260973398,0.0,0,0,0.6811789936384187,0.5155498225221762,0.2828983174323414,0.0,0.10589923868146521,-0.29285494711724036,-0.09697866880435557,-0.0,-0.0,0.0,-0.2071623806174408,-0.07491196104685983,-0.0,-0.2875136934731871,0.7950936054492105,1.23456e-61,1.23456e-61,1.23456e-61,-0.048528053850971656,0.7468006707353914,0.27005049174062506,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.6811789936384187,0.5155498225221762,0.2828983174323414,0.0,-0.00997148265564538,-0.005699687154264202,8.10767397083488e-11,-0.9149929591637066,-0.33087048290683696,-0.0,0.02634615892834044,0.033439104615708606,-3.1711892852576007e-10,0.23237515843331802,-0.6426128797681374,1.23456e-61,1.23456e-61,1.23456e-61,1.447502729326125e-09,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.6811789936384187,0.5155498225221762,0.2828983174323414,-0.0,-0.34005935656207736,0.9404039738402779,0,0,0,0,0,0,0],[1,1,1,1,1,1.8851877935280217,0.0,0,0,0.7633911260973398,0.0,0,0,0.6811789936384187,0.5155498225221762,0.2828983174323414,0.0,0.10589923868146521,-0.29285494711724036,-0.09697866880435557,-0.0,-0.0,0.0,-0.2071623806174408,-0.07491196104685983,-0.0,-0.2875136934731871,0.7950936054492105,1.23456e-61,1.23456e-61,1.23456e-61,-0.048528053850971656,0.7468006707353914,0.27005049174062506,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.6811789936384187,0.5155498225221762,0.2828983174323414,0.0,-0.00997148265564538,-0.005699687154264202,8.10767397083488e-11,-0.9149929591637066,-0.33087048290683696,-0.0,0.02634615892834044,0.033439104615708606,-3.1711892852576007e-10,0.23237515843331802,-0.6426128797681374,1.23456e-61,1.23456e-61,1.23456e-61,1.447502729326125e-09,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.6811789936384187,0.5155498225221762,0.2828983174323414,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.6811789936384187,0.5155498225221762,0.2828983174323414],[0.0,-0.00997148265564538,-0.005699687154264202],[8.10767397083488e-11,-0.9149929591637066,-0.33087048290683696]],[[-0.0,0.02634615892834044,0.033439104615708606],[-3.1711892852576007e-10,0.23237515843331802,-0.6426128797681374],[1.23456e-61,1.23456e-61,1.23456e-61]],[[1.447502729326125e-09,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_013","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,0.0,1.2031640728703208,0,0,-1.4308614833122744,-1.288928764129233,0.14478830667564324,0.13936646958755616,-0.20631076123548492,0.3096469300089462,-1.5017089406903855e-08,-1.1080949026355399e-08,-6.240665609458059e-10,-0.06878411018059324,0.0735290487894832,0.3495868941174973,8.628328657660532e-08,6.366751069233345e-08,3.5856824489710017e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.14623481779189446,-0.23188770202034245,0.5985209072157005,1.23456e-61,1.23456e-61,1.23456e-61,-0.8042037695602658,-0.5934133263669144,-0.03342036976475609,-1.4308614833122744,-1.288928764129233,0.14478830667564324,7.985995441523176,-12.14657642897726,23.505804706976978,0.3976299201119801,-0.20549336530432125,0.8863789775093606,-16.02856406297343,22.884153006384793,-20.632019375618444,-0.3449480854335906,-0.2545334883383755,-0.014335039204229145,1.23456e-61,1.23456e-61,1.23456e-61,0.6500435549904455,0.4796601593414284,0.027013919597586804,1.23456e-61,1.23456e-61,1.23456e-61,-0.8042037695602658,-0.5934133263669144,-0.03342036976475609,-1.4308614833122744,-1.288928764129233,0.14478830667564324,0.5512830368394552,-0.7237305981374265,-0.41509159785848593,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,1.2031640728703208,0,0,-1.4308614833122744,-1.288928764129233,0.14478830667564324,0.13936646958755616,-0.20631076123548492,0.3096469300089462,-1.5017089406903855e-08,-1.1080949026355399e-08,-6.240665609458059e-10,-0.06878411018059324,0.0735290487894832,0.3495868941174973,8.628328657660532e-08,6.366751069233345e-08,3.5856824489710017e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.14623481779189446,-0.23188770202034245,0.5985209072157005,1.23456e-61,1.23456e-61,1.23456e-61,-0.8042037695602658,-0.5934133263669144,-0.03342036976475609,-1.4308614833122744,-1.288928764129233,0.14478830667564324,7.985995441523176,-12.14657642897726,23.505804706976978,0.3976299201119801,-0.20549336530432125,0.8863789775093606,-16.02856406297343,22.884153006384793,-20.632019375618444,-0.3449480854335906,-0.2545334883383755,-0.014335039204229145,1.23456e-61,1.23456e-61,1.23456e-61,0.6500435549904455,0.4796601593414284,0.027013919597586804,1.23456e-61,1.23456e-61,1.23456e-61,-0.8042037695602658,-0.5934133263669144,-0.03342036976475609,-1.4308614833122744,-1.288928764129233,0.14478830667564324,-0.22213354163234078,0.35224231064680056,-0.9091655758287794,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-1.4308614833122744,-1.288928764129233,0.14478830667564324],[7.985995441523176,-12.14657642897726,23.505804706976978],[0.3976299201119801,-0.20549336530432125,0.8863789775093606]],[[-16.02856406297343,22.884153006384793,-20.632019375618444],[-0.3449480854335906,-0.2545334883383755,-0.014335039204229145],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.6500435549904455,0.4796601593414284,0.027013919597586804],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.8042037695602658,-0.5934133263669144,-0.03342036976475609]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_014","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,2.0,0.0,0,0,-0.13281927544717687,-0.9757748803274078,-0.18518817455853198,0.0009752519075199584,-0.0,-0.05756997416664123,0.0,0.0,0.0,-0.027009116510931602,0.0,0.03641654992237153,-0.1893584094316185,-0.0,-0.08847183348790685,1.23456e-61,1.23456e-61,1.23456e-61,0.3681193078735744,-0.0,-0.7878946764400044,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.13281927544717687,-0.9757748803274078,-0.18518817455853198,-1.7622878193085665,0.0,-0.8233742297245982,-0.008724494014688012,-63.96271344350237,0.01867324598786365,-1.283849138312982,0.0,2.7478534263035304,0.8317250710446042,37.57241942117783,0.38859769795303767,1.23456e-61,1.23456e-61,1.23456e-61,0.24274003780443756,-102.06035965561831,-0.5195423859990665,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.13281927544717687,-0.9757748803274078,-0.18518817455853198,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.13281927544717687,-0.9757748803274078,-0.18518817455853198],[-1.7622878193085665,0.0,-0.8233742297245982],[-0.008724494014688012,-63.96271344350237,0.01867324598786365]],[[-1.283849138312982,0.0,2.7478534263035304],[0.8317250710446042,37.57241942117783,0.38859769795303767],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.24274003780443756,-102.06035965561831,-0.5195423859990665],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_015","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,-0.3030169133976355,-0.2467070667148088,-0.9894979607011996,-50.77568025225593,4.051254233259442,0.0,0.27044492246013885,-0.1615928416558226,-1562.062009214176,30.572661427875758,-10.814365555740196,0.0,-0.40529290777108606,-0.6783060926006438,1088.5356753338046,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-789.812347015033,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.3030169133976355,-0.2467070667148088,-0.9894979607011996,-4.87321503739826,14.954182009477147,-0.0,0.0,0.0,0.12979601758641307,-9.388044000128154,-2.2307625862297966,0.0,0.0,0.0,-0.06903716315491111,1.23456e-61,1.23456e-61,1.23456e-61,-0.5541480343309984,0.33110754955561306,0.03672015527121052,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.3030169133976355,-0.2467070667148088,-0.9894979607011996,-0.5681704749491217,0.4101333256191192,0.7134234132776209,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.3030169133976355,-0.2467070667148088,-0.9894979607011996],[-4.87321503739826,14.954182009477147,-0.0],[0.0,0.0,0.12979601758641307]],[[-9.388044000128154,-2.2307625862297966,0.0],[0.0,0.0,-0.06903716315491111],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.5541480343309984,0.33110754955561306,0.03672015527121052],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_016","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,0.12526018737866895,0.01526110483949128,0.7679525196545911,0.0,-0.02807432869677055,0.07360365318121541,-6.205665693394955e-09,-0.4398100210124165,-0.16775486759653593,0.0,0.04162812433150792,0.015878038589136872,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1.9850128447976014e-09,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.12526018737866895,0.01526110483949128,0.7679525196545911,0.0,0.2643451595345943,-0.8010677364342143,14.15366499812115,-0.1341704724714149,-0.051176073234973994,0.0,0.0751959908576908,2.573610787520656,-44.65657042189406,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,135.2010591808628,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.12526018737866895,0.01526110483949128,0.7679525196545911,-0.0,0.35638153362039626,-0.9343405174209103,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,0.12526018737866895,0.01526110483949128,0.7679525196545911,0.0,-0.02807432869677055,0.07360365318121541,-6.205665693394955e-09,-0.4398100210124165,-0.16775486759653593,0.0,0.04162812433150792,0.015878038589136872,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1.9850128447976014e-09,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.12526018737866895,0.01526110483949128,0.7679525196545911,0.0,0.2643451595345943,-0.8010677364342143,14.15366499812115,-0.1341704724714149,-0.051176073234973994,0.0,0.0751959908576908,2.573610787520656,-44.65657042189406,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,135.2010591808628,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.12526018737866895,0.01526110483949128,0.7679525196545911,-0.0,0.9343405174209103,0.35638153362039626,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,0.12526018737866895,0.01526110483949128,0.7679525196545911,0.0,-0.02807432869677055,0.07360365318121541,-6.205665693394955e-09,-0.4398100210124165,-0.16775486759653593,0.0,0.04162812433150792,0.015878038589136872,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1.9850128447976014e-09,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.12526018737866895,0.01526110483949128,0.7679525196545911,0.0,0.2643451595345943,-0.8010677364342143,14.15366499812115,-0.1341704724714149,-0.051176073234973994,0.0,0.0751959908576908,2.573610787520656,-44.65657042189406,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,135.2010591808628,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.12526018737866895,0.01526110483949128,0.7679525196545911,0.0,-0.35638153362039626,0.9343405174209103,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.12526018737866895,0.01526110483949128,0.7679525196545911],[0.0,0.2643451595345943,-0.8010677364342143],[14.15366499812115,-0.1341704724714149,-0.051176073234973994]],[[0.0,0.0751959908576908,2.573610787520656],[-44.65657042189406,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[135.2010591808628,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_017","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,2.0,1.8561214714376963,0,0,-1.233881214985475,0.6153594817021659,-1.5036596259277206,0.008229812164656769,0.006892976783654662,0.037584201237509975,0.5243172757287079,0.39709090974092365,-0.695586133927397,0.02268480345294419,0.018262709167097557,0.024963807198815656,0.2865845212184514,0.22174195458161441,0.3425009221620698,1.23456e-61,1.23456e-61,1.23456e-61,0.39111000658803524,0.29943734091332486,-0.5210119074497389,1.23456e-61,1.23456e-61,1.23456e-61,-0.6221672095684603,0.7828499829238702,-0.0073394532420263895,-1.233881214985475,0.6153594817021659,-1.5036596259277206,0.16529031385016685,0.13324511251649354,0.20065809710999372,0.0020899683044507678,-0.4104610312897473,0.2708411749318442,-0.0791617105831465,-0.061916666200144466,0.10632392835856415,0.09271786273784166,-0.11666345661546837,0.0010937548745730402,1.23456e-61,1.23456e-61,1.23456e-61,0.042564517394653514,-0.05355735757704011,0.0005021162806123477,1.23456e-61,1.23456e-61,1.23456e-61,-0.6221672095684603,0.7828499829238702,-0.0073394532420263895,-1.233881214985475,0.6153594817021659,-1.5036596259277206,-0.5410747568019297,-0.4232039057700946,0.7267300473302789,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-1.233881214985475,0.6153594817021659,-1.5036596259277206],[0.16529031385016685,0.13324511251649354,0.20065809710999372],[0.0020899683044507678,-0.4104610312897473,0.2708411749318442]],[[-0.0791617105831465,-0.061916666200144466,0.10632392835856415],[0.09271786273784166,-0.11666345661546837,0.0010937548745730402],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.042564517394653514,-0.05355735757704011,0.0005021162806123477],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6221672095684603,0.7828499829238702,-0.0073394532420263895]]],"normal":[0.6221672095684603,-0.7828499829238702,0.0073394532420263895]},{"op":"state"}]}}, +{"name":"adv_sing_018","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,2.0,0.7732988145891915,0,0,7.960585386161957e-06,-1.8684025361467293e-05,-0.0008270649556820664,0.014739897613137064,-0.01009015436348704,0.006691764443275322,0.2283453672708396,0.28784422221590356,-0.06894963251040412,0.0020545682078745536,-0.004248388137775032,-0.010931499120974821,0.4226454094795046,0.5327720926365643,-0.12761916746599367,1.23456e-61,1.23456e-61,1.23456e-61,0.7860978195916094,0.9585709403234112,-0.28615361982724347,1.23456e-61,1.23456e-61,1.23456e-61,-0.6108243856279777,-0.7699839602309524,0.18444042645055575,7.960585386161957e-06,-1.8684025361467293e-05,-0.0008270649556820664,0.2385764005162054,-0.16331678630848281,0.10831127297356961,407.5005524068888,513.840499495748,-122.80564694365215,0.0751973724741202,-0.15549136990754447,-0.4000938046008407,-4.843410657976478,-5.998729716247896,1.4210141208227685,1.23456e-61,1.23456e-61,1.23456e-61,0.868320060930513,1.0945740461489437,-0.2621920900701199,1.23456e-61,1.23456e-61,1.23456e-61,-0.6108243856279777,-0.7699839602309524,0.18444042645055575,7.960585386161957e-06,-1.8684025361467293e-05,-0.0008270649556820664,-0.6108243856279777,-0.7699839602309524,0.18444042645055575,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,0.7732988145891915,0,0,7.960585386161957e-06,-1.8684025361467293e-05,-0.0008270649556820664,0.014739897613137064,-0.01009015436348704,0.006691764443275322,0.2283453672708396,0.28784422221590356,-0.06894963251040412,0.0020545682078745536,-0.004248388137775032,-0.010931499120974821,0.4226454094795046,0.5327720926365643,-0.12761916746599367,1.23456e-61,1.23456e-61,1.23456e-61,0.7860978195916094,0.9585709403234112,-0.28615361982724347,1.23456e-61,1.23456e-61,1.23456e-61,-0.6108243856279777,-0.7699839602309524,0.18444042645055575,7.960585386161957e-06,-1.8684025361467293e-05,-0.0008270649556820664,0.2385764005162054,-0.16331678630848281,0.10831127297356961,407.5005524068888,513.840499495748,-122.80564694365215,0.0751973724741202,-0.15549136990754447,-0.4000938046008407,-4.843410657976478,-5.998729716247896,1.4210141208227685,1.23456e-61,1.23456e-61,1.23456e-61,0.868320060930513,1.0945740461489437,-0.2621920900701199,1.23456e-61,1.23456e-61,1.23456e-61,-0.6108243856279777,-0.7699839602309524,0.18444042645055575,7.960585386161957e-06,-1.8684025361467293e-05,-0.0008270649556820664,-0.4872836767267723,0.5073941842933046,0.7107079288575374,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[7.960585386161957e-06,-1.8684025361467293e-05,-0.0008270649556820664],[0.2385764005162054,-0.16331678630848281,0.10831127297356961],[407.5005524068888,513.840499495748,-122.80564694365215]],[[0.0751973724741202,-0.15549136990754447,-0.4000938046008407],[-4.843410657976478,-5.998729716247896,1.4210141208227685],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.868320060930513,1.0945740461489437,-0.2621920900701199],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6108243856279777,-0.7699839602309524,0.18444042645055575]]],"normal":[0.6108243856279777,0.7699839602309524,-0.18444042645055575]},{"op":"state"}]}}, +{"name":"adv_sing_019","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.9553599250047182,0,0,2.0,2.0,0,0,-1.580937835910424,0.5270085694509814,-1.1826529578484966,0.17803083872224515,-0.0,-0.20191856289830717,0.11249543831370072,3.339643586906061e-11,0.15334834751936713,-0.10914558551087561,0.0,0.6831654252268757,0.0,-2.209902740201645e-09,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.44319579933128,1.4623327292464125e-07,-0.6041431054782568,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-1.580937835910424,0.5270085694509814,-1.1826529578484966,-0.01850613054593496,0.0,0.01357598761859883,0.0,5.052919745219027e-10,0.0,0.023129448582520674,0.0,0.03152894706070713,0.0,1.8656974133745883e-10,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.09596923394092538,-9.052087150752475e-11,-0.13082062400167682,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-1.580937835910424,0.5270085694509814,-1.1826529578484966,0.5915003672328917,0.0,0.8063047287244162,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.9553599250047182,0,0,2.0,2.0,0,0,-1.580937835910424,0.5270085694509814,-1.1826529578484966,0.17803083872224515,-0.0,-0.20191856289830717,0.11249543831370072,3.339643586906061e-11,0.15334834751936713,-0.10914558551087561,0.0,0.6831654252268757,0.0,-2.209902740201645e-09,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.44319579933128,1.4623327292464125e-07,-0.6041431054782568,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-1.580937835910424,0.5270085694509814,-1.1826529578484966,-0.01850613054593496,0.0,0.01357598761859883,0.0,5.052919745219027e-10,0.0,0.023129448582520674,0.0,0.03152894706070713,0.0,1.8656974133745883e-10,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.09596923394092538,-9.052087150752475e-11,-0.13082062400167682,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-1.580937835910424,0.5270085694509814,-1.1826529578484966,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.9553599250047182,0,0,2.0,2.0,0,0,-1.580937835910424,0.5270085694509814,-1.1826529578484966,0.17803083872224515,-0.0,-0.20191856289830717,0.11249543831370072,3.339643586906061e-11,0.15334834751936713,-0.10914558551087561,0.0,0.6831654252268757,0.0,-2.209902740201645e-09,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.44319579933128,1.4623327292464125e-07,-0.6041431054782568,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-1.580937835910424,0.5270085694509814,-1.1826529578484966,-0.01850613054593496,0.0,0.01357598761859883,0.0,5.052919745219027e-10,0.0,0.023129448582520674,0.0,0.03152894706070713,0.0,1.8656974133745883e-10,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.09596923394092538,-9.052087150752475e-11,-0.13082062400167682,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-1.580937835910424,0.5270085694509814,-1.1826529578484966,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-1.580937835910424,0.5270085694509814,-1.1826529578484966],[-0.01850613054593496,0.0,0.01357598761859883],[0.0,5.052919745219027e-10,0.0]],[[0.023129448582520674,0.0,0.03152894706070713],[0.0,1.8656974133745883e-10,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.09596923394092538,-9.052087150752475e-11,-0.13082062400167682],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_020","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,1.5577591976312573,0.659845492357886,0,0,0.44601617757711054,-1.3550597102546873,-0.9833331071437588,2.822178343972817,2.543941238077573,-3.0491979524625297,-25877.177919703005,-227.31212705011853,-24140.210301069274,-0.885105004805987,2.095492637165852,0.9290593792970667,65051.54859230552,571.7844209290047,60684.260276220004,1.23456e-61,1.23456e-61,1.23456e-61,-15491.083749173518,-135.85693566822619,-14451.083147004532,1.23456e-61,1.23456e-61,1.23456e-61,-0.7312068012261898,-0.006423118232443874,-0.6821256170184019,0.44601617757711054,-1.3550597102546873,-0.9833331071437588,-0.06880635562521707,-0.3920136501127224,0.07744852840313037,-1198.1900397416093,-11.221242246896004,-1118.343976409626,0.056499824672626334,-0.20273912337559163,-0.058656115106506576,-491.7314521813169,-4.3195020214190984,-458.72469958437483,1.23456e-61,1.23456e-61,1.23456e-61,-139.63442198178134,-0.3828122762947438,-129.55770661173833,1.23456e-61,1.23456e-61,1.23456e-61,0.7312068012261898,0.006423118232443874,0.6821256170184019,0.44601617757711054,-1.3550597102546873,-0.9833331071437588,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,1.5577591976312573,0.659845492357886,0,0,0.44601617757711054,-1.3550597102546873,-0.9833331071437588,2.822178343972817,2.543941238077573,-3.0491979524625297,-25877.177919703005,-227.31212705011853,-24140.210301069274,-0.885105004805987,2.095492637165852,0.9290593792970667,65051.54859230552,571.7844209290047,60684.260276220004,1.23456e-61,1.23456e-61,1.23456e-61,-15491.083749173518,-135.85693566822619,-14451.083147004532,1.23456e-61,1.23456e-61,1.23456e-61,-0.7312068012261898,-0.006423118232443874,-0.6821256170184019,0.44601617757711054,-1.3550597102546873,-0.9833331071437588,-0.06880635562521707,-0.3920136501127224,0.07744852840313037,-1198.1900397416093,-11.221242246896004,-1118.343976409626,0.056499824672626334,-0.20273912337559163,-0.058656115106506576,-491.7314521813169,-4.3195020214190984,-458.72469958437483,1.23456e-61,1.23456e-61,1.23456e-61,-139.63442198178134,-0.3828122762947438,-129.55770661173833,1.23456e-61,1.23456e-61,1.23456e-61,0.7312068012261898,0.006423118232443874,0.6821256170184019,0.44601617757711054,-1.3550597102546873,-0.9833331071437588,0.3602141529589675,-0.8528096680392252,-0.3781024121939451,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.44601617757711054,-1.3550597102546873,-0.9833331071437588],[-0.06880635562521707,-0.3920136501127224,0.07744852840313037],[-1198.1900397416093,-11.221242246896004,-1118.343976409626]],[[0.056499824672626334,-0.20273912337559163,-0.058656115106506576],[-491.7314521813169,-4.3195020214190984,-458.72469958437483],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-139.63442198178134,-0.3828122762947438,-129.55770661173833],[1.23456e-61,1.23456e-61,1.23456e-61],[0.7312068012261898,0.006423118232443874,0.6821256170184019]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_021","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.4755160884158471,0,0,2.0,0.6026771634472432,0,0,-0.6914996191636029,-0.9727814065413289,0.6197530474864603,2.2514096886662234,-18.470226743307705,7.5657209958076885,0.1749452238924578,0.32602298732861984,0.2318069928328595,4.687259415587048,-8.937205597454742,9.783620408882635,0.022722759805613807,-0.04636849074228834,0.04806565777818717,1.23456e-61,1.23456e-61,1.23456e-61,-4.7746340947643267e-05,5.672498502607344e-06,2.8056666148505637e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.8576786989062294,-0.10189641842081186,-0.5039884615301506,-0.6914996191636029,-0.9727814065413289,0.6197530474864603,-0.08343677053862751,-0.04460626242337396,-0.13297273158389122,-0.38661964716879105,-0.7204528110762674,-0.5122419008273017,-0.004986272812943948,-0.7714358989033272,0.14748340653518022,-0.01537918743183638,0.03539895956445897,-0.03817988201604084,1.23456e-61,1.23456e-61,1.23456e-61,-0.34443522515062597,-0.13036818409035497,0.037133169238673186,1.23456e-61,1.23456e-61,1.23456e-61,0.8576786989062294,-0.10189641842081186,-0.5039884615301506,-0.6914996191636029,-0.9727814065413289,0.6197530474864603,0.8576786989062294,-0.10189641842081186,-0.5039884615301506,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.6914996191636029,-0.9727814065413289,0.6197530474864603],[-0.08343677053862751,-0.04460626242337396,-0.13297273158389122],[-0.38661964716879105,-0.7204528110762674,-0.5122419008273017]],[[-0.004986272812943948,-0.7714358989033272,0.14748340653518022],[-0.01537918743183638,0.03539895956445897,-0.03817988201604084],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.34443522515062597,-0.13036818409035497,0.037133169238673186],[1.23456e-61,1.23456e-61,1.23456e-61],[0.8576786989062294,-0.10189641842081186,-0.5039884615301506]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_022","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.4432606345505183,0.0,0,0,2.0,0.0,0,0,1.8326051268301806,0.1792390884666153,1.2974960882186632,-0.08623780998002517,-0.21690192198695488,0.08113897257505015,0.03688013729253189,0.1558648906237142,0.455858084525639,0.021096068616368768,0.0891573803372615,0.26075861253441396,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.02522452587254806,-0.10660529636791488,-0.3117885369058984,1.23456e-61,1.23456e-61,1.23456e-61,0.9340183336900659,-0.35430552452856856,0.045577929081617424,1.8326051268301806,0.1792390884666153,1.2974960882186632,0.013652001576231868,0.03921210639255985,0.02505261170324308,0.00022468073223945188,0.0009495582263694443,0.002777173181761304,0.015615902599878075,0.034949617612179545,-0.048328144117822824,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.007020021345902901,-0.02966840526043436,-0.08677119227320261,1.23456e-61,1.23456e-61,1.23456e-61,0.9340183336900659,-0.35430552452856856,0.045577929081617424,1.8326051268301806,0.1792390884666153,1.2974960882186632,0.10011624927641088,-0.5160478922118801,0.8506887266059775,0,0,0,0,0,0,0],[1,1,1,1,1,1.4432606345505183,0.0,0,0,2.0,0.0,0,0,1.8326051268301806,0.1792390884666153,1.2974960882186632,-0.08623780998002517,-0.21690192198695488,0.08113897257505015,0.03688013729253189,0.1558648906237142,0.455858084525639,0.021096068616368768,0.0891573803372615,0.26075861253441396,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.02522452587254806,-0.10660529636791488,-0.3117885369058984,1.23456e-61,1.23456e-61,1.23456e-61,0.9340183336900659,-0.35430552452856856,0.045577929081617424,1.8326051268301806,0.1792390884666153,1.2974960882186632,0.013652001576231868,0.03921210639255985,0.02505261170324308,0.00022468073223945188,0.0009495582263694443,0.002777173181761304,0.015615902599878075,0.034949617612179545,-0.048328144117822824,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.007020021345902901,-0.02966840526043436,-0.08677119227320261,1.23456e-61,1.23456e-61,1.23456e-61,0.9340183336900659,-0.35430552452856856,0.045577929081617424,1.8326051268301806,0.1792390884666153,1.2974960882186632,-0.27264694580369103,-0.5551457529907762,1.2718006274099034,0,0,0,0,0,0,0],[1,1,1,1,1,1.4432606345505183,0.0,0,0,2.0,0.0,0,0,1.8326051268301806,0.1792390884666153,1.2974960882186632,-0.08623780998002517,-0.21690192198695488,0.08113897257505015,0.03688013729253189,0.1558648906237142,0.455858084525639,0.021096068616368768,0.0891573803372615,0.26075861253441396,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.02522452587254806,-0.10660529636791488,-0.3117885369058984,1.23456e-61,1.23456e-61,1.23456e-61,0.9340183336900659,-0.35430552452856856,0.045577929081617424,1.8326051268301806,0.1792390884666153,1.2974960882186632,0.013652001576231868,0.03921210639255985,0.02505261170324308,0.00022468073223945188,0.0009495582263694443,0.002777173181761304,0.015615902599878075,0.034949617612179545,-0.048328144117822824,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.007020021345902901,-0.02966840526043436,-0.08677119227320261,1.23456e-61,1.23456e-61,1.23456e-61,0.9340183336900659,-0.35430552452856856,0.045577929081617424,1.8326051268301806,0.1792390884666153,1.2974960882186632,0.032599110160327904,-0.5006716553172115,-0.8650232318144283,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.8326051268301806,0.1792390884666153,1.2974960882186632],[0.013652001576231868,0.03921210639255985,0.02505261170324308],[0.00022468073223945188,0.0009495582263694443,0.002777173181761304]],[[0.015615902599878075,0.034949617612179545,-0.048328144117822824],[0.0,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.007020021345902901,-0.02966840526043436,-0.08677119227320261],[1.23456e-61,1.23456e-61,1.23456e-61],[0.9340183336900659,-0.35430552452856856,0.045577929081617424]]],"normal":[-0.9340183336900659,0.35430552452856856,-0.045577929081617424]},{"op":"state"}]}}, +{"name":"adv_sing_023","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.898483947631151,0,0,2.0,2.0,0,0,-0.00039944635037752254,0.0007029715008892874,-0.0008835787111676301,2.0510522375511155,1.085019921033447,-2.2015480414686595,-85.68401032182526,-158.18881072186932,-157.78914902943094,-2.1910723208650458,2.1592199796003126,-0.9771338413090997,569.4678513689513,1053.488081686014,1050.9995909203037,1.23456e-61,1.23456e-61,1.23456e-61,-3636.103993331574,-6721.951082762338,-6700.417064103733,1.23456e-61,1.23456e-61,1.23456e-61,-0.35775280714906227,-0.6613663618497099,-0.6592476502731309,-0.00039944635037752254,0.0007029715008892874,-0.0008835787111676301,-1.1055383518405701,-0.019096430949559373,0.619098430876835,-185.57821636292172,-342.8921322684932,-341.88461755608756,0.9313806242898199,-1.2861932987418965,0.7848961608677658,426.0026802831945,787.5377555870003,785.0148492887596,1.23456e-61,1.23456e-61,1.23456e-61,-974.9508909579462,-1802.361046090481,-1796.58711588507,1.23456e-61,1.23456e-61,1.23456e-61,-0.35775280714906227,-0.6613663618497099,-0.6592476502731309,-0.00039944635037752254,0.0007029715008892874,-0.0008835787111676301,-0.35775280714906227,-0.6613663618497099,-0.6592476502731309,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.898483947631151,0,0,2.0,2.0,0,0,-0.00039944635037752254,0.0007029715008892874,-0.0008835787111676301,2.0510522375511155,1.085019921033447,-2.2015480414686595,-85.68401032182526,-158.18881072186932,-157.78914902943094,-2.1910723208650458,2.1592199796003126,-0.9771338413090997,569.4678513689513,1053.488081686014,1050.9995909203037,1.23456e-61,1.23456e-61,1.23456e-61,-3636.103993331574,-6721.951082762338,-6700.417064103733,1.23456e-61,1.23456e-61,1.23456e-61,-0.35775280714906227,-0.6613663618497099,-0.6592476502731309,-0.00039944635037752254,0.0007029715008892874,-0.0008835787111676301,-1.1055383518405701,-0.019096430949559373,0.619098430876835,-185.57821636292172,-342.8921322684932,-341.88461755608756,0.9313806242898199,-1.2861932987418965,0.7848961608677658,426.0026802831945,787.5377555870003,785.0148492887596,1.23456e-61,1.23456e-61,1.23456e-61,-974.9508909579462,-1802.361046090481,-1796.58711588507,1.23456e-61,1.23456e-61,1.23456e-61,-0.35775280714906227,-0.6613663618497099,-0.6592476502731309,-0.00039944635037752254,0.0007029715008892874,-0.0008835787111676301,-0.03760247135798933,1.0081923595343019,-0.9910268514648977,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.00039944635037752254,0.0007029715008892874,-0.0008835787111676301],[-1.1055383518405701,-0.019096430949559373,0.619098430876835],[-185.57821636292172,-342.8921322684932,-341.88461755608756]],[[0.9313806242898199,-1.2861932987418965,0.7848961608677658],[426.0026802831945,787.5377555870003,785.0148492887596],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-974.9508909579462,-1802.361046090481,-1796.58711588507],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.35775280714906227,-0.6613663618497099,-0.6592476502731309]]],"normal":[-0.35775280714906227,-0.6613663618497099,-0.6592476502731309]},{"op":"state"}]}}, +{"name":"adv_sing_024","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,0.07734350479374719,-0.05644085640602148,0.8171107200460668,-49.28885609806383,0.0,61.079263534525076,0.07144154532126695,-0.006130015564611055,0.057650859604304695,44.432421561120776,0.0,35.85542957924958,0.0,-0.00044205585837834015,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0032439485622787908,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.07734350479374719,-0.05644085640602148,0.8171107200460668,-0.01332504829272776,0.0,0.016512538547506752,0.013265592418212154,-1.7696741308428664e-10,0.010704874910406195,0.009295845148647473,0.0,0.007501425972213677,0.0,8.676125472390534e-11,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.6671758780761754,-1.1513640405887784e-10,-0.5383878904828004,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.07734350479374719,-0.05644085640602148,0.8171107200460668,0.7782175971089925,0.0,0.6279947225494064,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,0.07734350479374719,-0.05644085640602148,0.8171107200460668,-49.28885609806383,0.0,61.079263534525076,0.07144154532126695,-0.006130015564611055,0.057650859604304695,44.432421561120776,0.0,35.85542957924958,0.0,-0.00044205585837834015,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0032439485622787908,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.07734350479374719,-0.05644085640602148,0.8171107200460668,-0.01332504829272776,0.0,0.016512538547506752,0.013265592418212154,-1.7696741308428664e-10,0.010704874910406195,0.009295845148647473,0.0,0.007501425972213677,0.0,8.676125472390534e-11,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.6671758780761754,-1.1513640405887784e-10,-0.5383878904828004,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.07734350479374719,-0.05644085640602148,0.8171107200460668,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.07734350479374719,-0.05644085640602148,0.8171107200460668],[-0.01332504829272776,0.0,0.016512538547506752],[0.013265592418212154,-1.7696741308428664e-10,0.010704874910406195]],[[0.009295845148647473,0.0,0.007501425972213677],[0.0,8.676125472390534e-11,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.6671758780761754,-1.1513640405887784e-10,-0.5383878904828004],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_025","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,0.0,0.0,0,0,0.19935587292501022,-0.49546748659012896,-0.4507390177713142,23.55669826634999,-2.46325050411179,0.0,0.0,0.0,0.0005609856699871201,-1.3909839045096335,-13.302336923177892,0.0,0.0,-0.0,-6.513196772391452e-11,1.23456e-61,1.23456e-61,1.23456e-61,-0.0806611209741695,-0.7713830507462803,0.00017888683208646379,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.19935587292501022,-0.49546748659012896,-0.4507390177713142,-2.0511436837338217,1.7879285001268836,-0.0,-0.0,-0.0,-50.099370289822694,1.153312047430115,0.6741284652549409,0.0,0.0,0.0,3.6197354533672037,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-0.0,-0.7589329881810647,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.19935587292501022,-0.49546748659012896,-0.4507390177713142,-0.10399984920281989,-0.994577312915286,0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.19935587292501022,-0.49546748659012896,-0.4507390177713142],[-2.0511436837338217,1.7879285001268836,-0.0],[-0.0,-0.0,-50.099370289822694]],[[1.153312047430115,0.6741284652549409,0.0],[0.0,0.0,3.6197354533672037],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0,-0.0,-0.7589329881810647],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_026","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.7268060364978568,0,0,0.0,2.0,0,0,-0.6189657433408358,1.0801918048411667,-0.45192912692554854,-0.0,0.024685266151525966,-0.0031905058537934705,0.0,-0.14940898534368605,-0.02492704326749085,0.0,0.03055308642202444,0.029192069029518184,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.20442507968295306,-0.0341057988881696,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.6189657433408358,1.0801918048411667,-0.45192912692554854,-0.0,4.266510675712519,-0.3789563714753431,-5.3689468011799075,0.2676841218269038,0.04465978850904165,0.0,-3.723176386426719,-15.046001473374606,-13.180924146099523,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-32.35956096772055,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.6189657433408358,1.0801918048411667,-0.45192912692554854,1,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.7268060364978568,0,0,0.0,2.0,0,0,-0.6189657433408358,1.0801918048411667,-0.45192912692554854,-0.0,0.024685266151525966,-0.0031905058537934705,0.0,-0.14940898534368605,-0.02492704326749085,0.0,0.03055308642202444,0.029192069029518184,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.20442507968295306,-0.0341057988881696,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.6189657433408358,1.0801918048411667,-0.45192912692554854,-0.0,4.266510675712519,-0.3789563714753431,-5.3689468011799075,0.2676841218269038,0.04465978850904165,0.0,-3.723176386426719,-15.046001473374606,-13.180924146099523,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-32.35956096772055,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.6189657433408358,1.0801918048411667,-0.45192912692554854,0.0,-0.9863665619595404,-0.1645630743761068,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.6189657433408358,1.0801918048411667,-0.45192912692554854],[-0.0,4.266510675712519,-0.3789563714753431],[-5.3689468011799075,0.2676841218269038,0.04465978850904165]],[[0.0,-3.723176386426719,-15.046001473374606],[-13.180924146099523,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-32.35956096772055,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_027","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.1890766464743936,0,0,1.989634318227346,0.0,0,0,-0.943195634183998,-0.01929146307825569,-0.3757931676783919,5.621423429142286,8.414543419167316,0.0,0.0,0.0,15225.407171826011,29.03884264121821,6.941498611654561,-0.0,0.0,0.0,2128.523897608862,1.23456e-61,1.23456e-61,1.23456e-61,0.6864765712617059,-0.6597089659995182,48.38287941732415,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.943195634183998,-0.01929146307825569,-0.3757931676783919,9.978713105077142e-05,0.29356042596687926,0.0,-0.0,0.0,-3.4872779454401654e-09,-0.3720665949527458,0.070833362698133,0.0,-0.0,-0.0,-4.5342633938855054e-08,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,9.472352433743867e-08,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.943195634183998,-0.01929146307825569,-0.3757931676783919,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.1890766464743936,0,0,1.989634318227346,0.0,0,0,-0.943195634183998,-0.01929146307825569,-0.3757931676783919,5.621423429142286,8.414543419167316,0.0,0.0,0.0,15225.407171826011,29.03884264121821,6.941498611654561,-0.0,0.0,0.0,2128.523897608862,1.23456e-61,1.23456e-61,1.23456e-61,0.6864765712617059,-0.6597089659995182,48.38287941732415,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.943195634183998,-0.01929146307825569,-0.3757931676783919,9.978713105077142e-05,0.29356042596687926,0.0,-0.0,0.0,-3.4872779454401654e-09,-0.3720665949527458,0.070833362698133,0.0,-0.0,-0.0,-4.5342633938855054e-08,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,9.472352433743867e-08,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.943195634183998,-0.01929146307825569,-0.3757931676783919,0.7210243963363971,-0.6929096765724476,-0.0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.943195634183998,-0.01929146307825569,-0.3757931676783919],[9.978713105077142e-05,0.29356042596687926,0.0],[-0.0,0.0,-3.4872779454401654e-09]],[[-0.3720665949527458,0.070833362698133,0.0],[-0.0,-0.0,-4.5342633938855054e-08],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,9.472352433743867e-08],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_028","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,1.7682708006374048,2.0,0,0,0.8984362228627387,0.7764380807318558,-0.8255656808518679,5.1837396700664,4.14389520512594,0.6264718610976583,-8.170897828059406,24.02429399195455,-91.30234415989044,8.881175127573574,9.918836634095504,1.815132725452819,-12.326589738328641,36.242971338456975,-137.73841777115328,1.23456e-61,1.23456e-61,1.23456e-61,-19.03545924901098,55.968570271392366,-212.70392656562464,1.23456e-61,1.23456e-61,1.23456e-61,0.08622445204885183,-0.25351945758068334,0.9634797499153116,0.8984362228627387,0.7764380807318558,-0.8255656808518679,-0.029922262089811347,0.030542780860790028,0.01071451671973041,0.05552407345970771,0.013512009930308929,-0.0014136004201473651,0.0293665272616228,-0.00552068047636769,-0.004080742373570064,-0.08669737170509309,0.36717963869498615,0.10437439522078144,1.23456e-61,1.23456e-61,1.23456e-61,-0.08306644217851329,-0.020214557789319288,0.0021148080544473938,1.23456e-61,1.23456e-61,1.23456e-61,0.08622445204885183,-0.25351945758068334,0.9634797499153116,0.8984362228627387,0.7764380807318558,-0.8255656808518679,-0.22147878789890868,0.9380042291936561,0.26663685515255614,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.8984362228627387,0.7764380807318558,-0.8255656808518679],[-0.029922262089811347,0.030542780860790028,0.01071451671973041],[0.05552407345970771,0.013512009930308929,-0.0014136004201473651]],[[0.0293665272616228,-0.00552068047636769,-0.004080742373570064],[-0.08669737170509309,0.36717963869498615,0.10437439522078144],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.08306644217851329,-0.020214557789319288,0.0021148080544473938],[1.23456e-61,1.23456e-61,1.23456e-61],[0.08622445204885183,-0.25351945758068334,0.9634797499153116]]],"normal":[-0.08622445204885183,0.25351945758068334,-0.9634797499153116]},{"op":"state"}]}}, +{"name":"adv_sing_029","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.026419747988315034,0,0,2.0,2.0,0,0,0.27120409974650106,0.559000907845866,0.6432891797125142,-0.7703298182515536,0.6417662746586962,-0.5780922542322546,-0.0721762385737516,-0.192104272758306,-0.5992211760836341,-0.12033372230366375,0.20692363590655144,-0.08698882009277399,0.20544075468355136,-0.308337800861402,-0.022000957422669887,1.23456e-61,1.23456e-61,1.23456e-61,-0.19640724080630761,-0.13488429087583245,-0.2116822698312047,1.23456e-61,1.23456e-61,1.23456e-61,-0.613048162857946,-0.024542418415820534,0.7896642449261584,0.27120409974650106,0.559000907845866,0.6432891797125142,-4.8187557928254,-0.5389711130455668,-3.7577452185397853,57.09783053205907,2.577706110247191,-72.47964780724999,-4.27281079348331,-9.206161422670913,-3.6032785973352413,103.66397156570592,4.150023960516792,-133.52903864985277,1.23456e-61,1.23456e-61,1.23456e-61,133.38607165430616,5.339901462425808,-171.81392578607398,1.23456e-61,1.23456e-61,1.23456e-61,-0.613048162857946,-0.024542418415820534,0.7896642449261584,0.27120409974650106,0.559000907845866,0.6432891797125142,-0.613048162857946,-0.024542418415820534,0.7896642449261584,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.026419747988315034,0,0,2.0,2.0,0,0,0.27120409974650106,0.559000907845866,0.6432891797125142,-0.7703298182515536,0.6417662746586962,-0.5780922542322546,-0.0721762385737516,-0.192104272758306,-0.5992211760836341,-0.12033372230366375,0.20692363590655144,-0.08698882009277399,0.20544075468355136,-0.308337800861402,-0.022000957422669887,1.23456e-61,1.23456e-61,1.23456e-61,-0.19640724080630761,-0.13488429087583245,-0.2116822698312047,1.23456e-61,1.23456e-61,1.23456e-61,-0.613048162857946,-0.024542418415820534,0.7896642449261584,0.27120409974650106,0.559000907845866,0.6432891797125142,-4.8187557928254,-0.5389711130455668,-3.7577452185397853,57.09783053205907,2.577706110247191,-72.47964780724999,-4.27281079348331,-9.206161422670913,-3.6032785973352413,103.66397156570592,4.150023960516792,-133.52903864985277,1.23456e-61,1.23456e-61,1.23456e-61,133.38607165430616,5.339901462425808,-171.81392578607398,1.23456e-61,1.23456e-61,1.23456e-61,-0.613048162857946,-0.024542418415820534,0.7896642449261584,0.27120409974650106,0.559000907845866,0.6432891797125142,-0.3537987515150682,0.9022201854127727,-0.2466276149585061,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.27120409974650106,0.559000907845866,0.6432891797125142],[-4.8187557928254,-0.5389711130455668,-3.7577452185397853],[57.09783053205907,2.577706110247191,-72.47964780724999]],[[-4.27281079348331,-9.206161422670913,-3.6032785973352413],[103.66397156570592,4.150023960516792,-133.52903864985277],[1.23456e-61,1.23456e-61,1.23456e-61]],[[133.38607165430616,5.339901462425808,-171.81392578607398],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.613048162857946,-0.024542418415820534,0.7896642449261584]]],"normal":[-0.613048162857946,-0.024542418415820534,0.7896642449261584]},{"op":"state"}]}}, +{"name":"adv_sing_030","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.31605682265265,0,0,0.784959331629248,0.0,0,0,-0.2943575267129337,-0.14524742610602126,-0.4411669715522435,2.076198501019745,-2.9534733234967154,-1.5634773654683294,-0.04950829956801845,0.050423939398606454,-0.037708561345023886,-0.4765574112161727,0.9579138910592493,1.4098278088081488,4.595982081375483e-06,3.7612959612224943e-06,-1.002071542437641e-06,1.23456e-61,1.23456e-61,1.23456e-61,-2.3902512938352537e-06,-1.9561526521702034e-06,5.211514663064623e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.7630927617673635,-0.6245058557788603,0.16637870367379026,-0.2943575267129337,-0.14524742610602126,-0.4411669715522435,-0.09391701841304839,0.22929674578211384,0.42992138966560234,-0.3416717025199802,0.3481395440452918,-0.26031747848482356,0.2663356273913085,-0.27137816069629717,0.2029198342832226,0.07350414924362786,-0.17945918196066463,-0.3364780809445915,1.23456e-61,1.23456e-61,1.23456e-61,-0.5632358935590648,0.5738993758043697,-0.42912657871734117,1.23456e-61,1.23456e-61,1.23456e-61,-0.7630927617673635,-0.6245058557788603,0.16637870367379026,-0.2943575267129337,-0.14524742610602126,-0.4411669715522435,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.31605682265265,0,0,0.784959331629248,0.0,0,0,-0.2943575267129337,-0.14524742610602126,-0.4411669715522435,2.076198501019745,-2.9534733234967154,-1.5634773654683294,-0.04950829956801845,0.050423939398606454,-0.037708561345023886,-0.4765574112161727,0.9579138910592493,1.4098278088081488,4.595982081375483e-06,3.7612959612224943e-06,-1.002071542437641e-06,1.23456e-61,1.23456e-61,1.23456e-61,-2.3902512938352537e-06,-1.9561526521702034e-06,5.211514663064623e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.7630927617673635,-0.6245058557788603,0.16637870367379026,-0.2943575267129337,-0.14524742610602126,-0.4411669715522435,-0.09391701841304839,0.22929674578211384,0.42992138966560234,-0.3416717025199802,0.3481395440452918,-0.26031747848482356,0.2663356273913085,-0.27137816069629717,0.2029198342832226,0.07350414924362786,-0.17945918196066463,-0.3364780809445915,1.23456e-61,1.23456e-61,1.23456e-61,-0.5632358935590648,0.5738993758043697,-0.42912657871734117,1.23456e-61,1.23456e-61,1.23456e-61,-0.7630927617673635,-0.6245058557788603,0.16637870367379026,-0.2943575267129337,-0.14524742610602126,-0.4411669715522435,-0.7630927617673635,-0.6245058557788603,0.16637870367379026,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.2943575267129337,-0.14524742610602126,-0.4411669715522435],[-0.09391701841304839,0.22929674578211384,0.42992138966560234],[-0.3416717025199802,0.3481395440452918,-0.26031747848482356]],[[0.2663356273913085,-0.27137816069629717,0.2029198342832226],[0.07350414924362786,-0.17945918196066463,-0.3364780809445915],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.5632358935590648,0.5738993758043697,-0.42912657871734117],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.7630927617673635,-0.6245058557788603,0.16637870367379026]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_031","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.7096813721039712,2.0,0,0,0.29905378452955,2.0,0,0,0.4576286802193663,-0.14584020125492914,0.6363605988482348,-0.028268237333655407,0.030986134059363353,-0.04060593897026187,-0.44525126329000936,-0.2742392916316478,0.04125382453695801,-0.012682093830895842,0.024820175481386684,-0.027969097320370947,-1.4776409420254358e-16,2.884996874639063e-16,3.230197554539288e-16,1.23456e-61,1.23456e-61,1.23456e-61,-0.16593574592123217,-0.10220319439760467,0.015374429476205561,1.23456e-61,1.23456e-61,1.23456e-61,-0.3229031038277524,0.6304470990614192,0.7058824553871877,0.4576286802193663,-0.14584020125492914,0.6363605988482348,53.32734472062532,6.0762371493433065,18.96749089453672,-5163026.335403738,10080469.766154163,11286635.723413797,-56.59720896323502,-12.261664808737478,-14.938866029897707,4926589.610197481,-9618842.591466548,-10769773.128555227,1.23456e-61,1.23456e-61,1.23456e-61,-4701171.150038761,9178727.855506111,10276997.016278166,1.23456e-61,1.23456e-61,1.23456e-61,-0.3229031038277524,0.6304470990614192,0.7058824553871877,0.4576286802193663,-0.14584020125492914,0.6363605988482348,-0.4186198506092007,0.5737704774671469,-0.7039494725213259,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.4576286802193663,-0.14584020125492914,0.6363605988482348],[53.32734472062532,6.0762371493433065,18.96749089453672],[-5163026.335403738,10080469.766154163,11286635.723413797]],[[-56.59720896323502,-12.261664808737478,-14.938866029897707],[4926589.610197481,-9618842.591466548,-10769773.128555227],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-4701171.150038761,9178727.855506111,10276997.016278166],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.3229031038277524,0.6304470990614192,0.7058824553871877]]],"normal":[0.3229031038277524,-0.6304470990614192,-0.7058824553871877]},{"op":"state"}]}}, +{"name":"adv_sing_032","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.2284127781202332,0.0,0,0,0.0,1.3589064330020018,0,0,0.68202398883903,-0.4229936190601862,-0.9601188503227709,0.00273561211638999,0.003915989051435477,-0.008987303993840259,0.31947587819905515,-0.694073325838341,0.013025755934446272,-0.00342789896852359,-0.0013419769133894222,0.007971604776558732,7.091952220086591e-08,3.332125047491442e-08,3.6105817326707116e-08,1.23456e-61,1.23456e-61,1.23456e-61,0.19985843395596992,-0.4341999692292927,0.008148676779013084,1.23456e-61,1.23456e-61,1.23456e-61,-0.8220094008748003,-0.386217790098833,-0.4184929670671008,0.68202398883903,-0.4229936190601862,-0.9601188503227709,0.20126192337804358,0.709055026181634,-1.0496923315196387,1.6917882021944763e-11,7.948798396605527e-12,8.613057997049816e-12,-0.3986489295227855,-0.1866169693842612,0.9552561038925128,4.689035168545777e-10,2.2031241961030675e-10,2.387233331247006e-10,1.23456e-61,1.23456e-61,1.23456e-61,-0.3247255797564682,0.7054782687749611,-0.013239839035128237,1.23456e-61,1.23456e-61,1.23456e-61,0.8220094008748003,0.386217790098833,0.4184929670671008,0.68202398883903,-0.4229936190601862,-0.9601188503227709,-0.8220094008748003,-0.386217790098833,-0.4184929670671008,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.68202398883903,-0.4229936190601862,-0.9601188503227709],[0.20126192337804358,0.709055026181634,-1.0496923315196387],[1.6917882021944763e-11,7.948798396605527e-12,8.613057997049816e-12]],[[-0.3986489295227855,-0.1866169693842612,0.9552561038925128],[4.689035168545777e-10,2.2031241961030675e-10,2.387233331247006e-10],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.3247255797564682,0.7054782687749611,-0.013239839035128237],[1.23456e-61,1.23456e-61,1.23456e-61],[0.8220094008748003,0.386217790098833,0.4184929670671008]]],"normal":[0.8220094008748003,0.386217790098833,0.4184929670671008]},{"op":"state"}]}}, +{"name":"adv_sing_033","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,0.0,1.5226352121056401,0,0,-0.0004128323530160365,0.00024404687747637865,0.00031635327640831167,-40.744587298213375,-16.838549548592344,-35.377546377464576,-637.7365341841297,2119.125614021098,-274.1481745957986,33.80903209403631,2.823745419270532,-56.821037489259005,513.7930746731092,-1708.898239957249,221.19860574982235,1.23456e-61,1.23456e-61,1.23456e-61,-2603.0467691672047,8650.3364017402,-1118.3722266262403,1.23456e-61,1.23456e-61,1.23456e-61,-0.28599032923530376,0.9503131772436266,-0.1229406228266561,-0.0004128323530160365,0.00024404687747637865,0.00031635327640831167,-0.144472120145583,-0.03785018651758436,0.0435014731014409,0.1312155661352729,0.3088677203742076,0.7045207823106006,-0.03914005698741281,-0.032222232468459434,-0.158023718150982,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.05513664262672901,0.1832127616946186,-0.023701966437905873,1.23456e-61,1.23456e-61,1.23456e-61,-0.28599032923530376,0.9503131772436266,-0.1229406228266561,-0.0004128323530160365,0.00024404687747637865,0.00031635327640831167,-0.28599032923530376,0.9503131772436266,-0.1229406228266561,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.0,1.5226352121056401,0,0,-0.0004128323530160365,0.00024404687747637865,0.00031635327640831167,-40.744587298213375,-16.838549548592344,-35.377546377464576,-637.7365341841297,2119.125614021098,-274.1481745957986,33.80903209403631,2.823745419270532,-56.821037489259005,513.7930746731092,-1708.898239957249,221.19860574982235,1.23456e-61,1.23456e-61,1.23456e-61,-2603.0467691672047,8650.3364017402,-1118.3722266262403,1.23456e-61,1.23456e-61,1.23456e-61,-0.28599032923530376,0.9503131772436266,-0.1229406228266561,-0.0004128323530160365,0.00024404687747637865,0.00031635327640831167,-0.144472120145583,-0.03785018651758436,0.0435014731014409,0.1312155661352729,0.3088677203742076,0.7045207823106006,-0.03914005698741281,-0.032222232468459434,-0.158023718150982,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.05513664262672901,0.1832127616946186,-0.023701966437905873,1.23456e-61,1.23456e-61,1.23456e-61,-0.28599032923530376,0.9503131772436266,-0.1229406228266561,-0.0004128323530160365,0.00024404687747637865,0.00031635327640831167,0.6962284760639293,-0.5452203412866591,-0.46690543856862254,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0004128323530160365,0.00024404687747637865,0.00031635327640831167],[-0.144472120145583,-0.03785018651758436,0.0435014731014409],[0.1312155661352729,0.3088677203742076,0.7045207823106006]],[[-0.03914005698741281,-0.032222232468459434,-0.158023718150982],[-0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.05513664262672901,0.1832127616946186,-0.023701966437905873],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.28599032923530376,0.9503131772436266,-0.1229406228266561]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_034","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,1.1692593746668558,0,0,0.3138649448977102,0.0,0,0,-712.1748291675958,-679.2277884909581,-31.417409433756482,0.5733977954802614,0.0,0.17580165617570523,0.0,-0.30515410345970995,0.0,0.20610928945294762,0.0,-0.5613913070992272,0.14921927380473887,0.6976743905840471,0.17281202833936188,1.23456e-61,1.23456e-61,1.23456e-61,-0.34112891787962807,-0.3341516656825416,0.29455709703165484,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-712.1748291675958,-679.2277884909581,-31.417409433756482,1.047708975004666,0.0,3.905663178417745,-0.5308405234036288,-1.5600516587378014e-05,0.4583687731091501,3.8254078390374424,0.0,2.068005706771056,0.0,-1.4204159969581987e-05,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-1.2932787149158433e-05,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-712.1748291675958,-679.2277884909581,-31.417409433756482,-0.6535509346019424,-0.0,-0.7568825377037891,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.1692593746668558,0,0,0.3138649448977102,0.0,0,0,-712.1748291675958,-679.2277884909581,-31.417409433756482,0.5733977954802614,0.0,0.17580165617570523,0.0,-0.30515410345970995,0.0,0.20610928945294762,0.0,-0.5613913070992272,0.14921927380473887,0.6976743905840471,0.17281202833936188,1.23456e-61,1.23456e-61,1.23456e-61,-0.34112891787962807,-0.3341516656825416,0.29455709703165484,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-712.1748291675958,-679.2277884909581,-31.417409433756482,1.047708975004666,0.0,3.905663178417745,-0.5308405234036288,-1.5600516587378014e-05,0.4583687731091501,3.8254078390374424,0.0,2.068005706771056,0.0,-1.4204159969581987e-05,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-1.2932787149158433e-05,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-712.1748291675958,-679.2277884909581,-31.417409433756482,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-712.1748291675958,-679.2277884909581,-31.417409433756482],[1.047708975004666,0.0,3.905663178417745],[-0.5308405234036288,-1.5600516587378014e-05,0.4583687731091501]],[[3.8254078390374424,0.0,2.068005706771056],[0.0,-1.4204159969581987e-05,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-1.2932787149158433e-05,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_035","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.948283208433877,0.9937506814975356,0,0,0.0,2.0,0,0,0.08311699042711695,-0.5190720876644697,0.7004975407162868,0.0031035962849007524,0.026956421616092525,0.014114421202076517,-6.533770075432462e-07,-2.4998235589312555e-07,6.210986699192634e-07,0.022964990743396793,-0.005351755476698486,0.02200447875653395,-1.6593953618234626e-07,-6.34885459876392e-08,1.5774173872050892e-07,1.23456e-61,1.23456e-61,1.23456e-61,-7.26524186749192e-07,-2.779685016768501e-07,6.906322090377972e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.6984270451103962,-0.2672185218342183,0.6639231312788372,0.08311699042711695,-0.5190720876644697,0.7004975407162868,0.02796843514535071,0.033129702007529994,0.04275612669121986,-2.5896954679140978e-06,-9.908187258518845e-07,2.461758513152039e-06,0.01844836605230737,-0.026733990104881013,0.00864711620969254,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.51474365950137,0.7459265061841065,-0.24126947435281246,1.23456e-61,1.23456e-61,1.23456e-61,0.6984270451103962,0.2672185218342183,-0.6639231312788372,0.08311699042711695,-0.5190720876644697,0.7004975407162868,-0.4593083530739111,-0.5440686541033591,-0.7021574869063855,0,0,0,0,0,0,0],[1,1,1,1,1,1.948283208433877,0.9937506814975356,0,0,0.0,2.0,0,0,0.08311699042711695,-0.5190720876644697,0.7004975407162868,0.0031035962849007524,0.026956421616092525,0.014114421202076517,-6.533770075432462e-07,-2.4998235589312555e-07,6.210986699192634e-07,0.022964990743396793,-0.005351755476698486,0.02200447875653395,-1.6593953618234626e-07,-6.34885459876392e-08,1.5774173872050892e-07,1.23456e-61,1.23456e-61,1.23456e-61,-7.26524186749192e-07,-2.779685016768501e-07,6.906322090377972e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.6984270451103962,-0.2672185218342183,0.6639231312788372,0.08311699042711695,-0.5190720876644697,0.7004975407162868,0.02796843514535071,0.033129702007529994,0.04275612669121986,-2.5896954679140978e-06,-9.908187258518845e-07,2.461758513152039e-06,0.01844836605230737,-0.026733990104881013,0.00864711620969254,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.51474365950137,0.7459265061841065,-0.24126947435281246,1.23456e-61,1.23456e-61,1.23456e-61,0.6984270451103962,0.2672185218342183,-0.6639231312788372,0.08311699042711695,-0.5190720876644697,0.7004975407162868,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.948283208433877,0.9937506814975356,0,0,0.0,2.0,0,0,0.08311699042711695,-0.5190720876644697,0.7004975407162868,0.0031035962849007524,0.026956421616092525,0.014114421202076517,-6.533770075432462e-07,-2.4998235589312555e-07,6.210986699192634e-07,0.022964990743396793,-0.005351755476698486,0.02200447875653395,-1.6593953618234626e-07,-6.34885459876392e-08,1.5774173872050892e-07,1.23456e-61,1.23456e-61,1.23456e-61,-7.26524186749192e-07,-2.779685016768501e-07,6.906322090377972e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.6984270451103962,-0.2672185218342183,0.6639231312788372,0.08311699042711695,-0.5190720876644697,0.7004975407162868,0.02796843514535071,0.033129702007529994,0.04275612669121986,-2.5896954679140978e-06,-9.908187258518845e-07,2.461758513152039e-06,0.01844836605230737,-0.026733990104881013,0.00864711620969254,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.51474365950137,0.7459265061841065,-0.24126947435281246,1.23456e-61,1.23456e-61,1.23456e-61,0.6984270451103962,0.2672185218342183,-0.6639231312788372,0.08311699042711695,-0.5190720876644697,0.7004975407162868,-0.5488492502089185,0.7953512187775252,-0.25725656324807955,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.08311699042711695,-0.5190720876644697,0.7004975407162868],[0.02796843514535071,0.033129702007529994,0.04275612669121986],[-2.5896954679140978e-06,-9.908187258518845e-07,2.461758513152039e-06]],[[0.01844836605230737,-0.026733990104881013,0.00864711620969254],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.51474365950137,0.7459265061841065,-0.24126947435281246],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6984270451103962,0.2672185218342183,-0.6639231312788372]]],"normal":[0.6984270451103962,0.2672185218342183,-0.6639231312788372]},{"op":"state"}]}}, +{"name":"adv_sing_036","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.8223772824424627,0.11357624146652023,0,0,0.0,0.0,0,0,-1.93901319626845,0.7828745030177129,1.1554543840022493,0.0,1.3086836101364483,-0.9253766725065039,-2078.169335705786,0.4771045679186438,0.674729487901558,0.0,-0.7078568918696968,-1.001063394220681,-772.0642993187383,0.28224253721522646,-0.19957509814063285,1.23456e-61,1.23456e-61,1.23456e-61,-288.6891493241443,-0.12204463751497205,-0.17259762598971856,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-1.93901319626845,0.7828745030177129,1.1554543840022493,0.0,4.76009369206799,-3.365885862302352,-27494.29622529612,-0.0,-0.0,0.0,-2.235791898622549,-3.16189536686491,-8869.930599356863,0.6120827371177515,-0.4328067396776233,1.23456e-61,1.23456e-61,1.23456e-61,-2880.064986938206,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-1.93901319626845,0.7828745030177129,1.1554543840022493,-0.0,-0.8164972816944307,0.577349278154572,0,0,0,0,0,0,0],[1,1,1,1,1,0.8223772824424627,0.11357624146652023,0,0,0.0,0.0,0,0,-1.93901319626845,0.7828745030177129,1.1554543840022493,0.0,1.3086836101364483,-0.9253766725065039,-2078.169335705786,0.4771045679186438,0.674729487901558,0.0,-0.7078568918696968,-1.001063394220681,-772.0642993187383,0.28224253721522646,-0.19957509814063285,1.23456e-61,1.23456e-61,1.23456e-61,-288.6891493241443,-0.12204463751497205,-0.17259762598971856,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-1.93901319626845,0.7828745030177129,1.1554543840022493,0.0,4.76009369206799,-3.365885862302352,-27494.29622529612,-0.0,-0.0,0.0,-2.235791898622549,-3.16189536686491,-8869.930599356863,0.6120827371177515,-0.4328067396776233,1.23456e-61,1.23456e-61,1.23456e-61,-2880.064986938206,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-1.93901319626845,0.7828745030177129,1.1554543840022493,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-1.93901319626845,0.7828745030177129,1.1554543840022493],[0.0,4.76009369206799,-3.365885862302352],[-27494.29622529612,-0.0,-0.0]],[[0.0,-2.235791898622549,-3.16189536686491],[-8869.930599356863,0.6120827371177515,-0.4328067396776233],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-2880.064986938206,-0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_037","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,0.17057304447293187,0.0,0,0,228.65565978837287,707.0907352037739,857.9851008677331,2.381906578781596,2.7744521543158287,4.115734899532587,0.2799883667884728,-0.34634888743520137,-0.8093895320163539,3.2438462904782797,2.4452657565961866,3.0413833633137237,-6.213736103713057e-09,2.3337517413617562e-08,-1.2135933868340272e-08,1.23456e-61,1.23456e-61,1.23456e-61,-0.10438789965876862,0.12912907536316634,0.3017641863817354,1.23456e-61,1.23456e-61,1.23456e-61,-0.22989707324425204,0.8634462198952123,-0.4490077516729478,228.65565978837287,707.0907352037739,857.9851008677331,0.28484896640958884,0.1039516635019633,0.05405413852643933,-4.541814091075802e-09,1.7058121502224302e-08,-8.870533690456394e-09,-0.050412263885304766,0.06236056374359429,0.14573161535405124,-4.7711053165111535e-09,1.791929228210175e-08,-9.318358171900227e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.2398812349025754,-0.2967358981096739,-0.6934479508071414,1.23456e-61,1.23456e-61,1.23456e-61,0.22989707324425204,-0.8634462198952123,0.4490077516729478,228.65565978837287,707.0907352037739,857.9851008677331,0.6545698581409908,0.5400822542624069,-0.52900799563345,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.17057304447293187,0.0,0,0,228.65565978837287,707.0907352037739,857.9851008677331,2.381906578781596,2.7744521543158287,4.115734899532587,0.2799883667884728,-0.34634888743520137,-0.8093895320163539,3.2438462904782797,2.4452657565961866,3.0413833633137237,-6.213736103713057e-09,2.3337517413617562e-08,-1.2135933868340272e-08,1.23456e-61,1.23456e-61,1.23456e-61,-0.10438789965876862,0.12912907536316634,0.3017641863817354,1.23456e-61,1.23456e-61,1.23456e-61,-0.22989707324425204,0.8634462198952123,-0.4490077516729478,228.65565978837287,707.0907352037739,857.9851008677331,0.28484896640958884,0.1039516635019633,0.05405413852643933,-4.541814091075802e-09,1.7058121502224302e-08,-8.870533690456394e-09,-0.050412263885304766,0.06236056374359429,0.14573161535405124,-4.7711053165111535e-09,1.791929228210175e-08,-9.318358171900227e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.2398812349025754,-0.2967358981096739,-0.6934479508071414,1.23456e-61,1.23456e-61,1.23456e-61,0.22989707324425204,-0.8634462198952123,0.4490077516729478,228.65565978837287,707.0907352037739,857.9851008677331,-0.30307337727327416,0.37490533465103393,0.8761235746390847,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.17057304447293187,0.0,0,0,228.65565978837287,707.0907352037739,857.9851008677331,2.381906578781596,2.7744521543158287,4.115734899532587,0.2799883667884728,-0.34634888743520137,-0.8093895320163539,3.2438462904782797,2.4452657565961866,3.0413833633137237,-6.213736103713057e-09,2.3337517413617562e-08,-1.2135933868340272e-08,1.23456e-61,1.23456e-61,1.23456e-61,-0.10438789965876862,0.12912907536316634,0.3017641863817354,1.23456e-61,1.23456e-61,1.23456e-61,-0.22989707324425204,0.8634462198952123,-0.4490077516729478,228.65565978837287,707.0907352037739,857.9851008677331,0.28484896640958884,0.1039516635019633,0.05405413852643933,-4.541814091075802e-09,1.7058121502224302e-08,-8.870533690456394e-09,-0.050412263885304766,0.06236056374359429,0.14573161535405124,-4.7711053165111535e-09,1.791929228210175e-08,-9.318358171900227e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.2398812349025754,-0.2967358981096739,-0.6934479508071414,1.23456e-61,1.23456e-61,1.23456e-61,0.22989707324425204,-0.8634462198952123,0.4490077516729478,228.65565978837287,707.0907352037739,857.9851008677331,0.30307337727327416,-0.37490533465103393,-0.8761235746390847,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[228.65565978837287,707.0907352037739,857.9851008677331],[0.28484896640958884,0.1039516635019633,0.05405413852643933],[-4.541814091075802e-09,1.7058121502224302e-08,-8.870533690456394e-09]],[[-0.050412263885304766,0.06236056374359429,0.14573161535405124],[-4.7711053165111535e-09,1.791929228210175e-08,-9.318358171900227e-09],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.2398812349025754,-0.2967358981096739,-0.6934479508071414],[1.23456e-61,1.23456e-61,1.23456e-61],[0.22989707324425204,-0.8634462198952123,0.4490077516729478]]],"normal":[-0.22989707324425204,0.8634462198952123,-0.4490077516729478]},{"op":"state"}]}}, +{"name":"adv_sing_038","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,0.0,0.0,0,0,-1.8898924187754949,-0.7537136655702521,-1.0233135009831784,0.00979888074417273,0.01160739513344197,0.03856916854061155,-0.0,0.0,0.0,0.011125013855059642,-0.002987621714241549,-0.031999074995876134,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.319685813542528,0.926676792946367,-0.19766411417930244,-1.8898924187754949,-0.7537136655702521,-1.0233135009831784,0.6877815830681108,3.1029261212408263,13.43458635819655,-0.08974665461510123,-0.028573172384724062,0.011193983583556076,-9.82358734966794,-3.1275921276060314,1.2252829621401267,-1.7398180109875323e-08,5.043229653723045e-08,-1.075742405220297e-08,1.23456e-61,1.23456e-61,1.23456e-61,0.606241375872049,0.19301265704764523,-0.07561570125172591,1.23456e-61,1.23456e-61,1.23456e-61,-0.319685813542528,0.926676792946367,-0.19766411417930244,-1.8898924187754949,-0.7537136655702521,-1.0233135009831784,-0.319685813542528,0.926676792946367,-0.19766411417930244,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.0,0.0,0,0,-1.8898924187754949,-0.7537136655702521,-1.0233135009831784,0.00979888074417273,0.01160739513344197,0.03856916854061155,-0.0,0.0,0.0,0.011125013855059642,-0.002987621714241549,-0.031999074995876134,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.319685813542528,0.926676792946367,-0.19766411417930244,-1.8898924187754949,-0.7537136655702521,-1.0233135009831784,0.6877815830681108,3.1029261212408263,13.43458635819655,-0.08974665461510123,-0.028573172384724062,0.011193983583556076,-9.82358734966794,-3.1275921276060314,1.2252829621401267,-1.7398180109875323e-08,5.043229653723045e-08,-1.075742405220297e-08,1.23456e-61,1.23456e-61,1.23456e-61,0.606241375872049,0.19301265704764523,-0.07561570125172591,1.23456e-61,1.23456e-61,1.23456e-61,-0.319685813542528,0.926676792946367,-0.19766411417930244,-1.8898924187754949,-0.7537136655702521,-1.0233135009831784,0.9462129655367348,0.30125127580318023,-0.11801988255007818,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.0,0.0,0,0,-1.8898924187754949,-0.7537136655702521,-1.0233135009831784,0.00979888074417273,0.01160739513344197,0.03856916854061155,-0.0,0.0,0.0,0.011125013855059642,-0.002987621714241549,-0.031999074995876134,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.319685813542528,0.926676792946367,-0.19766411417930244,-1.8898924187754949,-0.7537136655702521,-1.0233135009831784,0.6877815830681108,3.1029261212408263,13.43458635819655,-0.08974665461510123,-0.028573172384724062,0.011193983583556076,-9.82358734966794,-3.1275921276060314,1.2252829621401267,-1.7398180109875323e-08,5.043229653723045e-08,-1.075742405220297e-08,1.23456e-61,1.23456e-61,1.23456e-61,0.606241375872049,0.19301265704764523,-0.07561570125172591,1.23456e-61,1.23456e-61,1.23456e-61,-0.319685813542528,0.926676792946367,-0.19766411417930244,-1.8898924187754949,-0.7537136655702521,-1.0233135009831784,0.4739875851915427,0.6727646474286333,-0.568087579739706,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-1.8898924187754949,-0.7537136655702521,-1.0233135009831784],[0.6877815830681108,3.1029261212408263,13.43458635819655],[-0.08974665461510123,-0.028573172384724062,0.011193983583556076]],[[-9.82358734966794,-3.1275921276060314,1.2252829621401267],[-1.7398180109875323e-08,5.043229653723045e-08,-1.075742405220297e-08],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.606241375872049,0.19301265704764523,-0.07561570125172591],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.319685813542528,0.926676792946367,-0.19766411417930244]]],"normal":[-0.319685813542528,0.926676792946367,-0.19766411417930244]},{"op":"state"}]}}, +{"name":"adv_sing_039","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.9077035374187061,0,0,0.0,0.0,0,0,-588.0514406953556,42.98353360951212,286.728806560079,-2.3545389188472217,-0.0,-0.7123841254125998,-0.11864269143027911,-5.633717479289028e-12,-0.009367365832726446,0.1198985712022635,-0.0,-2.6396854263054768,0.0,-4.0122823123655527e-13,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.3399963214759839,-3.5518494858815643e-12,0.026844215068388015,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-588.0514406953556,42.98353360951212,286.728806560079,-0.8758827218048236,0.0,11.093522485174127,0.32346128037338007,114.22117168065704,0.02553870035694639,10.442019816724022,0.0,0.8244437013072484,0.07668915615633946,-31.188942752075448,-0.9713091227971025,1.23456e-61,1.23456e-61,1.23456e-61,-0.8625645052108882,8.516373415533534,-0.06810328708181142,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-588.0514406953556,42.98353360951212,286.728806560079,0.07870947945722113,-0.0,-0.9968975964679488,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.9077035374187061,0,0,0.0,0.0,0,0,-588.0514406953556,42.98353360951212,286.728806560079,-2.3545389188472217,-0.0,-0.7123841254125998,-0.11864269143027911,-5.633717479289028e-12,-0.009367365832726446,0.1198985712022635,-0.0,-2.6396854263054768,0.0,-4.0122823123655527e-13,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.3399963214759839,-3.5518494858815643e-12,0.026844215068388015,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-588.0514406953556,42.98353360951212,286.728806560079,-0.8758827218048236,0.0,11.093522485174127,0.32346128037338007,114.22117168065704,0.02553870035694639,10.442019816724022,0.0,0.8244437013072484,0.07668915615633946,-31.188942752075448,-0.9713091227971025,1.23456e-61,1.23456e-61,1.23456e-61,-0.8625645052108882,8.516373415533534,-0.06810328708181142,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-588.0514406953556,42.98353360951212,286.728806560079,0,-1,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.9077035374187061,0,0,0.0,0.0,0,0,-588.0514406953556,42.98353360951212,286.728806560079,-2.3545389188472217,-0.0,-0.7123841254125998,-0.11864269143027911,-5.633717479289028e-12,-0.009367365832726446,0.1198985712022635,-0.0,-2.6396854263054768,0.0,-4.0122823123655527e-13,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.3399963214759839,-3.5518494858815643e-12,0.026844215068388015,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-588.0514406953556,42.98353360951212,286.728806560079,-0.8758827218048236,0.0,11.093522485174127,0.32346128037338007,114.22117168065704,0.02553870035694639,10.442019816724022,0.0,0.8244437013072484,0.07668915615633946,-31.188942752075448,-0.9713091227971025,1.23456e-61,1.23456e-61,1.23456e-61,-0.8625645052108882,8.516373415533534,-0.06810328708181142,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-588.0514406953556,42.98353360951212,286.728806560079,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-588.0514406953556,42.98353360951212,286.728806560079],[-0.8758827218048236,0.0,11.093522485174127],[0.32346128037338007,114.22117168065704,0.02553870035694639]],[[10.442019816724022,0.0,0.8244437013072484],[0.07668915615633946,-31.188942752075448,-0.9713091227971025],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.8625645052108882,8.516373415533534,-0.06810328708181142],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_040","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,0.24024494993294843,2.0,0,0,-379.8138586414963,-775.974917342616,-443.7650840993632,0.4776538192333258,0.45202123106666436,0.2984873104821183,0.4034633978025081,-0.5027746610404704,0.11574692503882991,-0.3969979455950167,0.31178811799210693,0.16313167864940198,-0.009245396023736852,-0.09396625320033039,0.15709492003415293,1.23456e-61,1.23456e-61,1.23456e-61,-0.16308551774262536,0.0729633899168375,0.1504835130372964,1.23456e-61,1.23456e-61,1.23456e-61,0.05044231339120316,0.5126741115209065,-0.8571002440764982,-379.8138586414963,-775.974917342616,-443.7650840993632,-53.72682493233758,-5.634608529503264,-6.532285226934066,0.00014867673515722886,0.0015110867836179418,-0.0025262692653184485,-18.396211476648357,28.416178913493397,15.914464973085424,-0.5435065597162367,-0.514124353652186,-0.34005119940473977,1.23456e-61,1.23456e-61,1.23456e-61,-0.5883285969075306,0.46005879206572126,0.2447710745440644,1.23456e-61,1.23456e-61,1.23456e-61,0.05044231339120316,0.5126741115209065,-0.8571002440764982,-379.8138586414963,-775.974917342616,-443.7650840993632,0.05044231339120316,0.5126741115209065,-0.8571002440764982,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.24024494993294843,2.0,0,0,-379.8138586414963,-775.974917342616,-443.7650840993632,0.4776538192333258,0.45202123106666436,0.2984873104821183,0.4034633978025081,-0.5027746610404704,0.11574692503882991,-0.3969979455950167,0.31178811799210693,0.16313167864940198,-0.009245396023736852,-0.09396625320033039,0.15709492003415293,1.23456e-61,1.23456e-61,1.23456e-61,-0.16308551774262536,0.0729633899168375,0.1504835130372964,1.23456e-61,1.23456e-61,1.23456e-61,0.05044231339120316,0.5126741115209065,-0.8571002440764982,-379.8138586414963,-775.974917342616,-443.7650840993632,-53.72682493233758,-5.634608529503264,-6.532285226934066,0.00014867673515722886,0.0015110867836179418,-0.0025262692653184485,-18.396211476648357,28.416178913493397,15.914464973085424,-0.5435065597162367,-0.514124353652186,-0.34005119940473977,1.23456e-61,1.23456e-61,1.23456e-61,-0.5883285969075306,0.46005879206572126,0.2447710745440644,1.23456e-61,1.23456e-61,1.23456e-61,0.05044231339120316,0.5126741115209065,-0.8571002440764982,-379.8138586414963,-775.974917342616,-443.7650840993632,-0.7483455515633887,0.5877240769596642,0.3075050321819111,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.24024494993294843,2.0,0,0,-379.8138586414963,-775.974917342616,-443.7650840993632,0.4776538192333258,0.45202123106666436,0.2984873104821183,0.4034633978025081,-0.5027746610404704,0.11574692503882991,-0.3969979455950167,0.31178811799210693,0.16313167864940198,-0.009245396023736852,-0.09396625320033039,0.15709492003415293,1.23456e-61,1.23456e-61,1.23456e-61,-0.16308551774262536,0.0729633899168375,0.1504835130372964,1.23456e-61,1.23456e-61,1.23456e-61,0.05044231339120316,0.5126741115209065,-0.8571002440764982,-379.8138586414963,-775.974917342616,-443.7650840993632,-53.72682493233758,-5.634608529503264,-6.532285226934066,0.00014867673515722886,0.0015110867836179418,-0.0025262692653184485,-18.396211476648357,28.416178913493397,15.914464973085424,-0.5435065597162367,-0.514124353652186,-0.34005119940473977,1.23456e-61,1.23456e-61,1.23456e-61,-0.5883285969075306,0.46005879206572126,0.2447710745440644,1.23456e-61,1.23456e-61,1.23456e-61,0.05044231339120316,0.5126741115209065,-0.8571002440764982,-379.8138586414963,-775.974917342616,-443.7650840993632,0.7483455515633887,-0.5877240769596642,-0.3075050321819111,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-379.8138586414963,-775.974917342616,-443.7650840993632],[-53.72682493233758,-5.634608529503264,-6.532285226934066],[0.00014867673515722886,0.0015110867836179418,-0.0025262692653184485]],[[-18.396211476648357,28.416178913493397,15.914464973085424],[-0.5435065597162367,-0.514124353652186,-0.34005119940473977],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.5883285969075306,0.46005879206572126,0.2447710745440644],[1.23456e-61,1.23456e-61,1.23456e-61],[0.05044231339120316,0.5126741115209065,-0.8571002440764982]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_041","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,0.0,0.0,0,0,0.9152916583542825,0.37838344910156896,-0.12831486149239235,-0.3818152472174643,0.0,1.910338040199285,0.0,-3.795174310840178e-12,0.0,-1.2921199325253796,0.0,1.085023452671482,-0.05006821361989351,-2.5661126676184916e-12,0.06227160443811883,1.23456e-61,1.23456e-61,1.23456e-61,0.3975633438464313,-2.846849812876535e-12,0.31965269895884546,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.9152916583542825,0.37838344910156896,-0.12831486149239235,-12.867534646878061,0.0,16.0038070003322,-0.29167958288601903,0.0,-0.23451902028654087,16.696391783953,0.0,13.424393318002766,0.08428511096951387,0.0,-0.10482836735822972,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.9152916583542825,0.37838344910156896,-0.12831486149239235,0.6266080544085432,-0.0,-0.7793345534174269,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,0.0,0,0,0.9152916583542825,0.37838344910156896,-0.12831486149239235,-0.3818152472174643,0.0,1.910338040199285,0.0,-3.795174310840178e-12,0.0,-1.2921199325253796,0.0,1.085023452671482,-0.05006821361989351,-2.5661126676184916e-12,0.06227160443811883,1.23456e-61,1.23456e-61,1.23456e-61,0.3975633438464313,-2.846849812876535e-12,0.31965269895884546,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.9152916583542825,0.37838344910156896,-0.12831486149239235,-12.867534646878061,0.0,16.0038070003322,-0.29167958288601903,0.0,-0.23451902028654087,16.696391783953,0.0,13.424393318002766,0.08428511096951387,0.0,-0.10482836735822972,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.9152916583542825,0.37838344910156896,-0.12831486149239235,0.26595185017291795,0.9602817495754359,0.08443088784290881,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,0.0,0,0,0.9152916583542825,0.37838344910156896,-0.12831486149239235,-0.3818152472174643,0.0,1.910338040199285,0.0,-3.795174310840178e-12,0.0,-1.2921199325253796,0.0,1.085023452671482,-0.05006821361989351,-2.5661126676184916e-12,0.06227160443811883,1.23456e-61,1.23456e-61,1.23456e-61,0.3975633438464313,-2.846849812876535e-12,0.31965269895884546,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.9152916583542825,0.37838344910156896,-0.12831486149239235,-12.867534646878061,0.0,16.0038070003322,-0.29167958288601903,0.0,-0.23451902028654087,16.696391783953,0.0,13.424393318002766,0.08428511096951387,0.0,-0.10482836735822972,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.9152916583542825,0.37838344910156896,-0.12831486149239235,-0.6446491678254143,0.48084239587082717,-0.5943214961241126,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.9152916583542825,0.37838344910156896,-0.12831486149239235],[-12.867534646878061,0.0,16.0038070003322],[-0.29167958288601903,0.0,-0.23451902028654087]],[[16.696391783953,0.0,13.424393318002766],[0.08428511096951387,0.0,-0.10482836735822972],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_042","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,0.0,1.7639162730238536,0,0,0.00019939322395419822,-0.0009067830186970329,-0.0002658296887080387,3.5210900548407875,14.412907791210523,13.704121634530846,0.0,0.0,-0.0,-3.4601027282502597,9.731117157546521,-9.345389978830235,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.9528355898654042,0.05158455082597914,-0.2990708491343298,0.00019939322395419822,-0.0009067830186970329,-0.0002658296887080387,0.0016981648076262405,-0.006075551337539327,0.004362402030062368,-0.8052822749179408,0.6580107644401674,-0.48513704425935356,-0.002064010477502617,-0.005295536515912829,-0.007489297334925072,0.038131180457843306,0.002064343352938834,-0.011968407392961105,1.23456e-61,1.23456e-61,1.23456e-61,-0.8706163704141676,0.03399450895451631,0.18794045975104612,1.23456e-61,1.23456e-61,1.23456e-61,0.9528355898654042,0.05158455082597914,-0.2990708491343298,0.00019939322395419822,-0.0009067830186970329,-0.0002658296887080387,-0.24841880735396243,0.6986476149284272,-0.6709542505325196,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.0,1.7639162730238536,0,0,0.00019939322395419822,-0.0009067830186970329,-0.0002658296887080387,3.5210900548407875,14.412907791210523,13.704121634530846,0.0,0.0,-0.0,-3.4601027282502597,9.731117157546521,-9.345389978830235,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.9528355898654042,0.05158455082597914,-0.2990708491343298,0.00019939322395419822,-0.0009067830186970329,-0.0002658296887080387,0.0016981648076262405,-0.006075551337539327,0.004362402030062368,-0.8052822749179408,0.6580107644401674,-0.48513704425935356,-0.002064010477502617,-0.005295536515912829,-0.007489297334925072,0.038131180457843306,0.002064343352938834,-0.011968407392961105,1.23456e-61,1.23456e-61,1.23456e-61,-0.8706163704141676,0.03399450895451631,0.18794045975104612,1.23456e-61,1.23456e-61,1.23456e-61,0.9528355898654042,0.05158455082597914,-0.2990708491343298,0.00019939322395419822,-0.0009067830186970329,-0.0002658296887080387,-0.24841880735396243,0.6986476149284272,-0.6709542505325196,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.00019939322395419822,-0.0009067830186970329,-0.0002658296887080387],[0.0016981648076262405,-0.006075551337539327,0.004362402030062368],[-0.8052822749179408,0.6580107644401674,-0.48513704425935356]],[[-0.002064010477502617,-0.005295536515912829,-0.007489297334925072],[0.038131180457843306,0.002064343352938834,-0.011968407392961105],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.8706163704141676,0.03399450895451631,0.18794045975104612],[1.23456e-61,1.23456e-61,1.23456e-61],[0.9528355898654042,0.05158455082597914,-0.2990708491343298]]],"normal":[0.9528355898654042,0.05158455082597914,-0.2990708491343298]},{"op":"state"}]}}, +{"name":"adv_sing_043","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,2.0,0.0,0,0,0.0007917146818621144,-2.9179314435501924e-05,0.0007749177166590058,16.05177495817718,-3.3502186865451153,-65.91029007500714,-3661.4213349156626,2612.4018248379966,-1024.489933645075,-34.77737327728948,-51.02528332968968,-5.8760583718482176,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-3053.636809388544,2179.2279242638465,-854.4520274198575,1.23456e-61,1.23456e-61,1.23456e-61,0.7935996817289708,-0.566467971889082,0.22206661609423975,0.0007917146818621144,-2.9179314435501924e-05,0.0007749177166590058,-0.01728043583017917,-0.019143294431417244,0.012922632197492397,0.0,-0.0,0.0,0.07161342354375187,0.11772788502032995,0.04438616800568955,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.4728005847556755,-0.6936919474408785,-0.07988538444571254,1.23456e-61,1.23456e-61,1.23456e-61,0.7935996817289708,-0.566467971889082,0.22206661609423975,0.0007917146818621144,-2.9179314435501924e-05,0.0007749177166590058,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,2.0,0.0,0,0,0.0007917146818621144,-2.9179314435501924e-05,0.0007749177166590058,16.05177495817718,-3.3502186865451153,-65.91029007500714,-3661.4213349156626,2612.4018248379966,-1024.489933645075,-34.77737327728948,-51.02528332968968,-5.8760583718482176,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-3053.636809388544,2179.2279242638465,-854.4520274198575,1.23456e-61,1.23456e-61,1.23456e-61,0.7935996817289708,-0.566467971889082,0.22206661609423975,0.0007917146818621144,-2.9179314435501924e-05,0.0007749177166590058,-0.01728043583017917,-0.019143294431417244,0.012922632197492397,0.0,-0.0,0.0,0.07161342354375187,0.11772788502032995,0.04438616800568955,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.4728005847556755,-0.6936919474408785,-0.07988538444571254,1.23456e-61,1.23456e-61,1.23456e-61,0.7935996817289708,-0.566467971889082,0.22206661609423975,0.0007917146818621144,-2.9179314435501924e-05,0.0007749177166590058,0.7935996817289708,-0.566467971889082,0.22206661609423975,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0007917146818621144,-2.9179314435501924e-05,0.0007749177166590058],[-0.01728043583017917,-0.019143294431417244,0.012922632197492397],[0.0,-0.0,0.0]],[[0.07161342354375187,0.11772788502032995,0.04438616800568955],[0.0,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.4728005847556755,-0.6936919474408785,-0.07988538444571254],[1.23456e-61,1.23456e-61,1.23456e-61],[0.7935996817289708,-0.566467971889082,0.22206661609423975]]],"normal":[0.7935996817289708,-0.566467971889082,0.22206661609423975]},{"op":"state"}]}}, +{"name":"adv_sing_044","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,1.183906977353464,0.0,0,0,-1.7365810658247072,1.6823149711453516,-1.653274401458289,-0.678736287867982,-0.3336518297480327,-0.7789417168743012,0.43621072895411284,-0.788848420273959,-0.04219998925228188,-0.3039665885797743,0.549689141582299,0.02940960227280706,0.04250659207293215,0.02089929364690965,0.04870752711401352,1.23456e-61,1.23456e-61,1.23456e-61,-0.00024082295246944028,-0.0001477838949318768,0.0002731444973798483,1.23456e-61,1.23456e-61,1.23456e-61,-0.6127915826398772,-0.37604690888208425,0.6950361131379749,-1.7365810658247072,1.6823149711453516,-1.653274401458289,-5.584993838563385,-2.7454601244638512,-6.409536026146772,-4.8907986814312934e-05,-3.001297306000443e-05,5.547206916645939e-05,-5.770769135209122,10.435782258253758,0.558337762935251,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-8.7334398398621e-05,-5.359380168930654e-05,9.905580057860091e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.6127915826398772,0.37604690888208425,-0.6950361131379749,-1.7365810658247072,1.6823149711453516,-1.653274401458289,-0.6127915826398772,-0.37604690888208425,0.6950361131379749,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,1.183906977353464,0.0,0,0,-1.7365810658247072,1.6823149711453516,-1.653274401458289,-0.678736287867982,-0.3336518297480327,-0.7789417168743012,0.43621072895411284,-0.788848420273959,-0.04219998925228188,-0.3039665885797743,0.549689141582299,0.02940960227280706,0.04250659207293215,0.02089929364690965,0.04870752711401352,1.23456e-61,1.23456e-61,1.23456e-61,-0.00024082295246944028,-0.0001477838949318768,0.0002731444973798483,1.23456e-61,1.23456e-61,1.23456e-61,-0.6127915826398772,-0.37604690888208425,0.6950361131379749,-1.7365810658247072,1.6823149711453516,-1.653274401458289,-5.584993838563385,-2.7454601244638512,-6.409536026146772,-4.8907986814312934e-05,-3.001297306000443e-05,5.547206916645939e-05,-5.770769135209122,10.435782258253758,0.558337762935251,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-8.7334398398621e-05,-5.359380168930654e-05,9.905580057860091e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.6127915826398772,0.37604690888208425,-0.6950361131379749,-1.7365810658247072,1.6823149711453516,-1.653274401458289,-0.6127915826398772,-0.37604690888208425,0.6950361131379749,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-1.7365810658247072,1.6823149711453516,-1.653274401458289],[-5.584993838563385,-2.7454601244638512,-6.409536026146772],[-4.8907986814312934e-05,-3.001297306000443e-05,5.547206916645939e-05]],[[-5.770769135209122,10.435782258253758,0.558337762935251],[0.0,0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-8.7334398398621e-05,-5.359380168930654e-05,9.905580057860091e-05],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6127915826398772,0.37604690888208425,-0.6950361131379749]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_045","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.1830619936213962,1.3231445650652771,0,0,2.0,0.6261740454628921,0,0,-0.8906768438364241,-0.03274457448845869,-0.25250579682416396,-1.575632571564405,0.8186009857460391,0.0,-0.7366120311225741,-0.06936972320587156,0.0,0.2203166564656861,2.2996165930161645,0.0,-0.06338055515409069,0.6730152191493741,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.8906768438364241,-0.03274457448845869,-0.25250579682416396,-0.2295636708581002,2.437653691667411,0.0,0.0,0.0,14.987137498694006,2.0430746291424846,0.19240457055332708,0.0,-0.06967275612235747,0.7398298281930227,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,10.52793364753878,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.8906768438364241,-0.03274457448845869,-0.25250579682416396,0,0,1,0,0,0,0,0,0,0],[1,1,1,1,1,0.1830619936213962,1.3231445650652771,0,0,2.0,0.6261740454628921,0,0,-0.8906768438364241,-0.03274457448845869,-0.25250579682416396,-1.575632571564405,0.8186009857460391,0.0,-0.7366120311225741,-0.06936972320587156,0.0,0.2203166564656861,2.2996165930161645,0.0,-0.06338055515409069,0.6730152191493741,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.8906768438364241,-0.03274457448845869,-0.25250579682416396,-0.2295636708581002,2.437653691667411,0.0,0.0,0.0,14.987137498694006,2.0430746291424846,0.19240457055332708,0.0,-0.06967275612235747,0.7398298281930227,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,10.52793364753878,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.8906768438364241,-0.03274457448845869,-0.25250579682416396,-0.9955949052727906,-0.09375918405608685,0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.8906768438364241,-0.03274457448845869,-0.25250579682416396],[-0.2295636708581002,2.437653691667411,0.0],[0.0,0.0,14.987137498694006]],[[2.0430746291424846,0.19240457055332708,0.0],[-0.06967275612235747,0.7398298281930227,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,10.52793364753878],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_046","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,1.7955032830045754,0,0,2.0,0.4026527543956693,0,0,-0.6751084104078688,-1.0994999023561305,1.9840406113411757,-12.01690631550068,-21.007382955810062,0.0,-0.6529433818185314,0.37350485137271205,-294526.9923481685,-15.754812602422067,9.012265233600344,0.0,0.256859677500357,0.44902984757363057,-958985.0788704214,1.23456e-61,1.23456e-61,1.23456e-61,-0.12011077227367166,0.06870726834138831,-3129023.688102299,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.6751084104078688,-1.0994999023561305,1.9840406113411757,-0.005660618962989862,0.008282970611195232,0.0,-0.1743768211839231,0.09974921332038027,-0.6109296531303449,0.0030581816820902164,-0.010370951241277876,0.0,-0.2908500989341044,-0.5084502825126173,0.46348015377648916,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,-0.3516362177272918,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.6751084104078688,-1.0994999023561305,1.9840406113411757,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.7955032830045754,0,0,2.0,0.4026527543956693,0,0,-0.6751084104078688,-1.0994999023561305,1.9840406113411757,-12.01690631550068,-21.007382955810062,0.0,-0.6529433818185314,0.37350485137271205,-294526.9923481685,-15.754812602422067,9.012265233600344,0.0,0.256859677500357,0.44902984757363057,-958985.0788704214,1.23456e-61,1.23456e-61,1.23456e-61,-0.12011077227367166,0.06870726834138831,-3129023.688102299,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.6751084104078688,-1.0994999023561305,1.9840406113411757,-0.005660618962989862,0.008282970611195232,0.0,-0.1743768211839231,0.09974921332038027,-0.6109296531303449,0.0030581816820902164,-0.010370951241277876,0.0,-0.2908500989341044,-0.5084502825126173,0.46348015377648916,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,-0.3516362177272918,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.6751084104078688,-1.0994999023561305,1.9840406113411757,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.7955032830045754,0,0,2.0,0.4026527543956693,0,0,-0.6751084104078688,-1.0994999023561305,1.9840406113411757,-12.01690631550068,-21.007382955810062,0.0,-0.6529433818185314,0.37350485137271205,-294526.9923481685,-15.754812602422067,9.012265233600344,0.0,0.256859677500357,0.44902984757363057,-958985.0788704214,1.23456e-61,1.23456e-61,1.23456e-61,-0.12011077227367166,0.06870726834138831,-3129023.688102299,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.6751084104078688,-1.0994999023561305,1.9840406113411757,-0.005660618962989862,0.008282970611195232,0.0,-0.1743768211839231,0.09974921332038027,-0.6109296531303449,0.0030581816820902164,-0.010370951241277876,0.0,-0.2908500989341044,-0.5084502825126173,0.46348015377648916,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,-0.3516362177272918,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.6751084104078688,-1.0994999023561305,1.9840406113411757,-0.4965340848439768,-0.8680172248222696,0.0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.6751084104078688,-1.0994999023561305,1.9840406113411757],[-0.005660618962989862,0.008282970611195232,0.0],[-0.1743768211839231,0.09974921332038027,-0.6109296531303449]],[[0.0030581816820902164,-0.010370951241277876,0.0],[-0.2908500989341044,-0.5084502825126173,0.46348015377648916],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0,0.0,-0.3516362177272918],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_047","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.6297204278141582,0.07336485256463465,0,0,1.587674953440682,0.9071693341420408,0,0,0.3340267365745011,0.18578688478727634,-0.11165311947611989,-0.04078008385324359,-0.04953704883159067,-0.00884340159919083,-0.9375197543579968,0.669852264776372,0.571005375021614,-0.02918529934485158,0.031193976013288823,-0.040151807477473773,-4.313486439870941,1.6766021545081462,4.437914294620896,1.23456e-61,1.23456e-61,1.23456e-61,-19.908381966674963,12.124162809475628,23.890155669011914,1.23456e-61,1.23456e-61,1.23456e-61,-0.5964555189123704,0.3632401584422501,0.7157495380744747,0.3340267365745011,0.18578688478727634,-0.11165311947611989,-0.44913018916375286,-0.5455747514500698,-0.09739652933008124,-0.29094743895025676,0.3109721075308367,-0.4002735236024642,-0.5172625551884488,0.5528631229190161,-0.7116262980834047,0.5942122071018443,0.7218104003919117,0.12885783984290392,1.23456e-61,1.23456e-61,1.23456e-61,1.5300865108917071e-06,-9.318194719031653e-07,-1.8361112918893487e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.5964555189123704,-0.3632401584422501,-0.7157495380744747,0.3340267365745011,0.18578688478727634,-0.11165311947611989,-0.49782136845733127,0.5320838975496066,-0.6848799975730709,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.3340267365745011,0.18578688478727634,-0.11165311947611989],[-0.44913018916375286,-0.5455747514500698,-0.09739652933008124],[-0.29094743895025676,0.3109721075308367,-0.4002735236024642]],[[-0.5172625551884488,0.5528631229190161,-0.7116262980834047],[0.5942122071018443,0.7218104003919117,0.12885783984290392],[1.23456e-61,1.23456e-61,1.23456e-61]],[[1.5300865108917071e-06,-9.318194719031653e-07,-1.8361112918893487e-06],[1.23456e-61,1.23456e-61,1.23456e-61],[0.5964555189123704,-0.3632401584422501,-0.7157495380744747]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_048","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.45893124420711473,0.9875552331236734,0,0,0.913943171225966,0.6179354841376012,0,0,0.6937970538280782,-0.9013478982015393,0.43287297909483735,-0.0,0.20894573002959516,0.01868445839233651,440.0742708301542,0.008237779242094765,-0.013665109439884481,0.0,-0.05748832152917792,0.12900203015222536,-96.01606245183976,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,199.46430895637806,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.6937970538280782,-0.9013478982015393,0.43287297909483735,0.0,0.0021077755179647233,-0.008020768639953517,0.0,0.17287998278704328,-0.28677921747142576,0.0,-0.00812546339900738,-0.0126215401798648,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.6937970538280782,-0.9013478982015393,0.43287297909483735,-0.0,0.8564206610723248,0.5162786566268667,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.6937970538280782,-0.9013478982015393,0.43287297909483735],[0.0,0.0021077755179647233,-0.008020768639953517],[0.0,0.17287998278704328,-0.28677921747142576]],[[0.0,-0.00812546339900738,-0.0126215401798648],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_049","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.20742364971790406,0,0,2.0,0.7411639951621611,0,0,0.0007204716497625356,0.00016539247825786795,-0.0008665701742557533,0.4274989447931218,6.3766437387460755,-3.465588476449571,-0.0230889949483821,-0.020128543573760798,-0.0398844448109642,-11.061513423279745,3.3130499929197543,4.731477579829736,-0.06386606802206404,-0.8268633888083722,0.42967219888891045,1.23456e-61,1.23456e-61,1.23456e-61,-0.003398351098035658,-0.0029626173988375275,-0.005870387477709613,1.23456e-61,1.23456e-61,1.23456e-61,-0.4591220314209665,-0.40025379345401385,-0.7930976365426622,0.0007204716497625356,0.00016539247825786795,-0.0008665701742557533,0.03256031103292511,0.48567489115137397,-0.26395536194814634,-0.24211942912396653,0.07236064257317482,0.10327603532954477,-0.6408369283481348,0.1919380015810709,0.27411308405817886,-3.943531623828107e-05,-3.437895339411034e-05,-6.812144476729834e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.5272657426618966,0.1579082369242823,0.22550831611339656,1.23456e-61,1.23456e-61,1.23456e-61,-0.4591220314209665,-0.40025379345401385,-0.7930976365426622,0.0007204716497625356,0.00016539247825786795,-0.0008665701742557533,-0.4591220314209665,-0.40025379345401385,-0.7930976365426622,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0007204716497625356,0.00016539247825786795,-0.0008665701742557533],[0.03256031103292511,0.48567489115137397,-0.26395536194814634],[-0.24211942912396653,0.07236064257317482,0.10327603532954477]],[[-0.6408369283481348,0.1919380015810709,0.27411308405817886],[-3.943531623828107e-05,-3.437895339411034e-05,-6.812144476729834e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.5272657426618966,0.1579082369242823,0.22550831611339656],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.4591220314209665,-0.40025379345401385,-0.7930976365426622]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_050","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,0.39652347662417875,0.2865208213143575,0,0,337.4090750168337,-486.8131895037351,-836.0893372843937,-15.944667506886685,2.924368323540837,46.2451691145485,-0.0007760866720386028,-0.0019678691962648352,-0.00014314294285217713,-78.85398450799201,33.22885370475324,-29.288982994523604,0.00034351784455548636,0.0008710343947697754,6.335910274395642e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.0018476994302617292,-0.004685083411131283,-0.00034079329472211237,1.23456e-61,1.23456e-61,1.23456e-61,0.3660415801353996,0.9281462703236966,0.06751342456276058,337.4090750168337,-486.8131895037351,-836.0893372843937,-0.0032642943218193013,-0.009439455855893423,0.1474679037924263,-0.35964164915422825,0.1515519853946517,-0.13358282521464446,0.1429971218863299,-0.05867126494121766,0.03129189926240802,-2.3992075086883462e-09,-6.083504229486694e-09,-4.425145227717657e-10,1.23456e-61,1.23456e-61,1.23456e-61,-5.161625506155076e-09,-1.3087976127120283e-08,-9.520202980823063e-10,1.23456e-61,1.23456e-61,1.23456e-61,0.3660415801353996,0.9281462703236966,0.06751342456276058,337.4090750168337,-486.8131895037351,-836.0893372843937,0.2526192756233656,-0.7530212173150629,-0.6075710228910419,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[337.4090750168337,-486.8131895037351,-836.0893372843937],[-0.0032642943218193013,-0.009439455855893423,0.1474679037924263],[-0.35964164915422825,0.1515519853946517,-0.13358282521464446]],[[0.1429971218863299,-0.05867126494121766,0.03129189926240802],[-2.3992075086883462e-09,-6.083504229486694e-09,-4.425145227717657e-10],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-5.161625506155076e-09,-1.3087976127120283e-08,-9.520202980823063e-10],[1.23456e-61,1.23456e-61,1.23456e-61],[0.3660415801353996,0.9281462703236966,0.06751342456276058]]],"normal":[0.3660415801353996,0.9281462703236966,0.06751342456276058]},{"op":"state"}]}}, +{"name":"adv_sing_051","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.2756931219406549,0,0,2.0,2.0,0,0,-350.6511086064694,165.97771058542764,-950.3676052309542,0.06249009387564587,-0.05544407560090748,-0.03492858776442476,0.03979935976917476,-0.05907884907166545,0.022350480957551374,0.057896064289885016,-0.06344896441974286,-0.005267304639305807,-0.0015814126726000687,-0.0013915022340810763,-0.0006204680088372988,1.23456e-61,1.23456e-61,1.23456e-61,-0.15003894317437452,0.2039828561630428,-0.08291755509521422,1.23456e-61,1.23456e-61,1.23456e-61,0.7201549995057703,0.6336722274075017,0.28255315411309667,-350.6511086064694,165.97771058542764,-950.3676052309542,-15.065905222793782,2.3682846782590268,33.08783004179617,6.85294222457026e-05,6.0299785000708886e-05,2.6887551177677178e-05,-10.421861432460807,14.42041934053989,-5.777545234103774,0.00012573913585149662,0.00011063923508410482,4.933380932532268e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.19282154634579107,-0.26627124628674076,0.10685612355158604,1.23456e-61,1.23456e-61,1.23456e-61,-0.7201549995057703,-0.6336722274075017,-0.28255315411309667,-350.6511086064694,165.97771058542764,-950.3676052309542,0.41351872494506015,-0.06500306791914029,-0.9081722663024406,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.2756931219406549,0,0,2.0,2.0,0,0,-350.6511086064694,165.97771058542764,-950.3676052309542,0.06249009387564587,-0.05544407560090748,-0.03492858776442476,0.03979935976917476,-0.05907884907166545,0.022350480957551374,0.057896064289885016,-0.06344896441974286,-0.005267304639305807,-0.0015814126726000687,-0.0013915022340810763,-0.0006204680088372988,1.23456e-61,1.23456e-61,1.23456e-61,-0.15003894317437452,0.2039828561630428,-0.08291755509521422,1.23456e-61,1.23456e-61,1.23456e-61,0.7201549995057703,0.6336722274075017,0.28255315411309667,-350.6511086064694,165.97771058542764,-950.3676052309542,-15.065905222793782,2.3682846782590268,33.08783004179617,6.85294222457026e-05,6.0299785000708886e-05,2.6887551177677178e-05,-10.421861432460807,14.42041934053989,-5.777545234103774,0.00012573913585149662,0.00011063923508410482,4.933380932532268e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.19282154634579107,-0.26627124628674076,0.10685612355158604,1.23456e-61,1.23456e-61,1.23456e-61,-0.7201549995057703,-0.6336722274075017,-0.28255315411309667,-350.6511086064694,165.97771058542764,-950.3676052309542,0.5210689054387841,0.030808746645671174,-0.8529583910806848,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-350.6511086064694,165.97771058542764,-950.3676052309542],[-15.065905222793782,2.3682846782590268,33.08783004179617],[6.85294222457026e-05,6.0299785000708886e-05,2.6887551177677178e-05]],[[-10.421861432460807,14.42041934053989,-5.777545234103774],[0.00012573913585149662,0.00011063923508410482,4.933380932532268e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.19282154634579107,-0.26627124628674076,0.10685612355158604],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.7201549995057703,-0.6336722274075017,-0.28255315411309667]]],"normal":[0.7201549995057703,0.6336722274075017,0.28255315411309667]},{"op":"state"}]}}, +{"name":"adv_sing_052","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.013732420363314679,0,0,2.0,1.984196599071728,0,0,-1.3521298729343143,1.6523419041771445,1.1792796449446952,1.583826260288503,-7.101481680143828,8.954125416695181,-0.12907514202640802,-0.21884612697073688,-0.025109734994162726,1.8194384377656436,10.008789180891542,-5.7694161187357755,0.025818750960812622,-0.022553071601440735,0.06384413770687801,1.23456e-61,1.23456e-61,1.23456e-61,-0.0024558033563209154,-0.004397343267869566,-0.0005604933598734539,1.23456e-61,1.23456e-61,1.23456e-61,0.7849392926754574,-0.4102980180122559,-0.46424760982622953,-1.3521298729343143,1.6523419041771445,1.1792796449446952,-0.013022022377667006,-0.016561675853805923,-0.007380273336968578,0.3750821798154855,0.6361435728680448,0.07303564669218836,-0.0039880210874358585,0.00024565350017226924,-0.00695996172601643,-7.788959363771403e-05,4.0713907676102894e-05,4.60673303197676e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.4911933460456949,-0.8318220083723415,-0.09520270988435024,1.23456e-61,1.23456e-61,1.23456e-61,0.7849392926754574,-0.4102980180122559,-0.46424760982622953,-1.3521298729343143,1.6523419041771445,1.1792796449446952,-0.5059666181644782,-0.8569555458207024,-0.09810695077487144,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.013732420363314679,0,0,2.0,1.984196599071728,0,0,-1.3521298729343143,1.6523419041771445,1.1792796449446952,1.583826260288503,-7.101481680143828,8.954125416695181,-0.12907514202640802,-0.21884612697073688,-0.025109734994162726,1.8194384377656436,10.008789180891542,-5.7694161187357755,0.025818750960812622,-0.022553071601440735,0.06384413770687801,1.23456e-61,1.23456e-61,1.23456e-61,-0.0024558033563209154,-0.004397343267869566,-0.0005604933598734539,1.23456e-61,1.23456e-61,1.23456e-61,0.7849392926754574,-0.4102980180122559,-0.46424760982622953,-1.3521298729343143,1.6523419041771445,1.1792796449446952,-0.013022022377667006,-0.016561675853805923,-0.007380273336968578,0.3750821798154855,0.6361435728680448,0.07303564669218836,-0.0039880210874358585,0.00024565350017226924,-0.00695996172601643,-7.788959363771403e-05,4.0713907676102894e-05,4.60673303197676e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.4911933460456949,-0.8318220083723415,-0.09520270988435024,1.23456e-61,1.23456e-61,1.23456e-61,0.7849392926754574,-0.4102980180122559,-0.46424760982622953,-1.3521298729343143,1.6523419041771445,1.1792796449446952,0.7849392926754574,-0.4102980180122559,-0.46424760982622953,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-1.3521298729343143,1.6523419041771445,1.1792796449446952],[-0.013022022377667006,-0.016561675853805923,-0.007380273336968578],[0.3750821798154855,0.6361435728680448,0.07303564669218836]],[[-0.0039880210874358585,0.00024565350017226924,-0.00695996172601643],[-7.788959363771403e-05,4.0713907676102894e-05,4.60673303197676e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.4911933460456949,-0.8318220083723415,-0.09520270988435024],[1.23456e-61,1.23456e-61,1.23456e-61],[0.7849392926754574,-0.4102980180122559,-0.46424760982622953]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_053","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.6979781648319023,2.0,0,0,0.33024262596394416,2.0,0,0,-1.4009330589935276,1.9132399360363426,-1.7153265498951158,3.2301007240292843,0.3234094257402339,0.3036977821872805,1.2250862576068022,-7.011227516694644,-5.563606459739513,4.5178332017172,0.99105838715972,-0.25411582852823766,1.2722541220190864,-6.784943541787296,-5.322565639106676,1.23456e-61,1.23456e-61,1.23456e-61,1.2827794425043186,-5.711952010703879,-5.098535406157169,1.23456e-61,1.23456e-61,1.23456e-61,0.13560946991844927,-0.7760995122694182,-0.615856816738768,-1.4009330589935276,1.9132399360363426,-1.7153265498951158,-2.3248089161789154,-5.299216674990382,6.166130290145162,247393.52629447478,-1415842.2907732357,-1123511.6798196896,5.722254777835707,4.58950382387447,-4.523648462413161,-172035.04317786513,984560.2219907556,781275.690396498,1.23456e-61,1.23456e-61,1.23456e-61,96919.06279545752,-554672.4532615432,-440148.2103750545,1.23456e-61,1.23456e-61,1.23456e-61,0.13560946991844927,-0.7760995122694182,-0.615856816738768,-1.4009330589935276,1.9132399360363426,-1.7153265498951158,0.13560946991844927,-0.7760995122694182,-0.615856816738768,0,0,0,0,0,0,0],[1,1,1,1,1,1.6979781648319023,2.0,0,0,0.33024262596394416,2.0,0,0,-1.4009330589935276,1.9132399360363426,-1.7153265498951158,3.2301007240292843,0.3234094257402339,0.3036977821872805,1.2250862576068022,-7.011227516694644,-5.563606459739513,4.5178332017172,0.99105838715972,-0.25411582852823766,1.2722541220190864,-6.784943541787296,-5.322565639106676,1.23456e-61,1.23456e-61,1.23456e-61,1.2827794425043186,-5.711952010703879,-5.098535406157169,1.23456e-61,1.23456e-61,1.23456e-61,0.13560946991844927,-0.7760995122694182,-0.615856816738768,-1.4009330589935276,1.9132399360363426,-1.7153265498951158,-2.3248089161789154,-5.299216674990382,6.166130290145162,247393.52629447478,-1415842.2907732357,-1123511.6798196896,5.722254777835707,4.58950382387447,-4.523648462413161,-172035.04317786513,984560.2219907556,781275.690396498,1.23456e-61,1.23456e-61,1.23456e-61,96919.06279545752,-554672.4532615432,-440148.2103750545,1.23456e-61,1.23456e-61,1.23456e-61,0.13560946991844927,-0.7760995122694182,-0.615856816738768,-1.4009330589935276,1.9132399360363426,-1.7153265498951158,0.13560946991844927,-0.7760995122694182,-0.615856816738768,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-1.4009330589935276,1.9132399360363426,-1.7153265498951158],[-2.3248089161789154,-5.299216674990382,6.166130290145162],[247393.52629447478,-1415842.2907732357,-1123511.6798196896]],[[5.722254777835707,4.58950382387447,-4.523648462413161],[-172035.04317786513,984560.2219907556,781275.690396498],[1.23456e-61,1.23456e-61,1.23456e-61]],[[96919.06279545752,-554672.4532615432,-440148.2103750545],[1.23456e-61,1.23456e-61,1.23456e-61],[0.13560946991844927,-0.7760995122694182,-0.615856816738768]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_054","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.6962309718394242,0.5607768784240637,0,0,2.0,1.8780468331011684,0,0,1.599489588744753,-0.7827680394774892,0.9852548732310571,-1.3780312019952192,1.0493705032074634,2.2321161648961496,0.0,0.0,0.0,-1.4933132412049388,1.3311260719041071,2.181950268617781,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.8502609937040734,0.4072610650156195,0.3334586443739389,1.599489588744753,-0.7827680394774892,0.9852548732310571,3.9864803342749955,-19.15969656171152,13.235373474820198,0.0,0.0,0.0,1.0379871108347007,-9.919372325956248,9.468083190263878,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.06548153931440703,-0.05659637266326607,0.23608893942878226,1.23456e-61,1.23456e-61,1.23456e-61,0.8502609937040734,0.4072610650156195,0.3334586443739389,1.599489588744753,-0.7827680394774892,0.9852548732310571,0.9157050169378724,-0.38585602684338566,-0.1122472650154441,0,0,0,0,0,0,0],[1,1,1,1,1,0.6962309718394242,0.5607768784240637,0,0,2.0,1.8780468331011684,0,0,1.599489588744753,-0.7827680394774892,0.9852548732310571,-1.3780312019952192,1.0493705032074634,2.2321161648961496,0.0,0.0,0.0,-1.4933132412049388,1.3311260719041071,2.181950268617781,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.8502609937040734,0.4072610650156195,0.3334586443739389,1.599489588744753,-0.7827680394774892,0.9852548732310571,3.9864803342749955,-19.15969656171152,13.235373474820198,0.0,0.0,0.0,1.0379871108347007,-9.919372325956248,9.468083190263878,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.06548153931440703,-0.05659637266326607,0.23608893942878226,1.23456e-61,1.23456e-61,1.23456e-61,0.8502609937040734,0.4072610650156195,0.3334586443739389,1.599489588744753,-0.7827680394774892,0.9852548732310571,0.19701774584738097,-1.1102201405979308,0.8535779092923662,0,0,0,0,0,0,0],[1,1,1,1,1,0.6962309718394242,0.5607768784240637,0,0,2.0,1.8780468331011684,0,0,1.599489588744753,-0.7827680394774892,0.9852548732310571,-1.3780312019952192,1.0493705032074634,2.2321161648961496,0.0,0.0,0.0,-1.4933132412049388,1.3311260719041071,2.181950268617781,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.8502609937040734,0.4072610650156195,0.3334586443739389,1.599489588744753,-0.7827680394774892,0.9852548732310571,3.9864803342749955,-19.15969656171152,13.235373474820198,0.0,0.0,0.0,1.0379871108347007,-9.919372325956248,9.468083190263878,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.06548153931440703,-0.05659637266326607,0.23608893942878226,1.23456e-61,1.23456e-61,1.23456e-61,0.8502609937040734,0.4072610650156195,0.3334586443739389,1.599489588744753,-0.7827680394774892,0.9852548732310571,0.4574296486500129,-0.8851434357544133,-0.08531831384174378,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[1.599489588744753,-0.7827680394774892,0.9852548732310571],[3.9864803342749955,-19.15969656171152,13.235373474820198],[0.0,0.0,0.0]],[[1.0379871108347007,-9.919372325956248,9.468083190263878],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.06548153931440703,-0.05659637266326607,0.23608893942878226],[1.23456e-61,1.23456e-61,1.23456e-61],[0.8502609937040734,0.4072610650156195,0.3334586443739389]]],"normal":[0.8502609937040734,0.4072610650156195,0.3334586443739389]},{"op":"state"}]}}, +{"name":"adv_sing_055","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,0.0,0.7968296838459565,0,0,-0.00014598587074733072,-0.0005397377598934894,0.0006883915014343696,0.04876015845789386,0.07359711364195197,-0.0,0.0,0.0,3.1740547005718685e-10,0.13347132073996054,-0.014670904111319688,-0.0,-0.0,-0.0,-1.8618611558809754e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.7939145516010457,-0.4236974277175155,1.0921446826842271e-08,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00014598587074733072,-0.0005397377598934894,0.0006883915014343696,-0.009373279023641287,-0.017563435900883162,0.0,0.2978315595953544,-0.1589471630658059,3.94551393067894e-10,-0.011885917879859034,0.006343293269536369,0.0,0.0,0.0,-2.539763750957061e-11,1.23456e-61,1.23456e-61,1.23456e-61,0.7222540233267231,-0.3854535368132883,-1.8069663778457466e-10,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-0.00014598587074733072,-0.0005397377598934894,0.0006883915014343696,-0.8822254050894797,0.47082728745762326,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,0.7968296838459565,0,0,-0.00014598587074733072,-0.0005397377598934894,0.0006883915014343696,0.04876015845789386,0.07359711364195197,-0.0,0.0,0.0,3.1740547005718685e-10,0.13347132073996054,-0.014670904111319688,-0.0,-0.0,-0.0,-1.8618611558809754e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.7939145516010457,-0.4236974277175155,1.0921446826842271e-08,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00014598587074733072,-0.0005397377598934894,0.0006883915014343696,-0.009373279023641287,-0.017563435900883162,0.0,0.2978315595953544,-0.1589471630658059,3.94551393067894e-10,-0.011885917879859034,0.006343293269536369,0.0,0.0,0.0,-2.539763750957061e-11,1.23456e-61,1.23456e-61,1.23456e-61,0.7222540233267231,-0.3854535368132883,-1.8069663778457466e-10,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-0.00014598587074733072,-0.0005397377598934894,0.0006883915014343696,-0.8822254050894797,0.47082728745762326,0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.00014598587074733072,-0.0005397377598934894,0.0006883915014343696],[-0.009373279023641287,-0.017563435900883162,0.0],[0.2978315595953544,-0.1589471630658059,3.94551393067894e-10]],[[-0.011885917879859034,0.006343293269536369,0.0],[0.0,0.0,-2.539763750957061e-11],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.7222540233267231,-0.3854535368132883,-1.8069663778457466e-10],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,-1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_056","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,0.5703712209984089,0.8517626973566232,0,0,-492.60721519704356,-797.2379374602019,-194.3509701273376,5.011653010958429,-7.041221750602775,0.0,0.21423804937033453,-0.07171003773950999,3.8469018223766396e-06,0.18583830063043993,2.3175430593663036,-0.0,0.0,0.0,-3.6487125952355573e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.23569185367180384,0.07889108293963237,3.460733914546765e-06,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-492.60721519704356,-797.2379374602019,-194.3509701273376,6.253881270239697,18.683846314469644,0.0,0.0,-0.0,0.0007174448291856622,11.973868215158392,-4.0079086983874666,0.0,0.0,0.0,8.928313653490578e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.9250532285899855,0.30963501641379715,0.00018364806159713198,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-492.60721519704356,-797.2379374602019,-194.3509701273376,-0.3174120894370191,-0.9482877018496157,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.5703712209984089,0.8517626973566232,0,0,-492.60721519704356,-797.2379374602019,-194.3509701273376,5.011653010958429,-7.041221750602775,0.0,0.21423804937033453,-0.07171003773950999,3.8469018223766396e-06,0.18583830063043993,2.3175430593663036,-0.0,0.0,0.0,-3.6487125952355573e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.23569185367180384,0.07889108293963237,3.460733914546765e-06,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-492.60721519704356,-797.2379374602019,-194.3509701273376,6.253881270239697,18.683846314469644,0.0,0.0,-0.0,0.0007174448291856622,11.973868215158392,-4.0079086983874666,0.0,0.0,0.0,8.928313653490578e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.9250532285899855,0.30963501641379715,0.00018364806159713198,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-492.60721519704356,-797.2379374602019,-194.3509701273376,-0.9482877018496157,0.3174120894370191,-0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-492.60721519704356,-797.2379374602019,-194.3509701273376],[6.253881270239697,18.683846314469644,0.0],[0.0,-0.0,0.0007174448291856622]],[[11.973868215158392,-4.0079086983874666,0.0],[0.0,0.0,8.928313653490578e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.9250532285899855,0.30963501641379715,0.00018364806159713198],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,-1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_057","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,0.7284984226884912,1.700981629146227,0,0,719.6706412414966,-939.3552517149608,554.7324658387063,7.558776329383693,8.055991333701279,6.804708726811938,154833163.27146795,-593803.376950367,-171288092.0422876,-3.1198293626320903,-9.899481646494772,-2.7858019658754696,42619765.31676821,-163451.80547661718,-47149190.331647396,1.23456e-61,1.23456e-61,1.23456e-61,10428369.967660842,-39993.59333512198,-11536647.599340219,1.23456e-61,1.23456e-61,1.23456e-61,-0.6705733966203297,0.002571727731664851,0.7418387331230071,719.6706412414966,-939.3552517149608,554.7324658387063,1.7936657839304275,1.126567291854414,1.6174503692123698,-5.6735207563162575,0.021758618428246057,6.276475433450171,0.4325857710499283,-1.256409060704385,0.39538465538394585,-1.8867720624548963,-0.2642701116615156,1.2245275027111886,1.23456e-61,1.23456e-61,1.23456e-61,-3.7217100901503337,0.30895964362991957,3.911984155950339,1.23456e-61,1.23456e-61,1.23456e-61,0.6705733966203297,-0.002571727731664851,-0.7418387331230071,719.6706412414966,-939.3552517149608,554.7324658387063,-0.6705733966203297,0.002571727731664851,0.7418387331230071,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.7284984226884912,1.700981629146227,0,0,719.6706412414966,-939.3552517149608,554.7324658387063,7.558776329383693,8.055991333701279,6.804708726811938,154833163.27146795,-593803.376950367,-171288092.0422876,-3.1198293626320903,-9.899481646494772,-2.7858019658754696,42619765.31676821,-163451.80547661718,-47149190.331647396,1.23456e-61,1.23456e-61,1.23456e-61,10428369.967660842,-39993.59333512198,-11536647.599340219,1.23456e-61,1.23456e-61,1.23456e-61,-0.6705733966203297,0.002571727731664851,0.7418387331230071,719.6706412414966,-939.3552517149608,554.7324658387063,1.7936657839304275,1.126567291854414,1.6174503692123698,-5.6735207563162575,0.021758618428246057,6.276475433450171,0.4325857710499283,-1.256409060704385,0.39538465538394585,-1.8867720624548963,-0.2642701116615156,1.2245275027111886,1.23456e-61,1.23456e-61,1.23456e-61,-3.7217100901503337,0.30895964362991957,3.911984155950339,1.23456e-61,1.23456e-61,1.23456e-61,0.6705733966203297,-0.002571727731664851,-0.7418387331230071,719.6706412414966,-939.3552517149608,554.7324658387063,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[719.6706412414966,-939.3552517149608,554.7324658387063],[1.7936657839304275,1.126567291854414,1.6174503692123698],[-5.6735207563162575,0.021758618428246057,6.276475433450171]],[[0.4325857710499283,-1.256409060704385,0.39538465538394585],[-1.8867720624548963,-0.2642701116615156,1.2245275027111886],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-3.7217100901503337,0.30895964362991957,3.911984155950339],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6705733966203297,-0.002571727731664851,-0.7418387331230071]]],"normal":[0.6705733966203297,-0.002571727731664851,-0.7418387331230071]},{"op":"state"}]}}, +{"name":"adv_sing_058","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.2955300638709917,0,0,2.0,0.11061156593537858,0,0,1.212311372496731,1.822320396205496,1.3570384029513831,-1.0186828691734973,-0.39301838146572715,0.0,0.002768130971788998,-0.007174849151008323,-0.0011511599712798546,-0.3921497791501426,1.0164314978872218,0.0,0.0,0.0,0.00021702052349364275,1.23456e-61,1.23456e-61,1.23456e-61,0.22415798481761198,-0.5810056472945577,-4.2142763726751244e-05,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,1.212311372496731,1.822320396205496,1.3570384029513831,20.02497922098039,24.08398527614127,0.0,0.20367214130758743,-0.5279074238313101,3.081053324581001e-10,19.47239100304332,12.855806354824047,0.0,0.0,0.0,3.7777391165809473e-10,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,3.9057905491641256e-10,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,1.212311372496731,1.822320396205496,1.3570384029513831,0.9329715663645153,0.35995007480947017,-0.0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.2955300638709917,0,0,2.0,0.11061156593537858,0,0,1.212311372496731,1.822320396205496,1.3570384029513831,-1.0186828691734973,-0.39301838146572715,0.0,0.002768130971788998,-0.007174849151008323,-0.0011511599712798546,-0.3921497791501426,1.0164314978872218,0.0,0.0,0.0,0.00021702052349364275,1.23456e-61,1.23456e-61,1.23456e-61,0.22415798481761198,-0.5810056472945577,-4.2142763726751244e-05,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,1.212311372496731,1.822320396205496,1.3570384029513831,20.02497922098039,24.08398527614127,0.0,0.20367214130758743,-0.5279074238313101,3.081053324581001e-10,19.47239100304332,12.855806354824047,0.0,0.0,0.0,3.7777391165809473e-10,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,3.9057905491641256e-10,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,1.212311372496731,1.822320396205496,1.3570384029513831,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.212311372496731,1.822320396205496,1.3570384029513831],[20.02497922098039,24.08398527614127,0.0],[0.20367214130758743,-0.5279074238313101,3.081053324581001e-10]],[[19.47239100304332,12.855806354824047,0.0],[0.0,0.0,3.7777391165809473e-10],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,3.9057905491641256e-10],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_059","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,1.6424726803350165,0,0,0.0,2.0,0,0,-0.7423970447765595,-0.5497844151372913,-0.9345747544633851,-9.336784230945842,-0.07563937740151339,0.0,0.0,0.0,-16.77734237292264,0.9100063597434562,3.375114463164066,0.0,-0.0,0.0,-0.440275552782472,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-2.663481623119267,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.7423970447765595,-0.5497844151372913,-0.9345747544633851,-0.0384075932860089,0.028605859190317804,0.0,0.0,0.0,-0.000502389339230301,0.015468787108637602,0.02076913264319994,0.0,0.0,0.0,-0.00026617072707608346,1.23456e-61,1.23456e-61,1.23456e-61,-0.404102945324922,-0.542567921713435,0.00018043916679631318,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-0.7423970447765595,-0.5497844151372913,-0.9345747544633851,0.8019984962175241,-0.5973260517211936,-0.0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.6424726803350165,0,0,0.0,2.0,0,0,-0.7423970447765595,-0.5497844151372913,-0.9345747544633851,-9.336784230945842,-0.07563937740151339,0.0,0.0,0.0,-16.77734237292264,0.9100063597434562,3.375114463164066,0.0,-0.0,0.0,-0.440275552782472,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-2.663481623119267,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.7423970447765595,-0.5497844151372913,-0.9345747544633851,-0.0384075932860089,0.028605859190317804,0.0,0.0,0.0,-0.000502389339230301,0.015468787108637602,0.02076913264319994,0.0,0.0,0.0,-0.00026617072707608346,1.23456e-61,1.23456e-61,1.23456e-61,-0.404102945324922,-0.542567921713435,0.00018043916679631318,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-0.7423970447765595,-0.5497844151372913,-0.9345747544633851,0.12096037840868398,0.8875206807039441,0.4446072740948306,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.7423970447765595,-0.5497844151372913,-0.9345747544633851],[-0.0384075932860089,0.028605859190317804,0.0],[0.0,0.0,-0.000502389339230301]],[[0.015468787108637602,0.02076913264319994,0.0],[0.0,0.0,-0.00026617072707608346],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.404102945324922,-0.542567921713435,0.00018043916679631318],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,-1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_060","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,-0.00033430099584804806,0.00023976115611115345,-0.0006432751517376778,0.3884443887834045,-0.13235870070952577,0.6726299588905035,-0.14392093646944004,-0.0686517159874755,0.015290407643311184,-0.25287446178581285,0.1741093786163999,-0.6355262909180939,-0.1473814016139168,0.1847754092192188,-0.557612368649395,1.23456e-61,1.23456e-61,1.23456e-61,-1.8194608903509857e-07,4.233842833016584e-07,1.8838668916030058e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.36546842516562267,0.8504364566378991,0.3784054220384987,-0.00033430099584804806,0.00023976115611115345,-0.0006432751517376778,-18.032947740154942,-11.330402051535312,8.047754561487874,-250.5082598761049,583.3399984204974,259.5127568546687,-3.9582507855835676,3.062278929027204,-10.705156656673054,-135.88362833252313,316.19801722089306,140.69369112800607,1.23456e-61,1.23456e-61,1.23456e-61,19.502209366978413,-45.38118395083628,-20.19255634149594,1.23456e-61,1.23456e-61,1.23456e-61,-0.36546842516562267,0.8504364566378991,0.3784054220384987,-0.00033430099584804806,0.00023976115611115345,-0.0006432751517376778,-0.24335019601170538,0.3050940221782191,-0.9207053381686134,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,-0.00033430099584804806,0.00023976115611115345,-0.0006432751517376778,0.3884443887834045,-0.13235870070952577,0.6726299588905035,-0.14392093646944004,-0.0686517159874755,0.015290407643311184,-0.25287446178581285,0.1741093786163999,-0.6355262909180939,-0.1473814016139168,0.1847754092192188,-0.557612368649395,1.23456e-61,1.23456e-61,1.23456e-61,-1.8194608903509857e-07,4.233842833016584e-07,1.8838668916030058e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.36546842516562267,0.8504364566378991,0.3784054220384987,-0.00033430099584804806,0.00023976115611115345,-0.0006432751517376778,-18.032947740154942,-11.330402051535312,8.047754561487874,-250.5082598761049,583.3399984204974,259.5127568546687,-3.9582507855835676,3.062278929027204,-10.705156656673054,-135.88362833252313,316.19801722089306,140.69369112800607,1.23456e-61,1.23456e-61,1.23456e-61,19.502209366978413,-45.38118395083628,-20.19255634149594,1.23456e-61,1.23456e-61,1.23456e-61,-0.36546842516562267,0.8504364566378991,0.3784054220384987,-0.00033430099584804806,0.00023976115611115345,-0.0006432751517376778,0.8984506176234864,0.42857376360702604,-0.09545164660541361,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.00033430099584804806,0.00023976115611115345,-0.0006432751517376778],[-18.032947740154942,-11.330402051535312,8.047754561487874],[-250.5082598761049,583.3399984204974,259.5127568546687]],[[-3.9582507855835676,3.062278929027204,-10.705156656673054],[-135.88362833252313,316.19801722089306,140.69369112800607],[1.23456e-61,1.23456e-61,1.23456e-61]],[[19.502209366978413,-45.38118395083628,-20.19255634149594],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.36546842516562267,0.8504364566378991,0.3784054220384987]]],"normal":[0.36546842516562267,-0.8504364566378991,-0.3784054220384987]},{"op":"state"}]}}, +{"name":"adv_sing_061","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,2.0,0.0,0,0,625.064488583452,-971.5560859047814,-67.82254092401251,2.0082111031301855,0.5048510667137759,0.0,0.0,0.0,4.287786996941701e-06,0.7768312135459495,-3.090101558972309,0.0,0.39551598215303985,0.09943011727256869,-1.1655925855373112e-11,1.23456e-61,1.23456e-61,1.23456e-61,-0.23499576349093163,0.9347729113516929,1.0153210296907434e-05,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,625.064488583452,-971.5560859047814,-67.82254092401251,0.07447288626641355,0.22566802386997922,-0.0,0.0,-0.0,-564.7226778623169,-0.2108026636600134,-0.25962754935263754,0.0,-0.2612529225331214,-0.06567726690553385,742.8871880002444,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-1118.4422738901299,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,625.064488583452,-971.5560859047814,-67.82254092401251,0,0,1,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,2.0,0.0,0,0,625.064488583452,-971.5560859047814,-67.82254092401251,2.0082111031301855,0.5048510667137759,0.0,0.0,0.0,4.287786996941701e-06,0.7768312135459495,-3.090101558972309,0.0,0.39551598215303985,0.09943011727256869,-1.1655925855373112e-11,1.23456e-61,1.23456e-61,1.23456e-61,-0.23499576349093163,0.9347729113516929,1.0153210296907434e-05,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,625.064488583452,-971.5560859047814,-67.82254092401251,0.07447288626641355,0.22566802386997922,-0.0,0.0,-0.0,-564.7226778623169,-0.2108026636600134,-0.25962754935263754,0.0,-0.2612529225331214,-0.06567726690553385,742.8871880002444,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-1118.4422738901299,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,625.064488583452,-971.5560859047814,-67.82254092401251,-0.3135748484588155,-0.41019113808891294,-0.8563959625356445,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,2.0,0.0,0,0,625.064488583452,-971.5560859047814,-67.82254092401251,2.0082111031301855,0.5048510667137759,0.0,0.0,0.0,4.287786996941701e-06,0.7768312135459495,-3.090101558972309,0.0,0.39551598215303985,0.09943011727256869,-1.1655925855373112e-11,1.23456e-61,1.23456e-61,1.23456e-61,-0.23499576349093163,0.9347729113516929,1.0153210296907434e-05,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,625.064488583452,-971.5560859047814,-67.82254092401251,0.07447288626641355,0.22566802386997922,-0.0,0.0,-0.0,-564.7226778623169,-0.2108026636600134,-0.25962754935263754,0.0,-0.2612529225331214,-0.06567726690553385,742.8871880002444,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-1118.4422738901299,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,625.064488583452,-971.5560859047814,-67.82254092401251,-0.24380730016055407,0.9698236955181191,-0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[625.064488583452,-971.5560859047814,-67.82254092401251],[0.07447288626641355,0.22566802386997922,-0.0],[0.0,-0.0,-564.7226778623169]],[[-0.2108026636600134,-0.25962754935263754,0.0],[-0.2612529225331214,-0.06567726690553385,742.8871880002444],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-0.0,-1118.4422738901299],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_062","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,0.0,1.0459725547699883,0,0,-1.5080386730483908,-1.2603618083590429,-1.007884254232469,51.26356121337637,-43.93582645298469,40.9235906505054,3627.1762304487233,495.1553010909666,-4012.035863311425,-14.634912066982649,-33.21832807362233,-17.330761436840724,-710.3504712986205,-96.82627175752575,785.4429013514612,1.23456e-61,1.23456e-61,1.23456e-61,137.81854530041056,18.81396958914829,-152.4417098163034,1.23456e-61,1.23456e-61,1.23456e-61,-0.6678397103375281,-0.09116854319807151,0.7387004927759477,-1.5080386730483908,-1.2603618083590429,-1.007884254232469,42.99479239670736,32.886831803730075,42.92927181761564,-0.0,-0.0,0.0,-20.133329669248294,2.0147689518560004,-17.953356785213103,-0.5207756924097866,0.44633478246686814,-0.4157341150803742,1.23456e-61,1.23456e-61,1.23456e-61,0.026761488636262355,0.06074323543517967,0.03169113508349287,1.23456e-61,1.23456e-61,1.23456e-61,-0.6678397103375281,-0.09116854319807151,0.7387004927759477,-1.5080386730483908,-1.2603618083590429,-1.007884254232469,-0.36383272806295275,-0.8258276421067692,-0.4308531670101121,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.0,1.0459725547699883,0,0,-1.5080386730483908,-1.2603618083590429,-1.007884254232469,51.26356121337637,-43.93582645298469,40.9235906505054,3627.1762304487233,495.1553010909666,-4012.035863311425,-14.634912066982649,-33.21832807362233,-17.330761436840724,-710.3504712986205,-96.82627175752575,785.4429013514612,1.23456e-61,1.23456e-61,1.23456e-61,137.81854530041056,18.81396958914829,-152.4417098163034,1.23456e-61,1.23456e-61,1.23456e-61,-0.6678397103375281,-0.09116854319807151,0.7387004927759477,-1.5080386730483908,-1.2603618083590429,-1.007884254232469,42.99479239670736,32.886831803730075,42.92927181761564,-0.0,-0.0,0.0,-20.133329669248294,2.0147689518560004,-17.953356785213103,-0.5207756924097866,0.44633478246686814,-0.4157341150803742,1.23456e-61,1.23456e-61,1.23456e-61,0.026761488636262355,0.06074323543517967,0.03169113508349287,1.23456e-61,1.23456e-61,1.23456e-61,-0.6678397103375281,-0.09116854319807151,0.7387004927759477,-1.5080386730483908,-1.2603618083590429,-1.007884254232469,-0.36383272806295275,-0.8258276421067692,-0.4308531670101121,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.0,1.0459725547699883,0,0,-1.5080386730483908,-1.2603618083590429,-1.007884254232469,51.26356121337637,-43.93582645298469,40.9235906505054,3627.1762304487233,495.1553010909666,-4012.035863311425,-14.634912066982649,-33.21832807362233,-17.330761436840724,-710.3504712986205,-96.82627175752575,785.4429013514612,1.23456e-61,1.23456e-61,1.23456e-61,137.81854530041056,18.81396958914829,-152.4417098163034,1.23456e-61,1.23456e-61,1.23456e-61,-0.6678397103375281,-0.09116854319807151,0.7387004927759477,-1.5080386730483908,-1.2603618083590429,-1.007884254232469,42.99479239670736,32.886831803730075,42.92927181761564,-0.0,-0.0,0.0,-20.133329669248294,2.0147689518560004,-17.953356785213103,-0.5207756924097866,0.44633478246686814,-0.4157341150803742,1.23456e-61,1.23456e-61,1.23456e-61,0.026761488636262355,0.06074323543517967,0.03169113508349287,1.23456e-61,1.23456e-61,1.23456e-61,-0.6678397103375281,-0.09116854319807151,0.7387004927759477,-1.5080386730483908,-1.2603618083590429,-1.007884254232469,0.6493195417408567,-0.5565042697621605,0.518350393508029,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-1.5080386730483908,-1.2603618083590429,-1.007884254232469],[42.99479239670736,32.886831803730075,42.92927181761564],[-0.0,-0.0,0.0]],[[-20.133329669248294,2.0147689518560004,-17.953356785213103],[-0.5207756924097866,0.44633478246686814,-0.4157341150803742],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.026761488636262355,0.06074323543517967,0.03169113508349287],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6678397103375281,-0.09116854319807151,0.7387004927759477]]],"normal":[-0.6678397103375281,-0.09116854319807151,0.7387004927759477]},{"op":"state"}]}}, +{"name":"adv_sing_063","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,1.720064806991453,0.12103219632602769,0,0,-0.08859677547484113,-1.3438622097310198,-1.0415352225542893,-0.528466378765069,0.0,-2.3397627872504487,-0.5223864769167889,57537.66614087054,-0.3793772671263417,2.817529729279007,0.0,0.76890288802328,0.0,-32880.2009750127,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,85296.85426581575,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.08859677547484113,-1.3438622097310198,-1.0415352225542893,0.04227522794209618,0.0,0.011235614547678657,-0.550101450276113,-0.2222391361996926,-0.3995049528842075,-0.007241823091853412,0.0,0.040999351371315676,0.04107530729822763,-1.6887038355923,-0.056558963667819984,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-12.105746402585082,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.08859677547484113,-1.3438622097310198,-1.0415352225542893,0.7223000571615414,-0.18133100194835405,-0.6673842185404448,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,1.720064806991453,0.12103219632602769,0,0,-0.08859677547484113,-1.3438622097310198,-1.0415352225542893,-0.528466378765069,0.0,-2.3397627872504487,-0.5223864769167889,57537.66614087054,-0.3793772671263417,2.817529729279007,0.0,0.76890288802328,0.0,-32880.2009750127,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,85296.85426581575,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.08859677547484113,-1.3438622097310198,-1.0415352225542893,0.04227522794209618,0.0,0.011235614547678657,-0.550101450276113,-0.2222391361996926,-0.3995049528842075,-0.007241823091853412,0.0,0.040999351371315676,0.04107530729822763,-1.6887038355923,-0.056558963667819984,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-12.105746402585082,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.08859677547484113,-1.3438622097310198,-1.0415352225542893,0,-1,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.08859677547484113,-1.3438622097310198,-1.0415352225542893],[0.04227522794209618,0.0,0.011235614547678657],[-0.550101450276113,-0.2222391361996926,-0.3995049528842075]],[[-0.007241823091853412,0.0,0.040999351371315676],[0.04107530729822763,-1.6887038355923,-0.056558963667819984],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-12.105746402585082,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_064","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.027764629726285,2.0,0,0,2.0,0.0,0,0,-0.1312910253704178,-0.31045833031131975,-0.8101799089201602,-0.09549375233482202,0.07086724299238778,0.15638200974178423,0.001293072241598489,-0.00021997047426663708,0.0048614365852751,0.1105417146249072,-0.05691660136993378,0.055947545726599754,1.8853331681241428e-08,3.316128108803886e-08,-3.514938703357336e-09,1.23456e-61,1.23456e-61,1.23456e-61,-1.930945917480032e-08,-3.396356751049324e-08,3.5999772635376956e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.49215622012580523,0.8656576477173558,-0.09175560985538964,-0.1312910253704178,-0.31045833031131975,-0.8101799089201602,-0.0073356852880061985,0.0035349699319171188,-0.005996683889190403,-0.06824361506299614,0.011604840737636873,-0.2565598202404987,0.00030561929389394686,-0.00041877913773235464,-0.002311650776845348,0.011002902228428927,-0.006597366259275823,-0.00322513169912903,1.23456e-61,1.23456e-61,1.23456e-61,0.2393097705979738,-0.04069432978250076,0.8996771844175261,1.23456e-61,1.23456e-61,1.23456e-61,0.49215622012580523,0.8656576477173558,-0.09175560985538964,-0.1312910253704178,-0.31045833031131975,-0.8101799089201602,0.49215622012580523,0.8656576477173558,-0.09175560985538964,0,0,0,0,0,0,0],[1,1,1,1,1,1.027764629726285,2.0,0,0,2.0,0.0,0,0,-0.1312910253704178,-0.31045833031131975,-0.8101799089201602,-0.09549375233482202,0.07086724299238778,0.15638200974178423,0.001293072241598489,-0.00021997047426663708,0.0048614365852751,0.1105417146249072,-0.05691660136993378,0.055947545726599754,1.8853331681241428e-08,3.316128108803886e-08,-3.514938703357336e-09,1.23456e-61,1.23456e-61,1.23456e-61,-1.930945917480032e-08,-3.396356751049324e-08,3.5999772635376956e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.49215622012580523,0.8656576477173558,-0.09175560985538964,-0.1312910253704178,-0.31045833031131975,-0.8101799089201602,-0.0073356852880061985,0.0035349699319171188,-0.005996683889190403,-0.06824361506299614,0.011604840737636873,-0.2565598202404987,0.00030561929389394686,-0.00041877913773235464,-0.002311650776845348,0.011002902228428927,-0.006597366259275823,-0.00322513169912903,1.23456e-61,1.23456e-61,1.23456e-61,0.2393097705979738,-0.04069432978250076,0.8996771844175261,1.23456e-61,1.23456e-61,1.23456e-61,0.49215622012580523,0.8656576477173558,-0.09175560985538964,-0.1312910253704178,-0.31045833031131975,-0.8101799089201602,-0.25681149780742063,0.04367048251289009,-0.9654743619335526,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.1312910253704178,-0.31045833031131975,-0.8101799089201602],[-0.0073356852880061985,0.0035349699319171188,-0.005996683889190403],[-0.06824361506299614,0.011604840737636873,-0.2565598202404987]],[[0.00030561929389394686,-0.00041877913773235464,-0.002311650776845348],[0.011002902228428927,-0.006597366259275823,-0.00322513169912903],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.2393097705979738,-0.04069432978250076,0.8996771844175261],[1.23456e-61,1.23456e-61,1.23456e-61],[0.49215622012580523,0.8656576477173558,-0.09175560985538964]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_065","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,0.3283668940116069,2.0,0,0,0.21943151190960464,-0.9379064361184835,-1.9247535025337097,-3.88947840922377,-2.3453644192436265,-3.0302908198269396,133.60295477379404,-15.401867906525572,-159.56317191065193,-2.0450017958901068,6.402137730159556,-2.3302567731364627,0.20760351599561697,0.12518539724280608,0.1617438027663107,1.23456e-61,1.23456e-61,1.23456e-61,226.6055708344832,-25.637372131169656,-271.0130953101387,1.23456e-61,1.23456e-61,1.23456e-61,-0.640228617994288,0.07380612667602172,0.7646306117114376,0.21943151190960464,-0.9379064361184835,-1.9247535025337097,-9.791150404934115,7.785279344134741,-8.949649544490299,-11.175789751035317,1.4181478819747428,13.246886766254137,11.337903937252754,0.6877065115009975,9.426896470521909,-11.583046975727788,1.5026088163315015,14.293386397550695,1.23456e-61,1.23456e-61,1.23456e-61,-12.54112467853931,1.4457520496097422,14.977974375063742,1.23456e-61,1.23456e-61,1.23456e-61,-0.640228617994288,0.07380612667602172,0.7646306117114376,0.21943151190960464,-0.9379064361184835,-1.9247535025337097,-0.640228617994288,0.07380612667602172,0.7646306117114376,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.3283668940116069,2.0,0,0,0.21943151190960464,-0.9379064361184835,-1.9247535025337097,-3.88947840922377,-2.3453644192436265,-3.0302908198269396,133.60295477379404,-15.401867906525572,-159.56317191065193,-2.0450017958901068,6.402137730159556,-2.3302567731364627,0.20760351599561697,0.12518539724280608,0.1617438027663107,1.23456e-61,1.23456e-61,1.23456e-61,226.6055708344832,-25.637372131169656,-271.0130953101387,1.23456e-61,1.23456e-61,1.23456e-61,-0.640228617994288,0.07380612667602172,0.7646306117114376,0.21943151190960464,-0.9379064361184835,-1.9247535025337097,-9.791150404934115,7.785279344134741,-8.949649544490299,-11.175789751035317,1.4181478819747428,13.246886766254137,11.337903937252754,0.6877065115009975,9.426896470521909,-11.583046975727788,1.5026088163315015,14.293386397550695,1.23456e-61,1.23456e-61,1.23456e-61,-12.54112467853931,1.4457520496097422,14.977974375063742,1.23456e-61,1.23456e-61,1.23456e-61,-0.640228617994288,0.07380612667602172,0.7646306117114376,0.21943151190960464,-0.9379064361184835,-1.9247535025337097,-0.640228617994288,0.07380612667602172,0.7646306117114376,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.3283668940116069,2.0,0,0,0.21943151190960464,-0.9379064361184835,-1.9247535025337097,-3.88947840922377,-2.3453644192436265,-3.0302908198269396,133.60295477379404,-15.401867906525572,-159.56317191065193,-2.0450017958901068,6.402137730159556,-2.3302567731364627,0.20760351599561697,0.12518539724280608,0.1617438027663107,1.23456e-61,1.23456e-61,1.23456e-61,226.6055708344832,-25.637372131169656,-271.0130953101387,1.23456e-61,1.23456e-61,1.23456e-61,-0.640228617994288,0.07380612667602172,0.7646306117114376,0.21943151190960464,-0.9379064361184835,-1.9247535025337097,-9.791150404934115,7.785279344134741,-8.949649544490299,-11.175789751035317,1.4181478819747428,13.246886766254137,11.337903937252754,0.6877065115009975,9.426896470521909,-11.583046975727788,1.5026088163315015,14.293386397550695,1.23456e-61,1.23456e-61,1.23456e-61,-12.54112467853931,1.4457520496097422,14.977974375063742,1.23456e-61,1.23456e-61,1.23456e-61,-0.640228617994288,0.07380612667602172,0.7646306117114376,0.21943151190960464,-0.9379064361184835,-1.9247535025337097,0.287488578915473,-0.9000194922878243,0.3275900341816411,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.21943151190960464,-0.9379064361184835,-1.9247535025337097],[-9.791150404934115,7.785279344134741,-8.949649544490299],[-11.175789751035317,1.4181478819747428,13.246886766254137]],[[11.337903937252754,0.6877065115009975,9.426896470521909],[-11.583046975727788,1.5026088163315015,14.293386397550695],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-12.54112467853931,1.4457520496097422,14.977974375063742],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.640228617994288,0.07380612667602172,0.7646306117114376]]],"normal":[0.640228617994288,-0.07380612667602172,-0.7646306117114376]},{"op":"state"}]}}, +{"name":"adv_sing_066","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.8028886089888445,0.0,0,0,2.0,2.0,0,0,-0.2452282789511262,1.6442021717128186,1.7266788017400425,-3.4189300538308696,-1.714824744572562,0.0,0.7283025781514889,-0.466084914121921,-8.372697411674823e-06,2.7475942468006904,2.0877235226541844,0.0,-0.4621942469391954,-0.7222230358748488,9.414600610590132e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.5833143192494203,0.37329814907905257,-9.883142139366444e-06,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.2452282789511262,1.6442021717128186,1.7266788017400425,0.0270911843220198,0.04233258530599638,0.0,-0.6028306218678763,0.38578781271993623,-0.0025259800643878134,0.024480109527511597,-0.015666304210792167,0.0,0.0,0.0,1.2237050391469259e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.3230915079148222,-0.20676581717204787,-0.0008447933150604328,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-0.2452282789511262,1.6442021717128186,1.7266788017400425,0.8422864892043825,-0.5390301198483769,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,1.8028886089888445,0.0,0,0,2.0,2.0,0,0,-0.2452282789511262,1.6442021717128186,1.7266788017400425,-3.4189300538308696,-1.714824744572562,0.0,0.7283025781514889,-0.466084914121921,-8.372697411674823e-06,2.7475942468006904,2.0877235226541844,0.0,-0.4621942469391954,-0.7222230358748488,9.414600610590132e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.5833143192494203,0.37329814907905257,-9.883142139366444e-06,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.2452282789511262,1.6442021717128186,1.7266788017400425,0.0270911843220198,0.04233258530599638,0.0,-0.6028306218678763,0.38578781271993623,-0.0025259800643878134,0.024480109527511597,-0.015666304210792167,0.0,0.0,0.0,1.2237050391469259e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.3230915079148222,-0.20676581717204787,-0.0008447933150604328,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-0.2452282789511262,1.6442021717128186,1.7266788017400425,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.8028886089888445,0.0,0,0,2.0,2.0,0,0,-0.2452282789511262,1.6442021717128186,1.7266788017400425,-3.4189300538308696,-1.714824744572562,0.0,0.7283025781514889,-0.466084914121921,-8.372697411674823e-06,2.7475942468006904,2.0877235226541844,0.0,-0.4621942469391954,-0.7222230358748488,9.414600610590132e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.5833143192494203,0.37329814907905257,-9.883142139366444e-06,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.2452282789511262,1.6442021717128186,1.7266788017400425,0.0270911843220198,0.04233258530599638,0.0,-0.6028306218678763,0.38578781271993623,-0.0025259800643878134,0.024480109527511597,-0.015666304210792167,0.0,0.0,0.0,1.2237050391469259e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.3230915079148222,-0.20676581717204787,-0.0008447933150604328,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-0.2452282789511262,1.6442021717128186,1.7266788017400425,-0.8422864892043825,0.5390301198483769,-0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.2452282789511262,1.6442021717128186,1.7266788017400425],[0.0270911843220198,0.04233258530599638,0.0],[-0.6028306218678763,0.38578781271993623,-0.0025259800643878134]],[[0.024480109527511597,-0.015666304210792167,0.0],[0.0,0.0,1.2237050391469259e-09],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.3230915079148222,-0.20676581717204787,-0.0008447933150604328],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,-1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_067","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,0.7503997912052178,0.0538020496001379,0,0,0.419028192983097,0.12977612064995325,0.5643014310322036,-0.03586982118332219,0.04113924909935261,-0.09980627625450299,0.30070522807443334,0.1011429838330702,0.35436958379184363,0.005265205051466224,-0.02932581429913108,0.03977337469859817,-0.0005720642444370034,0.00039942811681859886,0.0003702373872178816,1.23456e-61,1.23456e-61,1.23456e-61,0.0008447495956311925,-0.0005898231596318497,-0.0005467181110884761,1.23456e-61,1.23456e-61,1.23456e-61,0.7242619164981805,-0.5056959532141406,-0.4687390310324331,0.419028192983097,0.12977612064995325,0.5643014310322036,-0.10734216716623499,-0.32384103909725015,0.18351631408587415,-5.158738820523584e-05,3.601947425098416e-05,3.338712392573656e-05,0.19680059895621538,0.06645703705831893,0.23238543635912282,4.371555100686484e-05,-3.052318054162584e-05,-2.8292506554924193e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.3391107892242259,-0.11447514069490901,-0.40036023992855135,1.23456e-61,1.23456e-61,1.23456e-61,-0.7242619164981805,0.5056959532141406,0.4687390310324331,0.419028192983097,0.12977612064995325,0.5643014310322036,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.7503997912052178,0.0538020496001379,0,0,0.419028192983097,0.12977612064995325,0.5643014310322036,-0.03586982118332219,0.04113924909935261,-0.09980627625450299,0.30070522807443334,0.1011429838330702,0.35436958379184363,0.005265205051466224,-0.02932581429913108,0.03977337469859817,-0.0005720642444370034,0.00039942811681859886,0.0003702373872178816,1.23456e-61,1.23456e-61,1.23456e-61,0.0008447495956311925,-0.0005898231596318497,-0.0005467181110884761,1.23456e-61,1.23456e-61,1.23456e-61,0.7242619164981805,-0.5056959532141406,-0.4687390310324331,0.419028192983097,0.12977612064995325,0.5643014310322036,-0.10734216716623499,-0.32384103909725015,0.18351631408587415,-5.158738820523584e-05,3.601947425098416e-05,3.338712392573656e-05,0.19680059895621538,0.06645703705831893,0.23238543635912282,4.371555100686484e-05,-3.052318054162584e-05,-2.8292506554924193e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.3391107892242259,-0.11447514069490901,-0.40036023992855135,1.23456e-61,1.23456e-61,1.23456e-61,-0.7242619164981805,0.5056959532141406,0.4687390310324331,0.419028192983097,0.12977612064995325,0.5643014310322036,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.419028192983097,0.12977612064995325,0.5643014310322036],[-0.10734216716623499,-0.32384103909725015,0.18351631408587415],[-5.158738820523584e-05,3.601947425098416e-05,3.338712392573656e-05]],[[0.19680059895621538,0.06645703705831893,0.23238543635912282],[4.371555100686484e-05,-3.052318054162584e-05,-2.8292506554924193e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.3391107892242259,-0.11447514069490901,-0.40036023992855135],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.7242619164981805,0.5056959532141406,0.4687390310324331]]],"normal":[0.7242619164981805,-0.5056959532141406,-0.4687390310324331]},{"op":"state"}]}}, +{"name":"adv_sing_068","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.836231681881789,2.0,0,0,0.0,0.0,0,0,-0.9428584329259779,-1.4407977562417247,0.6291775490562848,0.0,-0.23570095091047918,0.4726632707595245,-0.08369082771917806,-0.18295579472785814,-0.09123377562771973,0.0,0.27697890133833897,0.13811987193902514,-1.7043152963544618e-06,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.028740793252743903,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.9428584329259779,-1.4407977562417247,0.6291775490562848,0.0,-0.08343705533171114,0.1673206294810779,0.0,-0.5044392083102021,-0.2515465203890037,0.0,0.1299897950730335,0.06482144943934152,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.9428584329259779,-1.4407977562417247,0.6291775490562848,-0.0,0.4462580688270321,-0.8949043166767986,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.9428584329259779,-1.4407977562417247,0.6291775490562848],[0.0,-0.08343705533171114,0.1673206294810779],[0.0,-0.5044392083102021,-0.2515465203890037]],[[0.0,0.1299897950730335,0.06482144943934152],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_069","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,0.0,1.8886248013106575,0,0,-0.27260295636988485,0.3021964901801204,-0.3130368930240941,-9.456734962650197,-16.325145634868353,6.2858865171761975,-0.0,0.0,0.0,-22.363657269037244,6.346622826635041,-17.161881201586752,-0.07012012291685885,-0.12104825006450101,0.04660880705303157,1.23456e-61,1.23456e-61,1.23456e-61,0.7620755904821718,-0.21627081295293635,0.5848171698012766,1.23456e-61,1.23456e-61,1.23456e-61,-0.4181526838222077,0.5270863328099089,0.7398164169422619,-0.27260295636988485,0.3021964901801204,-0.3130368930240941,-23.33861181068581,-40.28940625172492,15.513162406455574,-0.0009767698736746972,0.0012312298130156144,0.0017281495876429957,-26.614931864965747,7.553099748912389,-20.424311344068972,0.2538946778264693,0.438658512178406,-0.1686303148740464,1.23456e-61,1.23456e-61,1.23456e-61,0.11539629791572908,-0.03273395227039525,0.08859301953978167,1.23456e-61,1.23456e-61,1.23456e-61,-0.4181526838222077,0.5270863328099089,0.7398164169422619,-0.27260295636988485,0.3021964901801204,-0.3130368930240941,-0.29404843614481435,0.30663373139230216,-0.9052686186835499,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.0,1.8886248013106575,0,0,-0.27260295636988485,0.3021964901801204,-0.3130368930240941,-9.456734962650197,-16.325145634868353,6.2858865171761975,-0.0,0.0,0.0,-22.363657269037244,6.346622826635041,-17.161881201586752,-0.07012012291685885,-0.12104825006450101,0.04660880705303157,1.23456e-61,1.23456e-61,1.23456e-61,0.7620755904821718,-0.21627081295293635,0.5848171698012766,1.23456e-61,1.23456e-61,1.23456e-61,-0.4181526838222077,0.5270863328099089,0.7398164169422619,-0.27260295636988485,0.3021964901801204,-0.3130368930240941,-23.33861181068581,-40.28940625172492,15.513162406455574,-0.0009767698736746972,0.0012312298130156144,0.0017281495876429957,-26.614931864965747,7.553099748912389,-20.424311344068972,0.2538946778264693,0.438658512178406,-0.1686303148740464,1.23456e-61,1.23456e-61,1.23456e-61,0.11539629791572908,-0.03273395227039525,0.08859301953978167,1.23456e-61,1.23456e-61,1.23456e-61,-0.4181526838222077,0.5270863328099089,0.7398164169422619,-0.27260295636988485,0.3021964901801204,-0.3130368930240941,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.27260295636988485,0.3021964901801204,-0.3130368930240941],[-23.33861181068581,-40.28940625172492,15.513162406455574],[-0.0009767698736746972,0.0012312298130156144,0.0017281495876429957]],[[-26.614931864965747,7.553099748912389,-20.424311344068972],[0.2538946778264693,0.438658512178406,-0.1686303148740464],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.11539629791572908,-0.03273395227039525,0.08859301953978167],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.4181526838222077,0.5270863328099089,0.7398164169422619]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_070","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.2468205933970404,1.1038967306890923,0,0,2.0,2.0,0,0,-0.0006797338155242804,-0.0001641102047554135,-0.00011734166011889236,0.5980011262685299,0.5182932914170494,-0.32560784990689906,0.4055245438092593,-0.44487072486121043,0.6659927378045969,-0.1339200969369353,-0.05445651571969471,0.26639063820874004,-0.14343754103921913,0.13790617267508215,-0.04391775859284109,1.23456e-61,1.23456e-61,1.23456e-61,0.04003380767951322,-0.038489987730495445,0.012257565826092616,1.23456e-61,1.23456e-61,1.23456e-61,0.7039273349363814,-0.6767818515231254,0.21552872796519248,-0.0006797338155242804,-0.0001641102047554135,-0.00011734166011889236,-0.02294575352585311,-0.02117870239361139,0.008438697364970398,-0.1422632819717407,0.06425463788136573,0.6710961461906063,0.01831530687266826,0.050733929016856916,0.09949094704031711,-0.6613270209806964,-0.7108470176020035,-0.07213171930808604,1.23456e-61,1.23456e-61,1.23456e-61,0.1029587091004141,-0.046763703576980176,-0.4831097538197941,1.23456e-61,1.23456e-61,1.23456e-61,0.7039273349363814,-0.6767818515231254,0.21552872796519248,-0.0006797338155242804,-0.0001641102047554135,-0.00011734166011889236,-0.6792841287471565,-0.7301255811629714,-0.07409256483379359,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0006797338155242804,-0.0001641102047554135,-0.00011734166011889236],[-0.02294575352585311,-0.02117870239361139,0.008438697364970398],[-0.1422632819717407,0.06425463788136573,0.6710961461906063]],[[0.01831530687266826,0.050733929016856916,0.09949094704031711],[-0.6613270209806964,-0.7108470176020035,-0.07213171930808604],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.1029587091004141,-0.046763703576980176,-0.4831097538197941],[1.23456e-61,1.23456e-61,1.23456e-61],[0.7039273349363814,-0.6767818515231254,0.21552872796519248]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_071","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,0.8983435408578351,0.5936724441431585,0,0,1.7486285676339492,-0.6143020602098268,-1.617770668841299,19.513917257238514,-18.2263633493076,-2.1122645016128505,0.22442903190610877,0.28679581766263723,-0.4013489884414242,-12.104482537170023,-15.469518410347654,21.657890230529535,0.00023821292845924372,0.00022129365682129566,0.0002911987485310585,1.23456e-61,1.23456e-61,1.23456e-61,-0.1476906494545283,-0.18884985061363135,0.2651291456138227,1.23456e-61,1.23456e-61,1.23456e-61,0.5457616664725451,0.5069984895771817,0.6671557051959959,1.7486285676339492,-0.6143020602098268,-1.617770668841299,2.4455090077369745,-1.8785358529220095,-0.5729550514385733,8.838138142835074e-06,8.21040202045278e-06,1.080400960260441e-05,-14.550541013704862,4.844606159430582,8.221348425219139,-4.837042892033843e-05,-4.493487892126571e-05,-5.9129487465760976e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.19866611267260095,0.2537913189027001,-0.35456672596561156,1.23456e-61,1.23456e-61,1.23456e-61,-0.5457616664725451,-0.5069984895771817,-0.6671557051959959,1.7486285676339492,-0.6143020602098268,-1.617770668841299,-0.14445120570680617,-0.6647166372235769,0.7329977089787045,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.8983435408578351,0.5936724441431585,0,0,1.7486285676339492,-0.6143020602098268,-1.617770668841299,19.513917257238514,-18.2263633493076,-2.1122645016128505,0.22442903190610877,0.28679581766263723,-0.4013489884414242,-12.104482537170023,-15.469518410347654,21.657890230529535,0.00023821292845924372,0.00022129365682129566,0.0002911987485310585,1.23456e-61,1.23456e-61,1.23456e-61,-0.1476906494545283,-0.18884985061363135,0.2651291456138227,1.23456e-61,1.23456e-61,1.23456e-61,0.5457616664725451,0.5069984895771817,0.6671557051959959,1.7486285676339492,-0.6143020602098268,-1.617770668841299,2.4455090077369745,-1.8785358529220095,-0.5729550514385733,8.838138142835074e-06,8.21040202045278e-06,1.080400960260441e-05,-14.550541013704862,4.844606159430582,8.221348425219139,-4.837042892033843e-05,-4.493487892126571e-05,-5.9129487465760976e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.19866611267260095,0.2537913189027001,-0.35456672596561156,1.23456e-61,1.23456e-61,1.23456e-61,-0.5457616664725451,-0.5069984895771817,-0.6671557051959959,1.7486285676339492,-0.6143020602098268,-1.617770668841299,0.41399151325861955,0.5290808026213392,-0.7407324289157304,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.7486285676339492,-0.6143020602098268,-1.617770668841299],[2.4455090077369745,-1.8785358529220095,-0.5729550514385733],[8.838138142835074e-06,8.21040202045278e-06,1.080400960260441e-05]],[[-14.550541013704862,4.844606159430582,8.221348425219139],[-4.837042892033843e-05,-4.493487892126571e-05,-5.9129487465760976e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.19866611267260095,0.2537913189027001,-0.35456672596561156],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.5457616664725451,-0.5069984895771817,-0.6671557051959959]]],"normal":[-0.5457616664725451,-0.5069984895771817,-0.6671557051959959]},{"op":"state"}]}}, +{"name":"adv_sing_072","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,2.0,2.0,0,0,0.00012080757766498862,0.0003515188191142671,0.0008106587232830536,0.8159184549247933,0.0,-1.241447620481894,0.8295425691040488,5.231326849942087,0.5452014890608028,-0.7253034845109712,0.0,-0.4766922813900478,0.5233459536021167,8.492336596584567,-0.7962886301524602,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-1.7856427809541668,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.00012080757766498862,0.0003515188191142671,0.0008106587232830536,-0.3402269795949382,-0.0,0.09225234943262131,0.45759496841731223,-0.7766594420523818,0.30074581758631536,0.1013030554670401,0.0,0.16317411892131115,0.0,0.32579552855060623,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.3344428321095599,0.12875930695979013,-0.21980635697668885,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.00012080757766498862,0.0003515188191142671,0.0008106587232830536,-0.8356714890040187,-0.0,-0.5492296081474544,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,2.0,0,0,0.00012080757766498862,0.0003515188191142671,0.0008106587232830536,0.8159184549247933,0.0,-1.241447620481894,0.8295425691040488,5.231326849942087,0.5452014890608028,-0.7253034845109712,0.0,-0.4766922813900478,0.5233459536021167,8.492336596584567,-0.7962886301524602,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-1.7856427809541668,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.00012080757766498862,0.0003515188191142671,0.0008106587232830536,-0.3402269795949382,-0.0,0.09225234943262131,0.45759496841731223,-0.7766594420523818,0.30074581758631536,0.1013030554670401,0.0,0.16317411892131115,0.0,0.32579552855060623,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.3344428321095599,0.12875930695979013,-0.21980635697668885,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.00012080757766498862,0.0003515188191142671,0.0008106587232830536,0,-1,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,2.0,0,0,0.00012080757766498862,0.0003515188191142671,0.0008106587232830536,0.8159184549247933,0.0,-1.241447620481894,0.8295425691040488,5.231326849942087,0.5452014890608028,-0.7253034845109712,0.0,-0.4766922813900478,0.5233459536021167,8.492336596584567,-0.7962886301524602,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-1.7856427809541668,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.00012080757766498862,0.0003515188191142671,0.0008106587232830536,-0.3402269795949382,-0.0,0.09225234943262131,0.45759496841731223,-0.7766594420523818,0.30074581758631536,0.1013030554670401,0.0,0.16317411892131115,0.0,0.32579552855060623,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.3344428321095599,0.12875930695979013,-0.21980635697668885,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.00012080757766498862,0.0003515188191142671,0.0008106587232830536,0.15355108550026092,-0.9839207819988007,0.09122477126614147,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.00012080757766498862,0.0003515188191142671,0.0008106587232830536],[-0.3402269795949382,-0.0,0.09225234943262131],[0.45759496841731223,-0.7766594420523818,0.30074581758631536]],[[0.1013030554670401,0.0,0.16317411892131115],[0.0,0.32579552855060623,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.3344428321095599,0.12875930695979013,-0.21980635697668885],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_073","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,2.0,0.0,0,0,0.00021732225260923577,-2.527069778547242e-05,0.0007432609557737032,-0.08381896812838234,0.03365060671550873,-0.10905014289187136,1.2762756743468922e-08,1.4515339011441504e-08,-5.330677437728972e-09,0.36254336120025404,-0.08576352456616071,0.6344720973222909,-6.522290988652443e-08,-7.417932248846418e-08,2.7241943190137584e-08,1.23456e-61,1.23456e-61,1.23456e-61,3.445945402662912e-07,3.919142763585673e-07,-1.439283360079799e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.6365491246544505,-0.7239600759862422,0.26587030725458477,0.00021732225260923577,-2.527069778547242e-05,0.0007432609557737032,1.5347659314428923,-0.8283154970379101,1.419062414036428,-6759.10171263642,-7688.562899617593,2823.658608458164,5.233159891760238,-6.198148248778324,-4.348167122610704,-49191.41208826969,-55946.051871132506,20546.628536411707,1.23456e-61,1.23456e-61,1.23456e-61,-356853.9918178867,-405857.19628899795,149048.79572515376,1.23456e-61,1.23456e-61,1.23456e-61,0.6365491246544505,0.7239600759862422,-0.26587030725458477,0.00021732225260923577,-2.527069778547242e-05,0.0007432609557737032,0.2579470842025385,-0.6781919398631862,-0.6881271644514676,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.00021732225260923577,-2.527069778547242e-05,0.0007432609557737032],[1.5347659314428923,-0.8283154970379101,1.419062414036428],[-6759.10171263642,-7688.562899617593,2823.658608458164]],[[5.233159891760238,-6.198148248778324,-4.348167122610704],[-49191.41208826969,-55946.051871132506,20546.628536411707],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-356853.9918178867,-405857.19628899795,149048.79572515376],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6365491246544505,0.7239600759862422,-0.26587030725458477]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_074","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.5446831202543796,0,0,0.8138783302759747,1.4292480335394726,0,0,-0.3350323946321463,0.18058352769326924,0.11467974921312862,0.0,-0.03278283082351918,-0.047233381312188225,0.008264265767465126,-0.0220502949649329,-0.043744837311876235,0.0,0.01351500300620187,-0.10197948380232422,0.010934439468309081,0.08355911503224035,-0.04211932759821784,1.23456e-61,1.23456e-61,1.23456e-61,0.02645617605711538,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.3350323946321463,0.18058352769326924,0.11467974921312862,0.0,-14.497378751273706,-5.509494386940926,-72158.2987383229,0.0,0.0,0.0,1.0686371363825522,6.244002098036904,15015.957144608732,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-3133.7162235955084,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.3350323946321463,0.18058352769326924,0.11467974921312862,0.5811728631362744,-0.32342807287779596,-0.7467478723294364,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.5446831202543796,0,0,0.8138783302759747,1.4292480335394726,0,0,-0.3350323946321463,0.18058352769326924,0.11467974921312862,0.0,-0.03278283082351918,-0.047233381312188225,0.008264265767465126,-0.0220502949649329,-0.043744837311876235,0.0,0.01351500300620187,-0.10197948380232422,0.010934439468309081,0.08355911503224035,-0.04211932759821784,1.23456e-61,1.23456e-61,1.23456e-61,0.02645617605711538,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.3350323946321463,0.18058352769326924,0.11467974921312862,0.0,-14.497378751273706,-5.509494386940926,-72158.2987383229,0.0,0.0,0.0,1.0686371363825522,6.244002098036904,15015.957144608732,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-3133.7162235955084,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.3350323946321463,0.18058352769326924,0.11467974921312862,0.23203811797485857,0.897933628563155,0.3739966717794314,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.3350323946321463,0.18058352769326924,0.11467974921312862],[0.0,-14.497378751273706,-5.509494386940926],[-72158.2987383229,0.0,0.0]],[[0.0,1.0686371363825522,6.244002098036904],[15015.957144608732,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-3133.7162235955084,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_075","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.960122485191343,2.0,0,0,0.0,1.4929149416081395,0,0,-664.1602084990907,-984.138325510808,-302.3418641829234,0.0983874765156666,0.0,0.2778375032431486,0.8143264391299515,0.0,-0.2883682817141794,0.1935452764573095,0.0,-0.06853801635806098,-0.012149854781852994,-0.0,-0.03431011178357992,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-664.1602084990907,-984.138325510808,-302.3418641829234,4.387464440752529,0.0,12.389810257941456,0.5070753211957338,446.93192158461375,-0.17956489197269532,12.125986293226607,0.0,-4.294039421344922,-0.21250780512914264,-205.78102674182543,-0.600103184751984,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-97.14433163911693,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-664.1602084990907,-984.138325510808,-302.3418641829234,-0.3437570178167695,0.7058467046299547,0.6193638205971954,0,0,0,0,0,0,0],[1,1,1,1,1,0.960122485191343,2.0,0,0,0.0,1.4929149416081395,0,0,-664.1602084990907,-984.138325510808,-302.3418641829234,0.0983874765156666,0.0,0.2778375032431486,0.8143264391299515,0.0,-0.2883682817141794,0.1935452764573095,0.0,-0.06853801635806098,-0.012149854781852994,-0.0,-0.03431011178357992,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-664.1602084990907,-984.138325510808,-302.3418641829234,4.387464440752529,0.0,12.389810257941456,0.5070753211957338,446.93192158461375,-0.17956489197269532,12.125986293226607,0.0,-4.294039421344922,-0.21250780512914264,-205.78102674182543,-0.600103184751984,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-97.14433163911693,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-664.1602084990907,-984.138325510808,-302.3418641829234,-0.9426414308045067,-0.0,0.33380702948085467,0,0,0,0,0,0,0],[1,1,1,1,1,0.960122485191343,2.0,0,0,0.0,1.4929149416081395,0,0,-664.1602084990907,-984.138325510808,-302.3418641829234,0.0983874765156666,0.0,0.2778375032431486,0.8143264391299515,0.0,-0.2883682817141794,0.1935452764573095,0.0,-0.06853801635806098,-0.012149854781852994,-0.0,-0.03431011178357992,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-664.1602084990907,-984.138325510808,-302.3418641829234,4.387464440752529,0.0,12.389810257941456,0.5070753211957338,446.93192158461375,-0.17956489197269532,12.125986293226607,0.0,-4.294039421344922,-0.21250780512914264,-205.78102674182543,-0.600103184751984,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-97.14433163911693,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-664.1602084990907,-984.138325510808,-302.3418641829234,0.33380702948085467,0.0,0.9426414308045067,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-664.1602084990907,-984.138325510808,-302.3418641829234],[4.387464440752529,0.0,12.389810257941456],[0.5070753211957338,446.93192158461375,-0.17956489197269532]],[[12.125986293226607,0.0,-4.294039421344922],[-0.21250780512914264,-205.78102674182543,-0.600103184751984],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-97.14433163911693,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_076","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.47378351522221474,2.0,0,0,0.0,1.9659447455296877,0,0,373.131650653832,485.7186452448958,-196.73740292187648,0.0,-0.2862017604490971,-0.3926755723032143,0.0,-0.13312834061555082,-0.1266036659801096,0.0,-2.494620792553847,0.6252760205051072,0.0,-0.4571931630455432,0.48075517139124974,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.2935638629640157,-0.27917617750420226,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,373.131650653832,485.7186452448958,-196.73740292187648,0.0,-12.645259712397841,-3.368744757363495,0.0,0.0,0.0,0.0,7.407898968839915,4.250717417587314,0.0,0.631002551005684,-0.6635220385542696,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,373.131650653832,485.7186452448958,-196.73740292187648,-0.0,-0.6891262925185795,0.724641258113004,0,0,0,0,0,0,0],[1,1,1,1,1,0.47378351522221474,2.0,0,0,0.0,1.9659447455296877,0,0,373.131650653832,485.7186452448958,-196.73740292187648,0.0,-0.2862017604490971,-0.3926755723032143,0.0,-0.13312834061555082,-0.1266036659801096,0.0,-2.494620792553847,0.6252760205051072,0.0,-0.4571931630455432,0.48075517139124974,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.2935638629640157,-0.27917617750420226,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,373.131650653832,485.7186452448958,-196.73740292187648,0.0,-12.645259712397841,-3.368744757363495,0.0,0.0,0.0,0.0,7.407898968839915,4.250717417587314,0.0,0.631002551005684,-0.6635220385542696,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,373.131650653832,485.7186452448958,-196.73740292187648,0.2720997745806954,0.5263743254705048,-0.8055381941029276,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[373.131650653832,485.7186452448958,-196.73740292187648],[0.0,-12.645259712397841,-3.368744757363495],[0.0,0.0,0.0]],[[0.0,7.407898968839915,4.250717417587314],[0.0,0.631002551005684,-0.6635220385542696],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[-1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_077","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.48786320812995565,2.0,0,0,2.0,2.0,0,0,-0.4295339212860021,0.568498238508415,0.3219889343350095,0.07081109292232952,-0.051312645581627785,0.0075512495830600684,10.338433617964617,15.592784056184636,0.8600082581277951,-0.07427605616861577,0.04945738379859659,0.17855099121582432,-40.89286198901159,-56.62698355690908,-1.3258848536676444,1.23456e-61,1.23456e-61,1.23456e-61,153.1229775858733,212.0392633870962,4.964764676636094,1.23456e-61,1.23456e-61,1.23456e-61,-0.5853436694087901,-0.8105631332837301,-0.018978820941119325,-0.4295339212860021,0.568498238508415,0.3219889343350095,0.6663759374868611,-0.5448758715809863,2.7186808614288203,3.828230577883302,4.3407761172269606,-0.2707329999397621,2.3963305366512664,-1.737048348496522,0.2798088774512195,0.3182393612096931,-0.05307149883489376,0.43051829921196116,1.23456e-61,1.23456e-61,1.23456e-61,1.6369822578721562,2.349392708376801,0.08701839988385263,1.23456e-61,1.23456e-61,1.23456e-61,-0.5853436694087901,-0.8105631332837301,-0.018978820941119325,-0.4295339212860021,0.568498238508415,0.3219889343350095,-0.444750399822544,0.3405699651826334,-0.8283774385346254,0,0,0,0,0,0,0],[1,1,1,1,1,0.48786320812995565,2.0,0,0,2.0,2.0,0,0,-0.4295339212860021,0.568498238508415,0.3219889343350095,0.07081109292232952,-0.051312645581627785,0.0075512495830600684,10.338433617964617,15.592784056184636,0.8600082581277951,-0.07427605616861577,0.04945738379859659,0.17855099121582432,-40.89286198901159,-56.62698355690908,-1.3258848536676444,1.23456e-61,1.23456e-61,1.23456e-61,153.1229775858733,212.0392633870962,4.964764676636094,1.23456e-61,1.23456e-61,1.23456e-61,-0.5853436694087901,-0.8105631332837301,-0.018978820941119325,-0.4295339212860021,0.568498238508415,0.3219889343350095,0.6663759374868611,-0.5448758715809863,2.7186808614288203,3.828230577883302,4.3407761172269606,-0.2707329999397621,2.3963305366512664,-1.737048348496522,0.2798088774512195,0.3182393612096931,-0.05307149883489376,0.43051829921196116,1.23456e-61,1.23456e-61,1.23456e-61,1.6369822578721562,2.349392708376801,0.08701839988385263,1.23456e-61,1.23456e-61,1.23456e-61,-0.5853436694087901,-0.8105631332837301,-0.018978820941119325,-0.4295339212860021,0.568498238508415,0.3219889343350095,-0.6779158285073009,0.47644465132558883,0.5598487507197795,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.4295339212860021,0.568498238508415,0.3219889343350095],[0.6663759374868611,-0.5448758715809863,2.7186808614288203],[3.828230577883302,4.3407761172269606,-0.2707329999397621]],[[2.3963305366512664,-1.737048348496522,0.2798088774512195],[0.3182393612096931,-0.05307149883489376,0.43051829921196116],[1.23456e-61,1.23456e-61,1.23456e-61]],[[1.6369822578721562,2.349392708376801,0.08701839988385263],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.5853436694087901,-0.8105631332837301,-0.018978820941119325]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_078","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,0.0,0.0,0,0,-0.7769080503389771,-0.49761472611200275,0.5572462787228394,14.102520645820672,0.0,-36.08232236167816,-0.4419301067128415,0.0015008150755778584,0.8806272967439267,54.94730841129459,0.0,1.557215274825463,0.03797260192008391,0.0007187076077697763,0.01905600255721651,1.23456e-61,1.23456e-61,1.23456e-61,-0.09555612967522546,0.003021631621058075,0.19041322345998185,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.7769080503389771,-0.49761472611200275,0.5572462787228394,47.58768196860522,0.0,23.881191791761825,0.0,-661.7098984331955,0.0,22.28892010115266,0.0,-44.414786768020576,-0.2773074892674541,-660.0138107502282,-0.1391627636088051,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-658.3167806191202,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.7769080503389771,-0.49761472611200275,0.5572462787228394,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.0,0.0,0,0,-0.7769080503389771,-0.49761472611200275,0.5572462787228394,14.102520645820672,0.0,-36.08232236167816,-0.4419301067128415,0.0015008150755778584,0.8806272967439267,54.94730841129459,0.0,1.557215274825463,0.03797260192008391,0.0007187076077697763,0.01905600255721651,1.23456e-61,1.23456e-61,1.23456e-61,-0.09555612967522546,0.003021631621058075,0.19041322345998185,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.7769080503389771,-0.49761472611200275,0.5572462787228394,47.58768196860522,0.0,23.881191791761825,0.0,-661.7098984331955,0.0,22.28892010115266,0.0,-44.414786768020576,-0.2773074892674541,-660.0138107502282,-0.1391627636088051,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-658.3167806191202,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.7769080503389771,-0.49761472611200275,0.5572462787228394,1.3422955751872647,0.0,-0.44524441471251497,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.7769080503389771,-0.49761472611200275,0.5572462787228394],[47.58768196860522,0.0,23.881191791761825],[0.0,-661.7098984331955,0.0]],[[22.28892010115266,0.0,-44.414786768020576],[-0.2773074892674541,-660.0138107502282,-0.1391627636088051],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-658.3167806191202,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_079","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,0.0,1.499549040686245,0,0,-1.772626989353073,-1.2018121016171368,1.1389990836279744,34.689928592067034,36.99538150151125,3.3204249343888708,2676.439913419957,-2300.3149992536573,-2332.3757228332424,-10.56185681343958,12.058955595895302,-24.013674664429782,-918.9133033276145,791.0926719816456,801.4259544326534,1.23456e-61,1.23456e-61,1.23456e-61,718.5424222118746,-617.565650258885,-626.1573516725668,1.23456e-61,1.23456e-61,1.23456e-61,0.632699308828025,-0.5437860702391653,-0.5513513348332304,-1.772626989353073,-1.2018121016171368,1.1389990836279744,2.9448110367334226,8.64284272573272,-5.144954577481881,-0.06756871707677391,0.058073284761984804,0.0588812123443844,50.01927766936553,32.30225765498925,25.540238627851288,-0.24509273610973611,0.21064985207610626,0.21358045650838886,1.23456e-61,1.23456e-61,1.23456e-61,-0.6363251964562436,0.47619612259186056,1.3423036176525218,1.23456e-61,1.23456e-61,1.23456e-61,-0.632699308828025,0.5437860702391653,0.5513513348332304,-1.772626989353073,-1.2018121016171368,1.1389990836279744,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,1.499549040686245,0,0,-1.772626989353073,-1.2018121016171368,1.1389990836279744,34.689928592067034,36.99538150151125,3.3204249343888708,2676.439913419957,-2300.3149992536573,-2332.3757228332424,-10.56185681343958,12.058955595895302,-24.013674664429782,-918.9133033276145,791.0926719816456,801.4259544326534,1.23456e-61,1.23456e-61,1.23456e-61,718.5424222118746,-617.565650258885,-626.1573516725668,1.23456e-61,1.23456e-61,1.23456e-61,0.632699308828025,-0.5437860702391653,-0.5513513348332304,-1.772626989353073,-1.2018121016171368,1.1389990836279744,2.9448110367334226,8.64284272573272,-5.144954577481881,-0.06756871707677391,0.058073284761984804,0.0588812123443844,50.01927766936553,32.30225765498925,25.540238627851288,-0.24509273610973611,0.21064985207610626,0.21358045650838886,1.23456e-61,1.23456e-61,1.23456e-61,-0.6363251964562436,0.47619612259186056,1.3423036176525218,1.23456e-61,1.23456e-61,1.23456e-61,-0.632699308828025,0.5437860702391653,0.5513513348332304,-1.772626989353073,-1.2018121016171368,1.1389990836279744,0.3658088270019129,-0.4176606897178752,0.8317111580061154,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-1.772626989353073,-1.2018121016171368,1.1389990836279744],[2.9448110367334226,8.64284272573272,-5.144954577481881],[-0.06756871707677391,0.058073284761984804,0.0588812123443844]],[[50.01927766936553,32.30225765498925,25.540238627851288],[-0.24509273610973611,0.21064985207610626,0.21358045650838886],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.6363251964562436,0.47619612259186056,1.3423036176525218],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.632699308828025,0.5437860702391653,0.5513513348332304]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_080","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,2.0,2.0,0,0,1.8565971058648567,0.4603565708713391,-1.1323792543454356,0.18593173604350863,1.3577197068225868,-0.9354106879294758,-0.0016163584263708835,0.0008038475032968427,0.0008454759801527865,-0.49404945549474855,-0.35230075678788947,-0.6095559528328867,0.017045979457547475,-0.008477307882116186,-0.008916318283372688,1.23456e-61,1.23456e-61,1.23456e-61,-0.054321556712126295,0.1785527072146007,0.2483662320151202,1.23456e-61,1.23456e-61,1.23456e-61,0.810857948353349,-0.40325594043871976,-0.42413916830809345,1.8565971058648567,0.4603565708713391,-1.1323792543454356,-0.0015501323735318262,-0.4228543733361724,0.399070902853458,-0.0,0.0,0.0,0.3071895478381705,0.6493673266261917,-0.03011781610297143,-0.06077796949391275,-0.4438158255201658,0.30577008242398157,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.810857948353349,-0.40325594043871976,-0.42413916830809345,1.8565971058648567,0.4603565708713391,-1.1323792543454356,0.810857948353349,-0.40325594043871976,-0.42413916830809345,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,2.0,0,0,1.8565971058648567,0.4603565708713391,-1.1323792543454356,0.18593173604350863,1.3577197068225868,-0.9354106879294758,-0.0016163584263708835,0.0008038475032968427,0.0008454759801527865,-0.49404945549474855,-0.35230075678788947,-0.6095559528328867,0.017045979457547475,-0.008477307882116186,-0.008916318283372688,1.23456e-61,1.23456e-61,1.23456e-61,-0.054321556712126295,0.1785527072146007,0.2483662320151202,1.23456e-61,1.23456e-61,1.23456e-61,0.810857948353349,-0.40325594043871976,-0.42413916830809345,1.8565971058648567,0.4603565708713391,-1.1323792543454356,-0.0015501323735318262,-0.4228543733361724,0.399070902853458,-0.0,0.0,0.0,0.3071895478381705,0.6493673266261917,-0.03011781610297143,-0.06077796949391275,-0.4438158255201658,0.30577008242398157,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.810857948353349,-0.40325594043871976,-0.42413916830809345,1.8565971058648567,0.4603565708713391,-1.1323792543454356,-0.5744143130456171,-0.40960797536577304,-0.7087097455835388,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,2.0,0,0,1.8565971058648567,0.4603565708713391,-1.1323792543454356,0.18593173604350863,1.3577197068225868,-0.9354106879294758,-0.0016163584263708835,0.0008038475032968427,0.0008454759801527865,-0.49404945549474855,-0.35230075678788947,-0.6095559528328867,0.017045979457547475,-0.008477307882116186,-0.008916318283372688,1.23456e-61,1.23456e-61,1.23456e-61,-0.054321556712126295,0.1785527072146007,0.2483662320151202,1.23456e-61,1.23456e-61,1.23456e-61,0.810857948353349,-0.40325594043871976,-0.42413916830809345,1.8565971058648567,0.4603565708713391,-1.1323792543454356,-0.0015501323735318262,-0.4228543733361724,0.399070902853458,-0.0,0.0,0.0,0.3071895478381705,0.6493673266261917,-0.03011781610297143,-0.06077796949391275,-0.4438158255201658,0.30577008242398157,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.810857948353349,-0.40325594043871976,-0.42413916830809345,1.8565971058648567,0.4603565708713391,-1.1323792543454356,0.5744143130456171,0.40960797536577304,0.7087097455835388,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[1.8565971058648567,0.4603565708713391,-1.1323792543454356],[-0.0015501323735318262,-0.4228543733361724,0.399070902853458],[-0.0,0.0,0.0]],[[0.3071895478381705,0.6493673266261917,-0.03011781610297143],[-0.06077796949391275,-0.4438158255201658,0.30577008242398157],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0.810857948353349,-0.40325594043871976,-0.42413916830809345]]],"normal":[0.810857948353349,-0.40325594043871976,-0.42413916830809345]},{"op":"state"}]}}, +{"name":"adv_sing_081","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.257010654689505,0.9819180520830104,0,0,2.0,0.0,0,0,-0.6639478746352281,-0.5164179352255687,-0.4932028934795125,-0.04963473371757105,-0.11902624960402729,-0.0008304810550161471,-5.021074727545779e-09,2.1427109816405963e-09,-7.00695701260806e-09,0.09386993911068628,0.04744868724703568,-0.052756018775500325,2.302201101430527e-09,-9.824493459374214e-10,3.2127432925077004e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.4540115321177487,-0.7486564020783018,0.0964001142640343,1.23456e-61,1.23456e-61,1.23456e-61,0.5652734667770947,-0.24122677526557254,0.7888444400848483,-0.6639478746352281,-0.5164179352255687,-0.4932028934795125,0.8871216348248153,-0.6452437220744065,-0.8330113656325852,-1.0276071303907485e-06,4.385246590776539e-07,-1.4340354165604979e-06,-0.37726072126814153,-0.6220957799303751,0.08010364741158249,1.6308196802860787e-07,-6.959416912985444e-08,2.2758242040076445e-07,1.23456e-61,1.23456e-61,1.23456e-61,2.9017809566357773e-07,-1.2383161493272848e-07,4.0494626203442027e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.5652734667770947,-0.24122677526557254,0.7888444400848483,-0.6639478746352281,-0.5164179352255687,-0.4932028934795125,0.5652734667770947,-0.24122677526557254,0.7888444400848483,0,0,0,0,0,0,0],[1,1,1,1,1,0.257010654689505,0.9819180520830104,0,0,2.0,0.0,0,0,-0.6639478746352281,-0.5164179352255687,-0.4932028934795125,-0.04963473371757105,-0.11902624960402729,-0.0008304810550161471,-5.021074727545779e-09,2.1427109816405963e-09,-7.00695701260806e-09,0.09386993911068628,0.04744868724703568,-0.052756018775500325,2.302201101430527e-09,-9.824493459374214e-10,3.2127432925077004e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.4540115321177487,-0.7486564020783018,0.0964001142640343,1.23456e-61,1.23456e-61,1.23456e-61,0.5652734667770947,-0.24122677526557254,0.7888444400848483,-0.6639478746352281,-0.5164179352255687,-0.4932028934795125,0.8871216348248153,-0.6452437220744065,-0.8330113656325852,-1.0276071303907485e-06,4.385246590776539e-07,-1.4340354165604979e-06,-0.37726072126814153,-0.6220957799303751,0.08010364741158249,1.6308196802860787e-07,-6.959416912985444e-08,2.2758242040076445e-07,1.23456e-61,1.23456e-61,1.23456e-61,2.9017809566357773e-07,-1.2383161493272848e-07,4.0494626203442027e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.5652734667770947,-0.24122677526557254,0.7888444400848483,-0.6639478746352281,-0.5164179352255687,-0.4932028934795125,0.12863365750706723,-1.3183702838718585,-0.49533138075432864,0,0,0,0,0,0,0],[1,1,1,1,1,0.257010654689505,0.9819180520830104,0,0,2.0,0.0,0,0,-0.6639478746352281,-0.5164179352255687,-0.4932028934795125,-0.04963473371757105,-0.11902624960402729,-0.0008304810550161471,-5.021074727545779e-09,2.1427109816405963e-09,-7.00695701260806e-09,0.09386993911068628,0.04744868724703568,-0.052756018775500325,2.302201101430527e-09,-9.824493459374214e-10,3.2127432925077004e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.4540115321177487,-0.7486564020783018,0.0964001142640343,1.23456e-61,1.23456e-61,1.23456e-61,0.5652734667770947,-0.24122677526557254,0.7888444400848483,-0.6639478746352281,-0.5164179352255687,-0.4932028934795125,0.8871216348248153,-0.6452437220744065,-0.8330113656325852,-1.0276071303907485e-06,4.385246590776539e-07,-1.4340354165604979e-06,-0.37726072126814153,-0.6220957799303751,0.08010364741158249,1.6308196802860787e-07,-6.959416912985444e-08,2.2758242040076445e-07,1.23456e-61,1.23456e-61,1.23456e-61,2.9017809566357773e-07,-1.2383161493272848e-07,4.0494626203442027e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.5652734667770947,-0.24122677526557254,0.7888444400848483,-0.6639478746352281,-0.5164179352255687,-0.4932028934795125,-0.3968949733462609,0.8447653485050187,0.3589510915120126,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.6639478746352281,-0.5164179352255687,-0.4932028934795125],[0.8871216348248153,-0.6452437220744065,-0.8330113656325852],[-1.0276071303907485e-06,4.385246590776539e-07,-1.4340354165604979e-06]],[[-0.37726072126814153,-0.6220957799303751,0.08010364741158249],[1.6308196802860787e-07,-6.959416912985444e-08,2.2758242040076445e-07],[1.23456e-61,1.23456e-61,1.23456e-61]],[[2.9017809566357773e-07,-1.2383161493272848e-07,4.0494626203442027e-07],[1.23456e-61,1.23456e-61,1.23456e-61],[0.5652734667770947,-0.24122677526557254,0.7888444400848483]]],"normal":[-0.5652734667770947,0.24122677526557254,-0.7888444400848483]},{"op":"state"}]}}, +{"name":"adv_sing_082","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.889973124079105,0.0,0,0,2.0,2.0,0,0,0.11640753576088958,0.610315061832148,0.5579099349410261,0.13807152501084513,0.07060372033340893,0.0,0.3079240910844418,-0.6021715094167546,2.4048631343738657e-14,0.06528014437855806,-0.12766082360408776,0.0,-0.8057681261712958,-0.4120344685792712,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,2.0558783133359395e-14,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.11640753576088958,0.610315061832148,0.5579099349410261,3.1924153281924106,1.6324611392687995,0.0,0.0,-0.0,-5.409755694169784,2.0728564735195825,-4.053645517204046,0.0,-0.36046019111758953,-0.18432352741084312,14.809217451768356,1.23456e-61,1.23456e-61,1.23456e-61,-0.250724415030116,0.4903127225758861,8.722287823620768,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.11640753576088958,0.610315061832148,0.5579099349410261,0,0,1,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.11640753576088958,0.610315061832148,0.5579099349410261],[3.1924153281924106,1.6324611392687995,0.0],[0.0,-0.0,-5.409755694169784]],[[2.0728564735195825,-4.053645517204046,0.0],[-0.36046019111758953,-0.18432352741084312,14.809217451768356],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.250724415030116,0.4903127225758861,8.722287823620768],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_083","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,1.2188296799228537,0.0,0,0,-0.0008267438511014733,0.0005217358369724028,-0.000616741955866097,0.32696600805989734,-0.14298361399620485,0.8038280926564498,3.611049294464162e-07,6.380214953103372e-07,-3.3393232098175924e-08,-0.3565069740802965,0.21133172081743903,0.18260451046191054,4.753431631400268e-08,8.398643469007215e-08,-4.3957429762451985e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.4539521267884105,-0.2690957084429638,-0.2325163717937288,1.23456e-61,1.23456e-61,1.23456e-61,0.49204743578947485,0.8693784414056371,-0.04550215986200883,-0.0008267438511014733,0.0005217358369724028,-0.000616741955866097,9.553031614634616,-4.177581006005467,23.48560704350583,-4883078.10821519,-8627710.513663683,451563.3748648345,-14.844986502513065,8.799874255422397,7.603670307146696,2069002.573111751,3655635.0643252353,-191330.4443117321,1.23456e-61,1.23456e-61,1.23456e-61,-4369414.184889943,-7720140.002720663,404062.0107897865,1.23456e-61,1.23456e-61,1.23456e-61,-0.49204743578947485,-0.8693784414056371,0.04550215986200883,-0.0008267438511014733,0.0005217358369724028,-0.000616741955866097,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0008267438511014733,0.0005217358369724028,-0.000616741955866097],[9.553031614634616,-4.177581006005467,23.48560704350583],[-4883078.10821519,-8627710.513663683,451563.3748648345]],[[-14.844986502513065,8.799874255422397,7.603670307146696],[2069002.573111751,3655635.0643252353,-191330.4443117321],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-4369414.184889943,-7720140.002720663,404062.0107897865],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.49204743578947485,-0.8693784414056371,0.04550215986200883]]],"normal":[-0.49204743578947485,-0.8693784414056371,0.04550215986200883]},{"op":"state"}]}}, +{"name":"adv_sing_084","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,0.0,0.0,0,0,0.0008081853807004602,0.0008159790019109574,-0.0004627454405589557,9.627614308984297,-12.800269696437558,34.453532197011675,0.05356635859017209,0.08912618872395758,0.018143945551496878,21.988830476917318,36.96985913285389,7.590635035821354,-0.0006569495505584599,0.0003280247830738164,0.0003054450998963316,1.23456e-61,1.23456e-61,1.23456e-61,0.0010108992561167376,-0.0005047571901301836,-0.0004700120793251496,1.23456e-61,1.23456e-61,1.23456e-61,0.826054557155592,-0.4124614541371668,-0.38406954767793405,0.0008081853807004602,0.0008159790019109574,-0.0004627454405589557,0.013302523769499471,-0.017686197891617485,0.04760462107069132,-0.008210054226175942,0.004099403453851641,0.0038172198019419397,0.015164321093284925,0.025495799572088203,0.005234786229579887,-0.007837202366318375,0.003913232917096605,0.003643864369269954,1.23456e-61,1.23456e-61,1.23456e-61,0.002703148500249277,-0.0013497226684405454,-0.001256814108467506,1.23456e-61,1.23456e-61,1.23456e-61,-0.826054557155592,0.4124614541371668,0.38406954767793405,0.0008081853807004602,0.0008159790019109574,-0.0004627454405589557,-0.25339479660195213,0.3368977642937085,-0.9068026099813323,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.0,0.0,0,0,0.0008081853807004602,0.0008159790019109574,-0.0004627454405589557,9.627614308984297,-12.800269696437558,34.453532197011675,0.05356635859017209,0.08912618872395758,0.018143945551496878,21.988830476917318,36.96985913285389,7.590635035821354,-0.0006569495505584599,0.0003280247830738164,0.0003054450998963316,1.23456e-61,1.23456e-61,1.23456e-61,0.0010108992561167376,-0.0005047571901301836,-0.0004700120793251496,1.23456e-61,1.23456e-61,1.23456e-61,0.826054557155592,-0.4124614541371668,-0.38406954767793405,0.0008081853807004602,0.0008159790019109574,-0.0004627454405589557,0.013302523769499471,-0.017686197891617485,0.04760462107069132,-0.008210054226175942,0.004099403453851641,0.0038172198019419397,0.015164321093284925,0.025495799572088203,0.005234786229579887,-0.007837202366318375,0.003913232917096605,0.003643864369269954,1.23456e-61,1.23456e-61,1.23456e-61,0.002703148500249277,-0.0013497226684405454,-0.001256814108467506,1.23456e-61,1.23456e-61,1.23456e-61,-0.826054557155592,0.4124614541371668,0.38406954767793405,0.0008081853807004602,0.0008159790019109574,-0.0004627454405589557,0.5034132950742702,0.8463896533305182,0.17378034721311555,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.0,0.0,0,0,0.0008081853807004602,0.0008159790019109574,-0.0004627454405589557,9.627614308984297,-12.800269696437558,34.453532197011675,0.05356635859017209,0.08912618872395758,0.018143945551496878,21.988830476917318,36.96985913285389,7.590635035821354,-0.0006569495505584599,0.0003280247830738164,0.0003054450998963316,1.23456e-61,1.23456e-61,1.23456e-61,0.0010108992561167376,-0.0005047571901301836,-0.0004700120793251496,1.23456e-61,1.23456e-61,1.23456e-61,0.826054557155592,-0.4124614541371668,-0.38406954767793405,0.0008081853807004602,0.0008159790019109574,-0.0004627454405589557,0.013302523769499471,-0.017686197891617485,0.04760462107069132,-0.008210054226175942,0.004099403453851641,0.0038172198019419397,0.015164321093284925,0.025495799572088203,0.005234786229579887,-0.007837202366318375,0.003913232917096605,0.003643864369269954,1.23456e-61,1.23456e-61,1.23456e-61,0.002703148500249277,-0.0013497226684405454,-0.001256814108467506,1.23456e-61,1.23456e-61,1.23456e-61,-0.826054557155592,0.4124614541371668,0.38406954767793405,0.0008081853807004602,0.0008159790019109574,-0.0004627454405589557,-0.8533312448868813,-0.2794276317044709,0.44016586094316285,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0008081853807004602,0.0008159790019109574,-0.0004627454405589557],[0.013302523769499471,-0.017686197891617485,0.04760462107069132],[-0.008210054226175942,0.004099403453851641,0.0038172198019419397]],[[0.015164321093284925,0.025495799572088203,0.005234786229579887],[-0.007837202366318375,0.003913232917096605,0.003643864369269954],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.002703148500249277,-0.0013497226684405454,-0.001256814108467506],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.826054557155592,0.4124614541371668,0.38406954767793405]]],"normal":[0.826054557155592,-0.4124614541371668,-0.38406954767793405]},{"op":"state"}]}}, +{"name":"adv_sing_085","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,1.3287734140609941,0,0,0.0,0.0,0,0,-0.0009070477301880439,-6.149310206910718e-05,0.0002665832448166623,-0.003808411818801679,0.001895740381450478,-0.009193055746377774,0.27555154080723926,-0.1299744860636253,0.5230730347162097,-0.0019769902198144736,0.00038032015515982137,0.007163335324501821,8.105852568183713e-07,2.1577237601160875e-06,1.0915212738148853e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.37236277744426344,-0.17563764726534856,0.706846646151137,1.23456e-61,1.23456e-61,1.23456e-61,-0.3512770060409819,-0.9350759046520701,-0.04730240549904876,-0.0009070477301880439,-6.149310206910718e-05,0.0002665832448166623,0.895368028414985,-0.34612734211420615,0.1930797626350904,-1.684242338928197e-07,-4.4833405023466483e-07,-2.2679740690272595e-08,0.1944032863424358,-0.014999168726517631,-1.1471730148271686,-0.13050409919591968,0.044982874750673196,0.07992618404652224,1.23456e-61,1.23456e-61,1.23456e-61,-4.7504566844077156e-07,-1.2645398091228283e-06,-6.39688976298394e-08,1.23456e-61,1.23456e-61,1.23456e-61,-0.3512770060409819,-0.9350759046520701,-0.04730240549904876,-0.0009070477301880439,-6.149310206910718e-05,0.0002665832448166623,-0.5591812325259767,-0.5176499289780004,-0.6475761732953125,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.3287734140609941,0,0,0.0,0.0,0,0,-0.0009070477301880439,-6.149310206910718e-05,0.0002665832448166623,-0.003808411818801679,0.001895740381450478,-0.009193055746377774,0.27555154080723926,-0.1299744860636253,0.5230730347162097,-0.0019769902198144736,0.00038032015515982137,0.007163335324501821,8.105852568183713e-07,2.1577237601160875e-06,1.0915212738148853e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.37236277744426344,-0.17563764726534856,0.706846646151137,1.23456e-61,1.23456e-61,1.23456e-61,-0.3512770060409819,-0.9350759046520701,-0.04730240549904876,-0.0009070477301880439,-6.149310206910718e-05,0.0002665832448166623,0.895368028414985,-0.34612734211420615,0.1930797626350904,-1.684242338928197e-07,-4.4833405023466483e-07,-2.2679740690272595e-08,0.1944032863424358,-0.014999168726517631,-1.1471730148271686,-0.13050409919591968,0.044982874750673196,0.07992618404652224,1.23456e-61,1.23456e-61,1.23456e-61,-4.7504566844077156e-07,-1.2645398091228283e-06,-6.39688976298394e-08,1.23456e-61,1.23456e-61,1.23456e-61,-0.3512770060409819,-0.9350759046520701,-0.04730240549904876,-0.0009070477301880439,-6.149310206910718e-05,0.0002665832448166623,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0009070477301880439,-6.149310206910718e-05,0.0002665832448166623],[0.895368028414985,-0.34612734211420615,0.1930797626350904],[-1.684242338928197e-07,-4.4833405023466483e-07,-2.2679740690272595e-08]],[[0.1944032863424358,-0.014999168726517631,-1.1471730148271686],[-0.13050409919591968,0.044982874750673196,0.07992618404652224],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-4.7504566844077156e-07,-1.2645398091228283e-06,-6.39688976298394e-08],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.3512770060409819,-0.9350759046520701,-0.04730240549904876]]],"normal":[0.3512770060409819,0.9350759046520701,0.04730240549904876]},{"op":"state"}]}}, +{"name":"adv_sing_086","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,2.0,0.716590702126936,0,0,-0.00038899078871553817,-0.000881951702592769,-6.213770339842806e-05,0.15374896015828746,-0.017479105275521406,-0.31771031609150147,-0.8767054942250873,0.20904100318978444,-0.17099095599838737,-0.300892008173095,-0.17318598731511453,0.5925360864133549,1.4536702022102754,-0.09993570361943054,0.7089699555817786,1.23456e-61,1.23456e-61,1.23456e-61,-2.961655191705242,0.2036053948214518,-1.4444297933047134,1.23456e-61,1.23456e-61,1.23456e-61,0.8970910114368159,-0.061672462778896944,0.43752054184238715,-0.00038899078871553817,-0.000881951702592769,-6.213770339842806e-05,-0.0322612410874733,-0.617745168231517,-0.020928380776534694,0.032544852813285195,-0.054591793936189334,-0.07442454483360214,-0.15128873005158272,-0.12052638142449112,0.2932127496196574,-0.0014163694034915993,-0.004029571546100494,0.0023364067067987116,1.23456e-61,1.23456e-61,1.23456e-61,0.3064740426758359,-0.5140926078886501,-0.7008593508228649,1.23456e-61,1.23456e-61,1.23456e-61,-0.8970910114368159,0.061672462778896944,-0.43752054184238715,-0.00038899078871553817,-0.000881951702592769,-6.213770339842806e-05,-0.29094833861215286,-0.8276798146971169,0.47989080904073783,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,2.0,0.716590702126936,0,0,-0.00038899078871553817,-0.000881951702592769,-6.213770339842806e-05,0.15374896015828746,-0.017479105275521406,-0.31771031609150147,-0.8767054942250873,0.20904100318978444,-0.17099095599838737,-0.300892008173095,-0.17318598731511453,0.5925360864133549,1.4536702022102754,-0.09993570361943054,0.7089699555817786,1.23456e-61,1.23456e-61,1.23456e-61,-2.961655191705242,0.2036053948214518,-1.4444297933047134,1.23456e-61,1.23456e-61,1.23456e-61,0.8970910114368159,-0.061672462778896944,0.43752054184238715,-0.00038899078871553817,-0.000881951702592769,-6.213770339842806e-05,-0.0322612410874733,-0.617745168231517,-0.020928380776534694,0.032544852813285195,-0.054591793936189334,-0.07442454483360214,-0.15128873005158272,-0.12052638142449112,0.2932127496196574,-0.0014163694034915993,-0.004029571546100494,0.0023364067067987116,1.23456e-61,1.23456e-61,1.23456e-61,0.3064740426758359,-0.5140926078886501,-0.7008593508228649,1.23456e-61,1.23456e-61,1.23456e-61,-0.8970910114368159,0.061672462778896944,-0.43752054184238715,-0.00038899078871553817,-0.000881951702592769,-6.213770339842806e-05,0.6234792115519425,0.269878208677798,-1.2403384317368509,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.00038899078871553817,-0.000881951702592769,-6.213770339842806e-05],[-0.0322612410874733,-0.617745168231517,-0.020928380776534694],[0.032544852813285195,-0.054591793936189334,-0.07442454483360214]],[[-0.15128873005158272,-0.12052638142449112,0.2932127496196574],[-0.0014163694034915993,-0.004029571546100494,0.0023364067067987116],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.3064740426758359,-0.5140926078886501,-0.7008593508228649],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.8970910114368159,0.061672462778896944,-0.43752054184238715]]],"normal":[0.8970910114368159,-0.061672462778896944,0.43752054184238715]},{"op":"state"}]}}, +{"name":"adv_sing_087","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.6717497758289668,0.0,0,0,0.0,0.0,0,0,0.46266460861274616,-1.7251352400120479,-1.0409407349497628,9.954922267047161,9.557884263625022,14.375353432354776,2.9165514164395704e-05,-0.0003387604651349232,0.00020503794263815428,32.09518165931857,-7.621941847123721,-17.158214696219922,4.446713501567234e-07,-5.164903747699352e-06,3.1261063416316414e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.49234223833267143,0.1163431935650901,0.263592401415441,1.23456e-61,1.23456e-61,1.23456e-61,0.07345525536040746,-0.8531903923323744,0.5164014716203533,0.46266460861274616,-1.7251352400120479,-1.0409407349497628,5.637802898575146,5.412947098952534,8.141239788204965,0.6811825657020817,-0.16187321553698802,-0.36409219824595673,12.388157479463857,-2.941931187794655,-6.62275939047408,0.05737108750820026,0.05508292277648616,0.08284641884738342,1.23456e-61,1.23456e-61,1.23456e-61,1.5130485883476622e-05,-0.00017574215927456906,0.0001063695870121466,1.23456e-61,1.23456e-61,1.23456e-61,0.07345525536040746,-0.8531903923323744,0.5164014716203533,0.46266460861274616,-1.7251352400120479,-1.0409407349497628,0.07345525536040746,-0.8531903923323744,0.5164014716203533,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.46266460861274616,-1.7251352400120479,-1.0409407349497628],[5.637802898575146,5.412947098952534,8.141239788204965],[0.6811825657020817,-0.16187321553698802,-0.36409219824595673]],[[12.388157479463857,-2.941931187794655,-6.62275939047408],[0.05737108750820026,0.05508292277648616,0.08284641884738342],[1.23456e-61,1.23456e-61,1.23456e-61]],[[1.5130485883476622e-05,-0.00017574215927456906,0.0001063695870121466],[1.23456e-61,1.23456e-61,1.23456e-61],[0.07345525536040746,-0.8531903923323744,0.5164014716203533]]],"normal":[0.07345525536040746,-0.8531903923323744,0.5164014716203533]},{"op":"state"}]}}, +{"name":"adv_sing_088","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.4083688128407494,0.07291430395824561,0,0,1.4877231688376613,0.0,0,0,-1.3827753392009088,-0.8887970637552889,0.8920764462993604,-0.05776043445882738,0.04784610713787123,0.0,0.0,0.0,20.00031232326587,0.01480870482101318,-0.14307016682599039,0.0,-0.0,-0.0,-63.54318163638287,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,201.8836439757667,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-1.3827753392009088,-0.8887970637552889,0.8920764462993604,-1.6256518670569642,-1.8096212064066695,0.0,0.0,0.0,5.917984673737948e-12,-2.666347386178023,2.395281725930809,0.0,-0.27349107089536695,-0.30444109940408515,-2.980913413896266e-16,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,1.2846956559943728e-11,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-1.3827753392009088,-0.8887970637552889,0.8920764462993604,0.46652782780597635,0.86854809697934,-0.1672602436809307,0,0,0,0,0,0,0],[1,1,1,1,1,1.4083688128407494,0.07291430395824561,0,0,1.4877231688376613,0.0,0,0,-1.3827753392009088,-0.8887970637552889,0.8920764462993604,-0.05776043445882738,0.04784610713787123,0.0,0.0,0.0,20.00031232326587,0.01480870482101318,-0.14307016682599039,0.0,-0.0,-0.0,-63.54318163638287,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,201.8836439757667,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-1.3827753392009088,-0.8887970637552889,0.8920764462993604,-1.6256518670569642,-1.8096212064066695,0.0,0.0,0.0,5.917984673737948e-12,-2.666347386178023,2.395281725930809,0.0,-0.27349107089536695,-0.30444109940408515,-2.980913413896266e-16,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,1.2846956559943728e-11,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-1.3827753392009088,-0.8887970637552889,0.8920764462993604,0.7439085290511379,-0.6682814529859199,-0.0,0,0,0,0,0,0,0],[1,1,1,1,1,1.4083688128407494,0.07291430395824561,0,0,1.4877231688376613,0.0,0,0,-1.3827753392009088,-0.8887970637552889,0.8920764462993604,-0.05776043445882738,0.04784610713787123,0.0,0.0,0.0,20.00031232326587,0.01480870482101318,-0.14307016682599039,0.0,-0.0,-0.0,-63.54318163638287,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,201.8836439757667,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-1.3827753392009088,-0.8887970637552889,0.8920764462993604,-1.6256518670569642,-1.8096212064066695,0.0,0.0,0.0,5.917984673737948e-12,-2.666347386178023,2.395281725930809,0.0,-0.27349107089536695,-0.30444109940408515,-2.980913413896266e-16,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,1.2846956559943728e-11,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-1.3827753392009088,-0.8887970637552889,0.8920764462993604,-0.6682814529859199,-0.7439085290511379,0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-1.3827753392009088,-0.8887970637552889,0.8920764462993604],[-1.6256518670569642,-1.8096212064066695,0.0],[0.0,0.0,5.917984673737948e-12]],[[-2.666347386178023,2.395281725930809,0.0],[-0.27349107089536695,-0.30444109940408515,-2.980913413896266e-16],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,1.2846956559943728e-11],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_089","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,2.0,0.828765697652208,0,0,-632.2741948297863,126.16259307429533,-290.1903537882966,-0.0,1.5690345615716326,-2.431462528397304,-8.373879482406496e-06,-0.02709163822395102,0.17944133789609185,0.0,-0.950530609248746,3.262169806994256,9.42325902471862e-06,0.7952991525246893,0.12007242685902302,1.23456e-61,1.23456e-61,1.23456e-61,-1.1545260288783734e-05,0.035787236611401575,-0.23703659276966985,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-632.2741948297863,126.16259307429533,-290.1903537882966,0.0,6.5058853447671545,6.861886730482222,-837803.6758764414,0.0,0.0,-0.0,8.459435880255201,-1.4533132952155665,-186472.0377809173,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,502373.91949403635,0.06343103685204071,-0.4201351731769335,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,-632.2741948297863,126.16259307429533,-290.1903537882966,-0.552651314841888,-0.5903410879742774,0.5882804807682122,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,0.828765697652208,0,0,-632.2741948297863,126.16259307429533,-290.1903537882966,-0.0,1.5690345615716326,-2.431462528397304,-8.373879482406496e-06,-0.02709163822395102,0.17944133789609185,0.0,-0.950530609248746,3.262169806994256,9.42325902471862e-06,0.7952991525246893,0.12007242685902302,1.23456e-61,1.23456e-61,1.23456e-61,-1.1545260288783734e-05,0.035787236611401575,-0.23703659276966985,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-632.2741948297863,126.16259307429533,-290.1903537882966,0.0,6.5058853447671545,6.861886730482222,-837803.6758764414,0.0,0.0,-0.0,8.459435880255201,-1.4533132952155665,-186472.0377809173,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,502373.91949403635,0.06343103685204071,-0.4201351731769335,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,-632.2741948297863,126.16259307429533,-290.1903537882966,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-632.2741948297863,126.16259307429533,-290.1903537882966],[0.0,6.5058853447671545,6.861886730482222],[-837803.6758764414,0.0,0.0]],[[-0.0,8.459435880255201,-1.4533132952155665],[-186472.0377809173,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[502373.91949403635,0.06343103685204071,-0.4201351731769335],[1.23456e-61,1.23456e-61,1.23456e-61],[-1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_090","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.8661077776211579,2.0,0,0,1.9122053346933332,0.0,0,0,636.0504960171469,843.8838109099422,-153.1657729599134,0.0,0.44882526162684083,-0.3018422529891805,1.8975889495586478e-07,0.5144233607922961,0.7649233903075762,0.0,-0.15928636800386722,-0.23685135227070933,7.370271033073677e-08,-0.6028125562887126,0.4054012010394178,1.23456e-61,1.23456e-61,1.23456e-61,2.862627078092925e-08,0.3379990975735207,0.5025887923103638,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,636.0504960171469,843.8838109099422,-153.1657729599134,0.0,-0.477139120329496,0.17988658572440508,6.875131021131189,-0.44666585630571654,-0.6641711616941056,-0.0,0.02427717186795353,0.6049646392112772,27.632709194645624,-0.7580487069883363,0.5098000249886361,1.23456e-61,1.23456e-61,1.23456e-61,109.9381495660632,0.42561785073809605,0.6328737654149005,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,636.0504960171469,843.8838109099422,-153.1657729599134,-0.0,-0.8298032238855967,0.5580560989981834,0,0,0,0,0,0,0],[1,1,1,1,1,1.8661077776211579,2.0,0,0,1.9122053346933332,0.0,0,0,636.0504960171469,843.8838109099422,-153.1657729599134,0.0,0.44882526162684083,-0.3018422529891805,1.8975889495586478e-07,0.5144233607922961,0.7649233903075762,0.0,-0.15928636800386722,-0.23685135227070933,7.370271033073677e-08,-0.6028125562887126,0.4054012010394178,1.23456e-61,1.23456e-61,1.23456e-61,2.862627078092925e-08,0.3379990975735207,0.5025887923103638,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,636.0504960171469,843.8838109099422,-153.1657729599134,0.0,-0.477139120329496,0.17988658572440508,6.875131021131189,-0.44666585630571654,-0.6641711616941056,-0.0,0.02427717186795353,0.6049646392112772,27.632709194645624,-0.7580487069883363,0.5098000249886361,1.23456e-61,1.23456e-61,1.23456e-61,109.9381495660632,0.42561785073809605,0.6328737654149005,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,636.0504960171469,843.8838109099422,-153.1657729599134,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.8661077776211579,2.0,0,0,1.9122053346933332,0.0,0,0,636.0504960171469,843.8838109099422,-153.1657729599134,0.0,0.44882526162684083,-0.3018422529891805,1.8975889495586478e-07,0.5144233607922961,0.7649233903075762,0.0,-0.15928636800386722,-0.23685135227070933,7.370271033073677e-08,-0.6028125562887126,0.4054012010394178,1.23456e-61,1.23456e-61,1.23456e-61,2.862627078092925e-08,0.3379990975735207,0.5025887923103638,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,636.0504960171469,843.8838109099422,-153.1657729599134,0.0,-0.477139120329496,0.17988658572440508,6.875131021131189,-0.44666585630571654,-0.6641711616941056,-0.0,0.02427717186795353,0.6049646392112772,27.632709194645624,-0.7580487069883363,0.5098000249886361,1.23456e-61,1.23456e-61,1.23456e-61,109.9381495660632,0.42561785073809605,0.6328737654149005,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,636.0504960171469,843.8838109099422,-153.1657729599134,-0.0,0.5580560989981834,0.8298032238855967,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[636.0504960171469,843.8838109099422,-153.1657729599134],[0.0,-0.477139120329496,0.17988658572440508],[6.875131021131189,-0.44666585630571654,-0.6641711616941056]],[[-0.0,0.02427717186795353,0.6049646392112772],[27.632709194645624,-0.7580487069883363,0.5098000249886361],[1.23456e-61,1.23456e-61,1.23456e-61]],[[109.9381495660632,0.42561785073809605,0.6328737654149005],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_091","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,2.0,0.0,0,0,0.0008361516106632314,-0.0005983114172036688,-0.00027974239684653,6.044311542287193,2.444839730092581,0.6784548626598309,0.015184272887231716,-0.03016643345071978,-0.02656975703195424,0.0723925878759788,2.3699382626532124,-2.6493789908828265,0.0015668636405702235,-0.003112871330135287,-0.002741730640731656,1.23456e-61,1.23456e-61,1.23456e-61,0.004466830399934164,-0.008874204447983435,-0.00781615289125873,1.23456e-61,1.23456e-61,1.23456e-61,0.3533589293290649,-0.702014426702404,-0.6183148160646904,0.0008361516106632314,-0.0005983114172036688,-0.00027974239684653,0.11678524030494573,-0.25776158280313793,0.3593953298214236,-0.007630418473970258,0.015159271227911377,0.013351865210220587,0.24197674984843223,0.11708923495085151,0.0053472972279188565,-0.08645036605319807,0.19217359281237167,-0.29594022773498185,1.23456e-61,1.23456e-61,1.23456e-61,0.6428232217144902,0.32347348014550265,0.023113187975329224,1.23456e-61,1.23456e-61,1.23456e-61,0.3533589293290649,-0.702014426702404,-0.6183148160646904,0.0008361516106632314,-0.0005983114172036688,-0.00027974239684653,0.899975801029093,0.4354859633530159,0.019888018617703163,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,2.0,0.0,0,0,0.0008361516106632314,-0.0005983114172036688,-0.00027974239684653,6.044311542287193,2.444839730092581,0.6784548626598309,0.015184272887231716,-0.03016643345071978,-0.02656975703195424,0.0723925878759788,2.3699382626532124,-2.6493789908828265,0.0015668636405702235,-0.003112871330135287,-0.002741730640731656,1.23456e-61,1.23456e-61,1.23456e-61,0.004466830399934164,-0.008874204447983435,-0.00781615289125873,1.23456e-61,1.23456e-61,1.23456e-61,0.3533589293290649,-0.702014426702404,-0.6183148160646904,0.0008361516106632314,-0.0005983114172036688,-0.00027974239684653,0.11678524030494573,-0.25776158280313793,0.3593953298214236,-0.007630418473970258,0.015159271227911377,0.013351865210220587,0.24197674984843223,0.11708923495085151,0.0053472972279188565,-0.08645036605319807,0.19217359281237167,-0.29594022773498185,1.23456e-61,1.23456e-61,1.23456e-61,0.6428232217144902,0.32347348014550265,0.023113187975329224,1.23456e-61,1.23456e-61,1.23456e-61,0.3533589293290649,-0.702014426702404,-0.6183148160646904,0.0008361516106632314,-0.0005983114172036688,-0.00027974239684653,-0.7110979422322632,-0.6820838863666595,0.17059099774605563,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0008361516106632314,-0.0005983114172036688,-0.00027974239684653],[0.11678524030494573,-0.25776158280313793,0.3593953298214236],[-0.007630418473970258,0.015159271227911377,0.013351865210220587]],[[0.24197674984843223,0.11708923495085151,0.0053472972279188565],[-0.08645036605319807,0.19217359281237167,-0.29594022773498185],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.6428232217144902,0.32347348014550265,0.023113187975329224],[1.23456e-61,1.23456e-61,1.23456e-61],[0.3533589293290649,-0.702014426702404,-0.6183148160646904]]],"normal":[-0.3533589293290649,0.702014426702404,0.6183148160646904]},{"op":"state"}]}}, +{"name":"adv_sing_092","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.024027234147343535,0.0,0,0,2.0,0.0,0,0,-6.227036000270303e-07,-0.0007142672352236062,-0.00017505458460935963,-0.0,1.5568144659548693,-6.413969501604547,0.0,0.22411638044288024,0.04899445335719501,0.0,1.2610342788464328,8.424901683227798,0.0,-0.08915268549646976,0.4078130443575415,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-6.227036000270303e-07,-0.0007142672352236062,-0.00017505458460935963,0.0,1.5965753307840698,0.7780926280607507,-6.236705024528028e-10,0.0,0.0,-0.0,2.129533856019049,-1.2295907577750274,9.622899734657797e-10,0.1478704692136071,-0.6764070637330056,1.23456e-61,1.23456e-61,1.23456e-61,-1.4637506692459663e-09,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-6.227036000270303e-07,-0.0007142672352236062,-0.00017505458460935963,0.33019672020688856,-0.6274849273817161,0.7051473547233771,0,0,0,0,0,0,0],[1,1,1,1,1,0.024027234147343535,0.0,0,0,2.0,0.0,0,0,-6.227036000270303e-07,-0.0007142672352236062,-0.00017505458460935963,-0.0,1.5568144659548693,-6.413969501604547,0.0,0.22411638044288024,0.04899445335719501,0.0,1.2610342788464328,8.424901683227798,0.0,-0.08915268549646976,0.4078130443575415,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-6.227036000270303e-07,-0.0007142672352236062,-0.00017505458460935963,0.0,1.5965753307840698,0.7780926280607507,-6.236705024528028e-10,0.0,0.0,-0.0,2.129533856019049,-1.2295907577750274,9.622899734657797e-10,0.1478704692136071,-0.6764070637330056,1.23456e-61,1.23456e-61,1.23456e-61,-1.4637506692459663e-09,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-6.227036000270303e-07,-0.0007142672352236062,-0.00017505458460935963,0.0,-0.2135678979054562,0.9769282230462198,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-6.227036000270303e-07,-0.0007142672352236062,-0.00017505458460935963],[0.0,1.5965753307840698,0.7780926280607507],[-6.236705024528028e-10,0.0,0.0]],[[-0.0,2.129533856019049,-1.2295907577750274],[9.622899734657797e-10,0.1478704692136071,-0.6764070637330056],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-1.4637506692459663e-09,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_093","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,0.24984844350404622,2.0,0,0,1.302147704774376,-0.20807587352511847,-0.8910282992504461,-0.02180610247627626,0.0,0.032806594443910715,0.0,0.0,0.0,0.06318598774385256,0.0,0.04199887696855801,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,1.302147704774376,-0.20807587352511847,-0.8910282992504461,-0.007372632834024929,0.0,0.006641336525286438,0.0,-6.049864366980372e-11,0.0,0.04575145311135213,0.0,-0.004262444789271045,0.28804104607492403,-2.6715037679538732e-11,-0.4333486826479186,1.23456e-61,1.23456e-61,1.23456e-61,-0.24844479097942881,-1.1796846919650631e-11,-0.16513791399643535,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,1.302147704774376,-0.20807587352511847,-0.8910282992504461,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.24984844350404622,2.0,0,0,1.302147704774376,-0.20807587352511847,-0.8910282992504461,-0.02180610247627626,0.0,0.032806594443910715,0.0,0.0,0.0,0.06318598774385256,0.0,0.04199887696855801,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,1.302147704774376,-0.20807587352511847,-0.8910282992504461,-0.007372632834024929,0.0,0.006641336525286438,0.0,-6.049864366980372e-11,0.0,0.04575145311135213,0.0,-0.004262444789271045,0.28804104607492403,-2.6715037679538732e-11,-0.4333486826479186,1.23456e-61,1.23456e-61,1.23456e-61,-0.24844479097942881,-1.1796846919650631e-11,-0.16513791399643535,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,1.302147704774376,-0.20807587352511847,-0.8910282992504461,0.27925258942201003,0.0,1.3863686347076314,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.24984844350404622,2.0,0,0,1.302147704774376,-0.20807587352511847,-0.8910282992504461,-0.02180610247627626,0.0,0.032806594443910715,0.0,0.0,0.0,0.06318598774385256,0.0,0.04199887696855801,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,1.302147704774376,-0.20807587352511847,-0.8910282992504461,-0.007372632834024929,0.0,0.006641336525286438,0.0,-6.049864366980372e-11,0.0,0.04575145311135213,0.0,-0.004262444789271045,0.28804104607492403,-2.6715037679538732e-11,-0.4333486826479186,1.23456e-61,1.23456e-61,1.23456e-61,-0.24844479097942881,-1.1796846919650631e-11,-0.16513791399643535,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,1.302147704774376,-0.20807587352511847,-0.8910282992504461,-0.5535580226428107,0.0,0.8328106120648208,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.302147704774376,-0.20807587352511847,-0.8910282992504461],[-0.007372632834024929,0.0,0.006641336525286438],[0.0,-6.049864366980372e-11,0.0]],[[0.04575145311135213,0.0,-0.004262444789271045],[0.28804104607492403,-2.6715037679538732e-11,-0.4333486826479186],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.24844479097942881,-1.1796846919650631e-11,-0.16513791399643535],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_094","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,0.24737707560699418,2.0,0,0,1.1665124032813834,1.2356848022008737,0.566951073241186,-0.04749207359028523,0.03501450781072383,0.038960535340604174,0.021123478111596282,0.027086888966478675,0.0014056195890270315,0.014792176696984728,-0.013081328482813882,0.029787768890853095,0.00288134490106529,0.0036947830748781498,0.00019173333171193678,1.23456e-61,1.23456e-61,1.23456e-61,-0.01638358899260988,-0.021008872382224836,-0.001090213150737599,1.23456e-61,1.23456e-61,1.23456e-61,-0.6144398198819627,-0.7879035398336758,-0.04088666849945485,1.1665124032813834,1.2356848022008737,0.566951073241186,0.05236114210380233,-0.04063759316393678,-0.0037730444800029607,-0.00434944521056659,-0.00557734568436072,-0.0002894251295678406,-0.022689549196459855,0.01676321366204476,0.01794147493753872,-0.4682029458184887,0.33190515874012494,0.378259316852556,1.23456e-61,1.23456e-61,1.23456e-61,-0.3096592841543809,0.2839750251999573,-0.63268143092479,1.23456e-61,1.23456e-61,1.23456e-61,-0.6144398198819627,-0.7879035398336758,-0.04088666849945485,1.1665124032813834,1.2356848022008737,0.566951073241186,0.618940569191,-0.7753453693891199,0.12550748972220685,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.24737707560699418,2.0,0,0,1.1665124032813834,1.2356848022008737,0.566951073241186,-0.04749207359028523,0.03501450781072383,0.038960535340604174,0.021123478111596282,0.027086888966478675,0.0014056195890270315,0.014792176696984728,-0.013081328482813882,0.029787768890853095,0.00288134490106529,0.0036947830748781498,0.00019173333171193678,1.23456e-61,1.23456e-61,1.23456e-61,-0.01638358899260988,-0.021008872382224836,-0.001090213150737599,1.23456e-61,1.23456e-61,1.23456e-61,-0.6144398198819627,-0.7879035398336758,-0.04088666849945485,1.1665124032813834,1.2356848022008737,0.566951073241186,0.05236114210380233,-0.04063759316393678,-0.0037730444800029607,-0.00434944521056659,-0.00557734568436072,-0.0002894251295678406,-0.022689549196459855,0.01676321366204476,0.01794147493753872,-0.4682029458184887,0.33190515874012494,0.378259316852556,1.23456e-61,1.23456e-61,1.23456e-61,-0.3096592841543809,0.2839750251999573,-0.63268143092479,1.23456e-61,1.23456e-61,1.23456e-61,-0.6144398198819627,-0.7879035398336758,-0.04088666849945485,1.1665124032813834,1.2356848022008737,0.566951073241186,0.16110273710617043,0.7531186229392919,-0.6378544096256802,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.1665124032813834,1.2356848022008737,0.566951073241186],[0.05236114210380233,-0.04063759316393678,-0.0037730444800029607],[-0.00434944521056659,-0.00557734568436072,-0.0002894251295678406]],[[-0.022689549196459855,0.01676321366204476,0.01794147493753872],[-0.4682029458184887,0.33190515874012494,0.378259316852556],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.3096592841543809,0.2839750251999573,-0.63268143092479],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6144398198819627,-0.7879035398336758,-0.04088666849945485]]],"normal":[-0.6144398198819627,-0.7879035398336758,-0.04088666849945485]},{"op":"state"}]}}, +{"name":"adv_sing_095","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.501626404489004,2.0,0,0,0.0,2.0,0,0,0.2777549104915491,-1.0207159819321214,-0.3942215473015729,0.0,0.03028959864561344,0.006564154416910751,-0.006723835365249773,0.05459881793231038,-0.2519404902227925,0.0,0.00502533778933855,-0.023188891520522035,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.003940850968932449,-0.060074553511034134,0.2772076948671197,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.2777549104915491,-1.0207159819321214,-0.3942215473015729,0.0,27.29884199321137,5.916018113770487,-234.06781334783426,0.0,-0.0,0.0,4.748338311679469,-21.910706628691482,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-150.78773450722431,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.2777549104915491,-1.0207159819321214,-0.3942215473015729,1,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.2777549104915491,-1.0207159819321214,-0.3942215473015729],[0.0,27.29884199321137,5.916018113770487],[-234.06781334783426,0.0,-0.0]],[[0.0,4.748338311679469,-21.910706628691482],[-0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-150.78773450722431,0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_096","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.3577596452413936,1.2834579699251294,0,0,0.0,0.0,0,0,0.00055803683024168,-9.666926734052494e-05,3.434043980262191e-05,0.18411989750628072,2.3480878529826157,-4.627500183459755,93.05191400195122,118.89722063104259,64.03323968415457,7.691114976318991,-2.799530950584256,-5.978403125451038,13.922800878940484,17.789879398619878,9.580910347929645,1.23456e-61,1.23456e-61,1.23456e-61,2.083185352969327,2.6617931633534875,1.4335342635768666,1.23456e-61,1.23456e-61,1.23456e-61,-0.5673953779197829,-0.7249902826517637,-0.390450477238513,0.00055803683024168,-9.666926734052494e-05,3.434043980262191e-05,1.1780965884440038,-1.710120396139894,1.4633715250673962,23.797753323225475,30.407614477820786,16.376312715701143,-3.0334482403091307,1.617082355196303,1.4055444901149703,-7.180948916161011,-9.175468089857223,-4.941536432002527,1.23456e-61,1.23456e-61,1.23456e-61,2.0698983523253083,2.421053856703311,2.2774132857086533,1.23456e-61,1.23456e-61,1.23456e-61,-0.5673953779197829,-0.7249902826517637,-0.390450477238513,0.00055803683024168,-9.666926734052494e-05,3.434043980262191e-05,-0.5673953779197829,-0.7249902826517637,-0.390450477238513,0,0,0,0,0,0,0],[1,1,1,1,1,0.3577596452413936,1.2834579699251294,0,0,0.0,0.0,0,0,0.00055803683024168,-9.666926734052494e-05,3.434043980262191e-05,0.18411989750628072,2.3480878529826157,-4.627500183459755,93.05191400195122,118.89722063104259,64.03323968415457,7.691114976318991,-2.799530950584256,-5.978403125451038,13.922800878940484,17.789879398619878,9.580910347929645,1.23456e-61,1.23456e-61,1.23456e-61,2.083185352969327,2.6617931633534875,1.4335342635768666,1.23456e-61,1.23456e-61,1.23456e-61,-0.5673953779197829,-0.7249902826517637,-0.390450477238513,0.00055803683024168,-9.666926734052494e-05,3.434043980262191e-05,1.1780965884440038,-1.710120396139894,1.4633715250673962,23.797753323225475,30.407614477820786,16.376312715701143,-3.0334482403091307,1.617082355196303,1.4055444901149703,-7.180948916161011,-9.175468089857223,-4.941536432002527,1.23456e-61,1.23456e-61,1.23456e-61,2.0698983523253083,2.421053856703311,2.2774132857086533,1.23456e-61,1.23456e-61,1.23456e-61,-0.5673953779197829,-0.7249902826517637,-0.390450477238513,0.00055803683024168,-9.666926734052494e-05,3.434043980262191e-05,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.00055803683024168,-9.666926734052494e-05,3.434043980262191e-05],[1.1780965884440038,-1.710120396139894,1.4633715250673962],[23.797753323225475,30.407614477820786,16.376312715701143]],[[-3.0334482403091307,1.617082355196303,1.4055444901149703],[-7.180948916161011,-9.175468089857223,-4.941536432002527],[1.23456e-61,1.23456e-61,1.23456e-61]],[[2.0698983523253083,2.421053856703311,2.2774132857086533],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.5673953779197829,-0.7249902826517637,-0.390450477238513]]],"normal":[0.5673953779197829,0.7249902826517637,0.390450477238513]},{"op":"state"}]}}, +{"name":"adv_sing_097","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,1.563909937577683,0,0,0.0,2.0,0,0,-599.2737613119266,-886.1525594341422,102.81874939465129,-0.018122658385923217,0.015206805624421837,0.05447175555953631,-2.0404442070264848e-15,-2.5412496532714946e-15,3.0584955154072717e-17,0.015451976666203947,-0.013042781074825545,-0.0528386129811592,-0.3101147588887751,0.2508753305863032,0.15579501603923693,1.23456e-61,1.23456e-61,1.23456e-61,0.0007229482419156757,-0.0005524501322017615,0.0023286561951887993,1.23456e-61,1.23456e-61,1.23456e-61,-0.6260593235826379,-0.7797189619314665,0.009384229311257783,-599.2737613119266,-886.1525594341422,102.81874939465129,-0.006124709179599664,0.004954741417928121,0.003076922776234639,-0.0009401482266380236,-0.0011708976637245915,1.409222131675356e-05,0.003761640199988201,-0.0028745054006329603,0.012116450733097651,1.9665060392976338e-05,2.449164144411495e-05,-2.947666925418197e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.0007422142032527656,-0.0009243828280989537,1.1125316753592076e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.6260593235826379,-0.7797189619314665,0.009384229311257783,-599.2737613119266,-886.1525594341422,102.81874939465129,-0.6260593235826379,-0.7797189619314665,0.009384229311257783,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.563909937577683,0,0,0.0,2.0,0,0,-599.2737613119266,-886.1525594341422,102.81874939465129,-0.018122658385923217,0.015206805624421837,0.05447175555953631,-2.0404442070264848e-15,-2.5412496532714946e-15,3.0584955154072717e-17,0.015451976666203947,-0.013042781074825545,-0.0528386129811592,-0.3101147588887751,0.2508753305863032,0.15579501603923693,1.23456e-61,1.23456e-61,1.23456e-61,0.0007229482419156757,-0.0005524501322017615,0.0023286561951887993,1.23456e-61,1.23456e-61,1.23456e-61,-0.6260593235826379,-0.7797189619314665,0.009384229311257783,-599.2737613119266,-886.1525594341422,102.81874939465129,-0.006124709179599664,0.004954741417928121,0.003076922776234639,-0.0009401482266380236,-0.0011708976637245915,1.409222131675356e-05,0.003761640199988201,-0.0028745054006329603,0.012116450733097651,1.9665060392976338e-05,2.449164144411495e-05,-2.947666925418197e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.0007422142032527656,-0.0009243828280989537,1.1125316753592076e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.6260593235826379,-0.7797189619314665,0.009384229311257783,-599.2737613119266,-886.1525594341422,102.81874939465129,0.7681505118238124,0.48414173443324277,0.41898874944893993,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-599.2737613119266,-886.1525594341422,102.81874939465129],[-0.006124709179599664,0.004954741417928121,0.003076922776234639],[-0.0009401482266380236,-0.0011708976637245915,1.409222131675356e-05]],[[0.003761640199988201,-0.0028745054006329603,0.012116450733097651],[1.9665060392976338e-05,2.449164144411495e-05,-2.947666925418197e-07],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0007422142032527656,-0.0009243828280989537,1.1125316753592076e-05],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6260593235826379,-0.7797189619314665,0.009384229311257783]]],"normal":[-0.6260593235826379,-0.7797189619314665,0.009384229311257783]},{"op":"state"}]}}, +{"name":"adv_sing_098","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.7660458799953112,1.5338295295398023,0,0,0.0,1.9819134468265043,0,0,-0.0008106161385431812,0.0004970785931338424,0.000837038554237905,0.0,-1.2774185208825273,-0.0384189126740192,1.674940067541448,0.0,0.0,-0.0,1.2260604266515216,1.3320782960582391,-3.6931501006822196,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,8.143195553116884,0.061421915247390865,-0.6598119552509795,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.0008106161385431812,0.0004970785931338424,0.000837038554237905,0.0,0.2154610030578317,0.0200572714144017,-0.3278129297763568,0.0,-0.0,0.0,0.013119680868588184,-0.14093540149807943,4.4407153219327124e-07,-0.6874259592594256,-0.06399250373150332,1.23456e-61,1.23456e-61,1.23456e-61,-0.14024439996942506,0.04009400210210682,-0.4307013516963188,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.0008106161385431812,0.0004970785931338424,0.000837038554237905,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0008106161385431812,0.0004970785931338424,0.000837038554237905],[0.0,0.2154610030578317,0.0200572714144017],[-0.3278129297763568,0.0,-0.0]],[[0.0,0.013119680868588184,-0.14093540149807943],[4.4407153219327124e-07,-0.6874259592594256,-0.06399250373150332],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.14024439996942506,0.04009400210210682,-0.4307013516963188],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_099","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.8725663978913965,0,0,0.8725267039329374,0.5103337677592559,0,0,0.3979216231133189,-0.8084486074497634,-0.0005490809198462898,-0.015711591005084853,0.040585303930584925,0.10325505909648951,0.34822368360866107,-0.17998168901931597,0.26141506420967037,-0.0953620198228853,0.03999661558290124,-0.10451822605414976,-7.749950282764698e-09,-1.0635438818173467e-08,3.0010971901008362e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.2309108173233616,0.11934778630255101,-0.1733471131117678,1.23456e-61,1.23456e-61,1.23456e-61,0.5741792947313509,0.787959733542807,-0.2223456674121551,0.3979216231133189,-0.8084486074497634,-0.0005490809198462898,0.033550417123545256,-0.00819006215265052,0.05761531492624892,7.767766396337662e-09,1.0659888289327401e-08,-3.0079963167315254e-09,0.025646686321065707,-0.010077095415915348,0.030517576187520733,4.678442659760215e-09,6.420336757884622e-09,-1.8116840247968024e-09,1.23456e-61,1.23456e-61,1.23456e-61,2.7755506615346434e-09,3.8089533700804575e-09,-1.0748065455127822e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.5741792947313509,0.787959733542807,-0.2223456674121551,0.3979216231133189,-0.8084486074497634,-0.0005490809198462898,0.5741792947313509,0.787959733542807,-0.2223456674121551,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.8725663978913965,0,0,0.8725267039329374,0.5103337677592559,0,0,0.3979216231133189,-0.8084486074497634,-0.0005490809198462898,-0.015711591005084853,0.040585303930584925,0.10325505909648951,0.34822368360866107,-0.17998168901931597,0.26141506420967037,-0.0953620198228853,0.03999661558290124,-0.10451822605414976,-7.749950282764698e-09,-1.0635438818173467e-08,3.0010971901008362e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.2309108173233616,0.11934778630255101,-0.1733471131117678,1.23456e-61,1.23456e-61,1.23456e-61,0.5741792947313509,0.787959733542807,-0.2223456674121551,0.3979216231133189,-0.8084486074497634,-0.0005490809198462898,0.033550417123545256,-0.00819006215265052,0.05761531492624892,7.767766396337662e-09,1.0659888289327401e-08,-3.0079963167315254e-09,0.025646686321065707,-0.010077095415915348,0.030517576187520733,4.678442659760215e-09,6.420336757884622e-09,-1.8116840247968024e-09,1.23456e-61,1.23456e-61,1.23456e-61,2.7755506615346434e-09,3.8089533700804575e-09,-1.0748065455127822e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.5741792947313509,0.787959733542807,-0.2223456674121551,0.3979216231133189,-0.8084486074497634,-0.0005490809198462898,-0.12827751840012833,-0.9210748746122497,0.3676492263437168,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.8725663978913965,0,0,0.8725267039329374,0.5103337677592559,0,0,0.3979216231133189,-0.8084486074497634,-0.0005490809198462898,-0.015711591005084853,0.040585303930584925,0.10325505909648951,0.34822368360866107,-0.17998168901931597,0.26141506420967037,-0.0953620198228853,0.03999661558290124,-0.10451822605414976,-7.749950282764698e-09,-1.0635438818173467e-08,3.0010971901008362e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.2309108173233616,0.11934778630255101,-0.1733471131117678,1.23456e-61,1.23456e-61,1.23456e-61,0.5741792947313509,0.787959733542807,-0.2223456674121551,0.3979216231133189,-0.8084486074497634,-0.0005490809198462898,0.033550417123545256,-0.00819006215265052,0.05761531492624892,7.767766396337662e-09,1.0659888289327401e-08,-3.0079963167315254e-09,0.025646686321065707,-0.010077095415915348,0.030517576187520733,4.678442659760215e-09,6.420336757884622e-09,-1.8116840247968024e-09,1.23456e-61,1.23456e-61,1.23456e-61,2.7755506615346434e-09,3.8089533700804575e-09,-1.0748065455127822e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.5741792947313509,0.787959733542807,-0.2223456674121551,0.3979216231133189,-0.8084486074497634,-0.0005490809198462898,0.7390786284005265,-0.381997620640068,0.5548338479823696,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.3979216231133189,-0.8084486074497634,-0.0005490809198462898],[0.033550417123545256,-0.00819006215265052,0.05761531492624892],[7.767766396337662e-09,1.0659888289327401e-08,-3.0079963167315254e-09]],[[0.025646686321065707,-0.010077095415915348,0.030517576187520733],[4.678442659760215e-09,6.420336757884622e-09,-1.8116840247968024e-09],[1.23456e-61,1.23456e-61,1.23456e-61]],[[2.7755506615346434e-09,3.8089533700804575e-09,-1.0748065455127822e-09],[1.23456e-61,1.23456e-61,1.23456e-61],[0.5741792947313509,0.787959733542807,-0.2223456674121551]]],"normal":[-0.5741792947313509,-0.787959733542807,0.2223456674121551]},{"op":"state"}]}}, +{"name":"adv_sing_100","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.0509793552427689,1.7315565929136016,0,0,1.367619035683003,0.0,0,0,0.0003642721325878975,-0.00019875240061024768,0.0009338479436894632,0.18259497504045616,-0.039595937534758235,-0.025754896008482225,0.0182589185931432,0.016202870318686675,0.10454008212153004,-0.051522303994667853,-0.04572064729478102,-0.2949870935257577,0.5799654523003333,-0.1257662230628485,-0.081803725461848,1.23456e-61,1.23456e-61,1.23456e-61,0.016990494081957283,0.01507722825980141,0.09727788664425152,1.23456e-61,1.23456e-61,1.23456e-61,-0.1838301130433804,-0.965994140503276,0.18182906822561418,0.0003642721325878975,-0.00019875240061024768,0.0009338479436894632,0.13136655716046808,0.06079497121756165,0.4557946418024024,-4.2064331296849135e-05,-0.00022104048615449642,4.160644868577498e-05,0.17304566992379034,-0.12654766475595453,-0.49735335756468363,3.804021351013047e-05,0.00019989447183556966,-3.762613460406351e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.16201163669881152,-0.144153184668579,-0.9269938521920823,1.23456e-61,1.23456e-61,1.23456e-61,-0.1838301130433804,-0.965994140503276,0.18182906822561418,0.0003642721325878975,-0.00019875240061024768,0.0009338479436894632,-0.2614359244906844,-0.845068861673076,0.46637954116392444,0,0,0,0,0,0,0],[1,1,1,1,1,1.0509793552427689,1.7315565929136016,0,0,1.367619035683003,0.0,0,0,0.0003642721325878975,-0.00019875240061024768,0.0009338479436894632,0.18259497504045616,-0.039595937534758235,-0.025754896008482225,0.0182589185931432,0.016202870318686675,0.10454008212153004,-0.051522303994667853,-0.04572064729478102,-0.2949870935257577,0.5799654523003333,-0.1257662230628485,-0.081803725461848,1.23456e-61,1.23456e-61,1.23456e-61,0.016990494081957283,0.01507722825980141,0.09727788664425152,1.23456e-61,1.23456e-61,1.23456e-61,-0.1838301130433804,-0.965994140503276,0.18182906822561418,0.0003642721325878975,-0.00019875240061024768,0.0009338479436894632,0.13136655716046808,0.06079497121756165,0.4557946418024024,-4.2064331296849135e-05,-0.00022104048615449642,4.160644868577498e-05,0.17304566992379034,-0.12654766475595453,-0.49735335756468363,3.804021351013047e-05,0.00019989447183556966,-3.762613460406351e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.16201163669881152,-0.144153184668579,-0.9269938521920823,1.23456e-61,1.23456e-61,1.23456e-61,-0.1838301130433804,-0.965994140503276,0.18182906822561418,0.0003642721325878975,-0.00019875240061024768,0.0009338479436894632,-0.17008386062049508,-0.1509316082364861,-0.9738024080847079,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0003642721325878975,-0.00019875240061024768,0.0009338479436894632],[0.13136655716046808,0.06079497121756165,0.4557946418024024],[-4.2064331296849135e-05,-0.00022104048615449642,4.160644868577498e-05]],[[0.17304566992379034,-0.12654766475595453,-0.49735335756468363],[3.804021351013047e-05,0.00019989447183556966,-3.762613460406351e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.16201163669881152,-0.144153184668579,-0.9269938521920823],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.1838301130433804,-0.965994140503276,0.18182906822561418]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_101","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,1.5054254763972554,0,0,0.0,1.8913086394064753,0,0,0.7371986699835267,0.6756703136482747,-0.27656726952080835,1.7124944693614141,0.0,0.6762611371177979,0.0,-6.220128906213459e-06,0.0,0.5255583506326287,0.0,-1.3308701615191438,-0.375339450877224,-4.788023615295764e-06,-0.14822090721849346,1.23456e-61,1.23456e-61,1.23456e-61,-0.21445439919715067,-3.3810297141420734e-07,0.5430623651102604,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.7371986699835267,0.6756703136482747,-0.27656726952080835,0.7350220103337063,0.0,1.4769292264644074,0.0,2.7504945033900657e-06,0.0,0.9571217342166802,0.0,-0.5715375329529739,-0.6694172792263812,1.2448658130425313e-07,-0.26435173868021083,1.23456e-61,1.23456e-61,1.23456e-61,0.0,3.6730831389801137e-06,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.7371986699835267,0.6756703136482747,-0.27656726952080835,0.6004874379095749,0.5078523909418704,-0.6176574988838233,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.5054254763972554,0,0,0.0,1.8913086394064753,0,0,0.7371986699835267,0.6756703136482747,-0.27656726952080835,1.7124944693614141,0.0,0.6762611371177979,0.0,-6.220128906213459e-06,0.0,0.5255583506326287,0.0,-1.3308701615191438,-0.375339450877224,-4.788023615295764e-06,-0.14822090721849346,1.23456e-61,1.23456e-61,1.23456e-61,-0.21445439919715067,-3.3810297141420734e-07,0.5430623651102604,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.7371986699835267,0.6756703136482747,-0.27656726952080835,0.7350220103337063,0.0,1.4769292264644074,0.0,2.7504945033900657e-06,0.0,0.9571217342166802,0.0,-0.5715375329529739,-0.6694172792263812,1.2448658130425313e-07,-0.26435173868021083,1.23456e-61,1.23456e-61,1.23456e-61,0.0,3.6730831389801137e-06,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.7371986699835267,0.6756703136482747,-0.27656726952080835,-0.36729645054878013,-0.0,0.9301039282866551,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.7371986699835267,0.6756703136482747,-0.27656726952080835],[0.7350220103337063,0.0,1.4769292264644074],[0.0,2.7504945033900657e-06,0.0]],[[0.9571217342166802,0.0,-0.5715375329529739],[-0.6694172792263812,1.2448658130425313e-07,-0.26435173868021083],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,3.6730831389801137e-06,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_102","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.5472341702427004,2.0,0,0,0.41644096269340714,0.0,0,0,26.548410602405205,-984.8307780025463,-102.49080526019938,-16.64140726442693,-15.632862584157074,19.10547856728414,3867.4634042148996,2065.25339841037,5058.647179226315,34.99488035089919,9.413200099784092,-30.5993100350286,-29807.20536743018,-15914.604709956822,-38984.13038466143,1.23456e-61,1.23456e-61,1.23456e-61,252750.60526278717,134946.31794831424,330571.3060780032,1.23456e-61,1.23456e-61,1.23456e-61,0.5777692273763507,0.30847732205118567,0.7556616052685646,26.548410602405205,-984.8307780025463,-102.49080526019938,4.90224626247117,7.509310649639214,-6.813657117457778,-0.00018328338253940227,-9.785700647121744e-05,-0.00023971545819029928,9.436026758789453,-9.271976827756335,-3.4296453464250702,0.2626910707772985,0.4025101636842198,-0.3654328103555226,1.23456e-61,1.23456e-61,1.23456e-61,-0.402943002683916,0.39601960427436683,0.14654514979759103,1.23456e-61,1.23456e-61,1.23456e-61,-0.5777692273763507,-0.30847732205118567,-0.7556616052685646,26.548410602405205,-984.8307780025463,-102.49080526019938,0.6904542078166019,-0.6784503243951893,-0.2509544664603738,0,0,0,0,0,0,0],[1,1,1,1,1,1.5472341702427004,2.0,0,0,0.41644096269340714,0.0,0,0,26.548410602405205,-984.8307780025463,-102.49080526019938,-16.64140726442693,-15.632862584157074,19.10547856728414,3867.4634042148996,2065.25339841037,5058.647179226315,34.99488035089919,9.413200099784092,-30.5993100350286,-29807.20536743018,-15914.604709956822,-38984.13038466143,1.23456e-61,1.23456e-61,1.23456e-61,252750.60526278717,134946.31794831424,330571.3060780032,1.23456e-61,1.23456e-61,1.23456e-61,0.5777692273763507,0.30847732205118567,0.7556616052685646,26.548410602405205,-984.8307780025463,-102.49080526019938,4.90224626247117,7.509310649639214,-6.813657117457778,-0.00018328338253940227,-9.785700647121744e-05,-0.00023971545819029928,9.436026758789453,-9.271976827756335,-3.4296453464250702,0.2626910707772985,0.4025101636842198,-0.3654328103555226,1.23456e-61,1.23456e-61,1.23456e-61,-0.402943002683916,0.39601960427436683,0.14654514979759103,1.23456e-61,1.23456e-61,1.23456e-61,-0.5777692273763507,-0.30847732205118567,-0.7556616052685646,26.548410602405205,-984.8307780025463,-102.49080526019938,-0.28329414277936604,0.18135034388669474,-0.9417305779463049,0,0,0,0,0,0,0],[1,1,1,1,1,1.5472341702427004,2.0,0,0,0.41644096269340714,0.0,0,0,26.548410602405205,-984.8307780025463,-102.49080526019938,-16.64140726442693,-15.632862584157074,19.10547856728414,3867.4634042148996,2065.25339841037,5058.647179226315,34.99488035089919,9.413200099784092,-30.5993100350286,-29807.20536743018,-15914.604709956822,-38984.13038466143,1.23456e-61,1.23456e-61,1.23456e-61,252750.60526278717,134946.31794831424,330571.3060780032,1.23456e-61,1.23456e-61,1.23456e-61,0.5777692273763507,0.30847732205118567,0.7556616052685646,26.548410602405205,-984.8307780025463,-102.49080526019938,4.90224626247117,7.509310649639214,-6.813657117457778,-0.00018328338253940227,-9.785700647121744e-05,-0.00023971545819029928,9.436026758789453,-9.271976827756335,-3.4296453464250702,0.2626910707772985,0.4025101636842198,-0.3654328103555226,1.23456e-61,1.23456e-61,1.23456e-61,-0.402943002683916,0.39601960427436683,0.14654514979759103,1.23456e-61,1.23456e-61,1.23456e-61,-0.5777692273763507,-0.30847732205118567,-0.7556616052685646,26.548410602405205,-984.8307780025463,-102.49080526019938,-0.6904542078166019,0.6784503243951893,0.2509544664603738,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[26.548410602405205,-984.8307780025463,-102.49080526019938],[4.90224626247117,7.509310649639214,-6.813657117457778],[-0.00018328338253940227,-9.785700647121744e-05,-0.00023971545819029928]],[[9.436026758789453,-9.271976827756335,-3.4296453464250702],[0.2626910707772985,0.4025101636842198,-0.3654328103555226],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.402943002683916,0.39601960427436683,0.14654514979759103],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.5777692273763507,-0.30847732205118567,-0.7556616052685646]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_103","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,1.0060528084416482,0,0,2.0,2.0,0,0,-1.0325349707605151,-0.7334955360218118,-1.288192187234726,0.3174864024821681,0.173441246289844,-0.1159473854748993,0.007818806120668268,0.00994578792639562,0.00770640294094387,-0.02523009009990934,0.05199222792341271,0.1316426202053393,-0.6131229379558562,-0.0714771825711103,0.7143133212245016,1.23456e-61,1.23456e-61,1.23456e-61,1.1314237267768643e-11,-1.523797235629399e-11,8.186675074042193e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.547387289324068,-0.7372191501294056,0.3960745891482134,-1.0325349707605151,-0.7334955360218118,-1.288192187234726,0.6021149815408302,1.063369590266822,1.1471231693505477,0.3104145672290573,0.3948579196745353,0.30595204732198195,2.0474766728995233,-0.20435420451959674,-3.2100431932488047,-0.1289427721637364,-0.015032003368480278,0.15022360791320546,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.547387289324068,-0.7372191501294056,0.3960745891482134,-1.0325349707605151,-0.7334955360218118,-1.288192187234726,-0.5278146992969449,-0.6713983045268729,-0.5202268350292168,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.0060528084416482,0,0,2.0,2.0,0,0,-1.0325349707605151,-0.7334955360218118,-1.288192187234726,0.3174864024821681,0.173441246289844,-0.1159473854748993,0.007818806120668268,0.00994578792639562,0.00770640294094387,-0.02523009009990934,0.05199222792341271,0.1316426202053393,-0.6131229379558562,-0.0714771825711103,0.7143133212245016,1.23456e-61,1.23456e-61,1.23456e-61,1.1314237267768643e-11,-1.523797235629399e-11,8.186675074042193e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.547387289324068,-0.7372191501294056,0.3960745891482134,-1.0325349707605151,-0.7334955360218118,-1.288192187234726,0.6021149815408302,1.063369590266822,1.1471231693505477,0.3104145672290573,0.3948579196745353,0.30595204732198195,2.0474766728995233,-0.20435420451959674,-3.2100431932488047,-0.1289427721637364,-0.015032003368480278,0.15022360791320546,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.547387289324068,-0.7372191501294056,0.3960745891482134,-1.0325349707605151,-0.7334955360218118,-1.288192187234726,0.5278146992969449,0.6713983045268729,0.5202268350292168,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.0060528084416482,0,0,2.0,2.0,0,0,-1.0325349707605151,-0.7334955360218118,-1.288192187234726,0.3174864024821681,0.173441246289844,-0.1159473854748993,0.007818806120668268,0.00994578792639562,0.00770640294094387,-0.02523009009990934,0.05199222792341271,0.1316426202053393,-0.6131229379558562,-0.0714771825711103,0.7143133212245016,1.23456e-61,1.23456e-61,1.23456e-61,1.1314237267768643e-11,-1.523797235629399e-11,8.186675074042193e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.547387289324068,-0.7372191501294056,0.3960745891482134,-1.0325349707605151,-0.7334955360218118,-1.288192187234726,0.6021149815408302,1.063369590266822,1.1471231693505477,0.3104145672290573,0.3948579196745353,0.30595204732198195,2.0474766728995233,-0.20435420451959674,-3.2100431932488047,-0.1289427721637364,-0.015032003368480278,0.15022360791320546,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.547387289324068,-0.7372191501294056,0.3960745891482134,-1.0325349707605151,-0.7334955360218118,-1.288192187234726,0.6494449928150381,0.07571156688985686,-0.7566300020132416,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-1.0325349707605151,-0.7334955360218118,-1.288192187234726],[0.6021149815408302,1.063369590266822,1.1471231693505477],[0.3104145672290573,0.3948579196745353,0.30595204732198195]],[[2.0474766728995233,-0.20435420451959674,-3.2100431932488047],[-0.1289427721637364,-0.015032003368480278,0.15022360791320546],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0.547387289324068,-0.7372191501294056,0.3960745891482134]]],"normal":[0.547387289324068,-0.7372191501294056,0.3960745891482134]},{"op":"state"}]}}, +{"name":"adv_sing_104","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,1.5807079265528685,0,0,2.0,0.0,0,0,0.2488634207546534,1.1121415239686212,1.9933095111494175,0.05604836116199999,0.0,0.04506348978459305,-0.5847754937829913,-51.72136900512111,0.7273228999996756,0.0387228671080562,0.0,-0.04816212084938205,-0.19572057432250609,-0.0,-0.15736146282893773,1.23456e-61,1.23456e-61,1.23456e-61,-0.3797138806827885,-38.19050321778661,0.4722745802525443,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.2488634207546534,1.1121415239686212,1.9933095111494175,0.09602427391546853,0.0,0.07720455686751561,0.12971418536159834,-5.534319662285132e-09,-0.16133387679768954,0.14432966582557435,0.0,-0.17951209005895263,0.011611331529102169,-9.177180709447625e-09,0.009335636384351111,1.23456e-61,1.23456e-61,1.23456e-61,0.3152686981503565,-4.4325296825963476e-08,-0.39211996100324464,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.2488634207546534,1.1121415239686212,1.9933095111494175,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.5807079265528685,0,0,2.0,0.0,0,0,0.2488634207546534,1.1121415239686212,1.9933095111494175,0.05604836116199999,0.0,0.04506348978459305,-0.5847754937829913,-51.72136900512111,0.7273228999996756,0.0387228671080562,0.0,-0.04816212084938205,-0.19572057432250609,-0.0,-0.15736146282893773,1.23456e-61,1.23456e-61,1.23456e-61,-0.3797138806827885,-38.19050321778661,0.4722745802525443,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.2488634207546534,1.1121415239686212,1.9933095111494175,0.09602427391546853,0.0,0.07720455686751561,0.12971418536159834,-5.534319662285132e-09,-0.16133387679768954,0.14432966582557435,0.0,-0.17951209005895263,0.011611331529102169,-9.177180709447625e-09,0.009335636384351111,1.23456e-61,1.23456e-61,1.23456e-61,0.3152686981503565,-4.4325296825963476e-08,-0.39211996100324464,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.2488634207546534,1.1121415239686212,1.9933095111494175,-0.6265991700243386,-0.0,0.7793416966419864,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.2488634207546534,1.1121415239686212,1.9933095111494175],[0.09602427391546853,0.0,0.07720455686751561],[0.12971418536159834,-5.534319662285132e-09,-0.16133387679768954]],[[0.14432966582557435,0.0,-0.17951209005895263],[0.011611331529102169,-9.177180709447625e-09,0.009335636384351111],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.3152686981503565,-4.4325296825963476e-08,-0.39211996100324464],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_105","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.747074649993454,0,0,0.0,1.686379906729774,0,0,-0.3456881999557615,0.8005045828935227,0.37387205994758976,-0.062069220125007575,0.49296971746002793,-0.4857770399961725,308.5652691750804,-10.308467555186976,-49.88742974282525,0.06661227299093425,0.34326169127578005,0.3398329553184974,-159.55607700970938,5.377252176451183,25.843839289797817,1.23456e-61,1.23456e-61,1.23456e-61,83.0016129313019,-2.1234480671338525,-12.760259269372858,1.23456e-61,1.23456e-61,1.23456e-61,-0.986589104326567,0.03324936604063175,0.15980118548370803,-0.3456881999557615,0.8005045828935227,0.37387205994758976,-1.337528177393367,4.157704129934752,-9.122784343796638,-68.00465526702965,2.984226380079484,11.717575521403631,-0.18272495154296303,5.396836939550846,-2.251021180204508,34.255180974044514,-1.7427316752660764,-4.95420593487557,1.23456e-61,1.23456e-61,1.23456e-61,146.2440677406306,-4.703217987911678,-23.458908793452338,1.23456e-61,1.23456e-61,1.23456e-61,-0.986589104326567,0.03324936604063175,0.15980118548370803,-0.3456881999557615,0.8005045828935227,0.37387205994758976,0.0893243146580456,-0.7094366913359378,0.6990856512596922,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.3456881999557615,0.8005045828935227,0.37387205994758976],[-1.337528177393367,4.157704129934752,-9.122784343796638],[-68.00465526702965,2.984226380079484,11.717575521403631]],[[-0.18272495154296303,5.396836939550846,-2.251021180204508],[34.255180974044514,-1.7427316752660764,-4.95420593487557],[1.23456e-61,1.23456e-61,1.23456e-61]],[[146.2440677406306,-4.703217987911678,-23.458908793452338],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.986589104326567,0.03324936604063175,0.15980118548370803]]],"normal":[0.986589104326567,-0.03324936604063175,-0.15980118548370803]},{"op":"state"}]}}, +{"name":"adv_sing_106","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,0.3163724903285976,0.0,0,0,-0.00018677119453281633,0.00037722684887827305,0.00048013380602861136,-0.001115947724797079,-0.04925024416603118,0.0,0.0,0.0,6.398347506703473e-11,-0.039639348209660065,0.007836055570732433,0.0,-0.3321215992081061,0.19959056441537418,-3.231954203460631e-10,1.23456e-61,1.23456e-61,1.23456e-61,-0.06649510198029024,-0.11064881585904748,1.632535269821338e-09,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00018677119453281633,0.00037722684887827305,0.00048013380602861136,-0.037293957252977496,0.0034347646948995423,0.0,0.038572165545190704,0.06418464391496936,1.3915376624087883e-09,-0.02948551311350247,0.052102977401401455,-0.0,0.0,-0.0,1.4232156646068595e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.08827675397549939,-0.1468938012632075,1.699403362790008e-09,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-0.00018677119453281633,0.00037722684887827305,0.00048013380602861136,-0.5150983244756612,-0.8571310962287896,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.3163724903285976,0.0,0,0,-0.00018677119453281633,0.00037722684887827305,0.00048013380602861136,-0.001115947724797079,-0.04925024416603118,0.0,0.0,0.0,6.398347506703473e-11,-0.039639348209660065,0.007836055570732433,0.0,-0.3321215992081061,0.19959056441537418,-3.231954203460631e-10,1.23456e-61,1.23456e-61,1.23456e-61,-0.06649510198029024,-0.11064881585904748,1.632535269821338e-09,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00018677119453281633,0.00037722684887827305,0.00048013380602861136,-0.037293957252977496,0.0034347646948995423,0.0,0.038572165545190704,0.06418464391496936,1.3915376624087883e-09,-0.02948551311350247,0.052102977401401455,-0.0,0.0,-0.0,1.4232156646068595e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.08827675397549939,-0.1468938012632075,1.699403362790008e-09,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-0.00018677119453281633,0.00037722684887827305,0.00048013380602861136,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.00018677119453281633,0.00037722684887827305,0.00048013380602861136],[-0.037293957252977496,0.0034347646948995423,0.0],[0.038572165545190704,0.06418464391496936,1.3915376624087883e-09]],[[-0.02948551311350247,0.052102977401401455,-0.0],[0.0,-0.0,1.4232156646068595e-09],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.08827675397549939,-0.1468938012632075,1.699403362790008e-09],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,-1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_107","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,2.0,2.0,0,0,0.0007123923426182217,7.34203896663197e-05,0.000287695652989419,-0.03859280004454661,-0.03880359101375486,-0.00272441592733246,-1.8411000586134026e-12,1.7682158189297865e-12,8.956352581069334e-13,-0.027636667373512558,0.0020067108260024627,-0.06077269430287395,0.1803998450993983,0.1571202010311178,0.06064046715233776,1.23456e-61,1.23456e-61,1.23456e-61,0.03660723883031339,-0.2985866017870312,0.6647383929646632,1.23456e-61,1.23456e-61,1.23456e-61,-0.6805645860900259,0.6536228497184983,0.33107252149035454,0.0007123923426182217,7.34203896663197e-05,0.000287695652989419,-0.9765961111713972,0.1824154421570947,-2.3676613987268285,-2.2850148926518354,2.540356987388763,0.21561397444460084,-4.446618329082377,-1.9099594230637258,-5.36987435163644,-6.240256599774396,5.217292213080291,2.6871505167281016,1.23456e-61,1.23456e-61,1.23456e-61,-15.124298795805762,14.52556815467465,7.35747912901037,1.23456e-61,1.23456e-61,1.23456e-61,-0.6805645860900259,0.6536228497184983,0.33107252149035454,0.0007123923426182217,7.34203896663197e-05,0.000287695652989419,-0.7309682854888813,-0.636640701659697,-0.24571117719732274,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,2.0,2.0,0,0,0.0007123923426182217,7.34203896663197e-05,0.000287695652989419,-0.03859280004454661,-0.03880359101375486,-0.00272441592733246,-1.8411000586134026e-12,1.7682158189297865e-12,8.956352581069334e-13,-0.027636667373512558,0.0020067108260024627,-0.06077269430287395,0.1803998450993983,0.1571202010311178,0.06064046715233776,1.23456e-61,1.23456e-61,1.23456e-61,0.03660723883031339,-0.2985866017870312,0.6647383929646632,1.23456e-61,1.23456e-61,1.23456e-61,-0.6805645860900259,0.6536228497184983,0.33107252149035454,0.0007123923426182217,7.34203896663197e-05,0.000287695652989419,-0.9765961111713972,0.1824154421570947,-2.3676613987268285,-2.2850148926518354,2.540356987388763,0.21561397444460084,-4.446618329082377,-1.9099594230637258,-5.36987435163644,-6.240256599774396,5.217292213080291,2.6871505167281016,1.23456e-61,1.23456e-61,1.23456e-61,-15.124298795805762,14.52556815467465,7.35747912901037,1.23456e-61,1.23456e-61,1.23456e-61,-0.6805645860900259,0.6536228497184983,0.33107252149035454,0.0007123923426182217,7.34203896663197e-05,0.000287695652989419,-0.050171802534463454,0.4092258390132742,-0.9110526894281826,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,2.0,2.0,0,0,0.0007123923426182217,7.34203896663197e-05,0.000287695652989419,-0.03859280004454661,-0.03880359101375486,-0.00272441592733246,-1.8411000586134026e-12,1.7682158189297865e-12,8.956352581069334e-13,-0.027636667373512558,0.0020067108260024627,-0.06077269430287395,0.1803998450993983,0.1571202010311178,0.06064046715233776,1.23456e-61,1.23456e-61,1.23456e-61,0.03660723883031339,-0.2985866017870312,0.6647383929646632,1.23456e-61,1.23456e-61,1.23456e-61,-0.6805645860900259,0.6536228497184983,0.33107252149035454,0.0007123923426182217,7.34203896663197e-05,0.000287695652989419,-0.9765961111713972,0.1824154421570947,-2.3676613987268285,-2.2850148926518354,2.540356987388763,0.21561397444460084,-4.446618329082377,-1.9099594230637258,-5.36987435163644,-6.240256599774396,5.217292213080291,2.6871505167281016,1.23456e-61,1.23456e-61,1.23456e-61,-15.124298795805762,14.52556815467465,7.35747912901037,1.23456e-61,1.23456e-61,1.23456e-61,-0.6805645860900259,0.6536228497184983,0.33107252149035454,0.0007123923426182217,7.34203896663197e-05,0.000287695652989419,0.5568333519984542,0.5888368816204431,-0.5858393507999252,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0007123923426182217,7.34203896663197e-05,0.000287695652989419],[-0.9765961111713972,0.1824154421570947,-2.3676613987268285],[-2.2850148926518354,2.540356987388763,0.21561397444460084]],[[-4.446618329082377,-1.9099594230637258,-5.36987435163644],[-6.240256599774396,5.217292213080291,2.6871505167281016],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-15.124298795805762,14.52556815467465,7.35747912901037],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6805645860900259,0.6536228497184983,0.33107252149035454]]],"normal":[-0.6805645860900259,0.6536228497184983,0.33107252149035454]},{"op":"state"}]}}, +{"name":"adv_sing_108","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.984032267059999,0,0,1.5428888942508918,0.0,0,0,0.14245515089291505,-0.8094212547780191,0.8278822205897167,-1.781543382557482,-0.4285274307760699,-0.08469826650143988,66.70902618336966,3815.2372114444256,-20689.797076433726,2.6283081326567923,-1.3581862234422148,-0.24210982611836188,-134.59427421380775,-7792.347603808942,42251.869045795225,1.23456e-61,1.23456e-61,1.23456e-61,274.61026536569443,15912.647338244788,-86285.54377348522,1.23456e-61,1.23456e-61,1.23456e-61,0.0031297827698985835,0.18135931443199693,-0.983411919557908,0.14245515089291505,-0.8094212547780191,0.8278822205897167,-0.011207728388899291,-0.01177873064070413,-0.0022078848404182704,0.0,0.0,0.0,0.006306949077496529,-0.0009500262361981954,-0.0001551300358495965,0.13729606686659188,0.3447533418844861,0.06401583644121889,1.23456e-61,1.23456e-61,1.23456e-61,0.7451061165223439,-0.28733514205884814,-0.05061854864760387,1.23456e-61,1.23456e-61,1.23456e-61,0.0031297827698985835,0.18135931443199693,-0.983411919557908,0.14245515089291505,-0.8094212547780191,0.8278822205897167,0.658328013606562,0.38036030189213316,-0.6495615961903565,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.984032267059999,0,0,1.5428888942508918,0.0,0,0,0.14245515089291505,-0.8094212547780191,0.8278822205897167,-1.781543382557482,-0.4285274307760699,-0.08469826650143988,66.70902618336966,3815.2372114444256,-20689.797076433726,2.6283081326567923,-1.3581862234422148,-0.24210982611836188,-134.59427421380775,-7792.347603808942,42251.869045795225,1.23456e-61,1.23456e-61,1.23456e-61,274.61026536569443,15912.647338244788,-86285.54377348522,1.23456e-61,1.23456e-61,1.23456e-61,0.0031297827698985835,0.18135931443199693,-0.983411919557908,0.14245515089291505,-0.8094212547780191,0.8278822205897167,-0.011207728388899291,-0.01177873064070413,-0.0022078848404182704,0.0,0.0,0.0,0.006306949077496529,-0.0009500262361981954,-0.0001551300358495965,0.13729606686659188,0.3447533418844861,0.06401583644121889,1.23456e-61,1.23456e-61,1.23456e-61,0.7451061165223439,-0.28733514205884814,-0.05061854864760387,1.23456e-61,1.23456e-61,1.23456e-61,0.0031297827698985835,0.18135931443199693,-0.983411919557908,0.14245515089291505,-0.8094212547780191,0.8278822205897167,-0.3466411734302455,0.7814215698567761,0.5188643628593835,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.14245515089291505,-0.8094212547780191,0.8278822205897167],[-0.011207728388899291,-0.01177873064070413,-0.0022078848404182704],[0.0,0.0,0.0]],[[0.006306949077496529,-0.0009500262361981954,-0.0001551300358495965],[0.13729606686659188,0.3447533418844861,0.06401583644121889],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.7451061165223439,-0.28733514205884814,-0.05061854864760387],[1.23456e-61,1.23456e-61,1.23456e-61],[0.0031297827698985835,0.18135931443199693,-0.983411919557908]]],"normal":[-0.0031297827698985835,-0.18135931443199693,0.983411919557908]},{"op":"state"}]}}, +{"name":"adv_sing_109","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.3379337648866374,2.0,0,0,0.0,2.0,0,0,-633.0481222370792,-62.50908567376223,-315.2285473833323,7.735983587856092,6.117848961631337,16.728772748998068,0.2887402976754582,-0.05441374488539475,-0.11362430226319417,-25.62237162218034,4.828592382546067,10.08284648182208,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,2.748199474454953e-11,7.293058715601502e-10,-2.794217782425938e-10,1.23456e-61,1.23456e-61,1.23456e-61,0.035166374097064634,0.9332307697772396,-0.35755231291916745,-633.0481222370792,-62.50908567376223,-315.2285473833323,-0.07013170171453696,0.032740505843335974,0.07855681196184972,4.2767828554880086e-16,1.134955041250706e-14,-4.34839712963305e-15,-0.03647167058814155,0.08390520126532135,0.21540998721133908,7.816374026162625e-16,2.074277185691272e-14,-7.94725837807951e-15,1.23456e-61,1.23456e-61,1.23456e-61,0.5442362543303723,-0.10256252117149256,-0.21416638097252566,1.23456e-61,1.23456e-61,1.23456e-61,0.035166374097064634,0.9332307697772396,-0.35755231291916745,-633.0481222370792,-62.50908567376223,-315.2285473833323,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.3379337648866374,2.0,0,0,0.0,2.0,0,0,-633.0481222370792,-62.50908567376223,-315.2285473833323,7.735983587856092,6.117848961631337,16.728772748998068,0.2887402976754582,-0.05441374488539475,-0.11362430226319417,-25.62237162218034,4.828592382546067,10.08284648182208,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,2.748199474454953e-11,7.293058715601502e-10,-2.794217782425938e-10,1.23456e-61,1.23456e-61,1.23456e-61,0.035166374097064634,0.9332307697772396,-0.35755231291916745,-633.0481222370792,-62.50908567376223,-315.2285473833323,-0.07013170171453696,0.032740505843335974,0.07855681196184972,4.2767828554880086e-16,1.134955041250706e-14,-4.34839712963305e-15,-0.03647167058814155,0.08390520126532135,0.21540998721133908,7.816374026162625e-16,2.074277185691272e-14,-7.94725837807951e-15,1.23456e-61,1.23456e-61,1.23456e-61,0.5442362543303723,-0.10256252117149256,-0.21416638097252566,1.23456e-61,1.23456e-61,1.23456e-61,0.035166374097064634,0.9332307697772396,-0.35755231291916745,-633.0481222370792,-62.50908567376223,-315.2285473833323,-0.7019540297613963,0.6539800718733402,0.28208262210614393,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-633.0481222370792,-62.50908567376223,-315.2285473833323],[-0.07013170171453696,0.032740505843335974,0.07855681196184972],[4.2767828554880086e-16,1.134955041250706e-14,-4.34839712963305e-15]],[[-0.03647167058814155,0.08390520126532135,0.21540998721133908],[7.816374026162625e-16,2.074277185691272e-14,-7.94725837807951e-15],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.5442362543303723,-0.10256252117149256,-0.21416638097252566],[1.23456e-61,1.23456e-61,1.23456e-61],[0.035166374097064634,0.9332307697772396,-0.35755231291916745]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_110","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.7704330002754,0,0,0.0,0.8448310603828428,0,0,0.9879628278574093,-1.9659288972329567,-0.6837487283997294,-0.05129147406068752,-0.006938446926469961,0.0,0.0917198794094895,-0.6780260576230532,9.668301627216543e-05,-0.003527317333660215,0.026075187637890147,0.0,0.0,0.0,0.0002540145227787023,1.23456e-61,1.23456e-61,1.23456e-61,-0.12119032338001841,0.8958820891658885,0.0006673703435240034,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.9879628278574093,-1.9659288972329567,-0.6837487283997294,-1.5331844831120771,-0.2074013149236802,0.0,-0.009020089806356794,0.06667972058167827,60872.83888627392,-0.15096602369868706,1.1159946844943078,0.0,0.0,0.0,14630.114645295915,1.23456e-61,1.23456e-61,1.23456e-61,-0.008716597711289666,0.0644361987839726,18477.22226303705,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.9879628278574093,-1.9659288972329567,-0.6837487283997294,0,0,1,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.9879628278574093,-1.9659288972329567,-0.6837487283997294],[-1.5331844831120771,-0.2074013149236802,0.0],[-0.009020089806356794,0.06667972058167827,60872.83888627392]],[[-0.15096602369868706,1.1159946844943078,0.0],[0.0,0.0,14630.114645295915],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.008716597711289666,0.0644361987839726,18477.22226303705],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_111","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.2831947843051417,0.205362111020154,0,0,2.0,0.4867281167109816,0,0,-0.538736572826046,0.6008716321836629,0.16088296502969368,-7.489965950855014,-0.0,-1.8513617283872155,0.0,-416.6979418983099,0.0,4.185127458053551,0.0,-4.9655348184141905,0.2757983745099156,155.06480772814086,-0.5550922252352705,1.23456e-61,1.23456e-61,1.23456e-61,-0.3716311685081666,-295.21384388068424,-0.18464548327682173,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.538736572826046,0.6008716321836629,0.16088296502969368,5.073792206278413,0.0,-10.21188979510537,0.0,-0.0,0.0,-18.0125150023007,0.0,-8.949544116501432,0.3804041683902802,0.0,-0.7656295897166044,1.23456e-61,1.23456e-61,1.23456e-61,0.4529100155682647,0.0,0.22502899592954187,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.538736572826046,0.6008716321836629,0.16088296502969368,-0.6114656407156648,0.788277078774151,0.0687678507987004,0,0,0,0,0,0,0],[1,1,1,1,1,1.2831947843051417,0.205362111020154,0,0,2.0,0.4867281167109816,0,0,-0.538736572826046,0.6008716321836629,0.16088296502969368,-7.489965950855014,-0.0,-1.8513617283872155,0.0,-416.6979418983099,0.0,4.185127458053551,0.0,-4.9655348184141905,0.2757983745099156,155.06480772814086,-0.5550922252352705,1.23456e-61,1.23456e-61,1.23456e-61,-0.3716311685081666,-295.21384388068424,-0.18464548327682173,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.538736572826046,0.6008716321836629,0.16088296502969368,5.073792206278413,0.0,-10.21188979510537,0.0,-0.0,0.0,-18.0125150023007,0.0,-8.949544116501432,0.3804041683902802,0.0,-0.7656295897166044,1.23456e-61,1.23456e-61,1.23456e-61,0.4529100155682647,0.0,0.22502899592954187,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.538736572826046,0.6008716321836629,0.16088296502969368,0.8110089625171327,0.5705658899812331,0.12930208005599653,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.538736572826046,0.6008716321836629,0.16088296502969368],[5.073792206278413,0.0,-10.21188979510537],[0.0,-0.0,0.0]],[[-18.0125150023007,0.0,-8.949544116501432],[0.3804041683902802,0.0,-0.7656295897166044],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.4529100155682647,0.0,0.22502899592954187],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_112","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.5420737816395851,0.0,0,0,2.0,0.0,0,0,1.7535243414934962,-1.4390449879942264,-0.5673403425240511,-0.004634636494630233,-0.007024578844850448,-0.008773603586340465,0.11714902643299747,-0.21957280190709075,0.11391708049362638,-0.004515107074367167,0.008462679889799677,-0.004390542805076775,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-9.118668546590592e-11,-1.6716435938437715e-11,6.155316424141737e-11,1.23456e-61,1.23456e-61,1.23456e-61,-0.8194344808310232,-0.1502195625882286,0.5531376091362732,1.7535243414934962,-1.4390449879942264,-0.5673403425240511,-4.977398164107665,-7.5440923762841345,-9.422468932322076,-0.0,0.0,0.0,-10.027631460146138,18.794822293775898,-9.750985842451342,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.004330176011084042,0.008116062995788428,-0.0042107136812133674,1.23456e-61,1.23456e-61,1.23456e-61,-0.8194344808310232,-0.1502195625882286,0.5531376091362732,1.7535243414934962,-1.4390449879942264,-0.5673403425240511,0.3812215617474757,0.5778060309486732,0.7216718862877759,0,0,0,0,0,0,0],[1,1,1,1,1,0.5420737816395851,0.0,0,0,2.0,0.0,0,0,1.7535243414934962,-1.4390449879942264,-0.5673403425240511,-0.004634636494630233,-0.007024578844850448,-0.008773603586340465,0.11714902643299747,-0.21957280190709075,0.11391708049362638,-0.004515107074367167,0.008462679889799677,-0.004390542805076775,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-9.118668546590592e-11,-1.6716435938437715e-11,6.155316424141737e-11,1.23456e-61,1.23456e-61,1.23456e-61,-0.8194344808310232,-0.1502195625882286,0.5531376091362732,1.7535243414934962,-1.4390449879942264,-0.5673403425240511,-4.977398164107665,-7.5440923762841345,-9.422468932322076,-0.0,0.0,0.0,-10.027631460146138,18.794822293775898,-9.750985842451342,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.004330176011084042,0.008116062995788428,-0.0042107136812133674,1.23456e-61,1.23456e-61,1.23456e-61,-0.8194344808310232,-0.1502195625882286,0.5531376091362732,1.7535243414934962,-1.4390449879942264,-0.5673403425240511,0.4280154815938401,-0.8022308106867638,0.416207248736553,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.7535243414934962,-1.4390449879942264,-0.5673403425240511],[-4.977398164107665,-7.5440923762841345,-9.422468932322076],[-0.0,0.0,0.0]],[[-10.027631460146138,18.794822293775898,-9.750985842451342],[-0.0,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.004330176011084042,0.008116062995788428,-0.0042107136812133674],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.8194344808310232,-0.1502195625882286,0.5531376091362732]]],"normal":[0.8194344808310232,0.1502195625882286,-0.5531376091362732]},{"op":"state"}]}}, +{"name":"adv_sing_113","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,1.4424945375187381,0,0,2.0,0.2363429902758296,0,0,1.0498791471055648,-0.549575048803765,-0.8441116428469626,0.04535517095854438,-0.5854053621622155,0.5987287391357553,-0.08755442161647757,-0.3611392262265355,0.26202279389937105,-0.9403302098346775,-1.129192776360406,0.20001216194039995,-0.546485930006433,-0.13958406242838473,-0.37499233696414386,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.5584977033927608,0.5715684673071594,0.6011570530944111,1.0498791471055648,-0.549575048803765,-0.8441116428469626,0.8360254332349286,0.15569726478703313,0.6286653969974315,0.12445457333285807,0.5133427585263534,-0.3724533200741572,0.3424408946181655,-0.721220142172459,1.0038627033288687,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.021712905642115133,0.0895600907178799,-0.06497988445337081,1.23456e-61,1.23456e-61,1.23456e-61,-0.5584977033927608,0.5715684673071594,0.6011570530944111,1.0498791471055648,-0.549575048803765,-0.8441116428469626,0.19255837013299226,0.7942532142795206,-0.5762665231456496,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.4424945375187381,0,0,2.0,0.2363429902758296,0,0,1.0498791471055648,-0.549575048803765,-0.8441116428469626,0.04535517095854438,-0.5854053621622155,0.5987287391357553,-0.08755442161647757,-0.3611392262265355,0.26202279389937105,-0.9403302098346775,-1.129192776360406,0.20001216194039995,-0.546485930006433,-0.13958406242838473,-0.37499233696414386,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.5584977033927608,0.5715684673071594,0.6011570530944111,1.0498791471055648,-0.549575048803765,-0.8441116428469626,0.8360254332349286,0.15569726478703313,0.6286653969974315,0.12445457333285807,0.5133427585263534,-0.3724533200741572,0.3424408946181655,-0.721220142172459,1.0038627033288687,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.021712905642115133,0.0895600907178799,-0.06497988445337081,1.23456e-61,1.23456e-61,1.23456e-61,-0.5584977033927608,0.5715684673071594,0.6011570530944111,1.0498791471055648,-0.549575048803765,-0.8441116428469626,0.19255837013299226,0.7942532142795206,-0.5762665231456496,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[1.0498791471055648,-0.549575048803765,-0.8441116428469626],[0.8360254332349286,0.15569726478703313,0.6286653969974315],[0.12445457333285807,0.5133427585263534,-0.3724533200741572]],[[0.3424408946181655,-0.721220142172459,1.0038627033288687],[-0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.021712905642115133,0.0895600907178799,-0.06497988445337081],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.5584977033927608,0.5715684673071594,0.6011570530944111]]],"normal":[0.5584977033927608,-0.5715684673071594,-0.6011570530944111]},{"op":"state"}]}}, +{"name":"adv_sing_114","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.5172052342200917,0.0,0,0,0.0,0.3131921989654114,0,0,-76.2666965887424,5.144407256918893,-879.1615988288073,-0.0,-1.1675098523281715,2.653195904928618,8.343874007929579e-06,0.0856920081517481,0.7417299651355936,-0.0,-1.9634824252550178,1.7738208889461713,6.688516397797327e-06,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,5.361568446633872e-06,-0.06701122273236541,-0.5800334590473352,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-76.2666965887424,5.144407256918893,-879.1615988288073,0.0,4.935598752434503,-0.5702093597500251,10.037256796719015,-0.0,-0.0,0.0,-0.5657640685364046,-4.897121352172656,-4.772866338744044,0.3333375139234137,-0.038510458391938965,1.23456e-61,1.23456e-61,1.23456e-61,2.269599502959143,0.05421054736480016,0.4692338092447236,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,-76.2666965887424,5.144407256918893,-879.1615988288073,-0.0,-0.9933924886433927,0.11476656092645972,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-76.2666965887424,5.144407256918893,-879.1615988288073],[0.0,4.935598752434503,-0.5702093597500251],[10.037256796719015,-0.0,-0.0]],[[0.0,-0.5657640685364046,-4.897121352172656],[-4.772866338744044,0.3333375139234137,-0.038510458391938965],[1.23456e-61,1.23456e-61,1.23456e-61]],[[2.269599502959143,0.05421054736480016,0.4692338092447236],[1.23456e-61,1.23456e-61,1.23456e-61],[-1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_115","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,0.24988629263311513,0.05315794168566823,0,0,-743.6906078167835,373.1342772813748,238.97850807873476,-0.0013973949446981606,-0.01897359074834621,1.4152963282106773e-05,0.0,0.0,-0.0,0.0074020004845603265,0.0038349423621923404,0.006689209952605611,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.1056796165359319,-0.1541368979497436,0.1101196133641736,1.23456e-61,1.23456e-61,1.23456e-61,0.684004432387621,-0.05091937732754982,-0.7276985320080446,-743.6906078167835,373.1342772813748,238.97850807873476,49.309815826544906,63.73476122272682,41.889322142614525,-0.05275958717433989,0.07695144409799046,-0.05497621519961063,-44.02003917606973,64.20455059011863,-45.86948602994217,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.684004432387621,-0.05091937732754982,-0.7276985320080446,-743.6906078167835,373.1342772813748,238.97850807873476,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.24988629263311513,0.05315794168566823,0,0,-743.6906078167835,373.1342772813748,238.97850807873476,-0.0013973949446981606,-0.01897359074834621,1.4152963282106773e-05,0.0,0.0,-0.0,0.0074020004845603265,0.0038349423621923404,0.006689209952605611,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.1056796165359319,-0.1541368979497436,0.1101196133641736,1.23456e-61,1.23456e-61,1.23456e-61,0.684004432387621,-0.05091937732754982,-0.7276985320080446,-743.6906078167835,373.1342772813748,238.97850807873476,49.309815826544906,63.73476122272682,41.889322142614525,-0.05275958717433989,0.07695144409799046,-0.05497621519961063,-44.02003917606973,64.20455059011863,-45.86948602994217,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.684004432387621,-0.05091937732754982,-0.7276985320080446,-743.6906078167835,373.1342772813748,238.97850807873476,0.4871906918524872,-0.7105822713370581,0.5076593990401069,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-743.6906078167835,373.1342772813748,238.97850807873476],[49.309815826544906,63.73476122272682,41.889322142614525],[-0.05275958717433989,0.07695144409799046,-0.05497621519961063]],[[-44.02003917606973,64.20455059011863,-45.86948602994217],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0.684004432387621,-0.05091937732754982,-0.7276985320080446]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_116","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.7267098487926245,2.0,0,0,0.1670468789914865,2.0,0,0,0.000345353474946281,9.19735483984645e-05,0.0005102102702472458,0.009074341239412781,0.010869518847950501,-0.0,0.29625956748935456,-0.21692870873556824,2.0042872315572724e-10,-0.0027327130731339957,-0.012795775388155352,0.0,0.08410714383422198,0.11486513795398805,-1.655716730373682e-10,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,1.3681395514483457e-10,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.000345353474946281,9.19735483984645e-05,0.0005102102702472458,-6.291825838725318,-8.592747417177057,0.0,0.2764653226420481,-0.20243486466662974,-371.6969626691988,-16.03497565931985,11.741212592256662,0.0,-0.2944354945448473,-0.4021105955768237,13818.960138393244,1.23456e-61,1.23456e-61,1.23456e-61,-0.6594111272017532,0.48283741707306005,-393247.6641474458,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.000345353474946281,9.19735483984645e-05,0.0005102102702472458,0,0,1,0,0,0,0,0,0,0],[1,1,1,1,1,1.7267098487926245,2.0,0,0,0.1670468789914865,2.0,0,0,0.000345353474946281,9.19735483984645e-05,0.0005102102702472458,0.009074341239412781,0.010869518847950501,-0.0,0.29625956748935456,-0.21692870873556824,2.0042872315572724e-10,-0.0027327130731339957,-0.012795775388155352,0.0,0.08410714383422198,0.11486513795398805,-1.655716730373682e-10,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,1.3681395514483457e-10,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.000345353474946281,9.19735483984645e-05,0.0005102102702472458,-6.291825838725318,-8.592747417177057,0.0,0.2764653226420481,-0.20243486466662974,-371.6969626691988,-16.03497565931985,11.741212592256662,0.0,-0.2944354945448473,-0.4021105955768237,13818.960138393244,1.23456e-61,1.23456e-61,1.23456e-61,-0.6594111272017532,0.48283741707306005,-393247.6641474458,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.000345353474946281,9.19735483984645e-05,0.0005102102702472458,-0.407208693890842,0.06890410410188536,-0.9107322900049339,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.000345353474946281,9.19735483984645e-05,0.0005102102702472458],[-6.291825838725318,-8.592747417177057,0.0],[0.2764653226420481,-0.20243486466662974,-371.6969626691988]],[[-16.03497565931985,11.741212592256662,0.0],[-0.2944354945448473,-0.4021105955768237,13818.960138393244],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.6594111272017532,0.48283741707306005,-393247.6641474458],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_118","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.9428081466312583,2.0,0,0,0.6856700841079755,0.0,0,0,0.7740386359790468,0.9426596162858838,-0.48222480011025715,0.013956571763551494,-0.030554956463866793,0.0,0.0,-0.0,-1.1283912598999582e-09,-0.02847564463621001,-0.0013087476414541787,0.0,0.30908638055842985,0.8672194748260408,3.574336506718345e-10,1.23456e-61,1.23456e-61,1.23456e-61,-0.08319771445519768,0.02965256336851654,-8.125751578367277e-10,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.7740386359790468,0.9426596162858838,-0.48222480011025715,0.056996842240746595,-0.3412782649796411,0.0,0.18737334718386311,-0.06678188322027206,0.00011856648747537847,-0.18755517216992418,-0.04866254101064938,0.0,0.0,0.0,1.241272184553286e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.16289613699048255,0.05805794132960186,1.3371059135496435e-06,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.7740386359790468,0.9426596162858838,-0.48222480011025715,0.9419601305713834,-0.335724756927371,0.0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.7740386359790468,0.9426596162858838,-0.48222480011025715],[0.056996842240746595,-0.3412782649796411,0.0],[0.18737334718386311,-0.06678188322027206,0.00011856648747537847]],[[-0.18755517216992418,-0.04866254101064938,0.0],[0.0,0.0,1.241272184553286e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.16289613699048255,0.05805794132960186,1.3371059135496435e-06],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_119","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.3742366088903133,0,0,1.6594001381522256,0.0,0,0,-940.7131530321624,409.1580502858416,653.0605585754225,23.089541668502967,-11.474042314292225,0.0,0.0,0.0,6.592272931815911e-07,6.701503227122771,14.859977736590604,-0.0,-0.2787036679792922,-0.1850439392329,-5.384509905196844e-08,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,4.6656101551028714e-09,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-940.7131530321624,409.1580502858416,653.0605585754225,51.408553978237585,34.13245834678811,0.0,0.09069647105771088,-0.13660236191117314,3.8080873528989246e-09,43.46045555180821,-65.45790380680772,0.0,0.0,0.0,2.387953715459156e-13,1.23456e-61,1.23456e-61,1.23456e-61,0.4416843184671195,-0.6652422130442495,6.173803827403124e-09,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-940.7131530321624,409.1580502858416,653.0605585754225,0.6283411298083772,-0.4267858751315697,-0.6504162062705021,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-940.7131530321624,409.1580502858416,653.0605585754225],[51.408553978237585,34.13245834678811,0.0],[0.09069647105771088,-0.13660236191117314,3.8080873528989246e-09]],[[43.46045555180821,-65.45790380680772,0.0],[0.0,0.0,2.387953715459156e-13],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.4416843184671195,-0.6652422130442495,6.173803827403124e-09],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_120","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,0.3904506852629648,0.32596645400142576,0,0,0.4260317650769667,-0.04173374215078396,-0.0502580025797168,36.843685292549,21.652784547261177,-1.4272967928383387,3.438654722784605e-07,-6.232260977489442e-07,-5.78232347559388e-07,13.91664646604764,-18.394564654907104,28.101898878252108,-0.3890692128573552,-0.2262648379705511,0.0124992856092547,1.23456e-61,1.23456e-61,1.23456e-61,1.2013072249800085e-07,-2.1772642919368819e-07,-2.02007689878713e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.37496332877536526,-0.6795882431673361,-0.6305254331289349,0.4260317650769667,-0.04173374215078396,-0.0502580025797168,-0.8286933533737032,-0.4819317911314984,0.026621544611169414,0.07284998448583306,-0.13203422620870334,-0.12250202752196146,0.4434659572907837,-0.7059519700790395,1.0246059821011742,-0.8225177271051175,-0.19749439552627224,0.21992556902299915,1.23456e-61,1.23456e-61,1.23456e-61,0.22034578031728336,-0.3924267942039279,-0.24505956814687957,1.23456e-61,1.23456e-61,1.23456e-61,0.37496332877536526,-0.6795882431673361,-0.6305254331289349,0.4260317650769667,-0.04173374215078396,-0.0502580025797168,0.37496332877536526,-0.6795882431673361,-0.6305254331289349,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.3904506852629648,0.32596645400142576,0,0,0.4260317650769667,-0.04173374215078396,-0.0502580025797168,36.843685292549,21.652784547261177,-1.4272967928383387,3.438654722784605e-07,-6.232260977489442e-07,-5.78232347559388e-07,13.91664646604764,-18.394564654907104,28.101898878252108,-0.3890692128573552,-0.2262648379705511,0.0124992856092547,1.23456e-61,1.23456e-61,1.23456e-61,1.2013072249800085e-07,-2.1772642919368819e-07,-2.02007689878713e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.37496332877536526,-0.6795882431673361,-0.6305254331289349,0.4260317650769667,-0.04173374215078396,-0.0502580025797168,-0.8286933533737032,-0.4819317911314984,0.026621544611169414,0.07284998448583306,-0.13203422620870334,-0.12250202752196146,0.4434659572907837,-0.7059519700790395,1.0246059821011742,-0.8225177271051175,-0.19749439552627224,0.21992556902299915,1.23456e-61,1.23456e-61,1.23456e-61,0.22034578031728336,-0.3924267942039279,-0.24505956814687957,1.23456e-61,1.23456e-61,1.23456e-61,0.37496332877536526,-0.6795882431673361,-0.6305254331289349,0.4260317650769667,-0.04173374215078396,-0.0502580025797168,-0.33572333555994566,0.5344368519016772,-0.7756720268837397,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.4260317650769667,-0.04173374215078396,-0.0502580025797168],[-0.8286933533737032,-0.4819317911314984,0.026621544611169414],[0.07284998448583306,-0.13203422620870334,-0.12250202752196146]],[[0.4434659572907837,-0.7059519700790395,1.0246059821011742],[-0.8225177271051175,-0.19749439552627224,0.21992556902299915],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.22034578031728336,-0.3924267942039279,-0.24505956814687957],[1.23456e-61,1.23456e-61,1.23456e-61],[0.37496332877536526,-0.6795882431673361,-0.6305254331289349]]],"normal":[-0.37496332877536526,0.6795882431673361,0.6305254331289349]},{"op":"state"}]}}, +{"name":"adv_sing_121","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.3052912388093787,0.6664503279636733,0,0,0.0,2.0,0,0,-0.9454434318812484,-0.9925662717651507,0.5676672525840794,-0.007856785747164809,-0.016140325092429617,0.00837164050221083,-0.20139751210428725,0.010614431878275201,0.05387376472527349,-0.04693325426188777,0.0635248087791285,-0.01113603487993622,-0.03662476856089696,0.7419323868130372,-0.28332075153477804,1.23456e-61,1.23456e-61,1.23456e-61,0.0254297212755588,0.011063421960379557,0.026777265422628413,1.23456e-61,1.23456e-61,1.23456e-61,-0.2531728639351109,-0.34545831292580337,-0.903638232368104,-0.9454434318812484,-0.9925662717651507,0.5676672525840794,5.5818924843983835,-0.33694728400205637,-1.4350681718925695,0.5453422638680769,-0.027421766680883353,-0.14230560517157465,-10.447805753081793,13.246482628754022,-2.1369244545180646,-0.010841569784957265,0.23514906587912188,-0.08685932655480735,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.2531728639351109,0.34545831292580337,0.903638232368104,-0.9454434318812484,-0.9925662717651507,0.5676672525840794,-0.04320853946301071,0.9371749566032234,-0.34617354438665554,0,0,0,0,0,0,0],[1,1,1,1,1,1.3052912388093787,0.6664503279636733,0,0,0.0,2.0,0,0,-0.9454434318812484,-0.9925662717651507,0.5676672525840794,-0.007856785747164809,-0.016140325092429617,0.00837164050221083,-0.20139751210428725,0.010614431878275201,0.05387376472527349,-0.04693325426188777,0.0635248087791285,-0.01113603487993622,-0.03662476856089696,0.7419323868130372,-0.28332075153477804,1.23456e-61,1.23456e-61,1.23456e-61,0.0254297212755588,0.011063421960379557,0.026777265422628413,1.23456e-61,1.23456e-61,1.23456e-61,-0.2531728639351109,-0.34545831292580337,-0.903638232368104,-0.9454434318812484,-0.9925662717651507,0.5676672525840794,5.5818924843983835,-0.33694728400205637,-1.4350681718925695,0.5453422638680769,-0.027421766680883353,-0.14230560517157465,-10.447805753081793,13.246482628754022,-2.1369244545180646,-0.010841569784957265,0.23514906587912188,-0.08685932655480735,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.2531728639351109,0.34545831292580337,0.903638232368104,-0.9454434318812484,-0.9925662717651507,0.5676672525840794,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.9454434318812484,-0.9925662717651507,0.5676672525840794],[5.5818924843983835,-0.33694728400205637,-1.4350681718925695],[0.5453422638680769,-0.027421766680883353,-0.14230560517157465]],[[-10.447805753081793,13.246482628754022,-2.1369244545180646],[-0.010841569784957265,0.23514906587912188,-0.08685932655480735],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0.2531728639351109,0.34545831292580337,0.903638232368104]]],"normal":[0.2531728639351109,0.34545831292580337,0.903638232368104]},{"op":"state"}]}}, +{"name":"adv_sing_122","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,0.4017916060704967,0.0,0,0,612.00533622661,845.5490885149554,-53.257235387133896,-0.1210910557726507,0.0,0.017698462428105743,-0.08304670441533679,0.004706230867605114,-0.5681969920801021,0.018369512486210143,0.0,0.1256823111058326,0.0,-0.007227279782113606,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.003705974027101451,0.01104747195226652,0.025355892322888485,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,612.00533622661,845.5490885149554,-53.257235387133896,-0.15967167008435965,0.0,0.02333733929223198,0.0,-2.566352602451405e-08,0.0,0.029415306996596943,0.0,0.20125649866838707,-0.3988199680470949,-3.916014824688252e-09,0.058290847123442596,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-5.975473554386041e-10,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,612.00533622661,845.5490885149554,-53.257235387133896,-0.8993101798917856,-0.2891803846254171,0.32804863281364244,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.4017916060704967,0.0,0,0,612.00533622661,845.5490885149554,-53.257235387133896,-0.1210910557726507,0.0,0.017698462428105743,-0.08304670441533679,0.004706230867605114,-0.5681969920801021,0.018369512486210143,0.0,0.1256823111058326,0.0,-0.007227279782113606,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.003705974027101451,0.01104747195226652,0.025355892322888485,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,612.00533622661,845.5490885149554,-53.257235387133896,-0.15967167008435965,0.0,0.02333733929223198,0.0,-2.566352602451405e-08,0.0,0.029415306996596943,0.0,0.20125649866838707,-0.3988199680470949,-3.916014824688252e-09,0.058290847123442596,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-5.975473554386041e-10,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,612.00533622661,845.5490885149554,-53.257235387133896,0.6075934176190119,0.6366271472777862,-0.4749064267990033,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[612.00533622661,845.5490885149554,-53.257235387133896],[-0.15967167008435965,0.0,0.02333733929223198],[0.0,-2.566352602451405e-08,0.0]],[[0.029415306996596943,0.0,0.20125649866838707],[-0.3988199680470949,-3.916014824688252e-09,0.058290847123442596],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-5.975473554386041e-10,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_123","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.7097365784303258,0.0,0,0,2.0,2.0,0,0,0.7897527436567797,0.20096407889381895,-0.5658044250894458,-0.37963534247816694,-0.3153661531892313,0.31740552365257224,-2132.1915914184046,2459.6176927585193,-106.23603382582523,0.01899997772210861,0.02555668402988831,0.21001047585006707,-486.6410543344983,560.9083892494795,-24.27178373910586,1.23456e-61,1.23456e-61,1.23456e-61,-110.96430825544964,128.00414612331144,-5.538019603444538,1.23456e-61,1.23456e-61,1.23456e-61,-0.6546731063987166,0.7552056448776892,-0.03267350154373594,0.7897527436567797,0.20096407889381895,-0.5658044250894458,-3.1429948506812515,-2.7221405860565273,0.056873780351560946,-21.260600102421986,24.506946376995266,-1.9447146029704796,0.0387592450498138,-0.11792533409550665,-3.5023033325114588,10.306069606487346,-11.888684394164517,0.514356520691308,1.23456e-61,1.23456e-61,1.23456e-61,-4.993557917050732,5.760375812174621,-0.24921906935966934,1.23456e-61,1.23456e-61,1.23456e-61,-0.6546731063987166,0.7552056448776892,-0.03267350154373594,0.7897527436567797,0.20096407889381895,-0.5658044250894458,0.755831200494816,0.6546236582693744,-0.013677075439840846,0,0,0,0,0,0,0],[1,1,1,1,1,1.7097365784303258,0.0,0,0,2.0,2.0,0,0,0.7897527436567797,0.20096407889381895,-0.5658044250894458,-0.37963534247816694,-0.3153661531892313,0.31740552365257224,-2132.1915914184046,2459.6176927585193,-106.23603382582523,0.01899997772210861,0.02555668402988831,0.21001047585006707,-486.6410543344983,560.9083892494795,-24.27178373910586,1.23456e-61,1.23456e-61,1.23456e-61,-110.96430825544964,128.00414612331144,-5.538019603444538,1.23456e-61,1.23456e-61,1.23456e-61,-0.6546731063987166,0.7552056448776892,-0.03267350154373594,0.7897527436567797,0.20096407889381895,-0.5658044250894458,-3.1429948506812515,-2.7221405860565273,0.056873780351560946,-21.260600102421986,24.506946376995266,-1.9447146029704796,0.0387592450498138,-0.11792533409550665,-3.5023033325114588,10.306069606487346,-11.888684394164517,0.514356520691308,1.23456e-61,1.23456e-61,1.23456e-61,-4.993557917050732,5.760375812174621,-0.24921906935966934,1.23456e-61,1.23456e-61,1.23456e-61,-0.6546731063987166,0.7552056448776892,-0.03267350154373594,0.7897527436567797,0.20096407889381895,-0.5658044250894458,-0.011059842531444665,0.03364966536082136,0.9993724930696685,0,0,0,0,0,0,0],[1,1,1,1,1,1.7097365784303258,0.0,0,0,2.0,2.0,0,0,0.7897527436567797,0.20096407889381895,-0.5658044250894458,-0.37963534247816694,-0.3153661531892313,0.31740552365257224,-2132.1915914184046,2459.6176927585193,-106.23603382582523,0.01899997772210861,0.02555668402988831,0.21001047585006707,-486.6410543344983,560.9083892494795,-24.27178373910586,1.23456e-61,1.23456e-61,1.23456e-61,-110.96430825544964,128.00414612331144,-5.538019603444538,1.23456e-61,1.23456e-61,1.23456e-61,-0.6546731063987166,0.7552056448776892,-0.03267350154373594,0.7897527436567797,0.20096407889381895,-0.5658044250894458,-3.1429948506812515,-2.7221405860565273,0.056873780351560946,-21.260600102421986,24.506946376995266,-1.9447146029704796,0.0387592450498138,-0.11792533409550665,-3.5023033325114588,10.306069606487346,-11.888684394164517,0.514356520691308,1.23456e-61,1.23456e-61,1.23456e-61,-4.993557917050732,5.760375812174621,-0.24921906935966934,1.23456e-61,1.23456e-61,1.23456e-61,-0.6546731063987166,0.7552056448776892,-0.03267350154373594,0.7897527436567797,0.20096407889381895,-0.5658044250894458,-0.7349828106490252,-0.5667991062408082,0.3722083303945256,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.7897527436567797,0.20096407889381895,-0.5658044250894458],[-3.1429948506812515,-2.7221405860565273,0.056873780351560946],[-21.260600102421986,24.506946376995266,-1.9447146029704796]],[[0.0387592450498138,-0.11792533409550665,-3.5023033325114588],[10.306069606487346,-11.888684394164517,0.514356520691308],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-4.993557917050732,5.760375812174621,-0.24921906935966934],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6546731063987166,0.7552056448776892,-0.03267350154373594]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_124","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.109844092160291,0,0,2.0,2.0,0,0,-894.9876951525588,255.00297600681,873.245439070974,0.0,-0.09908100825293094,-0.03784764490981777,6.9449187833696796e-15,-0.37720835724220675,-0.2463818677402508,0.0,0.023488558569552044,0.001157216908198663,-1.0874393851527782e-15,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1.702718855709484e-16,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-894.9876951525588,255.00297600681,873.245439070974,0.0,0.5936156484365821,-0.9088200590154457,2.945932155401606,0.0,0.0,0.0,-0.4878128128351307,-0.31862558086636356,-7.460719618177987e-05,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.8487654778510517,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-894.9876951525588,255.00297600681,873.245439070974,0.5726214649537791,-0.5511554777033324,-0.6069038616385622,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.109844092160291,0,0,2.0,2.0,0,0,-894.9876951525588,255.00297600681,873.245439070974,0.0,-0.09908100825293094,-0.03784764490981777,6.9449187833696796e-15,-0.37720835724220675,-0.2463818677402508,0.0,0.023488558569552044,0.001157216908198663,-1.0874393851527782e-15,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1.702718855709484e-16,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-894.9876951525588,255.00297600681,873.245439070974,0.0,0.5936156484365821,-0.9088200590154457,2.945932155401606,0.0,0.0,0.0,-0.4878128128351307,-0.31862558086636356,-7.460719618177987e-05,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.8487654778510517,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-894.9876951525588,255.00297600681,873.245439070974,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-894.9876951525588,255.00297600681,873.245439070974],[0.0,0.5936156484365821,-0.9088200590154457],[2.945932155401606,0.0,0.0]],[[0.0,-0.4878128128351307,-0.31862558086636356],[-7.460719618177987e-05,0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.8487654778510517,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_125","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.8871547396492006,0,0,2.0,2.0,0,0,0.0007031593629894526,0.0005599353583831628,0.0005290225287743604,0.0,0.11576922254274247,-0.5720792873343504,-0.07490456990493563,0.0,-0.0,-0.0,0.11938431939617342,0.37119990706590217,0.028882370070990322,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.01113672105689069,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0007031593629894526,0.0005599353583831628,0.0005290225287743604,0.0,0.3762339152413638,0.042612941512360614,1.3785456998101057e-07,0.0,0.0,0.0,0.04023720282810132,-0.35525828119577774,2.6031594191610358e-08,0.49965597830147856,0.05659195015952505,1.23456e-61,1.23456e-61,1.23456e-61,4.915643320711291e-09,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0007031593629894526,0.0005599353583831628,0.0005290225287743604,-0.8053199404242808,0.39911719734201623,-0.4383665775819218,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0007031593629894526,0.0005599353583831628,0.0005290225287743604],[0.0,0.3762339152413638,0.042612941512360614],[1.3785456998101057e-07,0.0,0.0]],[[0.0,0.04023720282810132,-0.35525828119577774],[2.6031594191610358e-08,0.49965597830147856,0.05659195015952505],[1.23456e-61,1.23456e-61,1.23456e-61]],[[4.915643320711291e-09,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_126","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.951632933235025,0,0,1.641950685266604,0.0,0,0,7.641649903861758e-05,0.00025705474369800264,0.0007630659263336608,0.0,7.2175057104063,4.626849048387038,-96.21213289812701,0.14378476400656995,0.37512345532691654,0.0,2.3758985667175114,-7.851680888557705,490.38961635347164,-0.9248480935002712,0.35449413513738465,1.23456e-61,1.23456e-61,1.23456e-61,-167.85466917883494,0.04120085807897118,0.107489888457941,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,7.641649903861758e-05,0.00025705474369800264,0.0007630659263336608,0.0,3.552968198763349,-2.9836729893857097,3.1094242470275226,0.0,0.0,0.0,2.1874435420971516,-3.3783767309379362,2.306721992306286,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1.2771659005812313,-0.05292913241816306,-0.13808805945009592,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,7.641649903861758e-05,0.00025705474369800264,0.0007630659263336608,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.951632933235025,0,0,1.641950685266604,0.0,0,0,7.641649903861758e-05,0.00025705474369800264,0.0007630659263336608,0.0,7.2175057104063,4.626849048387038,-96.21213289812701,0.14378476400656995,0.37512345532691654,0.0,2.3758985667175114,-7.851680888557705,490.38961635347164,-0.9248480935002712,0.35449413513738465,1.23456e-61,1.23456e-61,1.23456e-61,-167.85466917883494,0.04120085807897118,0.107489888457941,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,7.641649903861758e-05,0.00025705474369800264,0.0007630659263336608,0.0,3.552968198763349,-2.9836729893857097,3.1094242470275226,0.0,0.0,0.0,2.1874435420971516,-3.3783767309379362,2.306721992306286,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1.2771659005812313,-0.05292913241816306,-0.13808805945009592,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,7.641649903861758e-05,0.00025705474369800264,0.0007630659263336608,1,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[7.641649903861758e-05,0.00025705474369800264,0.0007630659263336608],[0.0,3.552968198763349,-2.9836729893857097],[3.1094242470275226,0.0,0.0]],[[0.0,2.1874435420971516,-3.3783767309379362],[2.306721992306286,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[1.2771659005812313,-0.05292913241816306,-0.13808805945009592],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_127","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.6148088177161033,2.0,0,0,0.0,0.0,0,0,3.801686256746395e-05,0.00039183929812239683,0.0008367039535315517,4.961213738867952,-1.5148093082746303,7.589743485385073,0.6338936346643645,-0.05735441523573197,-0.23133709624055335,-3.9790005197569007,-0.12972341817165356,5.763671646607999,0.008338959310170695,-0.003823413482455016,0.023797743272237017,1.23456e-61,1.23456e-61,1.23456e-61,-6.369412247595805e-06,-4.834385018482943e-05,-5.485257675268521e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.12980471798771503,-0.985218038297142,-0.11178618967502621,3.801686256746395e-05,0.00039183929812239683,0.0008367039535315517,20.495777872703933,-4.034380714947619,11.757230395276213,40.90837895528154,310.4946683683176,35.22978116732051,-13.575334770016966,0.6147851602911242,10.345151535950567,-52.270172748910454,-396.71683673660493,-45.01784802972167,1.23456e-61,1.23456e-61,1.23456e-61,7.4161151701032635,62.125719045004615,7.318562720532589,1.23456e-61,1.23456e-61,1.23456e-61,-0.12980471798771503,-0.985218038297142,-0.11178618967502621,3.801686256746395e-05,0.00039183929812239683,0.0008367039535315517,0.2434380000130816,-0.5327124199120219,-0.8105278636919946,0,0,0,0,0,0,0],[1,1,1,1,1,0.6148088177161033,2.0,0,0,0.0,0.0,0,0,3.801686256746395e-05,0.00039183929812239683,0.0008367039535315517,4.961213738867952,-1.5148093082746303,7.589743485385073,0.6338936346643645,-0.05735441523573197,-0.23133709624055335,-3.9790005197569007,-0.12972341817165356,5.763671646607999,0.008338959310170695,-0.003823413482455016,0.023797743272237017,1.23456e-61,1.23456e-61,1.23456e-61,-6.369412247595805e-06,-4.834385018482943e-05,-5.485257675268521e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.12980471798771503,-0.985218038297142,-0.11178618967502621,3.801686256746395e-05,0.00039183929812239683,0.0008367039535315517,20.495777872703933,-4.034380714947619,11.757230395276213,40.90837895528154,310.4946683683176,35.22978116732051,-13.575334770016966,0.6147851602911242,10.345151535950567,-52.270172748910454,-396.71683673660493,-45.01784802972167,1.23456e-61,1.23456e-61,1.23456e-61,7.4161151701032635,62.125719045004615,7.318562720532589,1.23456e-61,1.23456e-61,1.23456e-61,-0.12980471798771503,-0.985218038297142,-0.11178618967502621,3.801686256746395e-05,0.00039183929812239683,0.0008367039535315517,0.9360388058612179,-0.08456796230346243,-0.3415839774839347,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[3.801686256746395e-05,0.00039183929812239683,0.0008367039535315517],[20.495777872703933,-4.034380714947619,11.757230395276213],[40.90837895528154,310.4946683683176,35.22978116732051]],[[-13.575334770016966,0.6147851602911242,10.345151535950567],[-52.270172748910454,-396.71683673660493,-45.01784802972167],[1.23456e-61,1.23456e-61,1.23456e-61]],[[7.4161151701032635,62.125719045004615,7.318562720532589],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.12980471798771503,-0.985218038297142,-0.11178618967502621]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_128","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.33783070802696336,0.0,0,0,2.0,1.5520618573337592,0,0,-0.000990515316712258,-0.0009755285943307488,-0.0002956128067403694,2.9986170611897474,3.0101689960303135,-0.0,-0.0379532831515082,0.16268747583366058,0.0,3.8415539068879507,-2.772481399806728,0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.000990515316712258,-0.0009755285943307488,-0.0002956128067403694,-0.1323524992345575,0.13637631288406513,0.0,0.0,0.0,1.2334662811422522e-05,0.10661462727816884,0.12019539200157536,-0.0,0.0,0.0,0.00089041636772193,1.23456e-61,1.23456e-61,1.23456e-61,0.22114350899308702,-0.9479358908546511,0.06427750154410336,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.000990515316712258,-0.0009755285943307488,-0.0002956128067403694,0,0,1,0,0,0,0,0,0,0],[1,1,1,1,1,0.33783070802696336,0.0,0,0,2.0,1.5520618573337592,0,0,-0.000990515316712258,-0.0009755285943307488,-0.0002956128067403694,2.9986170611897474,3.0101689960303135,-0.0,-0.0379532831515082,0.16268747583366058,0.0,3.8415539068879507,-2.772481399806728,0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.000990515316712258,-0.0009755285943307488,-0.0002956128067403694,-0.1323524992345575,0.13637631288406513,0.0,0.0,0.0,1.2334662811422522e-05,0.10661462727816884,0.12019539200157536,-0.0,0.0,0.0,0.00089041636772193,1.23456e-61,1.23456e-61,1.23456e-61,0.22114350899308702,-0.9479358908546511,0.06427750154410336,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.000990515316712258,-0.0009755285943307488,-0.0002956128067403694,0,0,1,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.000990515316712258,-0.0009755285943307488,-0.0002956128067403694],[-0.1323524992345575,0.13637631288406513,0.0],[0.0,0.0,1.2334662811422522e-05]],[[0.10661462727816884,0.12019539200157536,-0.0],[0.0,0.0,0.00089041636772193],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.22114350899308702,-0.9479358908546511,0.06427750154410336],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_129","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.057688474261298195,0,0,2.0,0.0,0,0,0.7817179854325849,0.9586115172863625,-1.6780587870128865,-0.007904601731642237,-0.05364534723959922,0.0,0.0,-0.0,-0.0017872813292157555,0.03563310163083021,0.024398801078967247,0.0,0.6826699649322601,0.5356839724753095,0.0001277101957779131,1.23456e-61,1.23456e-61,1.23456e-61,-0.19437678135783434,0.24771170565368084,-9.123879913598182e-06,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.7817179854325849,0.9586115172863625,-1.6780587870128865,0.015689345985138714,-0.02607910844222874,0.0,-0.4049971607416068,0.5161240801056092,-0.0,-0.014903803060588824,0.01814987773284727,0.0,0.044497407271650684,0.034916649503533986,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.3521887828084641,0.44882564415434567,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,0.7817179854325849,0.9586115172863625,-1.6780587870128865,-0.7867098300677029,-0.6173229651283402,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.057688474261298195,0,0,2.0,0.0,0,0,0.7817179854325849,0.9586115172863625,-1.6780587870128865,-0.007904601731642237,-0.05364534723959922,0.0,0.0,-0.0,-0.0017872813292157555,0.03563310163083021,0.024398801078967247,0.0,0.6826699649322601,0.5356839724753095,0.0001277101957779131,1.23456e-61,1.23456e-61,1.23456e-61,-0.19437678135783434,0.24771170565368084,-9.123879913598182e-06,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.7817179854325849,0.9586115172863625,-1.6780587870128865,0.015689345985138714,-0.02607910844222874,0.0,-0.4049971607416068,0.5161240801056092,-0.0,-0.014903803060588824,0.01814987773284727,0.0,0.044497407271650684,0.034916649503533986,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.3521887828084641,0.44882564415434567,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,0.7817179854325849,0.9586115172863625,-1.6780587870128865,0.8761970440032744,0.3552101238502889,-0.3257368692582808,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.7817179854325849,0.9586115172863625,-1.6780587870128865],[0.015689345985138714,-0.02607910844222874,0.0],[-0.4049971607416068,0.5161240801056092,-0.0]],[[-0.014903803060588824,0.01814987773284727,0.0],[0.044497407271650684,0.034916649503533986,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.3521887828084641,0.44882564415434567,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,-1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_130","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,2.0,0.13927717217437197,0,0,0.3975290166942318,0.7347651181000954,0.42974315628682547,-14.453314381060096,12.583536951422666,-28.293057381790092,-0.0,0.0,0.0,-2.161700824601713,54.03728312786855,25.13775308947502,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.9054253918482033,-0.20829129596721746,0.369891329745406,0.3975290166942318,0.7347651181000954,0.42974315628682547,-0.023222804751860813,0.02021854738686455,-0.04545975615610417,0.012852044800834897,-0.32127001092504004,-0.1494524837222667,-0.0016568971468439338,0.04141841424992732,0.019267546599420135,0.3481019708182848,-0.30306916929147093,0.6814263297409229,1.23456e-61,1.23456e-61,1.23456e-61,0.005264773867200863,-0.13160666587591507,-0.06122246710833777,1.23456e-61,1.23456e-61,1.23456e-61,0.9054253918482033,0.20829129596721746,-0.369891329745406,0.3975290166942318,0.7347651181000954,0.42974315628682547,0.48634504879982726,-0.765955256925203,0.4204533718458443,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,0.13927717217437197,0,0,0.3975290166942318,0.7347651181000954,0.42974315628682547,-14.453314381060096,12.583536951422666,-28.293057381790092,-0.0,0.0,0.0,-2.161700824601713,54.03728312786855,25.13775308947502,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.9054253918482033,-0.20829129596721746,0.369891329745406,0.3975290166942318,0.7347651181000954,0.42974315628682547,-0.023222804751860813,0.02021854738686455,-0.04545975615610417,0.012852044800834897,-0.32127001092504004,-0.1494524837222667,-0.0016568971468439338,0.04141841424992732,0.019267546599420135,0.3481019708182848,-0.30306916929147093,0.6814263297409229,1.23456e-61,1.23456e-61,1.23456e-61,0.005264773867200863,-0.13160666587591507,-0.06122246710833777,1.23456e-61,1.23456e-61,1.23456e-61,0.9054253918482033,0.20829129596721746,-0.369891329745406,0.3975290166942318,0.7347651181000954,0.42974315628682547,-0.4592025211627954,1.2743375153538086,-0.4064442661910905,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,0.13927717217437197,0,0,0.3975290166942318,0.7347651181000954,0.42974315628682547,-14.453314381060096,12.583536951422666,-28.293057381790092,-0.0,0.0,0.0,-2.161700824601713,54.03728312786855,25.13775308947502,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.9054253918482033,-0.20829129596721746,0.369891329745406,0.3975290166942318,0.7347651181000954,0.42974315628682547,-0.023222804751860813,0.02021854738686455,-0.04545975615610417,0.012852044800834897,-0.32127001092504004,-0.1494524837222667,-0.0016568971468439338,0.04141841424992732,0.019267546599420135,0.3481019708182848,-0.30306916929147093,0.6814263297409229,1.23456e-61,1.23456e-61,1.23456e-61,0.005264773867200863,-0.13160666587591507,-0.06122246710833777,1.23456e-61,1.23456e-61,1.23456e-61,0.9054253918482033,0.20829129596721746,-0.369891329745406,0.3975290166942318,0.7347651181000954,0.42974315628682547,-0.8367434983133895,0.042782293617613334,0.5459212336803606,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.3975290166942318,0.7347651181000954,0.42974315628682547],[-0.023222804751860813,0.02021854738686455,-0.04545975615610417],[0.012852044800834897,-0.32127001092504004,-0.1494524837222667]],[[-0.0016568971468439338,0.04141841424992732,0.019267546599420135],[0.3481019708182848,-0.30306916929147093,0.6814263297409229],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.005264773867200863,-0.13160666587591507,-0.06122246710833777],[1.23456e-61,1.23456e-61,1.23456e-61],[0.9054253918482033,0.20829129596721746,-0.369891329745406]]],"normal":[-0.9054253918482033,-0.20829129596721746,0.369891329745406]},{"op":"state"}]}}, +{"name":"adv_sing_131","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.751687168460123,2.0,0,0,2.0,0.0,0,0,-0.0002916454439419074,-0.0005585446968468159,8.811370800985174e-05,-0.007381479056382672,-0.01539897959133724,-0.013805657942427933,0.9884256019315235,-0.8443191483984316,0.41328058967606834,0.024051384771256994,0.030418578026448623,0.004621517372647561,-3.0256550489160983,2.584532906934188,-1.2650871247455275,1.23456e-61,1.23456e-61,1.23456e-61,9.26215731709055,-7.911790996728924,3.872693938926201,1.23456e-61,1.23456e-61,1.23456e-61,-0.7246201007214529,0.6189748881028155,-0.30297821296017075,-0.0002916454439419074,-0.0005585446968468159,8.811370800985174e-05,1.8180128299343694,3.0198887488555597,1.8214730857179935,-0.009927766051223724,0.008480358017323776,-0.004150998314691609,0.8748101725910289,-0.11744207879099677,-2.332176713466097,-0.14086743227895854,-0.13927126002486354,0.07148132617626063,1.23456e-61,1.23456e-61,1.23456e-61,-0.0017761313013537553,0.0015171821378081748,-0.000742636158079256,1.23456e-61,1.23456e-61,1.23456e-61,-0.7246201007214529,0.6189748881028155,-0.30297821296017075,-0.0002916454439419074,-0.0005585446968468159,8.811370800985174e-05,0.4577236591129404,-0.5002677059658034,0.7349974654758838,0,0,0,0,0,0,0],[1,1,1,1,1,0.751687168460123,2.0,0,0,2.0,0.0,0,0,-0.0002916454439419074,-0.0005585446968468159,8.811370800985174e-05,-0.007381479056382672,-0.01539897959133724,-0.013805657942427933,0.9884256019315235,-0.8443191483984316,0.41328058967606834,0.024051384771256994,0.030418578026448623,0.004621517372647561,-3.0256550489160983,2.584532906934188,-1.2650871247455275,1.23456e-61,1.23456e-61,1.23456e-61,9.26215731709055,-7.911790996728924,3.872693938926201,1.23456e-61,1.23456e-61,1.23456e-61,-0.7246201007214529,0.6189748881028155,-0.30297821296017075,-0.0002916454439419074,-0.0005585446968468159,8.811370800985174e-05,1.8180128299343694,3.0198887488555597,1.8214730857179935,-0.009927766051223724,0.008480358017323776,-0.004150998314691609,0.8748101725910289,-0.11744207879099677,-2.332176713466097,-0.14086743227895854,-0.13927126002486354,0.07148132617626063,1.23456e-61,1.23456e-61,1.23456e-61,-0.0017761313013537553,0.0015171821378081748,-0.000742636158079256,1.23456e-61,1.23456e-61,1.23456e-61,-0.7246201007214529,0.6189748881028155,-0.30297821296017075,-0.0002916454439419074,-0.0005585446968468159,8.811370800985174e-05,-0.6890798018557753,-0.6445602660944363,0.33122664453010836,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0002916454439419074,-0.0005585446968468159,8.811370800985174e-05],[1.8180128299343694,3.0198887488555597,1.8214730857179935],[-0.009927766051223724,0.008480358017323776,-0.004150998314691609]],[[0.8748101725910289,-0.11744207879099677,-2.332176713466097],[-0.14086743227895854,-0.13927126002486354,0.07148132617626063],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0017761313013537553,0.0015171821378081748,-0.000742636158079256],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.7246201007214529,0.6189748881028155,-0.30297821296017075]]],"normal":[-0.7246201007214529,0.6189748881028155,-0.30297821296017075]},{"op":"state"}]}}, +{"name":"adv_sing_132","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,0.6534005014300581,1.9345886545774083,0,0,-0.11929069075960208,-0.7484704214471627,0.4311039685711837,0.3474437785307586,-2.2451676311536133,0.3433828512473861,0.16543850219876932,-0.1726008450682273,0.16072830855426679,-0.0336250864185943,1.7704165666797906,-0.038054475897175144,2.489948203952796e-06,-7.984696642156594e-09,-2.5716019060503637e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.00202445356574642,-0.0021139230684382483,0.001970331685278837,1.23456e-61,1.23456e-61,1.23456e-61,-0.6956073866228146,0.0022306544189992345,0.718418671706576,-0.11929069075960208,-0.7484704214471627,0.4311039685711837,0.1561068448693646,0.009233357257519267,0.15112145917149247,-0.4356452899518435,0.4544264183890484,-0.4230892327866542,0.049585985945255096,-0.2742266200115284,0.04886298797725018,-0.1290799791052598,-0.23930480607318616,-0.12411885064610578,1.23456e-61,1.23456e-61,1.23456e-61,0.5117273090407364,-0.5340072683911812,0.49740018445378287,1.23456e-61,1.23456e-61,1.23456e-61,0.6956073866228146,-0.0022306544189992345,-0.718418671706576,-0.11929069075960208,-0.7484704214471627,0.4311039685711837,-0.23812915881016666,0.8301457054055803,-0.5041355090856364,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.6534005014300581,1.9345886545774083,0,0,-0.11929069075960208,-0.7484704214471627,0.4311039685711837,0.3474437785307586,-2.2451676311536133,0.3433828512473861,0.16543850219876932,-0.1726008450682273,0.16072830855426679,-0.0336250864185943,1.7704165666797906,-0.038054475897175144,2.489948203952796e-06,-7.984696642156594e-09,-2.5716019060503637e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.00202445356574642,-0.0021139230684382483,0.001970331685278837,1.23456e-61,1.23456e-61,1.23456e-61,-0.6956073866228146,0.0022306544189992345,0.718418671706576,-0.11929069075960208,-0.7484704214471627,0.4311039685711837,0.1561068448693646,0.009233357257519267,0.15112145917149247,-0.4356452899518435,0.4544264183890484,-0.4230892327866542,0.049585985945255096,-0.2742266200115284,0.04886298797725018,-0.1290799791052598,-0.23930480607318616,-0.12411885064610578,1.23456e-61,1.23456e-61,1.23456e-61,0.5117273090407364,-0.5340072683911812,0.49740018445378287,1.23456e-61,1.23456e-61,1.23456e-61,0.6956073866228146,-0.0022306544189992345,-0.718418671706576,-0.11929069075960208,-0.7484704214471627,0.4311039685711837,0.5742762954954953,-0.5991260283409297,0.5579020869260074,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.6534005014300581,1.9345886545774083,0,0,-0.11929069075960208,-0.7484704214471627,0.4311039685711837,0.3474437785307586,-2.2451676311536133,0.3433828512473861,0.16543850219876932,-0.1726008450682273,0.16072830855426679,-0.0336250864185943,1.7704165666797906,-0.038054475897175144,2.489948203952796e-06,-7.984696642156594e-09,-2.5716019060503637e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.00202445356574642,-0.0021139230684382483,0.001970331685278837,1.23456e-61,1.23456e-61,1.23456e-61,-0.6956073866228146,0.0022306544189992345,0.718418671706576,-0.11929069075960208,-0.7484704214471627,0.4311039685711837,0.1561068448693646,0.009233357257519267,0.15112145917149247,-0.4356452899518435,0.4544264183890484,-0.4230892327866542,0.049585985945255096,-0.2742266200115284,0.04886298797725018,-0.1290799791052598,-0.23930480607318616,-0.12411885064610578,1.23456e-61,1.23456e-61,1.23456e-61,0.5117273090407364,-0.5340072683911812,0.49740018445378287,1.23456e-61,1.23456e-61,1.23456e-61,0.6956073866228146,-0.0022306544189992345,-0.718418671706576,-0.11929069075960208,-0.7484704214471627,0.4311039685711837,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.11929069075960208,-0.7484704214471627,0.4311039685711837],[0.1561068448693646,0.009233357257519267,0.15112145917149247],[-0.4356452899518435,0.4544264183890484,-0.4230892327866542]],[[0.049585985945255096,-0.2742266200115284,0.04886298797725018],[-0.1290799791052598,-0.23930480607318616,-0.12411885064610578],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.5117273090407364,-0.5340072683911812,0.49740018445378287],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6956073866228146,-0.0022306544189992345,-0.718418671706576]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_133","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,2.0,0.4779548844445407,0,0,395.52279789220444,282.6897432919204,596.3104071410432,0.34825828876634984,0.2793934184881348,0.2602578875432985,44.43472522311322,367.2533522820924,-453.71509016678795,-0.06749088855906826,0.10548975308531447,0.07877746880904236,26.928469683407386,222.56401301912152,-274.961822968707,1.23456e-61,1.23456e-61,1.23456e-61,16.319274534625453,134.87893195152458,-166.63321489569432,1.23456e-61,1.23456e-61,1.23456e-61,0.07590337809194946,0.627342014918181,-0.7750359175629394,395.52279789220444,282.6897432919204,596.3104071410432,0.15264969996642525,-0.12436652363874418,-0.08571695340858852,0.0,0.0,0.0,-0.1708146891776565,0.17388381069538247,0.12401903711665932,-0.9066564732322432,0.054432980842731446,-0.044733659978491255,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.07590337809194946,0.627342014918181,-0.7750359175629394,395.52279789220444,282.6897432919204,596.3104071410432,-0.9918083389495324,0.11172471024790104,-0.06191775117195347,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[395.52279789220444,282.6897432919204,596.3104071410432],[0.15264969996642525,-0.12436652363874418,-0.08571695340858852],[0.0,0.0,0.0]],[[-0.1708146891776565,0.17388381069538247,0.12401903711665932],[-0.9066564732322432,0.054432980842731446,-0.044733659978491255],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0.07590337809194946,0.627342014918181,-0.7750359175629394]]],"normal":[0.07590337809194946,0.627342014918181,-0.7750359175629394]},{"op":"state"}]}}, +{"name":"adv_sing_134","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,1.9834241347944535,0.5273275304732041,0,0,0.782109723042451,-0.5613498076650654,0.16814292386520124,0.2513603043371253,0.29386821106554284,-0.05619459264139226,-0.0803138627970416,-0.17196471902716984,0.15600722376842782,0.09518436428070504,0.07580525832856144,0.04145384381235022,1.557661886611808e-08,-1.4938924068012422e-08,-8.447987787890147e-09,1.23456e-61,1.23456e-61,1.23456e-61,5.59588696675598e-09,-5.366795657521369e-09,-3.034932366509749e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.6720737177893009,0.6445595366013668,0.36449954956501424,0.782109723042451,-0.5613498076650654,0.16814292386520124,0.33824660839947424,0.15659834554187987,0.34674857281023336,-0.14505357823536266,-0.31064392458830564,0.2817897842393101,-0.08615426858758002,-0.18446972965874464,0.1673519321094982,2.8787947209323872e-05,-2.7609390788234454e-05,-1.5613158963001793e-05,1.23456e-61,1.23456e-61,1.23456e-61,4.1310594756041166e-05,-3.961937077418717e-05,-2.2404823730304715e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.6720737177893009,0.6445595366013668,0.36449954956501424,0.782109723042451,-0.5613498076650654,0.16814292386520124,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,1.9834241347944535,0.5273275304732041,0,0,0.782109723042451,-0.5613498076650654,0.16814292386520124,0.2513603043371253,0.29386821106554284,-0.05619459264139226,-0.0803138627970416,-0.17196471902716984,0.15600722376842782,0.09518436428070504,0.07580525832856144,0.04145384381235022,1.557661886611808e-08,-1.4938924068012422e-08,-8.447987787890147e-09,1.23456e-61,1.23456e-61,1.23456e-61,5.59588696675598e-09,-5.366795657521369e-09,-3.034932366509749e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.6720737177893009,0.6445595366013668,0.36449954956501424,0.782109723042451,-0.5613498076650654,0.16814292386520124,0.33824660839947424,0.15659834554187987,0.34674857281023336,-0.14505357823536266,-0.31064392458830564,0.2817897842393101,-0.08615426858758002,-0.18446972965874464,0.1673519321094982,2.8787947209323872e-05,-2.7609390788234454e-05,-1.5613158963001793e-05,1.23456e-61,1.23456e-61,1.23456e-61,4.1310594756041166e-05,-3.961937077418717e-05,-2.2404823730304715e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.6720737177893009,0.6445595366013668,0.36449954956501424,0.782109723042451,-0.5613498076650654,0.16814292386520124,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.782109723042451,-0.5613498076650654,0.16814292386520124],[0.33824660839947424,0.15659834554187987,0.34674857281023336],[-0.14505357823536266,-0.31064392458830564,0.2817897842393101]],[[-0.08615426858758002,-0.18446972965874464,0.1673519321094982],[2.8787947209323872e-05,-2.7609390788234454e-05,-1.5613158963001793e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[4.1310594756041166e-05,-3.961937077418717e-05,-2.2404823730304715e-05],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6720737177893009,0.6445595366013668,0.36449954956501424]]],"normal":[-0.6720737177893009,0.6445595366013668,0.36449954956501424]},{"op":"state"}]}}, +{"name":"adv_sing_135","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.5324294474317666,0.0,0,0,0.0,0.0,0,0,-0.0009636660705619142,0.0001115372782075037,-0.0003333884933021085,0.0,-0.05336048051664509,0.023817559025521615,3.4146169989014667e-09,0.525974061205031,0.2354344792832804,-0.0,0.02110488547297853,0.0654447004437292,4.325661856392042e-10,0.30375775595383125,-0.6786121599858184,1.23456e-61,1.23456e-61,1.23456e-61,4.728425006996991e-09,0.1788835785819013,0.08007117704487451,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.0009636660705619142,0.0001115372782075037,-0.0003333884933021085,0.0,3.824825133444134,-8.544877602299234,-13.033005011167637,0.2063029653098088,0.09234453710708368,0.0,-7.195297877140992,-3.220731465562581,16.868038715980738,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-21.831343311991382,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.0009636660705619142,0.0001115372782075037,-0.0003333884933021085,-0.0,-0.4085544479124804,0.912733949785439,0,0,0,0,0,0,0],[1,1,1,1,1,0.5324294474317666,0.0,0,0,0.0,0.0,0,0,-0.0009636660705619142,0.0001115372782075037,-0.0003333884933021085,0.0,-0.05336048051664509,0.023817559025521615,3.4146169989014667e-09,0.525974061205031,0.2354344792832804,-0.0,0.02110488547297853,0.0654447004437292,4.325661856392042e-10,0.30375775595383125,-0.6786121599858184,1.23456e-61,1.23456e-61,1.23456e-61,4.728425006996991e-09,0.1788835785819013,0.08007117704487451,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.0009636660705619142,0.0001115372782075037,-0.0003333884933021085,0.0,3.824825133444134,-8.544877602299234,-13.033005011167637,0.2063029653098088,0.09234453710708368,0.0,-7.195297877140992,-3.220731465562581,16.868038715980738,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-21.831343311991382,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.0009636660705619142,0.0001115372782075037,-0.0003333884933021085,1,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.0009636660705619142,0.0001115372782075037,-0.0003333884933021085],[0.0,3.824825133444134,-8.544877602299234],[-13.033005011167637,0.2063029653098088,0.09234453710708368]],[[0.0,-7.195297877140992,-3.220731465562581],[16.868038715980738,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-21.831343311991382,-0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_136","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,2.0,2.0,0,0,1.284262938046405,-1.8172882230054328,0.08414176038308119,-0.3647779823690722,-0.003675883977912353,-0.11142483377478746,-0.21396661437208767,-0.6845672190209786,0.723058736798626,0.05911000472010941,-0.23541296205852147,-0.20538916358294873,-0.6158996227674769,0.19952524165860158,0.028227997895327678,1.23456e-61,1.23456e-61,1.23456e-61,-0.14867890817985638,-0.47568498944776116,0.5024315772468001,1.23456e-61,1.23456e-61,1.23456e-61,-0.2100917091743174,-0.6721698032699652,0.7099642450914202,1.284262938046405,-1.8172882230054328,0.08414176038308119,0.38325156065874205,-0.13125158641190063,-0.010853191055904767,0.03450588916233353,0.11039853414994387,-0.1166059700624259,-0.16626180270108476,-0.4464597683805033,-0.47189277952583464,-1.3131219645600402e-06,-4.2012173448284295e-06,4.43744138188865e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.06490671984265944,0.22286199474438492,-0.40314306286921436,1.23456e-61,1.23456e-61,1.23456e-61,0.2100917091743174,0.6721698032699652,-0.7099642450914202,1.284262938046405,-1.8172882230054328,0.08414176038308119,-0.9457193487272584,0.32387908507803426,0.026781555068844665,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,2.0,0,0,1.284262938046405,-1.8172882230054328,0.08414176038308119,-0.3647779823690722,-0.003675883977912353,-0.11142483377478746,-0.21396661437208767,-0.6845672190209786,0.723058736798626,0.05911000472010941,-0.23541296205852147,-0.20538916358294873,-0.6158996227674769,0.19952524165860158,0.028227997895327678,1.23456e-61,1.23456e-61,1.23456e-61,-0.14867890817985638,-0.47568498944776116,0.5024315772468001,1.23456e-61,1.23456e-61,1.23456e-61,-0.2100917091743174,-0.6721698032699652,0.7099642450914202,1.284262938046405,-1.8172882230054328,0.08414176038308119,0.38325156065874205,-0.13125158641190063,-0.010853191055904767,0.03450588916233353,0.11039853414994387,-0.1166059700624259,-0.16626180270108476,-0.4464597683805033,-0.47189277952583464,-1.3131219645600402e-06,-4.2012173448284295e-06,4.43744138188865e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.06490671984265944,0.22286199474438492,-0.40314306286921436,1.23456e-61,1.23456e-61,1.23456e-61,0.2100917091743174,0.6721698032699652,-0.7099642450914202,1.284262938046405,-1.8172882230054328,0.08414176038308119,-0.24794432274021552,-0.665800340808738,-0.7037282991324594,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[1.284262938046405,-1.8172882230054328,0.08414176038308119],[0.38325156065874205,-0.13125158641190063,-0.010853191055904767],[0.03450588916233353,0.11039853414994387,-0.1166059700624259]],[[-0.16626180270108476,-0.4464597683805033,-0.47189277952583464],[-1.3131219645600402e-06,-4.2012173448284295e-06,4.43744138188865e-06],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.06490671984265944,0.22286199474438492,-0.40314306286921436],[1.23456e-61,1.23456e-61,1.23456e-61],[0.2100917091743174,0.6721698032699652,-0.7099642450914202]]],"normal":[-0.2100917091743174,-0.6721698032699652,0.7099642450914202]},{"op":"state"}]}}, +{"name":"adv_sing_137","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,0.029818661423753,2.0,0,0,-0.002377390029556281,-0.5835869220863188,-0.9677733270692734,19.427184097111674,-24.40439794336147,-8.2911316612154,4.06532131975752e-05,0.0003637506899277159,-0.0009754204206008612,14.788209900252301,10.262585710104615,4.443428485645643,0.5434156368028177,-0.6826378692041726,-0.23191885765178333,1.23456e-61,1.23456e-61,1.23456e-61,0.7454250428850503,0.5174139188042662,0.22365274591719286,1.23456e-61,1.23456e-61,1.23456e-61,0.039020921312654416,0.34914551477421135,-0.9362557221256181,-0.002377390029556281,-0.5835869220863188,-0.9677733270692734,0.002032985397948911,0.09249222702949435,0.03457663800288712,-3803.6690382400734,-34033.896169344946,91264.03945181638,0.026715320701177808,-0.033262373179298664,-0.011290667420836177,1301.0142700896738,11641.019273210848,-31216.127501928553,1.23456e-61,1.23456e-61,1.23456e-61,-444.8611419786209,-3984.0485349382247,10684.41681897533,1.23456e-61,1.23456e-61,1.23456e-61,0.039020921312654416,0.34914551477421135,-0.9362557221256181,-0.002377390029556281,-0.5835869220863188,-0.9677733270692734,-0.6019101235531453,0.7561185454310254,0.2568831415634507,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.002377390029556281,-0.5835869220863188,-0.9677733270692734],[0.002032985397948911,0.09249222702949435,0.03457663800288712],[-3803.6690382400734,-34033.896169344946,91264.03945181638]],[[0.026715320701177808,-0.033262373179298664,-0.011290667420836177],[1301.0142700896738,11641.019273210848,-31216.127501928553],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-444.8611419786209,-3984.0485349382247,10684.41681897533],[1.23456e-61,1.23456e-61,1.23456e-61],[0.039020921312654416,0.34914551477421135,-0.9362557221256181]]],"normal":[-0.039020921312654416,-0.34914551477421135,0.9362557221256181]},{"op":"state"}]}}, +{"name":"adv_sing_138","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,0.0,0.0,0,0,-0.0005983307150136445,-0.00012779334347041928,9.138907252936512e-05,-0.16144902495247884,0.10458695923671171,0.0,0.22615047563162868,-0.1811659913684429,302817.00046824827,-0.10579544821162448,-0.21429441346214775,0.0,0.0,0.0,132321.76653934724,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,58509.1186805839,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.0005983307150136445,-0.00012779334347041928,9.138907252936512e-05,0.008617291601129166,0.010757011178154599,0.0,-0.7478243201247611,0.5990716311625847,0.0,0.019298356881401347,-0.015459644497480416,0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.0005983307150136445,-0.00012779334347041928,9.138907252936512e-05,-0.6252117484139369,-0.7804551682481113,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.0,0.0,0,0,-0.0005983307150136445,-0.00012779334347041928,9.138907252936512e-05,-0.16144902495247884,0.10458695923671171,0.0,0.22615047563162868,-0.1811659913684429,302817.00046824827,-0.10579544821162448,-0.21429441346214775,0.0,0.0,0.0,132321.76653934724,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,58509.1186805839,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.0005983307150136445,-0.00012779334347041928,9.138907252936512e-05,0.008617291601129166,0.010757011178154599,0.0,-0.7478243201247611,0.5990716311625847,0.0,0.019298356881401347,-0.015459644497480416,0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.0005983307150136445,-0.00012779334347041928,9.138907252936512e-05,0.408515776549414,-0.5149869215574836,0.7535936112620486,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.0005983307150136445,-0.00012779334347041928,9.138907252936512e-05],[0.008617291601129166,0.010757011178154599,0.0],[-0.7478243201247611,0.5990716311625847,0.0]],[[0.019298356881401347,-0.015459644497480416,0.0],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_139","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.6176379306653987,1.8483002374808222,0,0,2.0,0.5457783463095147,0,0,1.5694160942131585,-1.4863285793130778,-0.5071959889743347,0.00286817599288143,0.016951930930747976,0.0,0.0,-0.0,-2.9562103883727318,0.02113381893494961,-0.0035757290632407565,0.0,0.0,0.0,-0.00010989422089514441,1.23456e-61,1.23456e-61,1.23456e-61,-0.4934615708014047,0.0834910569518053,-4.594286739040674,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,1.5694160942131585,-1.4863285793130778,-0.5071959889743347,7.9252742738957505,46.841164012165464,0.0,-0.8754697668482964,0.1481247993532848,-14350.897179355467,41.9417191282682,-7.096314419596731,0.0,-0.05707640452747705,-0.33734166582755465,4080.9157835938245,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-1160.476130840285,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,1.5694160942131585,-1.4863285793130778,-0.5071959889743347,0.9859867441481802,-0.1668236804655477,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,1.6176379306653987,1.8483002374808222,0,0,2.0,0.5457783463095147,0,0,1.5694160942131585,-1.4863285793130778,-0.5071959889743347,0.00286817599288143,0.016951930930747976,0.0,0.0,-0.0,-2.9562103883727318,0.02113381893494961,-0.0035757290632407565,0.0,0.0,0.0,-0.00010989422089514441,1.23456e-61,1.23456e-61,1.23456e-61,-0.4934615708014047,0.0834910569518053,-4.594286739040674,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,1.5694160942131585,-1.4863285793130778,-0.5071959889743347,7.9252742738957505,46.841164012165464,0.0,-0.8754697668482964,0.1481247993532848,-14350.897179355467,41.9417191282682,-7.096314419596731,0.0,-0.05707640452747705,-0.33734166582755465,4080.9157835938245,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-1160.476130840285,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,1.5694160942131585,-1.4863285793130778,-0.5071959889743347,0.21963536149686075,-0.22873301057614004,0.9483889064370791,0,0,0,0,0,0,0],[1,1,1,1,1,1.6176379306653987,1.8483002374808222,0,0,2.0,0.5457783463095147,0,0,1.5694160942131585,-1.4863285793130778,-0.5071959889743347,0.00286817599288143,0.016951930930747976,0.0,0.0,-0.0,-2.9562103883727318,0.02113381893494961,-0.0035757290632407565,0.0,0.0,0.0,-0.00010989422089514441,1.23456e-61,1.23456e-61,1.23456e-61,-0.4934615708014047,0.0834910569518053,-4.594286739040674,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,1.5694160942131585,-1.4863285793130778,-0.5071959889743347,7.9252742738957505,46.841164012165464,0.0,-0.8754697668482964,0.1481247993532848,-14350.897179355467,41.9417191282682,-7.096314419596731,0.0,-0.05707640452747705,-0.33734166582755465,4080.9157835938245,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-1160.476130840285,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,1.5694160942131585,-1.4863285793130778,-0.5071959889743347,-0.9859867441481802,0.1668236804655477,-0.0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.5694160942131585,-1.4863285793130778,-0.5071959889743347],[7.9252742738957505,46.841164012165464,0.0],[-0.8754697668482964,0.1481247993532848,-14350.897179355467]],[[41.9417191282682,-7.096314419596731,0.0],[-0.05707640452747705,-0.33734166582755465,4080.9157835938245],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,-1160.476130840285],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,-1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_140","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,0.4120551620083597,2.0,0,0,0.502998372884377,-0.4820460892331153,-0.9258873706468889,1.9692268150142982,0.0,-1.7128952069932322,0.0,0.0,0.0,-0.13260204283732535,0.0,0.9626815316879449,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.3932196074351437,0.0,-0.3297736474041233,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.502998372884377,-0.4820460892331153,-0.9258873706468889,1.2083586428734654,0.0,1.4408377228799334,-0.5846244639833449,-0.0,0.4902953418498259,0.8145331343345987,0.0,-0.6831082620551601,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.502998372884377,-0.4820460892331153,-0.9258873706468889,0.7662140336676426,0.0,-0.6425854453773135,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.4120551620083597,2.0,0,0,0.502998372884377,-0.4820460892331153,-0.9258873706468889,1.9692268150142982,0.0,-1.7128952069932322,0.0,0.0,0.0,-0.13260204283732535,0.0,0.9626815316879449,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.3932196074351437,0.0,-0.3297736474041233,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.502998372884377,-0.4820460892331153,-0.9258873706468889,1.2083586428734654,0.0,1.4408377228799334,-0.5846244639833449,-0.0,0.4902953418498259,0.8145331343345987,0.0,-0.6831082620551601,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.502998372884377,-0.4820460892331153,-0.9258873706468889,0.6425854453773135,0.0,0.7662140336676426,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.502998372884377,-0.4820460892331153,-0.9258873706468889],[1.2083586428734654,0.0,1.4408377228799334],[-0.5846244639833449,-0.0,0.4902953418498259]],[[0.8145331343345987,0.0,-0.6831082620551601],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_141","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.9767694255639148,0,0,2.0,2.0,0,0,-0.937689365111841,0.026615146924886757,0.5239528568825911,-1.0843298650052837,-0.873531681867584,-1.34038399578205,-0.041981418911008005,-0.2299986572197538,0.18385240419494808,-2.494527717088645,1.3599657245657926,1.1317038705579259,0.1181834891265039,2.989194846451335,-3.3316052405435586,1.23456e-61,1.23456e-61,1.23456e-61,-8.871678328378614,-50.19596773320311,39.889758494125545,1.23456e-61,1.23456e-61,1.23456e-61,-0.14114808306741478,-0.7732913850164143,0.6181404795884103,-0.937689365111841,0.026615146924886757,0.5239528568825911,33.7154246593755,15.171228047934552,26.677831422789513,1360439.6355975424,7453280.463893996,-5957876.228455034,-28.220204529854783,11.151560766098578,7.506672431226905,-988262.6561620277,-5414278.263903396,4327973.423114381,1.23456e-61,1.23456e-61,1.23456e-61,719117.6201173408,3939740.418419097,-3149283.1897811443,1.23456e-61,1.23456e-61,1.23456e-61,-0.14114808306741478,-0.7732913850164143,0.6181404795884103,-0.937689365111841,0.026615146924886757,0.5239528568825911,0.5610343910955362,0.45196699920909367,0.6935172987272834,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.9767694255639148,0,0,2.0,2.0,0,0,-0.937689365111841,0.026615146924886757,0.5239528568825911,-1.0843298650052837,-0.873531681867584,-1.34038399578205,-0.041981418911008005,-0.2299986572197538,0.18385240419494808,-2.494527717088645,1.3599657245657926,1.1317038705579259,0.1181834891265039,2.989194846451335,-3.3316052405435586,1.23456e-61,1.23456e-61,1.23456e-61,-8.871678328378614,-50.19596773320311,39.889758494125545,1.23456e-61,1.23456e-61,1.23456e-61,-0.14114808306741478,-0.7732913850164143,0.6181404795884103,-0.937689365111841,0.026615146924886757,0.5239528568825911,33.7154246593755,15.171228047934552,26.677831422789513,1360439.6355975424,7453280.463893996,-5957876.228455034,-28.220204529854783,11.151560766098578,7.506672431226905,-988262.6561620277,-5414278.263903396,4327973.423114381,1.23456e-61,1.23456e-61,1.23456e-61,719117.6201173408,3939740.418419097,-3149283.1897811443,1.23456e-61,1.23456e-61,1.23456e-61,-0.14114808306741478,-0.7732913850164143,0.6181404795884103,-0.937689365111841,0.026615146924886757,0.5239528568825911,-0.5610343910955362,-0.45196699920909367,-0.6935172987272834,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.937689365111841,0.026615146924886757,0.5239528568825911],[33.7154246593755,15.171228047934552,26.677831422789513],[1360439.6355975424,7453280.463893996,-5957876.228455034]],[[-28.220204529854783,11.151560766098578,7.506672431226905],[-988262.6561620277,-5414278.263903396,4327973.423114381],[1.23456e-61,1.23456e-61,1.23456e-61]],[[719117.6201173408,3939740.418419097,-3149283.1897811443],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.14114808306741478,-0.7732913850164143,0.6181404795884103]]],"normal":[0.14114808306741478,0.7732913850164143,-0.6181404795884103]},{"op":"state"}]}}, +{"name":"adv_sing_142","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.2917882046615123,0.19893548456884536,0,0,2.0,2.0,0,0,-878.4531257250338,34.43947536648273,122.47164004400513,0.038244760056839494,0.023620592273689393,0.0,0.0,-0.0,-0.07963042147003492,0.01792810542844168,-0.029027895763147953,0.0,0.0,0.0,0.2945850290096105,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-1.1193257711716162,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-878.4531257250338,34.43947536648273,122.47164004400513,9.472604383395693,5.850436127135241,0.0,0.0,-0.0,-4885.105335141969,3.333758614126869,-5.397781596980647,0.0,0.0,0.0,13567.751619852319,1.23456e-61,1.23456e-61,1.23456e-61,0.2885731035368478,-0.4672367642498756,-38704.01415404709,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-878.4531257250338,34.43947536648273,122.47164004400513,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.2917882046615123,0.19893548456884536,0,0,2.0,2.0,0,0,-878.4531257250338,34.43947536648273,122.47164004400513,0.038244760056839494,0.023620592273689393,0.0,0.0,-0.0,-0.07963042147003492,0.01792810542844168,-0.029027895763147953,0.0,0.0,0.0,0.2945850290096105,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-1.1193257711716162,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-878.4531257250338,34.43947536648273,122.47164004400513,9.472604383395693,5.850436127135241,0.0,0.0,-0.0,-4885.105335141969,3.333758614126869,-5.397781596980647,0.0,0.0,0.0,13567.751619852319,1.23456e-61,1.23456e-61,1.23456e-61,0.2885731035368478,-0.4672367642498756,-38704.01415404709,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-878.4531257250338,34.43947536648273,122.47164004400513,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-878.4531257250338,34.43947536648273,122.47164004400513],[9.472604383395693,5.850436127135241,0.0],[0.0,-0.0,-4885.105335141969]],[[3.333758614126869,-5.397781596980647,0.0],[0.0,0.0,13567.751619852319],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.2885731035368478,-0.4672367642498756,-38704.01415404709],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_143","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.8469576479397583,2.0,0,0,1.0183690936715875,2.0,0,0,0.8907141238475587,-0.2916028092489438,0.2739723801035572,-1.697941957401621,0.0,1.9868967866227776,0.0,0.0030078161672726865,0.0,1.2071219554758355,0.0,1.03156994852609,0.1169337137461262,0.0020578185001520186,-0.1368334288915217,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.001413596781172142,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.8907141238475587,-0.2916028092489438,0.2739723801035572,4.1561598980445345,0.0,1.4993187220572972,0.4260107150419705,1.9522834765238633e-05,0.36405588465514876,-2.7818594713985165,0.0,1.5596858586730091,-0.21126055743228855,-9.224476418250941e-06,0.24721276299968659,1.23456e-61,1.23456e-61,1.23456e-61,0.0,1.0172341268857578e-05,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.8907141238475587,-0.2916028092489438,0.2739723801035572,0.7602223123497109,0.0,0.6496630171139948,0,0,0,0,0,0,0],[1,1,1,1,1,0.8469576479397583,2.0,0,0,1.0183690936715875,2.0,0,0,0.8907141238475587,-0.2916028092489438,0.2739723801035572,-1.697941957401621,0.0,1.9868967866227776,0.0,0.0030078161672726865,0.0,1.2071219554758355,0.0,1.03156994852609,0.1169337137461262,0.0020578185001520186,-0.1368334288915217,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.001413596781172142,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.8907141238475587,-0.2916028092489438,0.2739723801035572,4.1561598980445345,0.0,1.4993187220572972,0.4260107150419705,1.9522834765238633e-05,0.36405588465514876,-2.7818594713985165,0.0,1.5596858586730091,-0.21126055743228855,-9.224476418250941e-06,0.24721276299968659,1.23456e-61,1.23456e-61,1.23456e-61,0.0,1.0172341268857578e-05,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.8907141238475587,-0.2916028092489438,0.2739723801035572,0,-1,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.8907141238475587,-0.2916028092489438,0.2739723801035572],[4.1561598980445345,0.0,1.4993187220572972],[0.4260107150419705,1.9522834765238633e-05,0.36405588465514876]],[[-2.7818594713985165,0.0,1.5596858586730091],[-0.21126055743228855,-9.224476418250941e-06,0.24721276299968659],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,1.0172341268857578e-05,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_144","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,2.0,0.9781308639855084,0,0,32.910125558109016,644.8924606559785,459.79905961176894,0.0,-0.7151987540682995,-1.1440778474209627,-1.8205994640904427e-06,-0.0,0.0,0.0,-0.6310072103257901,0.39446229262322613,-1.7863029575730903e-11,-0.1001140331765877,-0.16014883544157182,1.23456e-61,1.23456e-61,1.23456e-61,-5.537724119053509e-07,0.5182361190353968,-0.3239655653527651,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,32.910125558109016,644.8924606559785,459.79905961176894,0.0,0.00043997434700939093,0.007874355473048465,-5.84650907035884e-11,0.0,0.0,0.0,0.002541494946264621,0.011233175261542196,-8.34577013494315e-11,0.45163705307272045,0.7224676281324184,1.23456e-61,1.23456e-61,1.23456e-61,-1.2263068070988278e-10,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,32.910125558109016,644.8924606559785,459.79905961176894,1,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[32.910125558109016,644.8924606559785,459.79905961176894],[0.0,0.00043997434700939093,0.007874355473048465],[-5.84650907035884e-11,0.0,0.0]],[[0.0,0.002541494946264621,0.011233175261542196],[-8.34577013494315e-11,0.45163705307272045,0.7224676281324184],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-1.2263068070988278e-10,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[-1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_145","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.04846480889123894,0,0,0.9883040684750846,1.2096514752340741,0,0,422.5619306786186,63.54622308607105,-544.5968850111265,0.73652520498057,0.0,0.8962097839512317,0.0,-0.0,0.0,0.6025704873813608,0.0,-0.7705090349544166,-0.12363663583931725,0.0,0.10934206618369646,1.23456e-61,1.23456e-61,1.23456e-61,0.3120660440174284,0.0,0.35286324091570953,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,422.5619306786186,63.54622308607105,-544.5968850111265,0.792255274373818,0.0,0.11193321375541293,-0.0,0.02366324101935048,-0.0,-0.15309812336614625,0.0,1.8200696672822336,0.0,0.19393215627405952,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,1.589371515353756,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,422.5619306786186,63.54622308607105,-544.5968850111265,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.04846480889123894,0,0,0.9883040684750846,1.2096514752340741,0,0,422.5619306786186,63.54622308607105,-544.5968850111265,0.73652520498057,0.0,0.8962097839512317,0.0,-0.0,0.0,0.6025704873813608,0.0,-0.7705090349544166,-0.12363663583931725,0.0,0.10934206618369646,1.23456e-61,1.23456e-61,1.23456e-61,0.3120660440174284,0.0,0.35286324091570953,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,422.5619306786186,63.54622308607105,-544.5968850111265,0.792255274373818,0.0,0.11193321375541293,-0.0,0.02366324101935048,-0.0,-0.15309812336614625,0.0,1.8200696672822336,0.0,0.19393215627405952,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,1.589371515353756,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,422.5619306786186,63.54622308607105,-544.5968850111265,0.7083370305222472,0.41248011638609305,0.5728165542100195,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[422.5619306786186,63.54622308607105,-544.5968850111265],[0.792255274373818,0.0,0.11193321375541293],[-0.0,0.02366324101935048,-0.0]],[[-0.15309812336614625,0.0,1.8200696672822336],[0.0,0.19393215627405952,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0,1.589371515353756,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_146","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.1277789837780083,0.0,0,0,0.0,2.0,0,0,-0.0005937520599117791,0.0005434203660622172,-0.0008136254800385979,1.7109165721152102,-2.490086857871831,0.0,0.5972925648211049,0.4103944183003381,5.679504028626182,-1.7493754318347807,-1.2019803276000363,0.0,0.0,0.0,6.931513596262232,1.23456e-61,1.23456e-61,1.23456e-61,0.24508821546149867,0.16839793685815468,8.459520495628563,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.0005937520599117791,0.0005434203660622172,-0.0008136254800385979,0.023094465939218926,-0.03361194055986106,0.0,0.3207504380005112,0.22038477820701521,-2.56078362647626,-0.03862656362998178,-0.026539968928987485,0.0,-0.16815679847051182,0.2447372599913231,4.4046411761970345,1.23456e-61,1.23456e-61,1.23456e-61,-0.6892550044452093,-0.4735809940889017,20.952928331420914,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.0005937520599117791,0.0005434203660622172,-0.0008136254800385979,-0.56629996472182,0.8241992173959312,-0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0005937520599117791,0.0005434203660622172,-0.0008136254800385979],[0.023094465939218926,-0.03361194055986106,0.0],[0.3207504380005112,0.22038477820701521,-2.56078362647626]],[[-0.03862656362998178,-0.026539968928987485,0.0],[-0.16815679847051182,0.2447372599913231,4.4046411761970345],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.6892550044452093,-0.4735809940889017,20.952928331420914],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_147","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.474130453950663,0,0,0.0,1.7874824925117447,0,0,0.0003256021375205951,-0.00042286531931932817,4.5802518213276855e-05,-7.087894555208151,14.389883959746985,3.7639996726648923,672.9676189650739,720.4054342441068,-1486.8829880868484,-15.506446514171898,-17.393007353264945,-15.445299723242181,-229.06763991881704,-245.03631270716303,506.01408842723504,1.23456e-61,1.23456e-61,1.23456e-61,77.93165197657629,83.42509208672602,-172.18547266163463,1.23456e-61,1.23456e-61,1.23456e-61,-0.3772219615019202,-0.4038125213217847,0.8334500821191314,0.0003256021375205951,-0.00042286531931932817,4.5802518213276855e-05,0.005251517707861497,-0.003392156730027222,0.0007333282002883841,0.3943317490517704,0.13284003625321306,0.24282834319686888,-0.00816708247577456,0.006592973927322466,-0.0005021025921489414,-4.633526234392817e-06,-4.960145755753602e-06,1.0237507925519297e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.5434225601187946,-0.1830563752442444,-0.3346705711658395,1.23456e-61,1.23456e-61,1.23456e-61,-0.3772219615019202,-0.4038125213217847,0.8334500821191314,0.0003256021375205951,-0.00042286531931932817,4.5802518213276855e-05,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.474130453950663,0,0,0.0,1.7874824925117447,0,0,0.0003256021375205951,-0.00042286531931932817,4.5802518213276855e-05,-7.087894555208151,14.389883959746985,3.7639996726648923,672.9676189650739,720.4054342441068,-1486.8829880868484,-15.506446514171898,-17.393007353264945,-15.445299723242181,-229.06763991881704,-245.03631270716303,506.01408842723504,1.23456e-61,1.23456e-61,1.23456e-61,77.93165197657629,83.42509208672602,-172.18547266163463,1.23456e-61,1.23456e-61,1.23456e-61,-0.3772219615019202,-0.4038125213217847,0.8334500821191314,0.0003256021375205951,-0.00042286531931932817,4.5802518213276855e-05,0.005251517707861497,-0.003392156730027222,0.0007333282002883841,0.3943317490517704,0.13284003625321306,0.24282834319686888,-0.00816708247577456,0.006592973927322466,-0.0005021025921489414,-4.633526234392817e-06,-4.960145755753602e-06,1.0237507925519297e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.5434225601187946,-0.1830563752442444,-0.3346705711658395,1.23456e-61,1.23456e-61,1.23456e-61,-0.3772219615019202,-0.4038125213217847,0.8334500821191314,0.0003256021375205951,-0.00042286531931932817,4.5802518213276855e-05,-0.8184873299581868,-0.27572248092059587,-0.5040392883624351,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.474130453950663,0,0,0.0,1.7874824925117447,0,0,0.0003256021375205951,-0.00042286531931932817,4.5802518213276855e-05,-7.087894555208151,14.389883959746985,3.7639996726648923,672.9676189650739,720.4054342441068,-1486.8829880868484,-15.506446514171898,-17.393007353264945,-15.445299723242181,-229.06763991881704,-245.03631270716303,506.01408842723504,1.23456e-61,1.23456e-61,1.23456e-61,77.93165197657629,83.42509208672602,-172.18547266163463,1.23456e-61,1.23456e-61,1.23456e-61,-0.3772219615019202,-0.4038125213217847,0.8334500821191314,0.0003256021375205951,-0.00042286531931932817,4.5802518213276855e-05,0.005251517707861497,-0.003392156730027222,0.0007333282002883841,0.3943317490517704,0.13284003625321306,0.24282834319686888,-0.00816708247577456,0.006592973927322466,-0.0005021025921489414,-4.633526234392817e-06,-4.960145755753602e-06,1.0237507925519297e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.5434225601187946,-0.1830563752442444,-0.3346705711658395,1.23456e-61,1.23456e-61,1.23456e-61,-0.3772219615019202,-0.4038125213217847,0.8334500821191314,0.0003256021375205951,-0.00042286531931932817,4.5802518213276855e-05,0.774766851121242,-0.48136566085325033,0.4099066076010348,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0003256021375205951,-0.00042286531931932817,4.5802518213276855e-05],[0.005251517707861497,-0.003392156730027222,0.0007333282002883841],[0.3943317490517704,0.13284003625321306,0.24282834319686888]],[[-0.00816708247577456,0.006592973927322466,-0.0005021025921489414],[-4.633526234392817e-06,-4.960145755753602e-06,1.0237507925519297e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.5434225601187946,-0.1830563752442444,-0.3346705711658395],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.3772219615019202,-0.4038125213217847,0.8334500821191314]]],"normal":[0.3772219615019202,0.4038125213217847,-0.8334500821191314]},{"op":"state"}]}}, +{"name":"adv_sing_148","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.8951530165443473,0,0,2.0,0.0,0,0,1.3746442648322819,-1.1319729266053717,1.8823868587843853,0.026889766135982953,0.00026605381589263084,0.009954297923459365,0.10648720694693847,-0.3589466895479528,0.5025929178060211,0.05393620807282654,-0.011394896194898035,0.035313744948533524,-0.19218546709670248,-0.057133185306290586,-8.450998929225073e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.032968071372194305,0.1111286549841229,-0.1556010385786546,1.23456e-61,1.23456e-61,1.23456e-61,-0.228758631440886,0.7686180824170015,0.5974075090948424,1.3746442648322819,-1.1319729266053717,1.8823868587843853,-27.947074857570996,-8.308148314587806,-0.01228905075287171,-0.0,0.0,0.0,-5.55307177185683,18.718274114699433,-26.209106542270334,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.228758631440886,0.7686180824170015,0.5974075090948424,1.3746442648322819,-1.1319729266053717,1.8823868587843853,0.9585404074150015,0.28495632945184063,0.0004214949784703548,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.8951530165443473,0,0,2.0,0.0,0,0,1.3746442648322819,-1.1319729266053717,1.8823868587843853,0.026889766135982953,0.00026605381589263084,0.009954297923459365,0.10648720694693847,-0.3589466895479528,0.5025929178060211,0.05393620807282654,-0.011394896194898035,0.035313744948533524,-0.19218546709670248,-0.057133185306290586,-8.450998929225073e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.032968071372194305,0.1111286549841229,-0.1556010385786546,1.23456e-61,1.23456e-61,1.23456e-61,-0.228758631440886,0.7686180824170015,0.5974075090948424,1.3746442648322819,-1.1319729266053717,1.8823868587843853,-27.947074857570996,-8.308148314587806,-0.01228905075287171,-0.0,0.0,0.0,-5.55307177185683,18.718274114699433,-26.209106542270334,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.228758631440886,0.7686180824170015,0.5974075090948424,1.3746442648322819,-1.1319729266053717,1.8823868587843853,-0.16991108231653312,0.5727356577749856,-0.8019377098123512,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.3746442648322819,-1.1319729266053717,1.8823868587843853],[-27.947074857570996,-8.308148314587806,-0.01228905075287171],[-0.0,0.0,0.0]],[[-5.55307177185683,18.718274114699433,-26.209106542270334],[-0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.228758631440886,0.7686180824170015,0.5974075090948424]]],"normal":[0.228758631440886,-0.7686180824170015,-0.5974075090948424]},{"op":"state"}]}}, +{"name":"adv_sing_149","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,0.0,1.8353481746362554,0,0,0.0001681031410495466,-0.00014091428282322327,0.0007506761187998772,-0.04997349500035396,-0.011721703787814747,0.0,0.0,0.0,6.825597402882774e-09,0.04148805184646057,0.031172259042061598,0.0,0.0,0.0,-7.182337417447169e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.40091671114489175,-0.4315650842814456,8.06232047981534e-09,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.0001681031410495466,-0.00014091428282322327,0.0007506761187998772,-2.163913855956537,-0.9520663406174572,0.0,-0.4839530495321806,0.5209491966877302,1.588083178259225e-05,0.13782057982298146,-1.6762755673718588,0.0,0.0,0.0,5.718115700515923e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,4.7274914423455845e-06,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.0001681031410495466,-0.00014091428282322327,0.0007506761187998772,-0.73264304781896,-0.6806130798644302,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.0,1.8353481746362554,0,0,0.0001681031410495466,-0.00014091428282322327,0.0007506761187998772,-0.04997349500035396,-0.011721703787814747,0.0,0.0,0.0,6.825597402882774e-09,0.04148805184646057,0.031172259042061598,0.0,0.0,0.0,-7.182337417447169e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.40091671114489175,-0.4315650842814456,8.06232047981534e-09,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.0001681031410495466,-0.00014091428282322327,0.0007506761187998772,-2.163913855956537,-0.9520663406174572,0.0,-0.4839530495321806,0.5209491966877302,1.588083178259225e-05,0.13782057982298146,-1.6762755673718588,0.0,0.0,0.0,5.718115700515923e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,4.7274914423455845e-06,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.0001681031410495466,-0.00014091428282322327,0.0007506761187998772,-0.6806130798644302,0.73264304781896,-0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0001681031410495466,-0.00014091428282322327,0.0007506761187998772],[-2.163913855956537,-0.9520663406174572,0.0],[-0.4839530495321806,0.5209491966877302,1.588083178259225e-05]],[[0.13782057982298146,-1.6762755673718588,0.0],[0.0,0.0,5.718115700515923e-06],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,4.7274914423455845e-06],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_150","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,1.4437687280206084,0,0,0.0,2.0,0,0,7.328975147341676e-05,-0.0005784162452762596,0.0005584023643486959,-0.6419469571271692,1.8023029490718108,-0.12319278832740965,0.29780742570687835,0.11429343542514862,0.12025724220572452,1.384596364931686,0.5313845846845187,0.559112117569034,-0.1442957773456586,0.40511868178724186,-0.027691071602916405,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.3531685843754612,-0.06198432167326595,0.9335040947296042,7.328975147341676e-05,-0.0005784162452762596,0.0005584023643486959,0.05221114664779906,-0.006330594424814453,0.01933246918883579,9.71055195096305e-05,1.704290818555817e-05,-0.00025667175420879235,-0.008920094013702053,-0.003322495841888113,-0.0035953132346023815,-4.049280396325846e-05,-7.1068580200858445e-06,0.00010703159901277828,1.23456e-61,1.23456e-61,1.23456e-61,1.688541682374981e-05,2.963545327343693e-06,-4.4631958910107995e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.3531685843754612,-0.06198432167326595,0.9335040947296042,7.328975147341676e-05,-0.0005784162452762596,0.0005584023643486959,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.4437687280206084,0,0,0.0,2.0,0,0,7.328975147341676e-05,-0.0005784162452762596,0.0005584023643486959,-0.6419469571271692,1.8023029490718108,-0.12319278832740965,0.29780742570687835,0.11429343542514862,0.12025724220572452,1.384596364931686,0.5313845846845187,0.559112117569034,-0.1442957773456586,0.40511868178724186,-0.027691071602916405,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.3531685843754612,-0.06198432167326595,0.9335040947296042,7.328975147341676e-05,-0.0005784162452762596,0.0005584023643486959,0.05221114664779906,-0.006330594424814453,0.01933246918883579,9.71055195096305e-05,1.704290818555817e-05,-0.00025667175420879235,-0.008920094013702053,-0.003322495841888113,-0.0035953132346023815,-4.049280396325846e-05,-7.1068580200858445e-06,0.00010703159901277828,1.23456e-61,1.23456e-61,1.23456e-61,1.688541682374981e-05,2.963545327343693e-06,-4.4631958910107995e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.3531685843754612,-0.06198432167326595,0.9335040947296042,7.328975147341676e-05,-0.0005784162452762596,0.0005584023643486959,-0.3531685843754612,-0.06198432167326595,0.9335040947296042,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.4437687280206084,0,0,0.0,2.0,0,0,7.328975147341676e-05,-0.0005784162452762596,0.0005584023643486959,-0.6419469571271692,1.8023029490718108,-0.12319278832740965,0.29780742570687835,0.11429343542514862,0.12025724220572452,1.384596364931686,0.5313845846845187,0.559112117569034,-0.1442957773456586,0.40511868178724186,-0.027691071602916405,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.3531685843754612,-0.06198432167326595,0.9335040947296042,7.328975147341676e-05,-0.0005784162452762596,0.0005584023643486959,0.05221114664779906,-0.006330594424814453,0.01933246918883579,9.71055195096305e-05,1.704290818555817e-05,-0.00025667175420879235,-0.008920094013702053,-0.003322495841888113,-0.0035953132346023815,-4.049280396325846e-05,-7.1068580200858445e-06,0.00010703159901277828,1.23456e-61,1.23456e-61,1.23456e-61,1.688541682374981e-05,2.963545327343693e-06,-4.4631958910107995e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.3531685843754612,-0.06198432167326595,0.9335040947296042,7.328975147341676e-05,-0.0005784162452762596,0.0005584023643486959,-0.33483966380370755,0.9400815859309172,-0.06425738352463223,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[7.328975147341676e-05,-0.0005784162452762596,0.0005584023643486959],[0.05221114664779906,-0.006330594424814453,0.01933246918883579],[9.71055195096305e-05,1.704290818555817e-05,-0.00025667175420879235]],[[-0.008920094013702053,-0.003322495841888113,-0.0035953132346023815],[-4.049280396325846e-05,-7.1068580200858445e-06,0.00010703159901277828],[1.23456e-61,1.23456e-61,1.23456e-61]],[[1.688541682374981e-05,2.963545327343693e-06,-4.4631958910107995e-05],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.3531685843754612,-0.06198432167326595,0.9335040947296042]]],"normal":[-0.3531685843754612,-0.06198432167326595,0.9335040947296042]},{"op":"state"}]}}, +{"name":"adv_sing_151","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.8641101380111278,0.5798109834197338,0,0,2.0,0.8444246644340043,0,0,1.4471812421022254,1.3873827566103096,1.1891156585928506,4.02930456339602,-0.12693267473805742,0.32853515781807396,-9125.924468334964,10187.709660835379,115860.60558928706,7.315942625677357,4.365504639283424,0.19238848196228814,-22767.67576594611,25416.384755869738,289052.97013481497,1.23456e-61,1.23456e-61,1.23456e-61,-56801.53719259153,63410.29571471406,721139.049569275,1.23456e-61,1.23456e-61,1.23456e-61,0.07822324206589296,-0.08732437811223308,-0.9931040113643748,1.4471812421022254,1.3873827566103096,1.1891156585928506,-0.01065787364813074,-0.00379537905417661,-0.0005057519745481939,-0.2751718237319296,0.07050274137871823,0.6898786656047109,0.008102431965403776,-0.017307406742987426,0.0021600527265738597,-0.06865374464414946,-0.6333530791604799,0.5460494061740973,1.23456e-61,1.23456e-61,1.23456e-61,0.9452099523267872,-0.0066051334097496466,0.4207179096435064,1.23456e-61,1.23456e-61,1.23456e-61,0.07822324206589296,-0.08732437811223308,-0.9931040113643748,1.4471812421022254,1.3873827566103096,1.1891156585928506,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.8641101380111278,0.5798109834197338,0,0,2.0,0.8444246644340043,0,0,1.4471812421022254,1.3873827566103096,1.1891156585928506,4.02930456339602,-0.12693267473805742,0.32853515781807396,-9125.924468334964,10187.709660835379,115860.60558928706,7.315942625677357,4.365504639283424,0.19238848196228814,-22767.67576594611,25416.384755869738,289052.97013481497,1.23456e-61,1.23456e-61,1.23456e-61,-56801.53719259153,63410.29571471406,721139.049569275,1.23456e-61,1.23456e-61,1.23456e-61,0.07822324206589296,-0.08732437811223308,-0.9931040113643748,1.4471812421022254,1.3873827566103096,1.1891156585928506,-0.01065787364813074,-0.00379537905417661,-0.0005057519745481939,-0.2751718237319296,0.07050274137871823,0.6898786656047109,0.008102431965403776,-0.017307406742987426,0.0021600527265738597,-0.06865374464414946,-0.6333530791604799,0.5460494061740973,1.23456e-61,1.23456e-61,1.23456e-61,0.9452099523267872,-0.0066051334097496466,0.4207179096435064,1.23456e-61,1.23456e-61,1.23456e-61,0.07822324206589296,-0.08732437811223308,-0.9931040113643748,1.4471812421022254,1.3873827566103096,1.1891156585928506,0.9959483437301373,-0.03748269247369549,0.08174316109692974,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.4471812421022254,1.3873827566103096,1.1891156585928506],[-0.01065787364813074,-0.00379537905417661,-0.0005057519745481939],[-0.2751718237319296,0.07050274137871823,0.6898786656047109]],[[0.008102431965403776,-0.017307406742987426,0.0021600527265738597],[-0.06865374464414946,-0.6333530791604799,0.5460494061740973],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.9452099523267872,-0.0066051334097496466,0.4207179096435064],[1.23456e-61,1.23456e-61,1.23456e-61],[0.07822324206589296,-0.08732437811223308,-0.9931040113643748]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_152","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,2.0,2.0,0,0,-0.00037714692887267455,0.0006988742117444999,0.0007611073676939697,-7.7736194629266775,36.43504662283795,-0.0,0.0,0.0,490.6753465864244,-16.200673035723327,-20.65582059385752,0.0,0.0,0.0,336.2005984687264,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-0.0,-344.12078917012656,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00037714692887267455,0.0006988742117444999,0.0007611073676939697,0.025377478555823535,-0.010425773806308648,0.0,-0.005192780747030532,-0.0016359048674234734,0.0,0.013023473020515701,0.00661996794914367,-0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-0.00037714692887267455,0.0006988742117444999,0.0007611073676939697,-0.30047647207149086,0.9537892270997143,-0.0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,2.0,2.0,0,0,-0.00037714692887267455,0.0006988742117444999,0.0007611073676939697,-7.7736194629266775,36.43504662283795,-0.0,0.0,0.0,490.6753465864244,-16.200673035723327,-20.65582059385752,0.0,0.0,0.0,336.2005984687264,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-0.0,-344.12078917012656,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00037714692887267455,0.0006988742117444999,0.0007611073676939697,0.025377478555823535,-0.010425773806308648,0.0,-0.005192780747030532,-0.0016359048674234734,0.0,0.013023473020515701,0.00661996794914367,-0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-0.00037714692887267455,0.0006988742117444999,0.0007611073676939697,0,0,1,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,2.0,2.0,0,0,-0.00037714692887267455,0.0006988742117444999,0.0007611073676939697,-7.7736194629266775,36.43504662283795,-0.0,0.0,0.0,490.6753465864244,-16.200673035723327,-20.65582059385752,0.0,0.0,0.0,336.2005984687264,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-0.0,-344.12078917012656,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00037714692887267455,0.0006988742117444999,0.0007611073676939697,0.025377478555823535,-0.010425773806308648,0.0,-0.005192780747030532,-0.0016359048674234734,0.0,0.013023473020515701,0.00661996794914367,-0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-0.00037714692887267455,0.0006988742117444999,0.0007611073676939697,-0.8844458097577553,0.3893834371162705,0.25716949372246334,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.00037714692887267455,0.0006988742117444999,0.0007611073676939697],[0.025377478555823535,-0.010425773806308648,0.0],[-0.005192780747030532,-0.0016359048674234734,0.0]],[[0.013023473020515701,0.00661996794914367,-0.0],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,-1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_153","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,0.0,0.6025951755370973,0,0,0.0007221067944787793,0.0008126576768342489,0.000229285317076243,49.084543660460746,35.226718727094216,0.0,0.4487316409932727,-0.6252580035853188,-226.54730673245908,17.662179215771147,-24.61029690479246,0.0,0.06178126677148791,0.044338831429656354,40.55900208431651,1.23456e-61,1.23456e-61,1.23456e-61,-0.04457950832869312,0.062116623460549844,-273.39171562037467,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.0007221067944787793,0.0008126576768342489,0.000229285317076243,1.2384407276762253,-0.2870070909516624,0.0,0.0,-0.0,-11.31297200933441,-1.2270601976375426,-0.46528769747183946,0.0,0.0,0.0,9.702631596631514,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-12.055209713982025,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.0007221067944787793,0.0008126576768342489,0.000229285317076243,-0.8124293159548813,-0.5830596938368178,0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0007221067944787793,0.0008126576768342489,0.000229285317076243],[1.2384407276762253,-0.2870070909516624,0.0],[0.0,-0.0,-11.31297200933441]],[[-1.2270601976375426,-0.46528769747183946,0.0],[0.0,0.0,9.702631596631514],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-0.0,-12.055209713982025],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_154","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.476284390659496,0.18306219322931927,0,0,0.0,0.0,0,0,-0.0003298451033589229,-0.0005479949146311322,-0.0008657477760678529,0.16011679711094082,0.14671846731132113,-0.0518342932705528,2.8741858123310482e-08,-3.307587498270115e-08,-4.838252841844114e-09,-0.052951877791117485,-0.015619761850515411,-0.2077812180284463,-1.0008196028982336e-08,1.1517343076316666e-08,1.6847269467134752e-09,1.23456e-61,1.23456e-61,1.23456e-61,3.484985789703263e-09,-4.010490685820647e-09,-5.866441316521288e-10,1.23456e-61,1.23456e-61,1.23456e-61,0.6519596434064568,-0.7502693655560582,-0.10974744861469825,-0.0003298451033589229,-0.0005479949146311322,-0.0008657477760678529,0.01571659781609104,0.014401456839831895,-0.005087903050234864,0.0001500116822739482,-0.00017263211124174534,-2.5252175588574965e-05,-0.008817940332261671,-0.002601118860133918,-0.03460127306470779,0.0002555471297230333,-0.00029408136657845327,-4.3017456328086685e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.06387307097492377,-0.019470684178063902,-0.25241707102980593,1.23456e-61,1.23456e-61,1.23456e-61,0.6519596434064568,-0.7502693655560582,-0.10974744861469825,-0.0003298451033589229,-0.0005479949146311322,-0.0008657477760678529,0.6519596434064568,-0.7502693655560582,-0.10974744861469825,0,0,0,0,0,0,0],[1,1,1,1,1,0.476284390659496,0.18306219322931927,0,0,0.0,0.0,0,0,-0.0003298451033589229,-0.0005479949146311322,-0.0008657477760678529,0.16011679711094082,0.14671846731132113,-0.0518342932705528,2.8741858123310482e-08,-3.307587498270115e-08,-4.838252841844114e-09,-0.052951877791117485,-0.015619761850515411,-0.2077812180284463,-1.0008196028982336e-08,1.1517343076316666e-08,1.6847269467134752e-09,1.23456e-61,1.23456e-61,1.23456e-61,3.484985789703263e-09,-4.010490685820647e-09,-5.866441316521288e-10,1.23456e-61,1.23456e-61,1.23456e-61,0.6519596434064568,-0.7502693655560582,-0.10974744861469825,-0.0003298451033589229,-0.0005479949146311322,-0.0008657477760678529,0.01571659781609104,0.014401456839831895,-0.005087903050234864,0.0001500116822739482,-0.00017263211124174534,-2.5252175588574965e-05,-0.008817940332261671,-0.002601118860133918,-0.03460127306470779,0.0002555471297230333,-0.00029408136657845327,-4.3017456328086685e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.06387307097492377,-0.019470684178063902,-0.25241707102980593,1.23456e-61,1.23456e-61,1.23456e-61,0.6519596434064568,-0.7502693655560582,-0.10974744861469825,-0.0003298451033589229,-0.0005479949146311322,-0.0008657477760678529,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0003298451033589229,-0.0005479949146311322,-0.0008657477760678529],[0.01571659781609104,0.014401456839831895,-0.005087903050234864],[0.0001500116822739482,-0.00017263211124174534,-2.5252175588574965e-05]],[[-0.008817940332261671,-0.002601118860133918,-0.03460127306470779],[0.0002555471297230333,-0.00029408136657845327,-4.3017456328086685e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.06387307097492377,-0.019470684178063902,-0.25241707102980593],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6519596434064568,-0.7502693655560582,-0.10974744861469825]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_155","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.041545736499525,0.0,0,0,2.0,0.6360497003503214,0,0,-1.4725980230099474,1.377238157811862,1.2296742267261025,-0.3412992344926582,0.0,0.2004245659935329,0.10030991256881648,-2.6045639525151416,0.1708158688135427,0.1402781276737367,0.0,0.23887699271682375,0.13706891256130788,1.1145879945331558,-0.08049234963020872,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.2015270499265375,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-1.4725980230099474,1.377238157811862,1.2296742267261025,4.095387313801456,-0.0,-6.811104414860193,0.0,4603196.828446168,0.0,-0.02254110353672445,-0.0,-11.716863662500753,0.0,43841644.38131568,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0961847676039901,467897111.5659131,-0.16379123681951896,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-1.4725980230099474,1.377238157811862,1.2296742267261025,0,-1,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.041545736499525,0.0,0,0,2.0,0.6360497003503214,0,0,-1.4725980230099474,1.377238157811862,1.2296742267261025,-0.3412992344926582,0.0,0.2004245659935329,0.10030991256881648,-2.6045639525151416,0.1708158688135427,0.1402781276737367,0.0,0.23887699271682375,0.13706891256130788,1.1145879945331558,-0.08049234963020872,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.2015270499265375,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-1.4725980230099474,1.377238157811862,1.2296742267261025,4.095387313801456,-0.0,-6.811104414860193,0.0,4603196.828446168,0.0,-0.02254110353672445,-0.0,-11.716863662500753,0.0,43841644.38131568,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0961847676039901,467897111.5659131,-0.16379123681951896,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-1.4725980230099474,1.377238157811862,1.2296742267261025,-0.862309046607224,0.0,0.5063823734485046,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-1.4725980230099474,1.377238157811862,1.2296742267261025],[4.095387313801456,-0.0,-6.811104414860193],[0.0,4603196.828446168,0.0]],[[-0.02254110353672445,-0.0,-11.716863662500753],[0.0,43841644.38131568,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0961847676039901,467897111.5659131,-0.16379123681951896],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_156","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.00017971771262,2.0,0,0,0.9694990920364401,2.0,0,0,0.10035845106167507,0.8080696231681546,-0.5733084042052705,0.0,21.998013880524994,-20.00213249657566,-597.9891501141166,-0.6461330561752023,0.18240114376519642,0.0,-14.101294989458873,-13.679855887742399,1230.4958301833594,0.05510288164239834,0.19519501130703312,1.23456e-61,1.23456e-61,1.23456e-61,-2532.0191642435143,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.10035845106167507,0.8080696231681546,-0.5733084042052705,0.0,6.927918048619761,24.541276273181758,0.6454195121195759,-0.4330545477528374,0.12224981227615596,0.0,45.50469941365404,-12.845820439639203,0.0730857407208981,0.24771606553584963,0.8775029321878379,1.23456e-61,1.23456e-61,1.23456e-61,1.1345238325469802,0.572532764045704,-0.16162403394614253,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.10035845106167507,0.8080696231681546,-0.5733084042052705,1,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.10035845106167507,0.8080696231681546,-0.5733084042052705],[0.0,6.927918048619761,24.541276273181758],[0.6454195121195759,-0.4330545477528374,0.12224981227615596]],[[0.0,45.50469941365404,-12.845820439639203],[0.0730857407208981,0.24771606553584963,0.8775029321878379],[1.23456e-61,1.23456e-61,1.23456e-61]],[[1.1345238325469802,0.572532764045704,-0.16162403394614253],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_157","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,1.9153065694871065,0.0,0,0,0.8811624740570814,0.7448096971788514,-0.19038614283724908,0.020041959848472946,0.016165239447738112,0.0,0.0,0.0,0.0030748338804575236,-0.009623421523269159,-0.022855685316914263,0.0,0.0,-0.0,-0.0010219143450481377,1.23456e-61,1.23456e-61,1.23456e-61,0.014081087369997266,0.038326532786028336,-0.0011186714827816145,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.8811624740570814,0.7448096971788514,-0.19038614283724908,5.9013596147343135,-2.1681470849651157,0.0,-0.049720615229933436,-0.1353317921889944,-113.46514614772123,-2.5293038189993777,-6.884372150921832,0.0,-0.46231398468333135,0.16985318361672147,22.687886608210217,1.23456e-61,1.23456e-61,1.23456e-61,0.3278931030252421,0.892474098995094,-60.75371668743764,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,0.8811624740570814,0.7448096971788514,-0.19038614283724908,-0.9386542781365516,0.3448596035141681,-0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.8811624740570814,0.7448096971788514,-0.19038614283724908],[5.9013596147343135,-2.1681470849651157,0.0],[-0.049720615229933436,-0.1353317921889944,-113.46514614772123]],[[-2.5293038189993777,-6.884372150921832,0.0],[-0.46231398468333135,0.16985318361672147,22.687886608210217],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.3278931030252421,0.892474098995094,-60.75371668743764],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,-1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_158","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,0.0,2.0,0,0,-965.5675845784928,-517.6268219645613,-4.7532424472847,-3.8927547703060448,-0.0,0.14471521079284733,-0.0,1.9827906384952811,-0.0,0.5733132766973625,0.0,4.551868734626787,-0.09859931567119376,-17.071630208276872,0.12188842493458601,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,146.9850383141418,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-965.5675845784928,-517.6268219645613,-4.7532424472847,-29.85757803279853,-0.0,-11.88946724523316,0.0,1995.6754763687386,0.0,-20.977000579578235,-0.0,18.280178609077915,0.2805909259892174,-1698.143348870147,-0.34686636298587037,1.23456e-61,1.23456e-61,1.23456e-61,0.2710155835103537,1444.9698197218815,0.21923288519554696,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-965.5675845784928,-517.6268219645613,-4.7532424472847,0,-1,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-965.5675845784928,-517.6268219645613,-4.7532424472847],[-29.85757803279853,-0.0,-11.88946724523316],[0.0,1995.6754763687386,0.0]],[[-20.977000579578235,-0.0,18.280178609077915],[0.2805909259892174,-1698.143348870147,-0.34686636298587037],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.2710155835103537,1444.9698197218815,0.21923288519554696],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_159","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,0.0,2.0,0,0,0.830720837174125,-0.33533317510096206,1.6196501012400901,0.010601123246352267,0.024457780456818484,0.059162855454471974,-30.136393664081027,28.69059952032967,-6.460620567973624,-0.02127018288519268,-0.02967562704568863,-0.03256729351826716,20.598032099684808,-19.60984106015702,4.415792789487461,1.23456e-61,1.23456e-61,1.23456e-61,-17.131440994151124,16.30955973856855,-3.672627232028637,1.23456e-61,1.23456e-61,1.23456e-61,-0.7156910780801997,0.6813557829895752,-0.15342939008894024,0.830720837174125,-0.33533317510096206,1.6196501012400901,-1.2565865340437776,-2.247638354000939,-4.119899185875876,0.5122373107458309,0.5756538080084475,0.16714493948947762,2.4123216926340243,1.7636556462713813,-3.420466827014416,0.06834018762189058,0.013862549537639567,-0.2571805245272524,1.23456e-61,1.23456e-61,1.23456e-61,-0.012905077722348413,-0.014492218800406496,-0.004210406246933841,1.23456e-61,1.23456e-61,1.23456e-61,-0.7156910780801997,0.6813557829895752,-0.15342939008894024,0.830720837174125,-0.33533317510096206,1.6196501012400901,-0.7156910780801997,0.6813557829895752,-0.15342939008894024,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.830720837174125,-0.33533317510096206,1.6196501012400901],[-1.2565865340437776,-2.247638354000939,-4.119899185875876],[0.5122373107458309,0.5756538080084475,0.16714493948947762]],[[2.4123216926340243,1.7636556462713813,-3.420466827014416],[0.06834018762189058,0.013862549537639567,-0.2571805245272524],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.012905077722348413,-0.014492218800406496,-0.004210406246933841],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.7156910780801997,0.6813557829895752,-0.15342939008894024]]],"normal":[0.7156910780801997,-0.6813557829895752,0.15342939008894024]},{"op":"state"}]}}, +{"name":"adv_sing_160","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,1.9648583743667773,0.0,0,0,9.385860091782395e-05,0.00040990165076364615,-0.0001414703500100265,-26.61215974726775,-2.8875221156969726,-17.05256438492449,-0.06453239822083978,-0.15392982115015433,0.1267740267308311,-6.203560553919072,-14.631517649885366,12.1588149783676,-0.7930793710659538,-0.08609588178247643,-0.5082427298506439,1.23456e-61,1.23456e-61,1.23456e-61,3.793995801726925e-05,-5.723497404132616e-05,-4.951730139608963e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.44814720938260677,-0.6760601549435349,-0.5848989191478351,9.385860091782395e-05,0.00040990165076364615,-0.0001414703500100265,-9.00035347567937,-3.5279428380940105,-2.818233472256341,0.16332813716171676,0.3851099312555716,-0.3201001208751888,3.0451269557697827,-5.39239332435996,8.566005594824674,7.684149845149234e-07,-1.159205597213868e-06,-1.0028961120140866e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.23130243994774735,0.5454028560703222,-0.45332303788418377,1.23456e-61,1.23456e-61,1.23456e-61,-0.44814720938260677,0.6760601549435349,0.5848989191478351,9.385860091782395e-05,0.00040990165076364615,-0.0001414703500100265,-0.5314516176944183,-0.725997740475673,0.4364475442412334,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,1.9648583743667773,0.0,0,0,9.385860091782395e-05,0.00040990165076364615,-0.0001414703500100265,-26.61215974726775,-2.8875221156969726,-17.05256438492449,-0.06453239822083978,-0.15392982115015433,0.1267740267308311,-6.203560553919072,-14.631517649885366,12.1588149783676,-0.7930793710659538,-0.08609588178247643,-0.5082427298506439,1.23456e-61,1.23456e-61,1.23456e-61,3.793995801726925e-05,-5.723497404132616e-05,-4.951730139608963e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.44814720938260677,-0.6760601549435349,-0.5848989191478351,9.385860091782395e-05,0.00040990165076364615,-0.0001414703500100265,-9.00035347567937,-3.5279428380940105,-2.818233472256341,0.16332813716171676,0.3851099312555716,-0.3201001208751888,3.0451269557697827,-5.39239332435996,8.566005594824674,7.684149845149234e-07,-1.159205597213868e-06,-1.0028961120140866e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.23130243994774735,0.5454028560703222,-0.45332303788418377,1.23456e-61,1.23456e-61,1.23456e-61,-0.44814720938260677,0.6760601549435349,0.5848989191478351,9.385860091782395e-05,0.00040990165076364615,-0.0001414703500100265,0.31002218230260187,0.7312083105807422,-0.6076352960600537,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[9.385860091782395e-05,0.00040990165076364615,-0.0001414703500100265],[-9.00035347567937,-3.5279428380940105,-2.818233472256341],[0.16332813716171676,0.3851099312555716,-0.3201001208751888]],[[3.0451269557697827,-5.39239332435996,8.566005594824674],[7.684149845149234e-07,-1.159205597213868e-06,-1.0028961120140866e-06],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.23130243994774735,0.5454028560703222,-0.45332303788418377],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.44814720938260677,0.6760601549435349,0.5848989191478351]]],"normal":[-0.44814720938260677,0.6760601549435349,0.5848989191478351]},{"op":"state"}]}}, +{"name":"adv_sing_161","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.13422272636682386,0.745335160588009,0,0,1.3420319241677314,2.0,0,0,964.0679331809725,-122.12698743182959,-472.7266652084561,0.0,-9.668219183604059,-0.1867299951140679,0.0,0.007605956364068572,-0.39380953865404494,0.0,-0.2922590188229314,15.132139057996945,0.0,-0.7084395097592083,-0.01368265485957224,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.00714401743751161,-0.36989197367653154,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,964.0679331809725,-122.12698743182959,-472.7266652084561,0.0,-2.4204506927887275,0.3308889132906109,0.0,0.0,0.0,0.0,3.7593926095132866,0.3221373404784347,0.0,0.3046635915321087,0.0058842098920039165,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.009447537374357948,-0.4891600946317509,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,964.0679331809725,-122.12698743182959,-472.7266652084561,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.13422272636682386,0.745335160588009,0,0,1.3420319241677314,2.0,0,0,964.0679331809725,-122.12698743182959,-472.7266652084561,0.0,-9.668219183604059,-0.1867299951140679,0.0,0.007605956364068572,-0.39380953865404494,0.0,-0.2922590188229314,15.132139057996945,0.0,-0.7084395097592083,-0.01368265485957224,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.00714401743751161,-0.36989197367653154,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,964.0679331809725,-122.12698743182959,-472.7266652084561,0.0,-2.4204506927887275,0.3308889132906109,0.0,0.0,0.0,0.0,3.7593926095132866,0.3221373404784347,0.0,0.3046635915321087,0.0058842098920039165,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.009447537374357948,-0.4891600946317509,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,964.0679331809725,-122.12698743182959,-472.7266652084561,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[964.0679331809725,-122.12698743182959,-472.7266652084561],[0.0,-2.4204506927887275,0.3308889132906109],[0.0,0.0,0.0]],[[0.0,3.7593926095132866,0.3221373404784347],[0.0,0.3046635915321087,0.0058842098920039165],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.009447537374357948,-0.4891600946317509],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_162","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,0.0,2.0,0,0,378.5717324311484,-145.30582082140552,-100.9139802307777,-2.5673981601439246,-14.392098750572595,-14.452503786757898,-0.06036660591109386,-0.2411931169919724,0.25090879228689156,-27.991843551527236,5.981910081660886,-0.9843299949256026,-0.03724768603750279,-0.14882210719871955,0.15481691869367833,1.23456e-61,1.23456e-61,1.23456e-61,0.6485766457849039,-0.23604637168286458,0.11984416191336052,1.23456e-61,1.23456e-61,1.23456e-61,-0.1708974702185522,-0.6828161515120119,0.710321165323985,378.5717324311484,-145.30582082140552,-100.9139802307777,0.006588628183638319,-0.010296393676739013,-0.008312527211991452,-0.3023604837079254,0.06445781674870171,-0.010475936665063941,0.006933918487569119,0.0017893719105800364,0.003388328107519365,1.546000811300511e-07,6.177003807351071e-07,-6.425824188447186e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.6376994163490114,-0.1363227222462337,0.022469585688876498,1.23456e-61,1.23456e-61,1.23456e-61,-0.1708974702185522,-0.6828161515120119,0.710321165323985,378.5717324311484,-145.30582082140552,-100.9139802307777,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.0,2.0,0,0,378.5717324311484,-145.30582082140552,-100.9139802307777,-2.5673981601439246,-14.392098750572595,-14.452503786757898,-0.06036660591109386,-0.2411931169919724,0.25090879228689156,-27.991843551527236,5.981910081660886,-0.9843299949256026,-0.03724768603750279,-0.14882210719871955,0.15481691869367833,1.23456e-61,1.23456e-61,1.23456e-61,0.6485766457849039,-0.23604637168286458,0.11984416191336052,1.23456e-61,1.23456e-61,1.23456e-61,-0.1708974702185522,-0.6828161515120119,0.710321165323985,378.5717324311484,-145.30582082140552,-100.9139802307777,0.006588628183638319,-0.010296393676739013,-0.008312527211991452,-0.3023604837079254,0.06445781674870171,-0.010475936665063941,0.006933918487569119,0.0017893719105800364,0.003388328107519365,1.546000811300511e-07,6.177003807351071e-07,-6.425824188447186e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.6376994163490114,-0.1363227222462337,0.022469585688876498,1.23456e-61,1.23456e-61,1.23456e-61,-0.1708974702185522,-0.6828161515120119,0.710321165323985,378.5717324311484,-145.30582082140552,-100.9139802307777,0.9773415184719854,-0.20885973700915283,0.03436810334221884,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[378.5717324311484,-145.30582082140552,-100.9139802307777],[0.006588628183638319,-0.010296393676739013,-0.008312527211991452],[-0.3023604837079254,0.06445781674870171,-0.010475936665063941]],[[0.006933918487569119,0.0017893719105800364,0.003388328107519365],[1.546000811300511e-07,6.177003807351071e-07,-6.425824188447186e-07],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.6376994163490114,-0.1363227222462337,0.022469585688876498],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.1708974702185522,-0.6828161515120119,0.710321165323985]]],"normal":[0.1708974702185522,0.6828161515120119,-0.710321165323985]},{"op":"state"}]}}, +{"name":"adv_sing_163","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,1.1005515851750771,0.0,0,0,0.0008348775407892884,-0.0008183549440207993,0.0004952840731162367,1.077612427434396,-3.0527520327865996,0.20748146661464853,-1.9740656555720677e-12,-4.205332814693303e-13,4.065393728503838e-12,2.5766890788765573,1.0016428191175495,1.3547956053222243,-0.27656482479967187,0.7834763311983025,-0.05324927033067954,1.23456e-61,1.23456e-61,1.23456e-61,3.839077023538195e-12,8.17834834401275e-13,-7.906200895943594e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.4349258613293254,0.09265183209303796,-0.895686961586886,0.0008348775407892884,-0.0008183549440207993,0.0004952840731162367,0.27637061185424416,-0.06495814484846753,0.12748006856653135,0.23412861785695727,0.049876191136475914,-0.4821648216270268,-0.23664636196087707,-0.5606895354746688,-0.17290922179889837,0.019134400298954735,0.004076182635544265,-0.039405412253884727,1.23456e-61,1.23456e-61,1.23456e-61,0.7173988141863205,0.1528267697684819,-1.4774121781597873,1.23456e-61,1.23456e-61,1.23456e-61,-0.4349258613293254,-0.09265183209303796,0.895686961586886,0.0008348775407892884,-0.0008183549440207993,0.0004952840731162367,0.4349258613293254,0.09265183209303796,-0.895686961586886,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,1.1005515851750771,0.0,0,0,0.0008348775407892884,-0.0008183549440207993,0.0004952840731162367,1.077612427434396,-3.0527520327865996,0.20748146661464853,-1.9740656555720677e-12,-4.205332814693303e-13,4.065393728503838e-12,2.5766890788765573,1.0016428191175495,1.3547956053222243,-0.27656482479967187,0.7834763311983025,-0.05324927033067954,1.23456e-61,1.23456e-61,1.23456e-61,3.839077023538195e-12,8.17834834401275e-13,-7.906200895943594e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.4349258613293254,0.09265183209303796,-0.895686961586886,0.0008348775407892884,-0.0008183549440207993,0.0004952840731162367,0.27637061185424416,-0.06495814484846753,0.12748006856653135,0.23412861785695727,0.049876191136475914,-0.4821648216270268,-0.23664636196087707,-0.5606895354746688,-0.17290922179889837,0.019134400298954735,0.004076182635544265,-0.039405412253884727,1.23456e-61,1.23456e-61,1.23456e-61,0.7173988141863205,0.1528267697684819,-1.4774121781597873,1.23456e-61,1.23456e-61,1.23456e-61,-0.4349258613293254,-0.09265183209303796,0.895686961586886,0.0008348775407892884,-0.0008183549440207993,0.0004952840731162367,1.1691396353806351,-0.6156918171496786,0.5040199393644679,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,1.1005515851750771,0.0,0,0,0.0008348775407892884,-0.0008183549440207993,0.0004952840731162367,1.077612427434396,-3.0527520327865996,0.20748146661464853,-1.9740656555720677e-12,-4.205332814693303e-13,4.065393728503838e-12,2.5766890788765573,1.0016428191175495,1.3547956053222243,-0.27656482479967187,0.7834763311983025,-0.05324927033067954,1.23456e-61,1.23456e-61,1.23456e-61,3.839077023538195e-12,8.17834834401275e-13,-7.906200895943594e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.4349258613293254,0.09265183209303796,-0.895686961586886,0.0008348775407892884,-0.0008183549440207993,0.0004952840731162367,0.27637061185424416,-0.06495814484846753,0.12748006856653135,0.23412861785695727,0.049876191136475914,-0.4821648216270268,-0.23664636196087707,-0.5606895354746688,-0.17290922179889837,0.019134400298954735,0.004076182635544265,-0.039405412253884727,1.23456e-61,1.23456e-61,1.23456e-61,0.7173988141863205,0.1528267697684819,-1.4774121781597873,1.23456e-61,1.23456e-61,1.23456e-61,-0.4349258613293254,-0.09265183209303796,0.895686961586886,0.0008348775407892884,-0.0008183549440207993,0.0004952840731162367,0.33218543659873534,-0.9410431255449025,0.06395835814331205,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0008348775407892884,-0.0008183549440207993,0.0004952840731162367],[0.27637061185424416,-0.06495814484846753,0.12748006856653135],[0.23412861785695727,0.049876191136475914,-0.4821648216270268]],[[-0.23664636196087707,-0.5606895354746688,-0.17290922179889837],[0.019134400298954735,0.004076182635544265,-0.039405412253884727],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.7173988141863205,0.1528267697684819,-1.4774121781597873],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.4349258613293254,-0.09265183209303796,0.895686961586886]]],"normal":[-0.4349258613293254,-0.09265183209303796,0.895686961586886]},{"op":"state"}]}}, +{"name":"adv_sing_164","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.4273074569344566,0.0,0,0,2.0,0.9371182270833665,0,0,-0.00040410843064361737,0.0002922527484126809,-0.0008954283550864601,-0.06283202161814036,-0.13744778474724506,0.0,0.0005933482174268206,0.0006771453311913354,-0.022660471989044764,0.350604164106458,-0.03265914014900351,0.0,0.0,0.0,0.021836392602384985,1.23456e-61,1.23456e-61,1.23456e-61,-0.3664960398053559,-0.41825537680142816,-0.021042282001605822,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00040410843064361737,0.0002922527484126809,-0.0008954283550864601,7.618138545253266,-6.675389636053386,0.0,0.0,0.0,430513.4079940236,-3.820198447738952,-4.359715706788753,0.0,0.0,0.0,289762.8589864461,1.23456e-61,1.23456e-61,1.23456e-61,0.5597449291907758,0.6387963329582349,195004.7798888961,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00040410843064361737,0.0002922527484126809,-0.0008954283550864601,-0.6590366725841086,-0.7521108057921163,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,1.4273074569344566,0.0,0,0,2.0,0.9371182270833665,0,0,-0.00040410843064361737,0.0002922527484126809,-0.0008954283550864601,-0.06283202161814036,-0.13744778474724506,0.0,0.0005933482174268206,0.0006771453311913354,-0.022660471989044764,0.350604164106458,-0.03265914014900351,0.0,0.0,0.0,0.021836392602384985,1.23456e-61,1.23456e-61,1.23456e-61,-0.3664960398053559,-0.41825537680142816,-0.021042282001605822,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00040410843064361737,0.0002922527484126809,-0.0008954283550864601,7.618138545253266,-6.675389636053386,0.0,0.0,0.0,430513.4079940236,-3.820198447738952,-4.359715706788753,0.0,0.0,0.0,289762.8589864461,1.23456e-61,1.23456e-61,1.23456e-61,0.5597449291907758,0.6387963329582349,195004.7798888961,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00040410843064361737,0.0002922527484126809,-0.0008954283550864601,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.00040410843064361737,0.0002922527484126809,-0.0008954283550864601],[7.618138545253266,-6.675389636053386,0.0],[0.0,0.0,430513.4079940236]],[[-3.820198447738952,-4.359715706788753,0.0],[0.0,0.0,289762.8589864461],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.5597449291907758,0.6387963329582349,195004.7798888961],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_165","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.5392431717924671,0.6453534561153229,0,0,0.5758038287206841,2.0,0,0,0.5046759806473142,-0.5911233864851411,-0.13676297516961133,-0.0030070523196334335,-0.004059483716028231,0.0031545160306232214,0.0,0.0,-0.0,0.004167437969929512,-0.0026192414388868726,-0.011992170983846754,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.19472743658743177,0.4287825153443046,0.8435211236471875,1.23456e-61,1.23456e-61,1.23456e-61,-0.860182743907418,0.34614333986776247,-0.3745269487621632,0.5046759806473142,-0.5911233864851411,-0.13676297516961133,-1.3273245098288688,-4.028063162733669,-0.6743055426624167,0.0,0.0,-0.0,-5.772953057665156,-3.0143799808278184,10.472910054565162,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.860182743907418,0.34614333986776247,-0.3745269487621632,0.5046759806473142,-0.5911233864851411,-0.13676297516961133,0.4684623632171355,0.8265537371346837,-0.3120127142885442,0,0,0,0,0,0,0],[1,1,1,1,1,0.5392431717924671,0.6453534561153229,0,0,0.5758038287206841,2.0,0,0,0.5046759806473142,-0.5911233864851411,-0.13676297516961133,-0.0030070523196334335,-0.004059483716028231,0.0031545160306232214,0.0,0.0,-0.0,0.004167437969929512,-0.0026192414388868726,-0.011992170983846754,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.19472743658743177,0.4287825153443046,0.8435211236471875,1.23456e-61,1.23456e-61,1.23456e-61,-0.860182743907418,0.34614333986776247,-0.3745269487621632,0.5046759806473142,-0.5911233864851411,-0.13676297516961133,-1.3273245098288688,-4.028063162733669,-0.6743055426624167,0.0,0.0,-0.0,-5.772953057665156,-3.0143799808278184,10.472910054565162,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.860182743907418,0.34614333986776247,-0.3745269487621632,0.5046759806473142,-0.5911233864851411,-0.13676297516961133,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.5046759806473142,-0.5911233864851411,-0.13676297516961133],[-1.3273245098288688,-4.028063162733669,-0.6743055426624167],[0.0,0.0,-0.0]],[[-5.772953057665156,-3.0143799808278184,10.472910054565162],[-0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.860182743907418,0.34614333986776247,-0.3745269487621632]]],"normal":[-0.860182743907418,0.34614333986776247,-0.3745269487621632]},{"op":"state"}]}}, +{"name":"adv_sing_166","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.4657973732233347,0,0,0.0,1.2616213267333571,0,0,-0.20387712085383103,-0.46923292745817013,-0.4365589605536413,0.9082405931224041,-0.9305098422194572,-1.5294738458038843,-4.592034742928259,3.011456496192306,-4.558994118669356,0.8470237411265177,1.0522135216918225,-0.1371672314611333,-4.515859986007748,3.044217474048906,-4.533690911179856,1.23456e-61,1.23456e-61,1.23456e-61,7.799249075557258,-5.554562323102514,8.01070874848603,1.23456e-61,1.23456e-61,1.23456e-61,-0.6372728904379473,0.42959641681094507,-0.6397891697864702,-0.20387712085383103,-0.46923292745817013,-0.4365589605536413,-0.31950778916971084,-0.1508930212512665,0.21693169816647478,-1.095639245567749e-07,7.385889170491609e-08,-1.0999653897493392e-07,-0.334787248808612,-0.1340476819766428,0.2434621297560257,-1.1472293132414437e-07,7.733666528483766e-08,-1.1517591613994998e-07,1.23456e-61,1.23456e-61,1.23456e-61,-1.2066010684210016e-07,8.133901556014696e-08,-1.2113653466382765e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.6372728904379473,-0.42959641681094507,0.6397891697864702,-0.20387712085383103,-0.46923292745817013,-0.4365589605536413,-0.6372728904379473,0.42959641681094507,-0.6397891697864702,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.4657973732233347,0,0,0.0,1.2616213267333571,0,0,-0.20387712085383103,-0.46923292745817013,-0.4365589605536413,0.9082405931224041,-0.9305098422194572,-1.5294738458038843,-4.592034742928259,3.011456496192306,-4.558994118669356,0.8470237411265177,1.0522135216918225,-0.1371672314611333,-4.515859986007748,3.044217474048906,-4.533690911179856,1.23456e-61,1.23456e-61,1.23456e-61,7.799249075557258,-5.554562323102514,8.01070874848603,1.23456e-61,1.23456e-61,1.23456e-61,-0.6372728904379473,0.42959641681094507,-0.6397891697864702,-0.20387712085383103,-0.46923292745817013,-0.4365589605536413,-0.31950778916971084,-0.1508930212512665,0.21693169816647478,-1.095639245567749e-07,7.385889170491609e-08,-1.0999653897493392e-07,-0.334787248808612,-0.1340476819766428,0.2434621297560257,-1.1472293132414437e-07,7.733666528483766e-08,-1.1517591613994998e-07,1.23456e-61,1.23456e-61,1.23456e-61,-1.2066010684210016e-07,8.133901556014696e-08,-1.2113653466382765e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.6372728904379473,-0.42959641681094507,0.6397891697864702,-0.20387712085383103,-0.46923292745817013,-0.4365589605536413,-0.6238551239455111,-0.7749827603641463,0.10102725110235865,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.4657973732233347,0,0,0.0,1.2616213267333571,0,0,-0.20387712085383103,-0.46923292745817013,-0.4365589605536413,0.9082405931224041,-0.9305098422194572,-1.5294738458038843,-4.592034742928259,3.011456496192306,-4.558994118669356,0.8470237411265177,1.0522135216918225,-0.1371672314611333,-4.515859986007748,3.044217474048906,-4.533690911179856,1.23456e-61,1.23456e-61,1.23456e-61,7.799249075557258,-5.554562323102514,8.01070874848603,1.23456e-61,1.23456e-61,1.23456e-61,-0.6372728904379473,0.42959641681094507,-0.6397891697864702,-0.20387712085383103,-0.46923292745817013,-0.4365589605536413,-0.31950778916971084,-0.1508930212512665,0.21693169816647478,-1.095639245567749e-07,7.385889170491609e-08,-1.0999653897493392e-07,-0.334787248808612,-0.1340476819766428,0.2434621297560257,-1.1472293132414437e-07,7.733666528483766e-08,-1.1517591613994998e-07,1.23456e-61,1.23456e-61,1.23456e-61,-1.2066010684210016e-07,8.133901556014696e-08,-1.2113653466382765e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.6372728904379473,-0.42959641681094507,0.6397891697864702,-0.20387712085383103,-0.46923292745817013,-0.4365589605536413,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.20387712085383103,-0.46923292745817013,-0.4365589605536413],[-0.31950778916971084,-0.1508930212512665,0.21693169816647478],[-1.095639245567749e-07,7.385889170491609e-08,-1.0999653897493392e-07]],[[-0.334787248808612,-0.1340476819766428,0.2434621297560257],[-1.1472293132414437e-07,7.733666528483766e-08,-1.1517591613994998e-07],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-1.2066010684210016e-07,8.133901556014696e-08,-1.2113653466382765e-07],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6372728904379473,-0.42959641681094507,0.6397891697864702]]],"normal":[0.6372728904379473,-0.42959641681094507,0.6397891697864702]},{"op":"state"}]}}, +{"name":"adv_sing_167","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.1829665901654831,0,0,0.0,0.0,0,0,0.0008640120133611551,0.0005522099536519179,-0.0004013933680380213,-0.0024960223790286675,0.02359783759120195,0.016427012981898515,-0.5414640002698075,0.03703762072327636,-0.13547892262315767,0.014702686039162185,-0.0010057039966840878,0.003678737761438772,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.3840930078033591,-0.026273013789272392,0.09610335471676378,1.23456e-61,1.23456e-61,1.23456e-61,-0.23571567345368316,-0.5718975405709049,0.7857298036712282,0.0008640120133611551,0.0005522099536519179,-0.0004013933680380213,59.43490109724853,41.76947313911981,48.2323522932745,12317.823447249817,29885.72135001879,-41059.98068374617,15.423738376555065,62.87643263883563,50.39199719754151,10629.220753664176,25789.397302438876,-35431.064700832976,1.23456e-61,1.23456e-61,1.23456e-61,8487.283948808366,20591.998594459943,-28291.338683973976,1.23456e-61,1.23456e-61,1.23456e-61,0.23571567345368316,0.5718975405709049,-0.7857298036712282,0.0008640120133611551,0.0005522099536519179,-0.0004013933680380213,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.1829665901654831,0,0,0.0,0.0,0,0,0.0008640120133611551,0.0005522099536519179,-0.0004013933680380213,-0.0024960223790286675,0.02359783759120195,0.016427012981898515,-0.5414640002698075,0.03703762072327636,-0.13547892262315767,0.014702686039162185,-0.0010057039966840878,0.003678737761438772,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.3840930078033591,-0.026273013789272392,0.09610335471676378,1.23456e-61,1.23456e-61,1.23456e-61,-0.23571567345368316,-0.5718975405709049,0.7857298036712282,0.0008640120133611551,0.0005522099536519179,-0.0004013933680380213,59.43490109724853,41.76947313911981,48.2323522932745,12317.823447249817,29885.72135001879,-41059.98068374617,15.423738376555065,62.87643263883563,50.39199719754151,10629.220753664176,25789.397302438876,-35431.064700832976,1.23456e-61,1.23456e-61,1.23456e-61,8487.283948808366,20591.998594459943,-28291.338683973976,1.23456e-61,1.23456e-61,1.23456e-61,0.23571567345368316,0.5718975405709049,-0.7857298036712282,0.0008640120133611551,0.0005522099536519179,-0.0004013933680380213,-0.08648543326356192,0.8176486017535137,0.5691845341220525,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0008640120133611551,0.0005522099536519179,-0.0004013933680380213],[59.43490109724853,41.76947313911981,48.2323522932745],[12317.823447249817,29885.72135001879,-41059.98068374617]],[[15.423738376555065,62.87643263883563,50.39199719754151],[10629.220753664176,25789.397302438876,-35431.064700832976],[1.23456e-61,1.23456e-61,1.23456e-61]],[[8487.283948808366,20591.998594459943,-28291.338683973976],[1.23456e-61,1.23456e-61,1.23456e-61],[0.23571567345368316,0.5718975405709049,-0.7857298036712282]]],"normal":[0.23571567345368316,0.5718975405709049,-0.7857298036712282]},{"op":"state"}]}}, +{"name":"adv_sing_168","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.8660041020122058,1.3484811997164656,0,0,2.0,2.0,0,0,-0.4253974326329901,0.8855683509490722,0.6040645464071766,-2.7756116518843177,1.6353052726222566,0.9633694031056601,7945.375270395418,7819.591045423259,9618.462917124592,-1.911317795977361,0.06608076866995127,1.5251713641388402,-3343.165689887687,-3290.2158901710486,-4047.032083697747,1.23456e-61,1.23456e-61,1.23456e-61,1406.225992404713,1384.0431816921816,1703.505178616629,1.23456e-61,1.23456e-61,1.23456e-61,-0.5396350839821643,-0.5310908695835188,-0.653250690302417,-0.4253974326329901,0.8855683509490722,0.6040645464071766,0.6546594445801597,-1.4918745207163409,0.6720907282283217,-0.0427199506053708,-0.034223750125297395,0.06311375702949469,0.14160994965418272,0.6543335249529647,-0.6489518712073766,0.5521825125020071,-0.6123599409331966,0.041701780687302716,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.5396350839821643,-0.5310908695835188,-0.653250690302417,-0.4253974326329901,0.8855683509490722,0.6040645464071766,-0.5396350839821643,-0.5310908695835188,-0.653250690302417,0,0,0,0,0,0,0],[1,1,1,1,1,1.8660041020122058,1.3484811997164656,0,0,2.0,2.0,0,0,-0.4253974326329901,0.8855683509490722,0.6040645464071766,-2.7756116518843177,1.6353052726222566,0.9633694031056601,7945.375270395418,7819.591045423259,9618.462917124592,-1.911317795977361,0.06608076866995127,1.5251713641388402,-3343.165689887687,-3290.2158901710486,-4047.032083697747,1.23456e-61,1.23456e-61,1.23456e-61,1406.225992404713,1384.0431816921816,1703.505178616629,1.23456e-61,1.23456e-61,1.23456e-61,-0.5396350839821643,-0.5310908695835188,-0.653250690302417,-0.4253974326329901,0.8855683509490722,0.6040645464071766,0.6546594445801597,-1.4918745207163409,0.6720907282283217,-0.0427199506053708,-0.034223750125297395,0.06311375702949469,0.14160994965418272,0.6543335249529647,-0.6489518712073766,0.5521825125020071,-0.6123599409331966,0.041701780687302716,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.5396350839821643,-0.5310908695835188,-0.653250690302417,-0.4253974326329901,0.8855683509490722,0.6040645464071766,-0.5396350839821643,-0.5310908695835188,-0.653250690302417,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.4253974326329901,0.8855683509490722,0.6040645464071766],[0.6546594445801597,-1.4918745207163409,0.6720907282283217],[-0.0427199506053708,-0.034223750125297395,0.06311375702949469]],[[0.14160994965418272,0.6543335249529647,-0.6489518712073766],[0.5521825125020071,-0.6123599409331966,0.041701780687302716],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.5396350839821643,-0.5310908695835188,-0.653250690302417]]],"normal":[0.5396350839821643,0.5310908695835188,0.653250690302417]},{"op":"state"}]}}, +{"name":"adv_sing_169","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,1.9631369074433473,2.0,0,0,-478.4264367838238,-398.235406252945,872.8952738732698,0.0,-0.9490331336696265,-0.5773955102795867,1.1247640667275984e-06,0.645957543823789,0.49330083092374827,0.0,1.5724124799953811,-0.05327845267859954,-9.377385247525756e-07,-0.06187788765570275,0.08102659841913082,1.23456e-61,1.23456e-61,1.23456e-61,-3.494537489998154e-08,0.21088990110138636,0.16105108523218975,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-478.4264367838238,-398.235406252945,872.8952738732698,0.0,0.34382112462898323,-0.45021989678018787,-2136217.06272947,0.49426520049978034,0.37745736764666815,0.0,-0.3358775096489551,-0.25650084310127214,-1130102.8391392888,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-595164.8586925307,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,-478.4264367838238,-398.235406252945,872.8952738732698,1,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,1.9631369074433473,2.0,0,0,-478.4264367838238,-398.235406252945,872.8952738732698,0.0,-0.9490331336696265,-0.5773955102795867,1.1247640667275984e-06,0.645957543823789,0.49330083092374827,0.0,1.5724124799953811,-0.05327845267859954,-9.377385247525756e-07,-0.06187788765570275,0.08102659841913082,1.23456e-61,1.23456e-61,1.23456e-61,-3.494537489998154e-08,0.21088990110138636,0.16105108523218975,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-478.4264367838238,-398.235406252945,872.8952738732698,0.0,0.34382112462898323,-0.45021989678018787,-2136217.06272947,0.49426520049978034,0.37745736764666815,0.0,-0.3358775096489551,-0.25650084310127214,-1130102.8391392888,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-595164.8586925307,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,-478.4264367838238,-398.235406252945,872.8952738732698,0.0,0.6069323801670675,-0.7947534749246072,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-478.4264367838238,-398.235406252945,872.8952738732698],[0.0,0.34382112462898323,-0.45021989678018787],[-2136217.06272947,0.49426520049978034,0.37745736764666815]],[[0.0,-0.3358775096489551,-0.25650084310127214],[-1130102.8391392888,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-595164.8586925307,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[-1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_170","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.1684694141729779,0.0,0,0,0.16097728560626856,0.07106621446257266,0,0,-0.2719099883795917,-0.3327099476838111,-0.11968321982387353,0.013088429073054278,-0.0009988542785693633,0.002010684318977149,-2.6772382490950292e-11,-1.2044406067483208e-10,1.1443982620464957e-10,-0.02519491848783133,0.004103509706320901,-0.0015753660986365034,0.7550062200219909,-0.2498081873859601,-0.08628637034190681,1.23456e-61,1.23456e-61,1.23456e-61,-9.252871786273332e-11,-4.1626980759708595e-10,3.9551841883065813e-10,1.23456e-61,1.23456e-61,1.23456e-61,-0.15908907263120164,-0.7157126909856532,0.6800338307256628,-0.2719099883795917,-0.3327099476838111,-0.11968321982387353,12.29695919130134,-7.142120447445293,-4.6400550506285105,-195706.30146365045,-880446.9178603241,836555.922291395,-14.69094768506187,14.729901120810865,12.065881953376316,646408.0371443399,2908071.736717088,-2763101.9933729167,1.23456e-61,1.23456e-61,1.23456e-61,-1647813.4421762927,-7413211.815473378,7043657.1718666935,1.23456e-61,1.23456e-61,1.23456e-61,-0.15908907263120164,-0.7157126909856532,0.6800338307256628,-0.2719099883795917,-0.3327099476838111,-0.11968321982387353,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.2719099883795917,-0.3327099476838111,-0.11968321982387353],[12.29695919130134,-7.142120447445293,-4.6400550506285105],[-195706.30146365045,-880446.9178603241,836555.922291395]],[[-14.69094768506187,14.729901120810865,12.065881953376316],[646408.0371443399,2908071.736717088,-2763101.9933729167],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-1647813.4421762927,-7413211.815473378,7043657.1718666935],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.15908907263120164,-0.7157126909856532,0.6800338307256628]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_171","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,2.0,0.7840839515590055,0,0,-1.0506654839000333,-0.8040822470221203,-1.2771741415973237,-0.00166718827343971,-0.008831069030816232,0.0,-0.1605473931862387,0.6776998587160866,0.0,-0.016666905685037297,0.026941848100204318,0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-1.0506654839000333,-0.8040822470221203,-1.2771741415973237,-0.0016612699188358244,-0.0064333637195556235,0.0,0.0,0.0,3.4287449515796878e-12,-9.572000525947546e-05,0.005291038726777409,-0.0,0.37576159511247276,0.08901808636805962,-3.0230340228882553e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,2.6653293938732775e-12,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-1.0506654839000333,-0.8040822470221203,-1.2771741415973237,0,0,1,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-1.0506654839000333,-0.8040822470221203,-1.2771741415973237],[-0.0016612699188358244,-0.0064333637195556235,0.0],[0.0,0.0,3.4287449515796878e-12]],[[-9.572000525947546e-05,0.005291038726777409,-0.0],[0.37576159511247276,0.08901808636805962,-3.0230340228882553e-12],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,2.6653293938732775e-12],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_172","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0017127645181722606,0,0,0.0,1.4967206604095205,0,0,0.4555752273959115,-1.3084887182161733,-0.6038081715378194,-0.5456855444807798,0.2434951115322066,0.7322627030054274,-0.020054693670293916,-0.021329023783056227,0.0341544101490249,-0.39366801863484446,3.167919323429523,-0.18750911509623724,-0.044696820898246246,0.10535528898818566,0.03954816983973056,1.23456e-61,1.23456e-61,1.23456e-61,0.09073181063904033,0.0964971581623507,-0.1545220049269408,1.23456e-61,1.23456e-61,1.23456e-61,0.8154709564986312,0.1346552058419403,0.5629165965281822,0.4555752273959115,-1.3084887182161733,-0.6038081715378194,0.3990695384291856,-0.9406504915260848,-0.35310050170211466,-0.35084580854288094,-0.37313951125971145,0.5975125744149151,-0.2778838698013141,-0.2955413712800463,0.47325378382871197,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.3294582538964128,-0.3503929328668614,0.5610882178283978,1.23456e-61,1.23456e-61,1.23456e-61,0.8154709564986312,0.1346552058419403,0.5629165965281822,0.4555752273959115,-1.3084887182161733,-0.6038081715378194,-0.44580939828350924,-0.4741373473474551,0.7592415664677574,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0017127645181722606,0,0,0.0,1.4967206604095205,0,0,0.4555752273959115,-1.3084887182161733,-0.6038081715378194,-0.5456855444807798,0.2434951115322066,0.7322627030054274,-0.020054693670293916,-0.021329023783056227,0.0341544101490249,-0.39366801863484446,3.167919323429523,-0.18750911509623724,-0.044696820898246246,0.10535528898818566,0.03954816983973056,1.23456e-61,1.23456e-61,1.23456e-61,0.09073181063904033,0.0964971581623507,-0.1545220049269408,1.23456e-61,1.23456e-61,1.23456e-61,0.8154709564986312,0.1346552058419403,0.5629165965281822,0.4555752273959115,-1.3084887182161733,-0.6038081715378194,0.3990695384291856,-0.9406504915260848,-0.35310050170211466,-0.35084580854288094,-0.37313951125971145,0.5975125744149151,-0.2778838698013141,-0.2955413712800463,0.47325378382871197,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.3294582538964128,-0.3503929328668614,0.5610882178283978,1.23456e-61,1.23456e-61,1.23456e-61,0.8154709564986312,0.1346552058419403,0.5629165965281822,0.4555752273959115,-1.3084887182161733,-0.6038081715378194,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0017127645181722606,0,0,0.0,1.4967206604095205,0,0,0.4555752273959115,-1.3084887182161733,-0.6038081715378194,-0.5456855444807798,0.2434951115322066,0.7322627030054274,-0.020054693670293916,-0.021329023783056227,0.0341544101490249,-0.39366801863484446,3.167919323429523,-0.18750911509623724,-0.044696820898246246,0.10535528898818566,0.03954816983973056,1.23456e-61,1.23456e-61,1.23456e-61,0.09073181063904033,0.0964971581623507,-0.1545220049269408,1.23456e-61,1.23456e-61,1.23456e-61,0.8154709564986312,0.1346552058419403,0.5629165965281822,0.4555752273959115,-1.3084887182161733,-0.6038081715378194,0.3990695384291856,-0.9406504915260848,-0.35310050170211466,-0.35084580854288094,-0.37313951125971145,0.5975125744149151,-0.2778838698013141,-0.2955413712800463,0.47325378382871197,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.3294582538964128,-0.3503929328668614,0.5610882178283978,1.23456e-61,1.23456e-61,1.23456e-61,0.8154709564986312,0.1346552058419403,0.5629165965281822,0.4555752273959115,-1.3084887182161733,-0.6038081715378194,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.4555752273959115,-1.3084887182161733,-0.6038081715378194],[0.3990695384291856,-0.9406504915260848,-0.35310050170211466],[-0.35084580854288094,-0.37313951125971145,0.5975125744149151]],[[-0.2778838698013141,-0.2955413712800463,0.47325378382871197],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.3294582538964128,-0.3503929328668614,0.5610882178283978],[1.23456e-61,1.23456e-61,1.23456e-61],[0.8154709564986312,0.1346552058419403,0.5629165965281822]]],"normal":[0.8154709564986312,0.1346552058419403,0.5629165965281822]},{"op":"state"}]}}, +{"name":"adv_sing_173","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.15881164560046002,1.425068209207841,0,0,2.0,0.7423044614346335,0,0,-0.8720882461625299,0.6023622543032681,-0.48318749494790425,-41.58795412878999,13.591509914610889,33.20801683176871,3.5394217176109737e-07,-3.31189228108216e-07,5.788088032556633e-07,22.403481163679718,42.5448196966745,10.644014366419258,-2.4611387690526064e-07,2.302926054654806e-07,-4.0247500840984244e-07,1.23456e-61,1.23456e-61,1.23456e-61,1.079889499415816e-06,-1.0104695012017265e-06,1.7659651736191513e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.46881567412973646,-0.43867816165421997,0.7666637686613049,-0.8720882461625299,0.6023622543032681,-0.48318749494790425,-0.013565790663619176,-0.04555079501408495,-0.017768263325376354,4.848700332316872e-10,-4.5370047666204004e-10,7.929177873124333e-10,0.02754315693670953,0.026742378121636552,-0.00154091853896509,0.6363565661086874,-0.20796999414828501,-0.5081312606929651,1.23456e-61,1.23456e-61,1.23456e-61,-0.35336261755054765,-0.6710452157632938,-0.16788447965940717,1.23456e-61,1.23456e-61,1.23456e-61,0.46881567412973646,-0.43867816165421997,0.7666637686613049,-0.8720882461625299,0.6023622543032681,-0.48318749494790425,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.15881164560046002,1.425068209207841,0,0,2.0,0.7423044614346335,0,0,-0.8720882461625299,0.6023622543032681,-0.48318749494790425,-41.58795412878999,13.591509914610889,33.20801683176871,3.5394217176109737e-07,-3.31189228108216e-07,5.788088032556633e-07,22.403481163679718,42.5448196966745,10.644014366419258,-2.4611387690526064e-07,2.302926054654806e-07,-4.0247500840984244e-07,1.23456e-61,1.23456e-61,1.23456e-61,1.079889499415816e-06,-1.0104695012017265e-06,1.7659651736191513e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.46881567412973646,-0.43867816165421997,0.7666637686613049,-0.8720882461625299,0.6023622543032681,-0.48318749494790425,-0.013565790663619176,-0.04555079501408495,-0.017768263325376354,4.848700332316872e-10,-4.5370047666204004e-10,7.929177873124333e-10,0.02754315693670953,0.026742378121636552,-0.00154091853896509,0.6363565661086874,-0.20796999414828501,-0.5081312606929651,1.23456e-61,1.23456e-61,1.23456e-61,-0.35336261755054765,-0.6710452157632938,-0.16788447965940717,1.23456e-61,1.23456e-61,1.23456e-61,0.46881567412973646,-0.43867816165421997,0.7666637686613049,-0.8720882461625299,0.6023622543032681,-0.48318749494790425,0.454920196360567,0.8639058184365288,0.21613503143816018,0,0,0,0,0,0,0],[1,1,1,1,1,0.15881164560046002,1.425068209207841,0,0,2.0,0.7423044614346335,0,0,-0.8720882461625299,0.6023622543032681,-0.48318749494790425,-41.58795412878999,13.591509914610889,33.20801683176871,3.5394217176109737e-07,-3.31189228108216e-07,5.788088032556633e-07,22.403481163679718,42.5448196966745,10.644014366419258,-2.4611387690526064e-07,2.302926054654806e-07,-4.0247500840984244e-07,1.23456e-61,1.23456e-61,1.23456e-61,1.079889499415816e-06,-1.0104695012017265e-06,1.7659651736191513e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.46881567412973646,-0.43867816165421997,0.7666637686613049,-0.8720882461625299,0.6023622543032681,-0.48318749494790425,-0.013565790663619176,-0.04555079501408495,-0.017768263325376354,4.848700332316872e-10,-4.5370047666204004e-10,7.929177873124333e-10,0.02754315693670953,0.026742378121636552,-0.00154091853896509,0.6363565661086874,-0.20796999414828501,-0.5081312606929651,1.23456e-61,1.23456e-61,1.23456e-61,-0.35336261755054765,-0.6710452157632938,-0.16788447965940717,1.23456e-61,1.23456e-61,1.23456e-61,0.46881567412973646,-0.43867816165421997,0.7666637686613049,-0.8720882461625299,0.6023622543032681,-0.48318749494790425,-0.7571390087913473,0.24744334171520033,0.6045761440937533,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.8720882461625299,0.6023622543032681,-0.48318749494790425],[-0.013565790663619176,-0.04555079501408495,-0.017768263325376354],[4.848700332316872e-10,-4.5370047666204004e-10,7.929177873124333e-10]],[[0.02754315693670953,0.026742378121636552,-0.00154091853896509],[0.6363565661086874,-0.20796999414828501,-0.5081312606929651],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.35336261755054765,-0.6710452157632938,-0.16788447965940717],[1.23456e-61,1.23456e-61,1.23456e-61],[0.46881567412973646,-0.43867816165421997,0.7666637686613049]]],"normal":[0.46881567412973646,-0.43867816165421997,0.7666637686613049]},{"op":"state"}]}}, +{"name":"adv_sing_174","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,0.5759963114119409,2.0,0,0,-0.0005398883302385389,-0.0002538284137818827,-0.0005447669626885728,5.366350168910426,-4.890899951375963,3.3509622296330748,-112956912.92218703,45937626.40648477,247941524.4224815,4.246799708766715,5.311031802965715,0.950745079797887,-111066272.42132883,45168736.16626528,243791552.5612552,1.23456e-61,1.23456e-61,1.23456e-61,-109653351.7113843,44594125.917775854,240690176.5792807,1.23456e-61,1.23456e-61,1.23456e-61,0.40881220403320895,-0.1662568687491171,-0.8973467754593254,-0.0005398883302385389,-0.0002538284137818827,-0.0005447669626885728,-0.007185542368789268,0.013258022709842394,-0.005729975183640576,0.1626670030312802,0.2034307444753823,0.03641679932731509,0.009253646952630909,0.002759387073739949,0.0037045174088934096,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.40881220403320895,-0.1662568687491171,-0.8973467754593254,-0.0005398883302385389,-0.0002538284137818827,-0.0005447669626885728,-0.6710687331937663,0.6116130947924552,-0.4190419759500344,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.5759963114119409,2.0,0,0,-0.0005398883302385389,-0.0002538284137818827,-0.0005447669626885728,5.366350168910426,-4.890899951375963,3.3509622296330748,-112956912.92218703,45937626.40648477,247941524.4224815,4.246799708766715,5.311031802965715,0.950745079797887,-111066272.42132883,45168736.16626528,243791552.5612552,1.23456e-61,1.23456e-61,1.23456e-61,-109653351.7113843,44594125.917775854,240690176.5792807,1.23456e-61,1.23456e-61,1.23456e-61,0.40881220403320895,-0.1662568687491171,-0.8973467754593254,-0.0005398883302385389,-0.0002538284137818827,-0.0005447669626885728,-0.007185542368789268,0.013258022709842394,-0.005729975183640576,0.1626670030312802,0.2034307444753823,0.03641679932731509,0.009253646952630909,0.002759387073739949,0.0037045174088934096,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.40881220403320895,-0.1662568687491171,-0.8973467754593254,-0.0005398883302385389,-0.0002538284137818827,-0.0005447669626885728,1.2895663784303701,0.16187774282110967,0.5575070869514777,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.5759963114119409,2.0,0,0,-0.0005398883302385389,-0.0002538284137818827,-0.0005447669626885728,5.366350168910426,-4.890899951375963,3.3509622296330748,-112956912.92218703,45937626.40648477,247941524.4224815,4.246799708766715,5.311031802965715,0.950745079797887,-111066272.42132883,45168736.16626528,243791552.5612552,1.23456e-61,1.23456e-61,1.23456e-61,-109653351.7113843,44594125.917775854,240690176.5792807,1.23456e-61,1.23456e-61,1.23456e-61,0.40881220403320895,-0.1662568687491171,-0.8973467754593254,-0.0005398883302385389,-0.0002538284137818827,-0.0005447669626885728,-0.007185542368789268,0.013258022709842394,-0.005729975183640576,0.1626670030312802,0.2034307444753823,0.03641679932731509,0.009253646952630909,0.002759387073739949,0.0037045174088934096,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.40881220403320895,-0.1662568687491171,-0.8973467754593254,-0.0005398883302385389,-0.0002538284137818827,-0.0005447669626885728,0.6710687331937663,-0.6116130947924552,0.4190419759500344,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0005398883302385389,-0.0002538284137818827,-0.0005447669626885728],[-0.007185542368789268,0.013258022709842394,-0.005729975183640576],[0.1626670030312802,0.2034307444753823,0.03641679932731509]],[[0.009253646952630909,0.002759387073739949,0.0037045174088934096],[0.0,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0.40881220403320895,-0.1662568687491171,-0.8973467754593254]]],"normal":[0.40881220403320895,-0.1662568687491171,-0.8973467754593254]},{"op":"state"}]}}, +{"name":"adv_sing_175","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,0.21580307007515764,0.0,0,0,-1.7568747327811778,-0.08984156983163416,0.7454793519851206,-0.741701340671637,0.5420118781569019,0.20357561929184703,-1.1210333470281957,-1.786339229170423,0.6717167049535032,-1.2089747654338778,1.1458753621657691,1.029632102803646,-2.187242900801231,-3.4853180842331173,1.3105833097239632,1.23456e-61,1.23456e-61,1.23456e-61,-4.855678671475467,-7.737405241420163,2.909494607063165,1.23456e-61,1.23456e-61,1.23456e-61,-0.5064867055693449,-0.8070741817005508,0.3034839078335094,-1.7568747327811778,-0.08984156983163416,0.7454793519851206,0.00017031670648140606,0.0022654751120301324,0.006308965880405938,-0.07579369970595425,-0.12077540732185149,0.04541514697817315,0.009466572904810299,-0.005318751835381589,0.001654341549654507,0.1715670367938486,0.22040039018707147,-0.27315815294568885,1.23456e-61,1.23456e-61,1.23456e-61,0.5088762911813344,0.8108819279477733,-0.3049157337267756,1.23456e-61,1.23456e-61,1.23456e-61,0.5064867055693449,0.8070741817005508,-0.3034839078335094,-1.7568747327811778,-0.08984156983163416,0.7454793519851206,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.21580307007515764,0.0,0,0,-1.7568747327811778,-0.08984156983163416,0.7454793519851206,-0.741701340671637,0.5420118781569019,0.20357561929184703,-1.1210333470281957,-1.786339229170423,0.6717167049535032,-1.2089747654338778,1.1458753621657691,1.029632102803646,-2.187242900801231,-3.4853180842331173,1.3105833097239632,1.23456e-61,1.23456e-61,1.23456e-61,-4.855678671475467,-7.737405241420163,2.909494607063165,1.23456e-61,1.23456e-61,1.23456e-61,-0.5064867055693449,-0.8070741817005508,0.3034839078335094,-1.7568747327811778,-0.08984156983163416,0.7454793519851206,0.00017031670648140606,0.0022654751120301324,0.006308965880405938,-0.07579369970595425,-0.12077540732185149,0.04541514697817315,0.009466572904810299,-0.005318751835381589,0.001654341549654507,0.1715670367938486,0.22040039018707147,-0.27315815294568885,1.23456e-61,1.23456e-61,1.23456e-61,0.5088762911813344,0.8108819279477733,-0.3049157337267756,1.23456e-61,1.23456e-61,1.23456e-61,0.5064867055693449,0.8070741817005508,-0.3034839078335094,-1.7568747327811778,-0.08984156983163416,0.7454793519851206,0.8872729470631557,-0.1463892194577776,1.0914746510278677,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-1.7568747327811778,-0.08984156983163416,0.7454793519851206],[0.00017031670648140606,0.0022654751120301324,0.006308965880405938],[-0.07579369970595425,-0.12077540732185149,0.04541514697817315]],[[0.009466572904810299,-0.005318751835381589,0.001654341549654507],[0.1715670367938486,0.22040039018707147,-0.27315815294568885],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.5088762911813344,0.8108819279477733,-0.3049157337267756],[1.23456e-61,1.23456e-61,1.23456e-61],[0.5064867055693449,0.8070741817005508,-0.3034839078335094]]],"normal":[-0.5064867055693449,-0.8070741817005508,0.3034839078335094]},{"op":"state"}]}}, +{"name":"adv_sing_176","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,1.4224290965881854,0,0,2.0,2.0,0,0,0.13971619384185274,-0.8530828861778863,1.0453160006425746,0.02676816282587194,0.01213418861855104,-0.0424828081248112,0.03565872520100347,0.05665493447277191,0.1233015470437362,0.06576683275918879,0.0601516403138541,0.03041627358620342,0.46187745448822637,0.31202743892741164,-0.2769458790339543,1.23456e-61,1.23456e-61,1.23456e-61,4.874554456523104e-09,-6.014083532439127e-09,1.3536497699610964e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.6202564140390766,0.7652543260790372,-0.17224342443386367,0.13971619384185274,-0.8530828861778863,1.0453160006425746,0.05396929474118141,0.03645967264111444,-0.03236047487249676,-0.06385070909694732,-0.08285182154009986,-0.19983415123659834,0.019682918134643446,0.03127241458291796,0.06806003982461305,0.44706031620765957,0.30671457885199493,-0.2702196049405913,1.23456e-61,1.23456e-61,1.23456e-61,-0.005549905185427517,0.006847311622011407,-0.0015411927273694716,1.23456e-61,1.23456e-61,1.23456e-61,-0.6202564140390766,0.7652543260790372,-0.17224342443386367,0.13971619384185274,-0.8530828861778863,1.0453160006425746,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.4224290965881854,0,0,2.0,2.0,0,0,0.13971619384185274,-0.8530828861778863,1.0453160006425746,0.02676816282587194,0.01213418861855104,-0.0424828081248112,0.03565872520100347,0.05665493447277191,0.1233015470437362,0.06576683275918879,0.0601516403138541,0.03041627358620342,0.46187745448822637,0.31202743892741164,-0.2769458790339543,1.23456e-61,1.23456e-61,1.23456e-61,4.874554456523104e-09,-6.014083532439127e-09,1.3536497699610964e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.6202564140390766,0.7652543260790372,-0.17224342443386367,0.13971619384185274,-0.8530828861778863,1.0453160006425746,0.05396929474118141,0.03645967264111444,-0.03236047487249676,-0.06385070909694732,-0.08285182154009986,-0.19983415123659834,0.019682918134643446,0.03127241458291796,0.06806003982461305,0.44706031620765957,0.30671457885199493,-0.2702196049405913,1.23456e-61,1.23456e-61,1.23456e-61,-0.005549905185427517,0.006847311622011407,-0.0015411927273694716,1.23456e-61,1.23456e-61,1.23456e-61,-0.6202564140390766,0.7652543260790372,-0.17224342443386367,0.13971619384185274,-0.8530828861778863,1.0453160006425746,-0.6202564140390766,0.7652543260790372,-0.17224342443386367,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.4224290965881854,0,0,2.0,2.0,0,0,0.13971619384185274,-0.8530828861778863,1.0453160006425746,0.02676816282587194,0.01213418861855104,-0.0424828081248112,0.03565872520100347,0.05665493447277191,0.1233015470437362,0.06576683275918879,0.0601516403138541,0.03041627358620342,0.46187745448822637,0.31202743892741164,-0.2769458790339543,1.23456e-61,1.23456e-61,1.23456e-61,4.874554456523104e-09,-6.014083532439127e-09,1.3536497699610964e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.6202564140390766,0.7652543260790372,-0.17224342443386367,0.13971619384185274,-0.8530828861778863,1.0453160006425746,0.05396929474118141,0.03645967264111444,-0.03236047487249676,-0.06385070909694732,-0.08285182154009986,-0.19983415123659834,0.019682918134643446,0.03127241458291796,0.06806003982461305,0.44706031620765957,0.30671457885199493,-0.2702196049405913,1.23456e-61,1.23456e-61,1.23456e-61,-0.005549905185427517,0.006847311622011407,-0.0015411927273694716,1.23456e-61,1.23456e-61,1.23456e-61,-0.6202564140390766,0.7652543260790372,-0.17224342443386367,0.13971619384185274,-0.8530828861778863,1.0453160006425746,-0.4736886803976551,0.8803797088126171,0.023464917944448386,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.13971619384185274,-0.8530828861778863,1.0453160006425746],[0.05396929474118141,0.03645967264111444,-0.03236047487249676],[-0.06385070909694732,-0.08285182154009986,-0.19983415123659834]],[[0.019682918134643446,0.03127241458291796,0.06806003982461305],[0.44706031620765957,0.30671457885199493,-0.2702196049405913],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.005549905185427517,0.006847311622011407,-0.0015411927273694716],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6202564140390766,0.7652543260790372,-0.17224342443386367]]],"normal":[-0.6202564140390766,0.7652543260790372,-0.17224342443386367]},{"op":"state"}]}}, +{"name":"adv_sing_177","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,0.687972790725931,2.0,0,0,0.9355889401689623,-0.891119522005309,0.8031399962951058,-0.02686736183675616,-0.018559887038751027,0.010464628659970637,7.190146127545792e-10,-6.872604051318754e-10,6.271173583484737e-10,-0.025968171279959304,-0.01167137513193504,0.01698281904240751,6.677699157474183e-10,-6.382788537123875e-10,5.82422245834164e-10,1.23456e-61,1.23456e-61,1.23456e-61,6.720217790661409e-10,-6.423429398312994e-10,5.861306785213397e-10,1.23456e-61,1.23456e-61,1.23456e-61,0.6114934185297787,-0.5844877240314121,0.5333384474715325,0.9355889401689623,-0.891119522005309,0.8031399962951058,0.0005614757836561353,0.012334876115309527,0.01287408577616863,5.827782439961779e-10,-5.570407123388541e-10,5.082933592652742e-10,0.011191468156093032,0.0060093673488221325,-0.006245767002823399,-1.551364711803539e-11,1.4828510038993014e-11,-1.3530847950003369e-11,1.23456e-61,1.23456e-61,1.23456e-61,1.231454391509035e-10,-1.1770690456033943e-10,1.0740622112966297e-10,1.23456e-61,1.23456e-61,1.23456e-61,-0.6114934185297787,0.5844877240314121,-0.5333384474715325,0.9355889401689623,-0.891119522005309,0.8031399962951058,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.9355889401689623,-0.891119522005309,0.8031399962951058],[0.0005614757836561353,0.012334876115309527,0.01287408577616863],[5.827782439961779e-10,-5.570407123388541e-10,5.082933592652742e-10]],[[0.011191468156093032,0.0060093673488221325,-0.006245767002823399],[-1.551364711803539e-11,1.4828510038993014e-11,-1.3530847950003369e-11],[1.23456e-61,1.23456e-61,1.23456e-61]],[[1.231454391509035e-10,-1.1770690456033943e-10,1.0740622112966297e-10],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6114934185297787,0.5844877240314121,-0.5333384474715325]]],"normal":[0.6114934185297787,-0.5844877240314121,0.5333384474715325]},{"op":"state"}]}}, +{"name":"adv_sing_178","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,0.0009554224187617906,0.0009864550824391402,0.0008938972082095606,-0.0,-0.05225833411314148,0.02757468481983678,0.0017458059165094853,0.16722355664352112,0.3448723480667155,0.0,0.039558288642150545,-0.04704577356485895,-0.0016889097286728696,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0021696305443586446,-0.4065925640478456,-0.8385333686483322,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0009554224187617906,0.0009864550824391402,0.0008938972082095606,-0.0,-0.05076650348278079,0.07397013249666379,0.008048818377441189,-0.3447817741404471,-0.7110583126269777,0.0,-0.047057466147705,-0.0789068624957784,-0.0034478080546304526,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.00844069806917008,-0.39920151062466946,-0.8232904806252584,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0009554224187617906,0.0009864550824391402,0.0008938972082095606,-0.0,-0.8998010772741524,0.4363003797113578,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,0.0009554224187617906,0.0009864550824391402,0.0008938972082095606,-0.0,-0.05225833411314148,0.02757468481983678,0.0017458059165094853,0.16722355664352112,0.3448723480667155,0.0,0.039558288642150545,-0.04704577356485895,-0.0016889097286728696,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0021696305443586446,-0.4065925640478456,-0.8385333686483322,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0009554224187617906,0.0009864550824391402,0.0008938972082095606,-0.0,-0.05076650348278079,0.07397013249666379,0.008048818377441189,-0.3447817741404471,-0.7110583126269777,0.0,-0.047057466147705,-0.0789068624957784,-0.0034478080546304526,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.00844069806917008,-0.39920151062466946,-0.8232904806252584,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0009554224187617906,0.0009864550824391402,0.0008938972082095606,0.0,-0.4363003797113578,-0.8998010772741524,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0009554224187617906,0.0009864550824391402,0.0008938972082095606],[-0.0,-0.05076650348278079,0.07397013249666379],[0.008048818377441189,-0.3447817741404471,-0.7110583126269777]],[[0.0,-0.047057466147705,-0.0789068624957784],[-0.0034478080546304526,0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.00844069806917008,-0.39920151062466946,-0.8232904806252584],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_179","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.7126297314794232,0,0,2.0,2.0,0,0,1.3707529279424868e-05,0.00033304436642807734,-0.0008206880604132323,0.1364494540035707,0.0,-0.13408349695358038,-0.0,2.5192503016067837e-05,-0.0,-0.06993698285126677,0.0,-0.07117104894732998,0.0,8.847421567792253e-06,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,3.0926856561773104e-06,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,1.3707529279424868e-05,0.00033304436642807734,-0.0008206880604132323,0.3687386002118045,0.0,1.748037603808137,0.0,-3.1916147321328224e-09,0.0,0.0888079995333182,0.0,-1.8290059873376094,0.0,3.1644201146123537e-09,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.5927018094475999,-3.3531513434090263e-09,0.6031602704548485,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,1.3707529279424868e-05,0.00033304436642807734,-0.0008206880604132323,-0.713263536348445,-0.0,0.7008959464255093,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.3707529279424868e-05,0.00033304436642807734,-0.0008206880604132323],[0.3687386002118045,0.0,1.748037603808137],[0.0,-3.1916147321328224e-09,0.0]],[[0.0888079995333182,0.0,-1.8290059873376094],[0.0,3.1644201146123537e-09,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.5927018094475999,-3.3531513434090263e-09,0.6031602704548485],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_180","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.3360814605664961,0,0,0.0,2.0,0,0,-0.612370568136011,0.9120560558982338,-0.5501524390913572,-0.10448347491322552,-0.30731841018928013,-0.028450546687284292,-4.001754445333135e-14,5.558779300973024e-15,8.691772821770226e-14,-0.15887225118744028,0.06114774286840504,-0.07705659500069918,8.323572205470607e-15,-1.1562153929730346e-15,-1.8078720137344366e-14,1.23456e-61,1.23456e-61,1.23456e-61,1.4983302138862522e-15,-2.081308859089685e-16,-3.2543590590075693e-15,1.23456e-61,1.23456e-61,1.23456e-61,-0.41750692881732504,0.05799528445902336,0.9068211021861159,-0.612370568136011,0.9120560558982338,-0.5501524390913572,-0.16333815092373827,-0.4804283252143831,-0.04447650398811802,-0.3876430724732772,0.14919848332950744,-0.1880155597790141,-0.4678746549539419,0.18007851517137127,-0.2269296716601694,0.20631806613035295,0.6068456292169954,0.056179810039214344,1.23456e-61,1.23456e-61,1.23456e-61,-0.6414678893492329,0.24689216186650723,-0.31112627275121224,1.23456e-61,1.23456e-61,1.23456e-61,-0.41750692881732504,0.05799528445902336,0.9068211021861159,-0.612370568136011,0.9120560558982338,-0.5501524390913572,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.3360814605664961,0,0,0.0,2.0,0,0,-0.612370568136011,0.9120560558982338,-0.5501524390913572,-0.10448347491322552,-0.30731841018928013,-0.028450546687284292,-4.001754445333135e-14,5.558779300973024e-15,8.691772821770226e-14,-0.15887225118744028,0.06114774286840504,-0.07705659500069918,8.323572205470607e-15,-1.1562153929730346e-15,-1.8078720137344366e-14,1.23456e-61,1.23456e-61,1.23456e-61,1.4983302138862522e-15,-2.081308859089685e-16,-3.2543590590075693e-15,1.23456e-61,1.23456e-61,1.23456e-61,-0.41750692881732504,0.05799528445902336,0.9068211021861159,-0.612370568136011,0.9120560558982338,-0.5501524390913572,-0.16333815092373827,-0.4804283252143831,-0.04447650398811802,-0.3876430724732772,0.14919848332950744,-0.1880155597790141,-0.4678746549539419,0.18007851517137127,-0.2269296716601694,0.20631806613035295,0.6068456292169954,0.056179810039214344,1.23456e-61,1.23456e-61,1.23456e-61,-0.6414678893492329,0.24689216186650723,-0.31112627275121224,1.23456e-61,1.23456e-61,1.23456e-61,-0.41750692881732504,0.05799528445902336,0.9068211021861159,-0.612370568136011,0.9120560558982338,-0.5501524390913572,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.612370568136011,0.9120560558982338,-0.5501524390913572],[-0.16333815092373827,-0.4804283252143831,-0.04447650398811802],[-0.3876430724732772,0.14919848332950744,-0.1880155597790141]],[[-0.4678746549539419,0.18007851517137127,-0.2269296716601694],[0.20631806613035295,0.6068456292169954,0.056179810039214344],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.6414678893492329,0.24689216186650723,-0.31112627275121224],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.41750692881732504,0.05799528445902336,0.9068211021861159]]],"normal":[0.41750692881732504,-0.05799528445902336,-0.9068211021861159]},{"op":"state"}]}}, +{"name":"adv_sing_181","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,1.761043908865029,0,0,2.0,2.0,0,0,964.429669030406,-51.961632426581694,272.8090600126611,-0.0037402542088626938,0.012492560839028926,-0.0003780895119708887,0.24574276141017382,-0.5013253781850707,-0.19106311207451374,4.9937359800681334e-05,0.01890799044110779,-0.012712657357708048,-0.08346222369929311,-0.14340600775544424,0.26892069727318635,1.23456e-61,1.23456e-61,1.23456e-61,-0.2884113713583637,0.5781042111722038,0.2187941992006201,1.23456e-61,1.23456e-61,1.23456e-61,-0.8705029083658522,-0.2730206536145497,-0.4094928683462959,964.429669030406,-51.961632426581694,272.8090600126611,0.5651277309408859,0.9852170880159897,-1.8582251499947715,-9.64647591514431,-3.9590033427315907,-5.032742555604369,-0.5309353809759826,1.0778784216353279,0.41001378798138693,-68.53210037195616,-21.34442210466548,-32.63164606498834,1.23456e-61,1.23456e-61,1.23456e-61,-416.96241746479393,-131.08545259810222,-196.30810225579617,1.23456e-61,1.23456e-61,1.23456e-61,-0.8705029083658522,-0.2730206536145497,-0.4094928683462959,964.429669030406,-51.961632426581694,272.8090600126611,-0.41819866849396015,0.8490059937193307,0.3229530868385232,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.761043908865029,0,0,2.0,2.0,0,0,964.429669030406,-51.961632426581694,272.8090600126611,-0.0037402542088626938,0.012492560839028926,-0.0003780895119708887,0.24574276141017382,-0.5013253781850707,-0.19106311207451374,4.9937359800681334e-05,0.01890799044110779,-0.012712657357708048,-0.08346222369929311,-0.14340600775544424,0.26892069727318635,1.23456e-61,1.23456e-61,1.23456e-61,-0.2884113713583637,0.5781042111722038,0.2187941992006201,1.23456e-61,1.23456e-61,1.23456e-61,-0.8705029083658522,-0.2730206536145497,-0.4094928683462959,964.429669030406,-51.961632426581694,272.8090600126611,0.5651277309408859,0.9852170880159897,-1.8582251499947715,-9.64647591514431,-3.9590033427315907,-5.032742555604369,-0.5309353809759826,1.0778784216353279,0.41001378798138693,-68.53210037195616,-21.34442210466548,-32.63164606498834,1.23456e-61,1.23456e-61,1.23456e-61,-416.96241746479393,-131.08545259810222,-196.30810225579617,1.23456e-61,1.23456e-61,1.23456e-61,-0.8705029083658522,-0.2730206536145497,-0.4094928683462959,964.429669030406,-51.961632426581694,272.8090600126611,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[964.429669030406,-51.961632426581694,272.8090600126611],[0.5651277309408859,0.9852170880159897,-1.8582251499947715],[-9.64647591514431,-3.9590033427315907,-5.032742555604369]],[[-0.5309353809759826,1.0778784216353279,0.41001378798138693],[-68.53210037195616,-21.34442210466548,-32.63164606498834],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-416.96241746479393,-131.08545259810222,-196.30810225579617],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.8705029083658522,-0.2730206536145497,-0.4094928683462959]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_182","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.6451232753467206,0.13621935334766366,0,0,0.0,1.740673240762286,0,0,659.7793324550694,-572.2194413023549,508.874602524382,0.0,0.711986729391439,2.7381893840767755,-3.395303717890927e-06,-0.17912598157089718,0.3225693126859737,0.0,2.1945280129956473,3.3798598220168516,-3.4043834359471303e-06,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1.502191731290545e-06,0.43328177384233746,-0.7802519922681604,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,659.7793324550694,-572.2194413023549,508.874602524382,0.0,0.005773115278913472,-0.012605616022175203,-7.74710644454224e-05,-0.0,0.0,0.0,-0.010824081676963325,-0.011688685029162649,-7.451442855200386e-05,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-7.167036247128717e-05,-0.21485072701343505,0.3869022837168668,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,659.7793324550694,-572.2194413023549,508.874602524382,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.6451232753467206,0.13621935334766366,0,0,0.0,1.740673240762286,0,0,659.7793324550694,-572.2194413023549,508.874602524382,0.0,0.711986729391439,2.7381893840767755,-3.395303717890927e-06,-0.17912598157089718,0.3225693126859737,0.0,2.1945280129956473,3.3798598220168516,-3.4043834359471303e-06,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1.502191731290545e-06,0.43328177384233746,-0.7802519922681604,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,659.7793324550694,-572.2194413023549,508.874602524382,0.0,0.005773115278913472,-0.012605616022175203,-7.74710644454224e-05,-0.0,0.0,0.0,-0.010824081676963325,-0.011688685029162649,-7.451442855200386e-05,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-7.167036247128717e-05,-0.21485072701343505,0.3869022837168668,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,659.7793324550694,-572.2194413023549,508.874602524382,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.6451232753467206,0.13621935334766366,0,0,0.0,1.740673240762286,0,0,659.7793324550694,-572.2194413023549,508.874602524382,0.0,0.711986729391439,2.7381893840767755,-3.395303717890927e-06,-0.17912598157089718,0.3225693126859737,0.0,2.1945280129956473,3.3798598220168516,-3.4043834359471303e-06,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1.502191731290545e-06,0.43328177384233746,-0.7802519922681604,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,659.7793324550694,-572.2194413023549,508.874602524382,0.0,0.005773115278913472,-0.012605616022175203,-7.74710644454224e-05,-0.0,0.0,0.0,-0.010824081676963325,-0.011688685029162649,-7.451442855200386e-05,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-7.167036247128717e-05,-0.21485072701343505,0.3869022837168668,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,659.7793324550694,-572.2194413023549,508.874602524382,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[659.7793324550694,-572.2194413023549,508.874602524382],[0.0,0.005773115278913472,-0.012605616022175203],[-7.74710644454224e-05,-0.0,0.0]],[[0.0,-0.010824081676963325,-0.011688685029162649],[-7.451442855200386e-05,-0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-7.167036247128717e-05,-0.21485072701343505,0.3869022837168668],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_183","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.5351219354483487,1.8902081853197692,0,0,2.0,0.0,0,0,-674.2650877273693,4.267527943985883,641.3311375288822,19.726179413105914,29.210866858676724,-8.598174560260494,-0.34705575482351575,0.19653328941171053,-0.12853615938483937,-37.39881301104174,21.18783256768771,-13.819298305889353,0.29702706747206475,0.4394543971737653,-0.13006257824161493,1.23456e-61,1.23456e-61,1.23456e-61,-0.7057907851268934,0.39940822287081057,-0.2623225684919943,1.23456e-61,1.23456e-61,1.23456e-61,0.1352145880107502,-0.36271177594228626,-0.9220396861208717,-674.2650877273693,4.267527943985883,641.3311375288822,0.03442656732740337,0.05097945494371392,-0.015005725599094523,0.5156754107718252,-0.2921398151964018,0.19058096744920633,-0.03951125301501335,0.022384609189989108,-0.01459986956518464,2.025539606657533e-05,-5.433489675786925e-05,-0.00013812325508838,1.23456e-61,1.23456e-61,1.23456e-61,-8.970306735869835e-05,0.0002406275783390858,0.0006116927861727303,1.23456e-61,1.23456e-61,1.23456e-61,0.1352145880107502,-0.36271177594228626,-0.9220396861208717,-674.2650877273693,4.267527943985883,641.3311375288822,-0.5437025014138914,-0.805124045915287,0.2369870474209002,0,0,0,0,0,0,0],[1,1,1,1,1,1.5351219354483487,1.8902081853197692,0,0,2.0,0.0,0,0,-674.2650877273693,4.267527943985883,641.3311375288822,19.726179413105914,29.210866858676724,-8.598174560260494,-0.34705575482351575,0.19653328941171053,-0.12853615938483937,-37.39881301104174,21.18783256768771,-13.819298305889353,0.29702706747206475,0.4394543971737653,-0.13006257824161493,1.23456e-61,1.23456e-61,1.23456e-61,-0.7057907851268934,0.39940822287081057,-0.2623225684919943,1.23456e-61,1.23456e-61,1.23456e-61,0.1352145880107502,-0.36271177594228626,-0.9220396861208717,-674.2650877273693,4.267527943985883,641.3311375288822,0.03442656732740337,0.05097945494371392,-0.015005725599094523,0.5156754107718252,-0.2921398151964018,0.19058096744920633,-0.03951125301501335,0.022384609189989108,-0.01459986956518464,2.025539606657533e-05,-5.433489675786925e-05,-0.00013812325508838,1.23456e-61,1.23456e-61,1.23456e-61,-8.970306735869835e-05,0.0002406275783390858,0.0006116927861727303,1.23456e-61,1.23456e-61,1.23456e-61,0.1352145880107502,-0.36271177594228626,-0.9220396861208717,-674.2650877273693,4.267527943985883,641.3311375288822,0.4844114011723679,0.49334285625727503,0.7224668993069073,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-674.2650877273693,4.267527943985883,641.3311375288822],[0.03442656732740337,0.05097945494371392,-0.015005725599094523],[0.5156754107718252,-0.2921398151964018,0.19058096744920633]],[[-0.03951125301501335,0.022384609189989108,-0.01459986956518464],[2.025539606657533e-05,-5.433489675786925e-05,-0.00013812325508838],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-8.970306735869835e-05,0.0002406275783390858,0.0006116927861727303],[1.23456e-61,1.23456e-61,1.23456e-61],[0.1352145880107502,-0.36271177594228626,-0.9220396861208717]]],"normal":[0.1352145880107502,-0.36271177594228626,-0.9220396861208717]},{"op":"state"}]}}, +{"name":"adv_sing_184","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,0.0,1.3974709681713053,0,0,-0.6980474728527026,0.17617193477828685,0.8735128801942378,-0.013569150421981547,0.04272011748930675,0.06572732439037121,-37.99831101840353,-40.31244380256964,18.356863735558484,0.05603743845579228,-0.04267269248555968,0.022285260885657226,-3.1820793559811826,-3.872298569652815,1.2872169846733377,1.23456e-61,1.23456e-61,1.23456e-61,-0.2960722393082879,-0.31410331640360795,0.14303156132996592,1.23456e-61,1.23456e-61,1.23456e-61,0.6510972287658802,0.6907496607394245,-0.3145430095897239,-0.6980474728527026,0.17617193477828685,0.8735128801942378,7.7212102889371,-14.085912136209085,-14.950516349354126,-2311316.2580542816,-2452077.586228817,1116589.565739756,7.824292351290055,-3.873306157892135,7.690172977076186,731690.9189212685,776251.5822237048,-353477.5661128218,1.23456e-61,1.23456e-61,1.23456e-61,-231631.074458047,-245736.90558965295,111899.5616154089,1.23456e-61,1.23456e-61,1.23456e-61,0.6510972287658802,0.6907496607394245,-0.3145430095897239,-0.6980474728527026,0.17617193477828685,0.8735128801942378,0.6510972287658802,0.6907496607394245,-0.3145430095897239,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.6980474728527026,0.17617193477828685,0.8735128801942378],[7.7212102889371,-14.085912136209085,-14.950516349354126],[-2311316.2580542816,-2452077.586228817,1116589.565739756]],[[7.824292351290055,-3.873306157892135,7.690172977076186],[731690.9189212685,776251.5822237048,-353477.5661128218],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-231631.074458047,-245736.90558965295,111899.5616154089],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6510972287658802,0.6907496607394245,-0.3145430095897239]]],"normal":[-0.6510972287658802,-0.6907496607394245,0.3145430095897239]},{"op":"state"}]}}, +{"name":"adv_sing_185","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,1.4105824079416394,0,0,1.2711667774417887,0.54487275346241,0,0,-0.7673934074847999,0.24297284009699927,-0.8592448824515464,0.29409580974760574,-0.10506890745661913,0.0,-0.39468097687706866,-0.33855751754607327,8.992538606809854e-14,-0.12485087082922922,-0.03982180900011436,0.0,0.0,-0.0,-2.172812558672492e-14,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,1.8222061396125016e-15,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.7673934074847999,0.24297284009699927,-0.8592448824515464,0.013385947366139022,-0.015604966686860827,0.0,0.17447556889534155,0.1496652206170156,4.222344564956341,-0.01356925169688431,-0.011639710142112776,0.0,0.0,0.0,0.08602589483383483,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,1.6015464532572101,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.7673934074847999,0.24297284009699927,-0.8592448824515464,0,0,1,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.4105824079416394,0,0,1.2711667774417887,0.54487275346241,0,0,-0.7673934074847999,0.24297284009699927,-0.8592448824515464,0.29409580974760574,-0.10506890745661913,0.0,-0.39468097687706866,-0.33855751754607327,8.992538606809854e-14,-0.12485087082922922,-0.03982180900011436,0.0,0.0,-0.0,-2.172812558672492e-14,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,1.8222061396125016e-15,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.7673934074847999,0.24297284009699927,-0.8592448824515464,0.013385947366139022,-0.015604966686860827,0.0,0.17447556889534155,0.1496652206170156,4.222344564956341,-0.01356925169688431,-0.011639710142112776,0.0,0.0,0.0,0.08602589483383483,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,1.6015464532572101,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.7673934074847999,0.24297284009699927,-0.8592448824515464,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.7673934074847999,0.24297284009699927,-0.8592448824515464],[0.013385947366139022,-0.015604966686860827,0.0],[0.17447556889534155,0.1496652206170156,4.222344564956341]],[[-0.01356925169688431,-0.011639710142112776,0.0],[0.0,0.0,0.08602589483383483],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,1.6015464532572101],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_186","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.23159270002589838,0,0,2.0,0.0,0,0,-0.12754360971600542,-0.28923075448290425,0.28686053172435466,-0.0,0.027473396491180177,-0.003644888344822043,-0.005174591451984687,0.0,0.0,0.0,-0.013184443409922118,0.00630224824661923,0.002790010787600355,-0.1317100288779175,0.14715283977223306,1.23456e-61,1.23456e-61,1.23456e-61,-0.001451387251974122,-0.03267545351847011,-0.029246359996708885,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.12754360971600542,-0.28923075448290425,0.28686053172435466,0.0,-16.54886730725474,18.48919812730138,0.0,-0.5552628947021975,-0.4969913731142443,0.0,11.677671044425812,10.452169274264794,0.0,0.158681567334303,-0.1772867522062053,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.2348281191348708,-0.21018431177049604,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.12754360971600542,-0.28923075448290425,0.28686053172435466,-0.0,0.745123135832547,0.6669269168710105,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.23159270002589838,0,0,2.0,0.0,0,0,-0.12754360971600542,-0.28923075448290425,0.28686053172435466,-0.0,0.027473396491180177,-0.003644888344822043,-0.005174591451984687,0.0,0.0,0.0,-0.013184443409922118,0.00630224824661923,0.002790010787600355,-0.1317100288779175,0.14715283977223306,1.23456e-61,1.23456e-61,1.23456e-61,-0.001451387251974122,-0.03267545351847011,-0.029246359996708885,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.12754360971600542,-0.28923075448290425,0.28686053172435466,0.0,-16.54886730725474,18.48919812730138,0.0,-0.5552628947021975,-0.4969913731142443,0.0,11.677671044425812,10.452169274264794,0.0,0.158681567334303,-0.1772867522062053,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.2348281191348708,-0.21018431177049604,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.12754360971600542,-0.28923075448290425,0.28686053172435466,0.0,-0.745123135832547,-0.6669269168710105,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.12754360971600542,-0.28923075448290425,0.28686053172435466],[0.0,-16.54886730725474,18.48919812730138],[0.0,-0.5552628947021975,-0.4969913731142443]],[[0.0,11.677671044425812,10.452169274264794],[0.0,0.158681567334303,-0.1772867522062053],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-0.2348281191348708,-0.21018431177049604],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_187","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,1.854015094594628,2.0,0,0,0.0006373673439457299,-0.0008050304865668579,-0.000693904435971989,-0.012125183553602387,0.029245977216369574,-0.7034585109227195,-3.540612708007402e-07,-3.4705149865941833e-07,-8.325725304449384e-09,-0.6222908630094676,0.6339703194400037,0.03708317128994425,-0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-5.64476933642228e-07,-5.533013123298057e-07,-1.3273634474548322e-08,1.23456e-61,1.23456e-61,1.23456e-61,-0.7140401155927073,-0.6999034140586813,-0.01679060193547082,0.0006373673439457299,-0.0008050304865668579,-0.000693904435971989,20.776133355059226,-21.5023120089574,12.77791729163879,-0.5534330881619036,-0.5424761149953402,-0.013013939242799259,16.267100761456984,-16.315917372453633,-11.66106113061286,-0.4856925478684166,-0.47607671475683144,-0.011421025312441815,1.23456e-61,1.23456e-61,1.23456e-61,-0.42624349013607193,-0.41780464073631035,-0.010023084997850313,1.23456e-61,1.23456e-61,1.23456e-61,0.7140401155927073,0.6999034140586813,0.01679060193547082,0.0006373673439457299,-0.0008050304865668579,-0.000693904435971989,0.0172190995712437,-0.0415325171384623,0.9989887650169541,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,1.854015094594628,2.0,0,0,0.0006373673439457299,-0.0008050304865668579,-0.000693904435971989,-0.012125183553602387,0.029245977216369574,-0.7034585109227195,-3.540612708007402e-07,-3.4705149865941833e-07,-8.325725304449384e-09,-0.6222908630094676,0.6339703194400037,0.03708317128994425,-0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-5.64476933642228e-07,-5.533013123298057e-07,-1.3273634474548322e-08,1.23456e-61,1.23456e-61,1.23456e-61,-0.7140401155927073,-0.6999034140586813,-0.01679060193547082,0.0006373673439457299,-0.0008050304865668579,-0.000693904435971989,20.776133355059226,-21.5023120089574,12.77791729163879,-0.5534330881619036,-0.5424761149953402,-0.013013939242799259,16.267100761456984,-16.315917372453633,-11.66106113061286,-0.4856925478684166,-0.47607671475683144,-0.011421025312441815,1.23456e-61,1.23456e-61,1.23456e-61,-0.42624349013607193,-0.41780464073631035,-0.010023084997850313,1.23456e-61,1.23456e-61,1.23456e-61,0.7140401155927073,0.6999034140586813,0.01679060193547082,0.0006373673439457299,-0.0008050304865668579,-0.000693904435971989,-0.6998930032042819,0.7130289342019337,0.041707589915333555,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0006373673439457299,-0.0008050304865668579,-0.000693904435971989],[20.776133355059226,-21.5023120089574,12.77791729163879],[-0.5534330881619036,-0.5424761149953402,-0.013013939242799259]],[[16.267100761456984,-16.315917372453633,-11.66106113061286],[-0.4856925478684166,-0.47607671475683144,-0.011421025312441815],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.42624349013607193,-0.41780464073631035,-0.010023084997850313],[1.23456e-61,1.23456e-61,1.23456e-61],[0.7140401155927073,0.6999034140586813,0.01679060193547082]]],"normal":[-0.7140401155927073,-0.6999034140586813,-0.01679060193547082]},{"op":"state"}]}}, +{"name":"adv_sing_188","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,2.0,0.0,0,0,0.042024476955138335,-0.6187025365651364,0.9288662464275894,-0.8785261382929548,-3.573074861860065,12.453479740123289,-0.0,0.0,0.0,12.308387346634452,5.109838367684143,7.795382738241179,0.3170886797095236,0.10587210584374719,0.30531215382391097,1.23456e-61,1.23456e-61,1.23456e-61,0.3651804971999874,0.33042883186319993,-0.4938480046903702,1.23456e-61,1.23456e-61,1.23456e-61,-0.48508386522028996,0.8490313278003405,0.2093787193497336,0.042024476955138335,-0.6187025365651364,0.9288662464275894,-0.10736722008681888,-0.10276018072221263,0.16794689868732463,0.5897413037990378,-0.7848605673940416,-0.34032529994862903,0.1820759107720144,0.12535070949068586,-0.08646816073298057,-0.4993101482915492,0.8739312695870448,0.21551926770463373,1.23456e-61,1.23456e-61,1.23456e-61,0.21553901974131606,-1.2543316158395026,0.21110769942304086,1.23456e-61,1.23456e-61,1.23456e-61,0.48508386522028996,-0.8490313278003405,-0.2093787193497336,0.042024476955138335,-0.6187025365651364,0.9288662464275894,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,0.0,0,0,0.042024476955138335,-0.6187025365651364,0.9288662464275894,-0.8785261382929548,-3.573074861860065,12.453479740123289,-0.0,0.0,0.0,12.308387346634452,5.109838367684143,7.795382738241179,0.3170886797095236,0.10587210584374719,0.30531215382391097,1.23456e-61,1.23456e-61,1.23456e-61,0.3651804971999874,0.33042883186319993,-0.4938480046903702,1.23456e-61,1.23456e-61,1.23456e-61,-0.48508386522028996,0.8490313278003405,0.2093787193497336,0.042024476955138335,-0.6187025365651364,0.9288662464275894,-0.10736722008681888,-0.10276018072221263,0.16794689868732463,0.5897413037990378,-0.7848605673940416,-0.34032529994862903,0.1820759107720144,0.12535070949068586,-0.08646816073298057,-0.4993101482915492,0.8739312695870448,0.21551926770463373,1.23456e-61,1.23456e-61,1.23456e-61,0.21553901974131606,-1.2543316158395026,0.21110769942304086,1.23456e-61,1.23456e-61,1.23456e-61,0.48508386522028996,-0.8490313278003405,-0.2093787193497336,0.042024476955138335,-0.6187025365651364,0.9288662464275894,0.17678406247875988,-0.2399225582277547,1.3824559889222354,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,0.0,0,0,0.042024476955138335,-0.6187025365651364,0.9288662464275894,-0.8785261382929548,-3.573074861860065,12.453479740123289,-0.0,0.0,0.0,12.308387346634452,5.109838367684143,7.795382738241179,0.3170886797095236,0.10587210584374719,0.30531215382391097,1.23456e-61,1.23456e-61,1.23456e-61,0.3651804971999874,0.33042883186319993,-0.4938480046903702,1.23456e-61,1.23456e-61,1.23456e-61,-0.48508386522028996,0.8490313278003405,0.2093787193497336,0.042024476955138335,-0.6187025365651364,0.9288662464275894,-0.10736722008681888,-0.10276018072221263,0.16794689868732463,0.5897413037990378,-0.7848605673940416,-0.34032529994862903,0.1820759107720144,0.12535070949068586,-0.08646816073298057,-0.4993101482915492,0.8739312695870448,0.21551926770463373,1.23456e-61,1.23456e-61,1.23456e-61,0.21553901974131606,-1.2543316158395026,0.21110769942304086,1.23456e-61,1.23456e-61,1.23456e-61,0.48508386522028996,-0.8490313278003405,-0.2093787193497336,0.042024476955138335,-0.6187025365651364,0.9288662464275894,0.7003835921818887,0.2338496784894138,0.6743716717603075,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.042024476955138335,-0.6187025365651364,0.9288662464275894],[-0.10736722008681888,-0.10276018072221263,0.16794689868732463],[0.5897413037990378,-0.7848605673940416,-0.34032529994862903]],[[0.1820759107720144,0.12535070949068586,-0.08646816073298057],[-0.4993101482915492,0.8739312695870448,0.21551926770463373],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.21553901974131606,-1.2543316158395026,0.21110769942304086],[1.23456e-61,1.23456e-61,1.23456e-61],[0.48508386522028996,-0.8490313278003405,-0.2093787193497336]]],"normal":[0.48508386522028996,-0.8490313278003405,-0.2093787193497336]},{"op":"state"}]}}, +{"name":"adv_sing_189","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,0.9332689063812905,2.0,0,0,-1.640996172285588,1.6138651178221113,-1.2834605296130666,0.0,-20.630147804156326,-25.161349286401165,-0.0010587550327558883,0.39789260688995115,-0.2477235104351433,0.0,-36.50892993618546,10.507392899832263,-0.0004888879148197262,-0.09677950466721068,-0.15544689051884086,1.23456e-61,1.23456e-61,1.23456e-61,-0.001443426314365288,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-1.640996172285588,1.6138651178221113,-1.2834605296130666,0.0,1.1659876218179335,-81.72794770417674,-0.006668298709496416,0.0,0.0,-0.0,81.08586866051502,3.8724800596801003,0.00013165366621201505,-0.0941711725933247,-0.15125739697141724,1.23456e-61,1.23456e-61,1.23456e-61,-0.00593866712883591,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,-1.640996172285588,1.6138651178221113,-1.2834605296130666,0.44259771921003066,0.8389930182701816,0.3165406360074006,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.9332689063812905,2.0,0,0,-1.640996172285588,1.6138651178221113,-1.2834605296130666,0.0,-20.630147804156326,-25.161349286401165,-0.0010587550327558883,0.39789260688995115,-0.2477235104351433,0.0,-36.50892993618546,10.507392899832263,-0.0004888879148197262,-0.09677950466721068,-0.15544689051884086,1.23456e-61,1.23456e-61,1.23456e-61,-0.001443426314365288,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-1.640996172285588,1.6138651178221113,-1.2834605296130666,0.0,1.1659876218179335,-81.72794770417674,-0.006668298709496416,0.0,0.0,-0.0,81.08586866051502,3.8724800596801003,0.00013165366621201505,-0.0941711725933247,-0.15125739697141724,1.23456e-61,1.23456e-61,1.23456e-61,-0.00593866712883591,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,-1.640996172285588,1.6138651178221113,-1.2834605296130666,-0.04196452349885216,-0.9460504216643452,-0.32129048917798514,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-1.640996172285588,1.6138651178221113,-1.2834605296130666],[0.0,1.1659876218179335,-81.72794770417674],[-0.006668298709496416,0.0,0.0]],[[-0.0,81.08586866051502,3.8724800596801003],[0.00013165366621201505,-0.0941711725933247,-0.15125739697141724],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.00593866712883591,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[-1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_190","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,1.4958440663072146,2.0,0,0,0.0005322575752539074,-0.0007357503183311911,0.0006460699288128097,4.956543297732431,-5.890387248876648,-5.572183501464152,0.04660018343441306,0.004816353470540022,0.036360188021940285,3.1851933662702847,7.479106683269007,-5.072928018454446,0.15159739661116717,-0.22408316443000426,-0.23518466383251943,1.23456e-61,1.23456e-61,1.23456e-61,0.07693573734491987,0.12520371512016604,-0.0639180410460566,1.23456e-61,1.23456e-61,1.23456e-61,-0.785798992016853,-0.08121611168492368,-0.613126322504653,0.0005322575752539074,-0.0007357503183311911,0.0006460699288128097,26.768605059259194,12.376569240814494,-35.94678436405579,-4541.932515246366,-469.6199993247275,-3543.681127186327,21.477364428427443,3.329723063946121,-27.9670238414011,-3654.419345619916,-377.7018458061949,-2851.391662540775,1.23456e-61,1.23456e-61,1.23456e-61,-2906.5153831808034,-300.4023680006174,-2267.833257992559,1.23456e-61,1.23456e-61,1.23456e-61,-0.785798992016853,-0.08121611168492368,-0.613126322504653,0.0005322575752539074,-0.0007357503183311911,0.0006460699288128097,-0.785798992016853,-0.08121611168492368,-0.613126322504653,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,1.4958440663072146,2.0,0,0,0.0005322575752539074,-0.0007357503183311911,0.0006460699288128097,4.956543297732431,-5.890387248876648,-5.572183501464152,0.04660018343441306,0.004816353470540022,0.036360188021940285,3.1851933662702847,7.479106683269007,-5.072928018454446,0.15159739661116717,-0.22408316443000426,-0.23518466383251943,1.23456e-61,1.23456e-61,1.23456e-61,0.07693573734491987,0.12520371512016604,-0.0639180410460566,1.23456e-61,1.23456e-61,1.23456e-61,-0.785798992016853,-0.08121611168492368,-0.613126322504653,0.0005322575752539074,-0.0007357503183311911,0.0006460699288128097,26.768605059259194,12.376569240814494,-35.94678436405579,-4541.932515246366,-469.6199993247275,-3543.681127186327,21.477364428427443,3.329723063946121,-27.9670238414011,-3654.419345619916,-377.7018458061949,-2851.391662540775,1.23456e-61,1.23456e-61,1.23456e-61,-2906.5153831808034,-300.4023680006174,-2267.833257992559,1.23456e-61,1.23456e-61,1.23456e-61,-0.785798992016853,-0.08121611168492368,-0.613126322504653,0.0005322575752539074,-0.0007357503183311911,0.0006460699288128097,-0.3324099653639456,-0.7805270536682828,0.5294158416770791,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,1.4958440663072146,2.0,0,0,0.0005322575752539074,-0.0007357503183311911,0.0006460699288128097,4.956543297732431,-5.890387248876648,-5.572183501464152,0.04660018343441306,0.004816353470540022,0.036360188021940285,3.1851933662702847,7.479106683269007,-5.072928018454446,0.15159739661116717,-0.22408316443000426,-0.23518466383251943,1.23456e-61,1.23456e-61,1.23456e-61,0.07693573734491987,0.12520371512016604,-0.0639180410460566,1.23456e-61,1.23456e-61,1.23456e-61,-0.785798992016853,-0.08121611168492368,-0.613126322504653,0.0005322575752539074,-0.0007357503183311911,0.0006460699288128097,26.768605059259194,12.376569240814494,-35.94678436405579,-4541.932515246366,-469.6199993247275,-3543.681127186327,21.477364428427443,3.329723063946121,-27.9670238414011,-3654.419345619916,-377.7018458061949,-2851.391662540775,1.23456e-61,1.23456e-61,1.23456e-61,-2906.5153831808034,-300.4023680006174,-2267.833257992559,1.23456e-61,1.23456e-61,1.23456e-61,-0.785798992016853,-0.08121611168492368,-0.613126322504653,0.0005322575752539074,-0.0007357503183311911,0.0006460699288128097,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0005322575752539074,-0.0007357503183311911,0.0006460699288128097],[26.768605059259194,12.376569240814494,-35.94678436405579],[-4541.932515246366,-469.6199993247275,-3543.681127186327]],[[21.477364428427443,3.329723063946121,-27.9670238414011],[-3654.419345619916,-377.7018458061949,-2851.391662540775],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-2906.5153831808034,-300.4023680006174,-2267.833257992559],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.785798992016853,-0.08121611168492368,-0.613126322504653]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_191","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.8145606126202374,0.0,0,0,0.0,1.2349150794027828,0,0,-0.00031869114802990486,0.0006331854590602483,0.0004165856287352936,-0.7170913025704054,-1.1994596684770622,-2.571008636803226,7.108399940837753,-1.318108046901192,-2.0987335621583103,0.52041534694834,2.10694815681942,0.704008537386342,48.9431234554728,-8.917811369156814,-9.490490515231523,1.23456e-61,1.23456e-61,1.23456e-61,-93.56466206395467,17.05798652089001,18.45089174290376,1.23456e-61,1.23456e-61,1.23456e-61,0.9663752244861271,-0.1760809559208914,-0.18738842670072345,-0.00031869114802990486,0.0006331854590602483,0.0004165856287352936,-0.870631047047026,-4.026062392589201,-0.7067851584128411,-344.0831297496216,62.666635211589885,65.84182054961477,0.3085328160323261,-2.3793119505279257,3.8268638285907834,-200.75056482723187,36.57828808187261,38.92725263342738,1.23456e-61,1.23456e-61,1.23456e-61,7.639782756093215,-1.3920268407503518,-1.4814192610959014,1.23456e-61,1.23456e-61,1.23456e-61,0.9663752244861271,-0.1760809559208914,-0.18738842670072345,-0.00031869114802990486,0.0006331854590602483,0.0004165856287352936,0.9663752244861271,-0.1760809559208914,-0.18738842670072345,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.00031869114802990486,0.0006331854590602483,0.0004165856287352936],[-0.870631047047026,-4.026062392589201,-0.7067851584128411],[-344.0831297496216,62.666635211589885,65.84182054961477]],[[0.3085328160323261,-2.3793119505279257,3.8268638285907834],[-200.75056482723187,36.57828808187261,38.92725263342738],[1.23456e-61,1.23456e-61,1.23456e-61]],[[7.639782756093215,-1.3920268407503518,-1.4814192610959014],[1.23456e-61,1.23456e-61,1.23456e-61],[0.9663752244861271,-0.1760809559208914,-0.18738842670072345]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_192","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.3379164907964005,0,0,1.7937262756636962,0.0,0,0,0.0001905531792083548,0.0009709743991905806,-0.0004663205274335598,-0.12559252541752267,-0.0,-0.056957959783969635,-0.05322936093322652,0.0,0.052044834050061,-0.13027294105619908,-0.0,0.04400141882500254,-0.19907211234862623,0.0,-0.20360294183573105,1.23456e-61,1.23456e-61,1.23456e-61,-0.30935995659385257,0.0,0.30247568861212676,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.0001905531792083548,0.0009709743991905806,-0.0004663205274335598,6.338690755393713,0.0,6.48295770793341,0.5491940861455392,-82.09188772998118,-0.5369727265855218,4.047635343468141,0.0,-3.957562256105634,0.0,-1.9254530428021552,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.5485766599971272,-0.04512912447146244,-0.5363690401825875,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.0001905531792083548,0.0009709743991905806,-0.0004663205274335598,0,-1,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0001905531792083548,0.0009709743991905806,-0.0004663205274335598],[6.338690755393713,0.0,6.48295770793341],[0.5491940861455392,-82.09188772998118,-0.5369727265855218]],[[4.047635343468141,0.0,-3.957562256105634],[0.0,-1.9254530428021552,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.5485766599971272,-0.04512912447146244,-0.5363690401825875],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_193","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.873380323828159,2.0,0,0,0.0,0.0,0,0,-36.58289143416549,431.90327142471483,601.9291914075479,0.03702729291894281,0.0,0.009075994834444653,0.37736766843125796,1.7806526382264678e-10,0.05982069471613453,-0.007341594206564258,0.0,0.002691354905188864,0.11509440822057991,-8.483432119019039e-11,-0.7260515560004211,1.23456e-61,1.23456e-61,1.23456e-61,0.0,4.0416990362412676e-11,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-36.58289143416549,431.90327142471483,601.9291914075479,-0.007455015718439717,-0.0,-0.01956809592419639,-0.10154093530281977,-3.6832694018381684e-13,-0.016096369138330794,0.04302750920889104,0.0,-0.07043752450958408,0.1032325647146913,-1.2071999889146333e-12,-0.6512233339552779,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-6.4936458106965895e-12,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-36.58289143416549,431.90327142471483,601.9291914075479,0.9450642628703961,0.17779818745361833,-0.2743015559260332,0,0,0,0,0,0,0],[1,1,1,1,1,1.873380323828159,2.0,0,0,0.0,0.0,0,0,-36.58289143416549,431.90327142471483,601.9291914075479,0.03702729291894281,0.0,0.009075994834444653,0.37736766843125796,1.7806526382264678e-10,0.05982069471613453,-0.007341594206564258,0.0,0.002691354905188864,0.11509440822057991,-8.483432119019039e-11,-0.7260515560004211,1.23456e-61,1.23456e-61,1.23456e-61,0.0,4.0416990362412676e-11,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-36.58289143416549,431.90327142471483,601.9291914075479,-0.007455015718439717,-0.0,-0.01956809592419639,-0.10154093530281977,-3.6832694018381684e-13,-0.016096369138330794,0.04302750920889104,0.0,-0.07043752450958408,0.1032325647146913,-1.2071999889146333e-12,-0.6512233339552779,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-6.4936458106965895e-12,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-36.58289143416549,431.90327142471483,601.9291914075479,-0.9876674946186098,-0.0,-0.15656602464710612,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-36.58289143416549,431.90327142471483,601.9291914075479],[-0.007455015718439717,-0.0,-0.01956809592419639],[-0.10154093530281977,-3.6832694018381684e-13,-0.016096369138330794]],[[0.04302750920889104,0.0,-0.07043752450958408],[0.1032325647146913,-1.2071999889146333e-12,-0.6512233339552779],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-6.4936458106965895e-12,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_194","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,2.0,0.0,0,0,0.0004816583996984012,-0.00024486534190435697,-0.0007958239515207483,0.008097595759251754,0.008081382744916535,0.004331603420934513,0.6203207757267535,-0.3058473982178306,-0.5890282993208716,-0.00830627422403053,0.004094345765207022,0.007889197692445515,-0.6195787525486238,-0.6183382313500457,-0.3314279353858418,1.23456e-61,1.23456e-61,1.23456e-61,4.576685092359493e-05,-9.931251429423421e-05,9.972773115164239e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.3092411229468198,0.6710427486980075,-0.673848319207233,0.0004816583996984012,-0.00024486534190435697,-0.0007958239515207483,-0.014548838573851185,0.005430075594417265,0.012084191350726263,0.00011973262906191276,-0.00025981574426103067,0.0002609020109576689,-0.034086091249355244,-0.004482355022143315,0.011179028106772425,-0.2725368323793307,-0.2725854852187198,-0.14547822016530396,1.23456e-61,1.23456e-61,1.23456e-61,0.00040415458123446176,-0.0008770017341358072,0.0008806684009861756,1.23456e-61,1.23456e-61,1.23456e-61,-0.3092411229468198,0.6710427486980075,-0.673848319207233,0.0004816583996984012,-0.00024486534190435697,-0.0007958239515207483,-0.6827777658226052,0.3365562198736073,0.6484939732662748,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,2.0,0.0,0,0,0.0004816583996984012,-0.00024486534190435697,-0.0007958239515207483,0.008097595759251754,0.008081382744916535,0.004331603420934513,0.6203207757267535,-0.3058473982178306,-0.5890282993208716,-0.00830627422403053,0.004094345765207022,0.007889197692445515,-0.6195787525486238,-0.6183382313500457,-0.3314279353858418,1.23456e-61,1.23456e-61,1.23456e-61,4.576685092359493e-05,-9.931251429423421e-05,9.972773115164239e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.3092411229468198,0.6710427486980075,-0.673848319207233,0.0004816583996984012,-0.00024486534190435697,-0.0007958239515207483,-0.014548838573851185,0.005430075594417265,0.012084191350726263,0.00011973262906191276,-0.00025981574426103067,0.0002609020109576689,-0.034086091249355244,-0.004482355022143315,0.011179028106772425,-0.2725368323793307,-0.2725854852187198,-0.14547822016530396,1.23456e-61,1.23456e-61,1.23456e-61,0.00040415458123446176,-0.0008770017341358072,0.0008806684009861756,1.23456e-61,1.23456e-61,1.23456e-61,-0.3092411229468198,0.6710427486980075,-0.673848319207233,0.0004816583996984012,-0.00024486534190435697,-0.0007958239515207483,-0.020822744407341776,0.9971858742823473,1.0025900186253092,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,2.0,0.0,0,0,0.0004816583996984012,-0.00024486534190435697,-0.0007958239515207483,0.008097595759251754,0.008081382744916535,0.004331603420934513,0.6203207757267535,-0.3058473982178306,-0.5890282993208716,-0.00830627422403053,0.004094345765207022,0.007889197692445515,-0.6195787525486238,-0.6183382313500457,-0.3314279353858418,1.23456e-61,1.23456e-61,1.23456e-61,4.576685092359493e-05,-9.931251429423421e-05,9.972773115164239e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.3092411229468198,0.6710427486980075,-0.673848319207233,0.0004816583996984012,-0.00024486534190435697,-0.0007958239515207483,-0.014548838573851185,0.005430075594417265,0.012084191350726263,0.00011973262906191276,-0.00025981574426103067,0.0002609020109576689,-0.034086091249355244,-0.004482355022143315,0.011179028106772425,-0.2725368323793307,-0.2725854852187198,-0.14547822016530396,1.23456e-61,1.23456e-61,1.23456e-61,0.00040415458123446176,-0.0008770017341358072,0.0008806684009861756,1.23456e-61,1.23456e-61,1.23456e-61,-0.3092411229468198,0.6710427486980075,-0.673848319207233,0.0004816583996984012,-0.00024486534190435697,-0.0007958239515207483,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0004816583996984012,-0.00024486534190435697,-0.0007958239515207483],[-0.014548838573851185,0.005430075594417265,0.012084191350726263],[0.00011973262906191276,-0.00025981574426103067,0.0002609020109576689]],[[-0.034086091249355244,-0.004482355022143315,0.011179028106772425],[-0.2725368323793307,-0.2725854852187198,-0.14547822016530396],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.00040415458123446176,-0.0008770017341358072,0.0008806684009861756],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.3092411229468198,0.6710427486980075,-0.673848319207233]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_195","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.5957572919056793,0.0,0,0,0.0,2.0,0,0,0.41826629284702666,0.18240730089095414,0.15624010148463596,-0.009455657369855413,0.0008355627307124338,0.010229603220680965,-0.6279638991601405,0.04687041494134252,0.6746500032546493,-0.015202224725573147,-0.013082850090911155,0.008559841021768336,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.49319911508759356,0.036811745394560336,0.5298661038382114,1.23456e-61,1.23456e-61,1.23456e-61,0.6717711784725401,-0.355333235177263,0.6499705960672948,0.41826629284702666,0.18240730089095414,0.15624010148463596,0.1847480110826028,0.09850150423461199,-0.1370947108916303,-0.2100241937373142,0.01567591898095799,0.22563855610527989,0.16088042995297863,0.27949478020049556,-0.013479150613721277,0.018676845119068218,0.05954191959109893,0.013247802511264076,1.23456e-61,1.23456e-61,1.23456e-61,5.264460759714405e-10,-2.784635502622322e-10,5.093616409302868e-10,1.23456e-61,1.23456e-61,1.23456e-61,0.6717711784725401,-0.355333235177263,0.6499705960672948,0.41826629284702666,0.18240730089095414,0.15624010148463596,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.5957572919056793,0.0,0,0,0.0,2.0,0,0,0.41826629284702666,0.18240730089095414,0.15624010148463596,-0.009455657369855413,0.0008355627307124338,0.010229603220680965,-0.6279638991601405,0.04687041494134252,0.6746500032546493,-0.015202224725573147,-0.013082850090911155,0.008559841021768336,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.49319911508759356,0.036811745394560336,0.5298661038382114,1.23456e-61,1.23456e-61,1.23456e-61,0.6717711784725401,-0.355333235177263,0.6499705960672948,0.41826629284702666,0.18240730089095414,0.15624010148463596,0.1847480110826028,0.09850150423461199,-0.1370947108916303,-0.2100241937373142,0.01567591898095799,0.22563855610527989,0.16088042995297863,0.27949478020049556,-0.013479150613721277,0.018676845119068218,0.05954191959109893,0.013247802511264076,1.23456e-61,1.23456e-61,1.23456e-61,5.264460759714405e-10,-2.784635502622322e-10,5.093616409302868e-10,1.23456e-61,1.23456e-61,1.23456e-61,0.6717711784725401,-0.355333235177263,0.6499705960672948,0.41826629284702666,0.18240730089095414,0.15624010148463596,0.801750288923231,-0.5914622868053789,0.08584193321720622,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.41826629284702666,0.18240730089095414,0.15624010148463596],[0.1847480110826028,0.09850150423461199,-0.1370947108916303],[-0.2100241937373142,0.01567591898095799,0.22563855610527989]],[[0.16088042995297863,0.27949478020049556,-0.013479150613721277],[0.018676845119068218,0.05954191959109893,0.013247802511264076],[1.23456e-61,1.23456e-61,1.23456e-61]],[[5.264460759714405e-10,-2.784635502622322e-10,5.093616409302868e-10],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6717711784725401,-0.355333235177263,0.6499705960672948]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_196","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,0.0009872852874793885,0.0008860841851383814,-0.0006826393227579742,-0.04289821375698012,-0.03644620784775197,0.00606985643974243,-1.0676357908360088e-09,1.6733826743560214e-09,2.502330086272272e-09,-0.009348725317135325,0.02273392281055985,-0.019191547335046938,1.4773314554663643e-10,-2.3155282757266652e-10,-3.4625768264242465e-10,1.23456e-61,1.23456e-61,1.23456e-61,-2.0147166994483493e-11,3.15781097592528e-11,4.722103038899674e-11,1.23456e-61,1.23456e-61,1.23456e-61,0.3342616888073973,-0.5239124835945105,-0.7834442117531143,0.0009872852874793885,0.0008860841851383814,-0.0006826393227579742,-0.012288230506097467,-0.5007903479428778,0.3296505691089022,-1.0189846905570376e-11,1.597128291546844e-11,2.3883013950244912e-11,-0.6533212344337744,0.7756902772580385,-0.7974710508306424,0.12902380637224545,0.6037026922904204,-0.34866510805565515,1.23456e-61,1.23456e-61,1.23456e-61,0.17906751807411037,0.004223095111977135,0.07357623712768184,1.23456e-61,1.23456e-61,1.23456e-61,0.3342616888073973,-0.5239124835945105,-0.7834442117531143,0.0009872852874793885,0.0008860841851383814,-0.0006826393227579742,0.9247441700816822,0.021808999418162788,0.3799639291358054,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0009872852874793885,0.0008860841851383814,-0.0006826393227579742],[-0.012288230506097467,-0.5007903479428778,0.3296505691089022],[-1.0189846905570376e-11,1.597128291546844e-11,2.3883013950244912e-11]],[[-0.6533212344337744,0.7756902772580385,-0.7974710508306424],[0.12902380637224545,0.6037026922904204,-0.34866510805565515],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.17906751807411037,0.004223095111977135,0.07357623712768184],[1.23456e-61,1.23456e-61,1.23456e-61],[0.3342616888073973,-0.5239124835945105,-0.7834442117531143]]],"normal":[0.3342616888073973,-0.5239124835945105,-0.7834442117531143]},{"op":"state"}]}}, +{"name":"adv_sing_197","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,2.0,0.0,0,0,0.0009379252293153207,-0.0006846468198599996,-0.0008769123774077954,1.392071417114421,4.821579842816892,-0.4305718007268937,0.44919858706881444,0.5106655471610947,-0.6391617696560924,-1.335415567337499,-3.69625386645983,0.8577122950547813,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0794720787888251,-0.09034679486315446,0.11308030786199312,1.23456e-61,1.23456e-61,1.23456e-61,0.8711588015357214,-0.21196767776416894,0.4428905576890422,0.0009379252293153207,-0.0006846468198599996,-0.0008769123774077954,23.250845692965108,63.19849098537536,-15.48721546920304,4.055101878174867,-0.9866749055379898,2.0615831799492024,7.4862950735950395,-42.412707323374896,-35.02417166945792,-2.153797992231231,0.8223185199962091,-0.8566740127182032,1.23456e-61,1.23456e-61,1.23456e-61,1.1030943432837916,-0.2684015197785597,0.5608048360635812,1.23456e-61,1.23456e-61,1.23456e-61,-0.8711588015357214,0.21196767776416894,-0.4428905576890422,0.0009379252293153207,-0.0006846468198599996,-0.0008769123774077954,0.09716635413966082,-0.8097513391066098,-0.5786721597228072,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0009379252293153207,-0.0006846468198599996,-0.0008769123774077954],[23.250845692965108,63.19849098537536,-15.48721546920304],[4.055101878174867,-0.9866749055379898,2.0615831799492024]],[[7.4862950735950395,-42.412707323374896,-35.02417166945792],[-2.153797992231231,0.8223185199962091,-0.8566740127182032],[1.23456e-61,1.23456e-61,1.23456e-61]],[[1.1030943432837916,-0.2684015197785597,0.5608048360635812],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.8711588015357214,0.21196767776416894,-0.4428905576890422]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_198","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.9450110995238519,0,0,2.0,0.0,0,0,0.7458674211848577,0.27932743546602956,0.5922888034216653,-0.3294522905306776,-2.076491916733692,-7.197764863471545,0.0,0.0,0.0,-0.9190909224300485,2.659851799512018,7.551314411828978,-0.5622986599756381,0.39990524281635254,0.6076587802663819,1.23456e-61,1.23456e-61,1.23456e-61,0.3513537412901565,-0.028525038443944696,0.3438986765542088,1.23456e-61,1.23456e-61,1.23456e-61,0.3420101427864783,0.8985903923048644,-0.27488973987503185,0.7458674211848577,0.27932743546602956,0.5922888034216653,7.9159956632074095,-5.629834095577084,-8.554571816882845,4.506340304260549,13.456841821392844,-4.6861043962816495,9.04512583422154,-0.7343384510552677,8.853205297410671,44.03184460801418,115.68835999382705,-35.39047763876254,1.23456e-61,1.23456e-61,1.23456e-61,379.37799562155215,998.2101198277223,-305.8718606974207,1.23456e-61,1.23456e-61,1.23456e-61,0.3420101427864783,0.8985903923048644,-0.27488973987503185,0.7458674211848577,0.27932743546602956,0.5922888034216653,0.3420101427864783,0.8985903923048644,-0.27488973987503185,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.9450110995238519,0,0,2.0,0.0,0,0,0.7458674211848577,0.27932743546602956,0.5922888034216653,-0.3294522905306776,-2.076491916733692,-7.197764863471545,0.0,0.0,0.0,-0.9190909224300485,2.659851799512018,7.551314411828978,-0.5622986599756381,0.39990524281635254,0.6076587802663819,1.23456e-61,1.23456e-61,1.23456e-61,0.3513537412901565,-0.028525038443944696,0.3438986765542088,1.23456e-61,1.23456e-61,1.23456e-61,0.3420101427864783,0.8985903923048644,-0.27488973987503185,0.7458674211848577,0.27932743546602956,0.5922888034216653,7.9159956632074095,-5.629834095577084,-8.554571816882845,4.506340304260549,13.456841821392844,-4.6861043962816495,9.04512583422154,-0.7343384510552677,8.853205297410671,44.03184460801418,115.68835999382705,-35.39047763876254,1.23456e-61,1.23456e-61,1.23456e-61,379.37799562155215,998.2101198277223,-305.8718606974207,1.23456e-61,1.23456e-61,1.23456e-61,0.3420101427864783,0.8985903923048644,-0.27488973987503185,0.7458674211848577,0.27932743546602956,0.5922888034216653,0.8976393593164803,-0.41800626338619556,-0.13969375210011728,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.9450110995238519,0,0,2.0,0.0,0,0,0.7458674211848577,0.27932743546602956,0.5922888034216653,-0.3294522905306776,-2.076491916733692,-7.197764863471545,0.0,0.0,0.0,-0.9190909224300485,2.659851799512018,7.551314411828978,-0.5622986599756381,0.39990524281635254,0.6076587802663819,1.23456e-61,1.23456e-61,1.23456e-61,0.3513537412901565,-0.028525038443944696,0.3438986765542088,1.23456e-61,1.23456e-61,1.23456e-61,0.3420101427864783,0.8985903923048644,-0.27488973987503185,0.7458674211848577,0.27932743546602956,0.5922888034216653,7.9159956632074095,-5.629834095577084,-8.554571816882845,4.506340304260549,13.456841821392844,-4.6861043962816495,9.04512583422154,-0.7343384510552677,8.853205297410671,44.03184460801418,115.68835999382705,-35.39047763876254,1.23456e-61,1.23456e-61,1.23456e-61,379.37799562155215,998.2101198277223,-305.8718606974207,1.23456e-61,1.23456e-61,1.23456e-61,0.3420101427864783,0.8985903923048644,-0.27488973987503185,0.7458674211848577,0.27932743546602956,0.5922888034216653,0.6115725065449352,-0.43494866543031396,-0.6609075031188055,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.7458674211848577,0.27932743546602956,0.5922888034216653],[7.9159956632074095,-5.629834095577084,-8.554571816882845],[4.506340304260549,13.456841821392844,-4.6861043962816495]],[[9.04512583422154,-0.7343384510552677,8.853205297410671],[44.03184460801418,115.68835999382705,-35.39047763876254],[1.23456e-61,1.23456e-61,1.23456e-61]],[[379.37799562155215,998.2101198277223,-305.8718606974207],[1.23456e-61,1.23456e-61,1.23456e-61],[0.3420101427864783,0.8985903923048644,-0.27488973987503185]]],"normal":[-0.3420101427864783,-0.8985903923048644,0.27488973987503185]},{"op":"state"}]}}, +{"name":"adv_sing_199","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,1.1270627657062624,0.17550804670081854,0,0,-0.0003801058960091641,-0.0002628977567527091,-0.00010266752512959366,-1.317832513145497,0.36592418113696645,0.0,0.0,0.0,0.0,2.3891908943002758,-0.44749459340330766,-0.0,-0.4074106580833837,-0.21838209624835134,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.422794532466405,-0.7887597090848742,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.0003801058960091641,-0.0002628977567527091,-0.00010266752512959366,0.01778771530733802,0.028591209652604938,0.0,-0.4046794767064452,0.754964508309856,-6.687622487669611,-0.07220877371066296,-0.03170757367703526,0.0,-0.7289099531127023,-0.39071359665917305,16.745749431898272,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,-41.947710506748926,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.0003801058960091641,-0.0002628977567527091,-0.00010266752512959366,-0.25321683233907655,0.9420766805598466,-0.2199380907562511,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,1.1270627657062624,0.17550804670081854,0,0,-0.0003801058960091641,-0.0002628977567527091,-0.00010266752512959366,-1.317832513145497,0.36592418113696645,0.0,0.0,0.0,0.0,2.3891908943002758,-0.44749459340330766,-0.0,-0.4074106580833837,-0.21838209624835134,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.422794532466405,-0.7887597090848742,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.0003801058960091641,-0.0002628977567527091,-0.00010266752512959366,0.01778771530733802,0.028591209652604938,0.0,-0.4046794767064452,0.754964508309856,-6.687622487669611,-0.07220877371066296,-0.03170757367703526,0.0,-0.7289099531127023,-0.39071359665917305,16.745749431898272,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,-41.947710506748926,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.0003801058960091641,-0.0002628977567527091,-0.00010266752512959366,-0.8813661337543738,-0.4724338453909364,0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0003801058960091641,-0.0002628977567527091,-0.00010266752512959366],[0.01778771530733802,0.028591209652604938,0.0],[-0.4046794767064452,0.754964508309856,-6.687622487669611]],[[-0.07220877371066296,-0.03170757367703526,0.0],[-0.7289099531127023,-0.39071359665917305,16.745749431898272],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0,0.0,-41.947710506748926],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_200","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.7903411332930044,2.0,0,0,1.5768047220081791,0.9247752859078717,0,0,1.324629371640925,-1.9129414272950855,-1.4380350484317446,8.871344998528185,-1.9995307877987898,-10.68154933031804,-105.12194093168704,-124.61352385322304,-63.97989713529045,-13.507060848044015,10.264971093994543,2.1996633107592887,125.15077761975763,149.05979234411674,76.89258919901656,1.23456e-61,1.23456e-61,1.23456e-61,-118.50135818127782,-140.40845193041324,-72.14645899558458,1.23456e-61,1.23456e-61,1.23456e-61,-0.6002307169735871,-0.7115247692737298,-0.3653157389318709,1.324629371640925,-1.9129414272950855,-1.4380350484317446,-6.065808183821054,2.109317271998989,5.8580911848260016,-0.0014332135192295472,-0.0016989582334798576,-0.000872290339395491,5.912707635991813,-9.975387063762632,9.714189281111443,-0.013586867201287375,-0.016106127655866394,-0.00826931426707693,1.23456e-61,1.23456e-61,1.23456e-61,-0.46199473957967807,0.396958560613223,-0.6213087003189288,1.23456e-61,1.23456e-61,1.23456e-61,-0.6002307169735871,-0.7115247692737298,-0.3653157389318709,1.324629371640925,-1.9129414272950855,-1.4380350484317446,0.6978166328649639,-0.24265796605903162,-0.6739206618030773,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.324629371640925,-1.9129414272950855,-1.4380350484317446],[-6.065808183821054,2.109317271998989,5.8580911848260016],[-0.0014332135192295472,-0.0016989582334798576,-0.000872290339395491]],[[5.912707635991813,-9.975387063762632,9.714189281111443],[-0.013586867201287375,-0.016106127655866394,-0.00826931426707693],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.46199473957967807,0.396958560613223,-0.6213087003189288],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6002307169735871,-0.7115247692737298,-0.3653157389318709]]],"normal":[0.6002307169735871,0.7115247692737298,0.3653157389318709]},{"op":"state"}]}}, +{"name":"adv_sing_201","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,2.0,2.0,0,0,0.0008732735330140729,-0.000590756537200737,0.00036144724589913356,-0.030747127092801488,-0.021849418887412465,-0.00609463541406313,0.0,-0.0,0.0,0.017909918210218322,-0.02881284846855158,0.012940144691129973,0.44579877395635914,0.31679200864095775,0.08836536132627656,1.23456e-61,1.23456e-61,1.23456e-61,-0.2752230065836182,0.4427691232687265,-0.19885213800071413,1.23456e-61,1.23456e-61,1.23456e-61,0.33036820270230244,-0.2081064725166069,-0.9206239985683325,0.0008732735330140729,-0.000590756537200737,0.00036144724589913356,-0.032322042969700884,-0.21184896696195862,0.03628947977581315,-0.0008803075785546232,0.0005545258393639035,0.002453118297432671,-0.08832972421137106,0.043699561236791584,-0.04157559854178828,-0.003404861755834581,0.0021448001460719784,0.009488193532515711,1.23456e-61,1.23456e-61,1.23456e-61,-0.1489569129179612,0.23834473031729186,-0.10299167658520884,1.23456e-61,1.23456e-61,1.23456e-61,0.33036820270230244,-0.2081064725166069,-0.9206239985683325,0.0008732735330140729,-0.000590756537200737,0.00036144724589913356,0.33036820270230244,-0.2081064725166069,-0.9206239985683325,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0008732735330140729,-0.000590756537200737,0.00036144724589913356],[-0.032322042969700884,-0.21184896696195862,0.03628947977581315],[-0.0008803075785546232,0.0005545258393639035,0.002453118297432671]],[[-0.08832972421137106,0.043699561236791584,-0.04157559854178828],[-0.003404861755834581,0.0021448001460719784,0.009488193532515711],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.1489569129179612,0.23834473031729186,-0.10299167658520884],[1.23456e-61,1.23456e-61,1.23456e-61],[0.33036820270230244,-0.2081064725166069,-0.9206239985683325]]],"normal":[-0.33036820270230244,0.2081064725166069,0.9206239985683325]},{"op":"state"}]}}, +{"name":"adv_sing_202","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,0.0,1.5558223967922324,0,0,740.7379173760582,601.1805261428622,-767.9975059537119,-0.15002261986172238,-0.47038385967943397,0.5780876613511154,1443.2485427948961,-540.3917884449546,-65.16597776548218,0.13799584826008804,0.37006357660470657,-0.012537387063790161,-1425.8822016674383,533.8893546212984,64.38184768239327,1.23456e-61,1.23456e-61,1.23456e-61,1406.876698925763,-526.0132958807922,-63.47813052014265,1.23456e-61,1.23456e-61,1.23456e-61,-0.935669221991286,0.35034018692692104,0.04224760871613455,740.7379173760582,601.1805261428622,-767.9975059537119,0.0103630037884756,-0.027386395548605485,0.4566151603425894,0.0,-0.0,-0.0,-0.08345939460012582,-0.22152494592586142,-0.011392262505435057,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.935669221991286,-0.35034018692692104,-0.04224760871613455,740.7379173760582,601.1805261428622,-767.9975059537119,-0.022648747184400977,0.059854030909662674,-0.9979501637029989,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[740.7379173760582,601.1805261428622,-767.9975059537119],[0.0103630037884756,-0.027386395548605485,0.4566151603425894],[0.0,-0.0,-0.0]],[[-0.08345939460012582,-0.22152494592586142,-0.011392262505435057],[0.0,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0.935669221991286,-0.35034018692692104,-0.04224760871613455]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_203","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.5865598525529729,0,0,0.3275998642300615,2.0,0,0,328.7279371016403,693.3480306705964,-626.1256424033293,2.992256283819607,-0.0,-62.67257035031026,0.0,39368046.71982646,0.0,77.97279603335575,0.0,-15.540164371914436,0.14030527304596718,12072566.337519856,-0.2815465637437062,1.23456e-61,1.23456e-61,1.23456e-61,0.10832251840417738,63212536.29965417,0.05398119699858941,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,328.7279371016403,693.3480306705964,-626.1256424033293,0.5759212440659527,0.0,0.02032193038960886,0.0,3.321020510346747e-07,0.0,-0.4175317879024599,0.0,0.40692036166692824,0.06934396060231045,-2.321909478729098e-07,-0.13915053511611847,1.23456e-61,1.23456e-61,1.23456e-61,0.0,3.399237597395122e-07,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,328.7279371016403,693.3480306705964,-626.1256424033293,0,-1,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.5865598525529729,0,0,0.3275998642300615,2.0,0,0,328.7279371016403,693.3480306705964,-626.1256424033293,2.992256283819607,-0.0,-62.67257035031026,0.0,39368046.71982646,0.0,77.97279603335575,0.0,-15.540164371914436,0.14030527304596718,12072566.337519856,-0.2815465637437062,1.23456e-61,1.23456e-61,1.23456e-61,0.10832251840417738,63212536.29965417,0.05398119699858941,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,328.7279371016403,693.3480306705964,-626.1256424033293,0.5759212440659527,0.0,0.02032193038960886,0.0,3.321020510346747e-07,0.0,-0.4175317879024599,0.0,0.40692036166692824,0.06934396060231045,-2.321909478729098e-07,-0.13915053511611847,1.23456e-61,1.23456e-61,1.23456e-61,0.0,3.399237597395122e-07,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,328.7279371016403,693.3480306705964,-626.1256424033293,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[328.7279371016403,693.3480306705964,-626.1256424033293],[0.5759212440659527,0.0,0.02032193038960886],[0.0,3.321020510346747e-07,0.0]],[[-0.4175317879024599,0.0,0.40692036166692824],[0.06934396060231045,-2.321909478729098e-07,-0.13915053511611847],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,3.399237597395122e-07,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_204","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,1.6662539611579879,2.0,0,0,-0.9978340515576674,0.539189572962613,0.01982030736610607,3.720652091030189,0.07445236885415518,-11.25748243733629,0.10129564894206369,0.09792588182923642,-0.09832453401679843,1.7049059385013112,2.7915760836490517,0.8269953900343792,-2.1765986780916654e-12,1.5394161213774353e-12,-7.091952655069443e-13,1.23456e-61,1.23456e-61,1.23456e-61,8.981584467023961e-12,-6.352294551686556e-12,2.9264453961484262e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.7889986897095159,-0.5580253791890569,0.25707731097390946,-0.9978340515576674,0.539189572962613,0.01982030736610607,-10.719786295712183,-37.408426524627984,-48.300466532609526,3.0354667355666156,-2.1468571471949556,0.9890379237733796,-20.007966699320754,-19.34236866853555,19.421110637602425,-0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.7788312499713561,-0.7681180077670423,0.42204937051526953,1.23456e-61,1.23456e-61,1.23456e-61,-0.7889986897095159,0.5580253791890569,-0.25707731097390946,-0.9978340515576674,0.539189572962613,0.01982030736610607,0.7889986897095159,-0.5580253791890569,0.25707731097390946,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,1.6662539611579879,2.0,0,0,-0.9978340515576674,0.539189572962613,0.01982030736610607,3.720652091030189,0.07445236885415518,-11.25748243733629,0.10129564894206369,0.09792588182923642,-0.09832453401679843,1.7049059385013112,2.7915760836490517,0.8269953900343792,-2.1765986780916654e-12,1.5394161213774353e-12,-7.091952655069443e-13,1.23456e-61,1.23456e-61,1.23456e-61,8.981584467023961e-12,-6.352294551686556e-12,2.9264453961484262e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.7889986897095159,-0.5580253791890569,0.25707731097390946,-0.9978340515576674,0.539189572962613,0.01982030736610607,-10.719786295712183,-37.408426524627984,-48.300466532609526,3.0354667355666156,-2.1468571471949556,0.9890379237733796,-20.007966699320754,-19.34236866853555,19.421110637602425,-0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.7788312499713561,-0.7681180077670423,0.42204937051526953,1.23456e-61,1.23456e-61,1.23456e-61,-0.7889986897095159,0.5580253791890569,-0.25707731097390946,-0.9978340515576674,0.539189572962613,0.01982030736610607,-0.359064942875514,0.9247501049075444,-0.12613330357716643,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.9978340515576674,0.539189572962613,0.01982030736610607],[-10.719786295712183,-37.408426524627984,-48.300466532609526],[3.0354667355666156,-2.1468571471949556,0.9890379237733796]],[[-20.007966699320754,-19.34236866853555,19.421110637602425],[-0.0,0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.7788312499713561,-0.7681180077670423,0.42204937051526953],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.7889986897095159,0.5580253791890569,-0.25707731097390946]]],"normal":[0.7889986897095159,-0.5580253791890569,0.25707731097390946]},{"op":"state"}]}}, +{"name":"adv_sing_205","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,0.094968343103222,0.0,0,0,-0.0007103435253876825,-0.00019449988214190618,-0.00041857428790237594,0.025826752658157943,-0.13258212879157236,0.31009642434492435,-1.6289141987820543e-11,1.022853941348865e-10,4.50889137769259e-11,-0.6423003945768362,-0.1059082108116949,0.008213565772106463,-0.06337792664240033,0.3253517987243558,-0.7609655265485709,1.23456e-61,1.23456e-61,1.23456e-61,0.7401727035164332,0.1220462689827774,-0.009465130697439973,1.23456e-61,1.23456e-61,1.23456e-61,-0.144198864991964,0.9054766512892171,0.39914749317150305,-0.0007103435253876825,-0.00019449988214190618,-0.00041857428790237594,-0.004739684642688754,0.009395345885248743,-0.023025882995651205,0.0219121834954581,0.0036130760138999847,-0.0002802071456073556,-0.030346827785693933,-0.002005242977250101,-0.00641436429024981,-0.04504987986278373,0.2312644200015976,-0.5409044972671001,1.23456e-61,1.23456e-61,1.23456e-61,-1.667533070343036e-14,1.0471041228600407e-13,4.6157897625969183e-14,1.23456e-61,1.23456e-61,1.23456e-61,0.144198864991964,-0.9054766512892171,-0.39914749317150305,-0.0007103435253876825,-0.00019449988214190618,-0.00041857428790237594,-0.076356781614436,0.3919789989903116,-0.9167999270571735,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0007103435253876825,-0.00019449988214190618,-0.00041857428790237594],[-0.004739684642688754,0.009395345885248743,-0.023025882995651205],[0.0219121834954581,0.0036130760138999847,-0.0002802071456073556]],[[-0.030346827785693933,-0.002005242977250101,-0.00641436429024981],[-0.04504987986278373,0.2312644200015976,-0.5409044972671001],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-1.667533070343036e-14,1.0471041228600407e-13,4.6157897625969183e-14],[1.23456e-61,1.23456e-61,1.23456e-61],[0.144198864991964,-0.9054766512892171,-0.39914749317150305]]],"normal":[0.144198864991964,-0.9054766512892171,-0.39914749317150305]},{"op":"state"}]}}, +{"name":"adv_sing_206","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,1.6693088917957446,0.1588519265164856,0,0,-804.4382683254461,669.9522013701178,-430.88676053310616,-0.1365872912846925,0.14915363490331535,-0.1613913965317386,-0.005698095121864255,-0.012576088143533521,-0.006800126307096715,0.30826165798163324,-0.04860733988471461,-0.16841070401808655,-0.342689348397289,-0.21911308338372476,0.8473928374999077,1.23456e-61,1.23456e-61,1.23456e-61,0.8119450883743118,0.3257777643567983,0.47538156109479957,1.23456e-61,1.23456e-61,1.23456e-61,0.3702341707529022,0.8171322986993582,0.4418387321514646,-804.4382683254461,669.9522013701178,-430.88676053310616,0.009807662378582886,0.04321258180371839,-0.08813516157840183,-0.694461850557285,0.4092862349545858,-0.1750129379950686,0.018329291643434026,0.011544743457442969,-0.03670957675527967,-0.02977699800475015,-0.02225541564260384,0.06611027730438232,1.23456e-61,1.23456e-61,1.23456e-61,0.33840371408349434,-0.19944073518327352,0.08528190307742489,1.23456e-61,1.23456e-61,1.23456e-61,0.3702341707529022,0.8171322986993582,0.4418387321514646,-804.4382683254461,669.9522013701178,-430.88676053310616,-0.13239533973815126,-0.5584035265313625,0.8189364905613605,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,1.6693088917957446,0.1588519265164856,0,0,-804.4382683254461,669.9522013701178,-430.88676053310616,-0.1365872912846925,0.14915363490331535,-0.1613913965317386,-0.005698095121864255,-0.012576088143533521,-0.006800126307096715,0.30826165798163324,-0.04860733988471461,-0.16841070401808655,-0.342689348397289,-0.21911308338372476,0.8473928374999077,1.23456e-61,1.23456e-61,1.23456e-61,0.8119450883743118,0.3257777643567983,0.47538156109479957,1.23456e-61,1.23456e-61,1.23456e-61,0.3702341707529022,0.8171322986993582,0.4418387321514646,-804.4382683254461,669.9522013701178,-430.88676053310616,0.009807662378582886,0.04321258180371839,-0.08813516157840183,-0.694461850557285,0.4092862349545858,-0.1750129379950686,0.018329291643434026,0.011544743457442969,-0.03670957675527967,-0.02977699800475015,-0.02225541564260384,0.06611027730438232,1.23456e-61,1.23456e-61,1.23456e-61,0.33840371408349434,-0.19944073518327352,0.08528190307742489,1.23456e-61,1.23456e-61,1.23456e-61,0.3702341707529022,0.8171322986993582,0.4418387321514646,-804.4382683254461,669.9522013701178,-430.88676053310616,0.8418974919059165,-0.4961785221223723,0.21216853514832465,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,1.6693088917957446,0.1588519265164856,0,0,-804.4382683254461,669.9522013701178,-430.88676053310616,-0.1365872912846925,0.14915363490331535,-0.1613913965317386,-0.005698095121864255,-0.012576088143533521,-0.006800126307096715,0.30826165798163324,-0.04860733988471461,-0.16841070401808655,-0.342689348397289,-0.21911308338372476,0.8473928374999077,1.23456e-61,1.23456e-61,1.23456e-61,0.8119450883743118,0.3257777643567983,0.47538156109479957,1.23456e-61,1.23456e-61,1.23456e-61,0.3702341707529022,0.8171322986993582,0.4418387321514646,-804.4382683254461,669.9522013701178,-430.88676053310616,0.009807662378582886,0.04321258180371839,-0.08813516157840183,-0.694461850557285,0.4092862349545858,-0.1750129379950686,0.018329291643434026,0.011544743457442969,-0.03670957675527967,-0.02977699800475015,-0.02225541564260384,0.06611027730438232,1.23456e-61,1.23456e-61,1.23456e-61,0.33840371408349434,-0.19944073518327352,0.08528190307742489,1.23456e-61,1.23456e-61,1.23456e-61,0.3702341707529022,0.8171322986993582,0.4418387321514646,-804.4382683254461,669.9522013701178,-430.88676053310616,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-804.4382683254461,669.9522013701178,-430.88676053310616],[0.009807662378582886,0.04321258180371839,-0.08813516157840183],[-0.694461850557285,0.4092862349545858,-0.1750129379950686]],[[0.018329291643434026,0.011544743457442969,-0.03670957675527967],[-0.02977699800475015,-0.02225541564260384,0.06611027730438232],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.33840371408349434,-0.19944073518327352,0.08528190307742489],[1.23456e-61,1.23456e-61,1.23456e-61],[0.3702341707529022,0.8171322986993582,0.4418387321514646]]],"normal":[-0.3702341707529022,-0.8171322986993582,-0.4418387321514646]},{"op":"state"}]}}, +{"name":"adv_sing_207","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.9578996143946155,0.8913332578202267,0,0,2.0,0.0,0,0,0.000488761585610114,1.1132465364655175e-05,0.0006383435295001461,-0.737571565856368,0.0,-0.44144878671488,-0.40439429886668726,-7388.88846051854,0.506670224414382,0.005027726185246467,0.0,0.2555248702498832,-0.7186572697329014,1165.0945182243734,-0.5735898592718548,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-653.1823734681345,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.000488761585610114,1.1132465364655175e-05,0.0006383435295001461,-0.01327448862808058,0.0,-0.01059491413329258,-0.0,2.6272661101838785e-13,0.0,-0.019629412158461142,0.0,0.024593914136085752,0.1271368865730006,2.2067098978347252e-13,0.1014731666247146,1.23456e-61,1.23456e-61,1.23456e-61,0.46933531960775376,-9.018281120334646e-13,-0.5880355691899823,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.000488761585610114,1.1132465364655175e-05,0.0006383435295001461,-0.623808717462668,0.0,0.7815770493160488,0,0,0,0,0,0,0],[1,1,1,1,1,0.9578996143946155,0.8913332578202267,0,0,2.0,0.0,0,0,0.000488761585610114,1.1132465364655175e-05,0.0006383435295001461,-0.737571565856368,0.0,-0.44144878671488,-0.40439429886668726,-7388.88846051854,0.506670224414382,0.005027726185246467,0.0,0.2555248702498832,-0.7186572697329014,1165.0945182243734,-0.5735898592718548,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-653.1823734681345,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.000488761585610114,1.1132465364655175e-05,0.0006383435295001461,-0.01327448862808058,0.0,-0.01059491413329258,-0.0,2.6272661101838785e-13,0.0,-0.019629412158461142,0.0,0.024593914136085752,0.1271368865730006,2.2067098978347252e-13,0.1014731666247146,1.23456e-61,1.23456e-61,1.23456e-61,0.46933531960775376,-9.018281120334646e-13,-0.5880355691899823,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.000488761585610114,1.1132465364655175e-05,0.0006383435295001461,-1.4053857667787168,0.0,0.1577683318533808,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.000488761585610114,1.1132465364655175e-05,0.0006383435295001461],[-0.01327448862808058,0.0,-0.01059491413329258],[-0.0,2.6272661101838785e-13,0.0]],[[-0.019629412158461142,0.0,0.024593914136085752],[0.1271368865730006,2.2067098978347252e-13,0.1014731666247146],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.46933531960775376,-9.018281120334646e-13,-0.5880355691899823],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_208","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.014023094243694,2.0,0,0,1.2996124614869218,0.7501860729355603,0,0,-0.5223002253995734,0.9966366705698173,-0.4007146665975081,0.0038137202261137562,0.0,-0.015194767819569955,0.0,-1.4849246660023845e-10,0.0,0.006135021595743674,0.0,0.01652410382275961,-0.28148638951486665,4.9658046142149175e-11,0.49518084117100725,1.23456e-61,1.23456e-61,1.23456e-61,0.6518067296344084,1.6271295614632428e-11,0.37052064161529374,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.5223002253995734,0.9966366705698173,-0.4007146665975081,-0.10558212478040341,0.0,-6.568540445618101,0.20798305120627555,-56.02174411365404,0.11822831841776009,-2.135600282914795,-0.0,1.8475293183983081,0.0,43.58838238341068,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.01831695527539503,-23.08173939168366,0.010412304311255971,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-0.5223002253995734,0.9966366705698173,-0.4007146665975081,-0.5978774369159471,-0.7155932097444759,0.3612048291404978,0,0,0,0,0,0,0],[1,1,1,1,1,1.014023094243694,2.0,0,0,1.2996124614869218,0.7501860729355603,0,0,-0.5223002253995734,0.9966366705698173,-0.4007146665975081,0.0038137202261137562,0.0,-0.015194767819569955,0.0,-1.4849246660023845e-10,0.0,0.006135021595743674,0.0,0.01652410382275961,-0.28148638951486665,4.9658046142149175e-11,0.49518084117100725,1.23456e-61,1.23456e-61,1.23456e-61,0.6518067296344084,1.6271295614632428e-11,0.37052064161529374,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.5223002253995734,0.9966366705698173,-0.4007146665975081,-0.10558212478040341,0.0,-6.568540445618101,0.20798305120627555,-56.02174411365404,0.11822831841776009,-2.135600282914795,-0.0,1.8475293183983081,0.0,43.58838238341068,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.01831695527539503,-23.08173939168366,0.010412304311255971,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-0.5223002253995734,0.9966366705698173,-0.4007146665975081,0.94028931394068,-0.10243336361792423,-0.32459730760880207,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.5223002253995734,0.9966366705698173,-0.4007146665975081],[-0.10558212478040341,0.0,-6.568540445618101],[0.20798305120627555,-56.02174411365404,0.11822831841776009]],[[-2.135600282914795,-0.0,1.8475293183983081],[0.0,43.58838238341068,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.01831695527539503,-23.08173939168366,0.010412304311255971],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_209","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,0.0,0.06041876302904603,0,0,251.17817536453347,152.82168712298682,790.9618846376513,-0.12325683497532533,-0.10370824423403076,0.0,0.0,0.0,0.0038906430300917317,-0.11231516376668717,0.13348612453969755,0.0,-0.6875703382298088,-0.5785213662145955,-0.00014351109158417755,1.23456e-61,1.23456e-61,1.23456e-61,-0.12874750844560343,0.1530159007046115,-0.009128208364664601,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,251.17817536453347,152.82168712298682,790.9618846376513,-5.140501108546886,9.687342738373234,0.0,-0.1696018340893305,0.2015711039200247,0.0,12.513001655316192,-0.7820606479882839,-0.0,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,251.17817536453347,152.82168712298682,790.9618846376513,0,0,1,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.0,0.06041876302904603,0,0,251.17817536453347,152.82168712298682,790.9618846376513,-0.12325683497532533,-0.10370824423403076,0.0,0.0,0.0,0.0038906430300917317,-0.11231516376668717,0.13348612453969755,0.0,-0.6875703382298088,-0.5785213662145955,-0.00014351109158417755,1.23456e-61,1.23456e-61,1.23456e-61,-0.12874750844560343,0.1530159007046115,-0.009128208364664601,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,251.17817536453347,152.82168712298682,790.9618846376513,-5.140501108546886,9.687342738373234,0.0,-0.1696018340893305,0.2015711039200247,0.0,12.513001655316192,-0.7820606479882839,-0.0,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,251.17817536453347,152.82168712298682,790.9618846376513,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.0,0.06041876302904603,0,0,251.17817536453347,152.82168712298682,790.9618846376513,-0.12325683497532533,-0.10370824423403076,0.0,0.0,0.0,0.0038906430300917317,-0.11231516376668717,0.13348612453969755,0.0,-0.6875703382298088,-0.5785213662145955,-0.00014351109158417755,1.23456e-61,1.23456e-61,1.23456e-61,-0.12874750844560343,0.1530159007046115,-0.009128208364664601,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,251.17817536453347,152.82168712298682,790.9618846376513,-5.140501108546886,9.687342738373234,0.0,-0.1696018340893305,0.2015711039200247,0.0,12.513001655316192,-0.7820606479882839,-0.0,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,251.17817536453347,152.82168712298682,790.9618846376513,0.643819740727363,-0.7651771961119536,-0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[251.17817536453347,152.82168712298682,790.9618846376513],[-5.140501108546886,9.687342738373234,0.0],[-0.1696018340893305,0.2015711039200247,0.0]],[[12.513001655316192,-0.7820606479882839,-0.0],[-0.0,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_210","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,1.265386552727324,0,0,2.0,2.0,0,0,0.0002039190357827576,-0.0002312323282888602,0.0005344163423887403,-7.454276735761098,-3.256033446734378,9.546555850625117,0.00011123613687155809,4.437347757047974e-05,0.00010199138721963649,-15.53685978174376,3.414323246783697,15.459686432455513,0.00017840076043813832,7.116628071144716e-05,0.00016357401065746763,1.23456e-61,1.23456e-61,1.23456e-61,-0.2763019872846939,-0.3247236223870115,0.4433833627640979,1.23456e-61,1.23456e-61,1.23456e-61,0.7071386365945964,0.28208639128111457,0.6483688892051603,0.0002039190357827576,-0.0002312323282888602,0.0005344163423887403,0.007263752416914474,-0.010663168592732709,-0.0032829231447562405,8.912642858951469e-11,3.555364013153722e-11,8.171919976214783e-11,-0.007345324825952278,-0.008625413231142196,0.011763788795912063,-6.968974133611902e-11,-2.7800104004344474e-11,-6.389788061460268e-11,1.23456e-61,1.23456e-61,1.23456e-61,5.4491805902638147e-11,2.1737458662265934e-11,4.99630338882641e-11,1.23456e-61,1.23456e-61,1.23456e-61,0.7071386365945964,0.28208639128111457,0.6483688892051603,0.0002039190357827576,-0.0002312323282888602,0.0005344163423887403,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.265386552727324,0,0,2.0,2.0,0,0,0.0002039190357827576,-0.0002312323282888602,0.0005344163423887403,-7.454276735761098,-3.256033446734378,9.546555850625117,0.00011123613687155809,4.437347757047974e-05,0.00010199138721963649,-15.53685978174376,3.414323246783697,15.459686432455513,0.00017840076043813832,7.116628071144716e-05,0.00016357401065746763,1.23456e-61,1.23456e-61,1.23456e-61,-0.2763019872846939,-0.3247236223870115,0.4433833627640979,1.23456e-61,1.23456e-61,1.23456e-61,0.7071386365945964,0.28208639128111457,0.6483688892051603,0.0002039190357827576,-0.0002312323282888602,0.0005344163423887403,0.007263752416914474,-0.010663168592732709,-0.0032829231447562405,8.912642858951469e-11,3.555364013153722e-11,8.171919976214783e-11,-0.007345324825952278,-0.008625413231142196,0.011763788795912063,-6.968974133611902e-11,-2.7800104004344474e-11,-6.389788061460268e-11,1.23456e-61,1.23456e-61,1.23456e-61,5.4491805902638147e-11,2.1737458662265934e-11,4.99630338882641e-11,1.23456e-61,1.23456e-61,1.23456e-61,0.7071386365945964,0.28208639128111457,0.6483688892051603,0.0002039190357827576,-0.0002312323282888602,0.0005344163423887403,-0.28967592248628377,-0.6271144836091568,-0.7230596686161808,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0002039190357827576,-0.0002312323282888602,0.0005344163423887403],[0.007263752416914474,-0.010663168592732709,-0.0032829231447562405],[8.912642858951469e-11,3.555364013153722e-11,8.171919976214783e-11]],[[-0.007345324825952278,-0.008625413231142196,0.011763788795912063],[-6.968974133611902e-11,-2.7800104004344474e-11,-6.389788061460268e-11],[1.23456e-61,1.23456e-61,1.23456e-61]],[[5.4491805902638147e-11,2.1737458662265934e-11,4.99630338882641e-11],[1.23456e-61,1.23456e-61,1.23456e-61],[0.7071386365945964,0.28208639128111457,0.6483688892051603]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_211","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,0.0,2.0,0,0,319.60867155010277,813.6103996391435,-956.6688440247044,0.00942652926522514,0.016790466723523828,0.07048976526853876,2.085198521919474e-09,4.712118312155596e-09,-1.4012651373137636e-09,-0.05481673236142968,0.004643846655404474,-0.06595569387382834,-1.9869934235107455e-09,-4.4901950575137134e-09,1.3352707587162072e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.10613371012661597,-0.15075583813043378,-0.3490199794518452,1.23456e-61,1.23456e-61,1.23456e-61,0.3904862322026217,0.8824182954593872,-0.26240894477656435,319.60867155010277,813.6103996391435,-956.6688440247044,-0.880629113942671,0.27476686906447173,-0.3864739919943473,1.3087124485117758,2.957420038981054,-0.8794621277498224,0.3457709693591708,-0.4911445749942639,-1.137065491096402,-4.7347378294325555,-10.699530329988683,3.1817704573266026,1.23456e-61,1.23456e-61,1.23456e-61,-11.203873537629764,-25.318441917531487,7.52906604628751,1.23456e-61,1.23456e-61,1.23456e-61,0.3904862322026217,0.8824182954593872,-0.26240894477656435,319.60867155010277,813.6103996391435,-956.6688440247044,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.0,2.0,0,0,319.60867155010277,813.6103996391435,-956.6688440247044,0.00942652926522514,0.016790466723523828,0.07048976526853876,2.085198521919474e-09,4.712118312155596e-09,-1.4012651373137636e-09,-0.05481673236142968,0.004643846655404474,-0.06595569387382834,-1.9869934235107455e-09,-4.4901950575137134e-09,1.3352707587162072e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.10613371012661597,-0.15075583813043378,-0.3490199794518452,1.23456e-61,1.23456e-61,1.23456e-61,0.3904862322026217,0.8824182954593872,-0.26240894477656435,319.60867155010277,813.6103996391435,-956.6688440247044,-0.880629113942671,0.27476686906447173,-0.3864739919943473,1.3087124485117758,2.957420038981054,-0.8794621277498224,0.3457709693591708,-0.4911445749942639,-1.137065491096402,-4.7347378294325555,-10.699530329988683,3.1817704573266026,1.23456e-61,1.23456e-61,1.23456e-61,-11.203873537629764,-25.318441917531487,7.52906604628751,1.23456e-61,1.23456e-61,1.23456e-61,0.3904862322026217,0.8824182954593872,-0.26240894477656435,319.60867155010277,813.6103996391435,-956.6688440247044,0.3904862322026217,0.8824182954593872,-0.26240894477656435,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.0,2.0,0,0,319.60867155010277,813.6103996391435,-956.6688440247044,0.00942652926522514,0.016790466723523828,0.07048976526853876,2.085198521919474e-09,4.712118312155596e-09,-1.4012651373137636e-09,-0.05481673236142968,0.004643846655404474,-0.06595569387382834,-1.9869934235107455e-09,-4.4901950575137134e-09,1.3352707587162072e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.10613371012661597,-0.15075583813043378,-0.3490199794518452,1.23456e-61,1.23456e-61,1.23456e-61,0.3904862322026217,0.8824182954593872,-0.26240894477656435,319.60867155010277,813.6103996391435,-956.6688440247044,-0.880629113942671,0.27476686906447173,-0.3864739919943473,1.3087124485117758,2.957420038981054,-0.8794621277498224,0.3457709693591708,-0.4911445749942639,-1.137065491096402,-4.7347378294325555,-10.699530329988683,3.1817704573266026,1.23456e-61,1.23456e-61,1.23456e-61,-11.203873537629764,-25.318441917531487,7.52906604628751,1.23456e-61,1.23456e-61,1.23456e-61,0.3904862322026217,0.8824182954593872,-0.26240894477656435,319.60867155010277,813.6103996391435,-956.6688440247044,-0.8804677323289964,0.2747165160611337,-0.38640316785796136,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[319.60867155010277,813.6103996391435,-956.6688440247044],[-0.880629113942671,0.27476686906447173,-0.3864739919943473],[1.3087124485117758,2.957420038981054,-0.8794621277498224]],[[0.3457709693591708,-0.4911445749942639,-1.137065491096402],[-4.7347378294325555,-10.699530329988683,3.1817704573266026],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-11.203873537629764,-25.318441917531487,7.52906604628751],[1.23456e-61,1.23456e-61,1.23456e-61],[0.3904862322026217,0.8824182954593872,-0.26240894477656435]]],"normal":[-0.3904862322026217,-0.8824182954593872,0.26240894477656435]},{"op":"state"}]}}, +{"name":"adv_sing_212","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.891809340444067,2.0,0,0,2.0,2.0,0,0,0.829212258678933,-0.7906534121689044,0.18701634539136136,-22.37831386002922,16.673084082777677,-28.300272997654304,0.13431028335714068,0.39167579833408767,-0.4500366137227785,1.8390998713828801,6.738875672785782,-7.938600493557217,-0.5724596338427179,-0.005937985307990503,-0.17601566236266225,1.23456e-61,1.23456e-61,1.23456e-61,-1.3699538129445353e-05,5.3928359530508964e-05,4.260469985560013e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.19548627998685494,-0.7695335631610576,-0.607950005761615,0.829212258678933,-0.7906534121689044,0.18701634539136136,-4.600904065641148,-0.04976943252358414,-1.4164230010055487,28141.23081871354,-110778.21740287135,-87517.45360097013,-1.1809735428713706,-3.4257154186447485,3.9564747841614647,-39571.54718944542,155773.76433035362,123065.01685661549,1.23456e-61,1.23456e-61,1.23456e-61,-34949.0853841075,137576.8652217657,108689.47088152789,1.23456e-61,1.23456e-61,1.23456e-61,0.19548627998685494,-0.7695335631610576,-0.607950005761615,0.829212258678933,-0.7906534121689044,0.18701634539136136,-0.22012289645222852,-0.6385226874259227,0.7374514818615926,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.829212258678933,-0.7906534121689044,0.18701634539136136],[-4.600904065641148,-0.04976943252358414,-1.4164230010055487],[28141.23081871354,-110778.21740287135,-87517.45360097013]],[[-1.1809735428713706,-3.4257154186447485,3.9564747841614647],[-39571.54718944542,155773.76433035362,123065.01685661549],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-34949.0853841075,137576.8652217657,108689.47088152789],[1.23456e-61,1.23456e-61,1.23456e-61],[0.19548627998685494,-0.7695335631610576,-0.607950005761615]]],"normal":[0.19548627998685494,-0.7695335631610576,-0.607950005761615]},{"op":"state"}]}}, +{"name":"adv_sing_213","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.9820520061278197,0,0,2.0,2.0,0,0,0.0006000732922170005,-0.0007898650826593121,-0.00033596587467548344,0.0,-0.03552517478910572,0.01925940614742361,-0.0036175022786118383,0.09852546653733064,0.181736362644031,0.0,0.025631620936093048,0.047279122051466595,0.007075434070152954,0.44906653324860357,-0.24345424906122137,1.23456e-61,1.23456e-61,1.23456e-61,-0.013838765928930283,0.043677237451349216,0.08056538622672033,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0006000732922170005,-0.0007898650826593121,-0.00033596587467548344,0.0,-6.322561953925332,3.427675987121061,-1.5599154507447753e-11,0.0,0.0,0.0,3.8800335558812007,7.1569636781720884,-2.975421004060993e-11,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,5.312654008775726e-11,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,0.0006000732922170005,-0.0007898650826593121,-0.00033596587467548344,-0.0,0.8791198410712974,-0.47660078161368646,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.9820520061278197,0,0,2.0,2.0,0,0,0.0006000732922170005,-0.0007898650826593121,-0.00033596587467548344,0.0,-0.03552517478910572,0.01925940614742361,-0.0036175022786118383,0.09852546653733064,0.181736362644031,0.0,0.025631620936093048,0.047279122051466595,0.007075434070152954,0.44906653324860357,-0.24345424906122137,1.23456e-61,1.23456e-61,1.23456e-61,-0.013838765928930283,0.043677237451349216,0.08056538622672033,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0006000732922170005,-0.0007898650826593121,-0.00033596587467548344,0.0,-6.322561953925332,3.427675987121061,-1.5599154507447753e-11,0.0,0.0,0.0,3.8800335558812007,7.1569636781720884,-2.975421004060993e-11,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,5.312654008775726e-11,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,0.0006000732922170005,-0.0007898650826593121,-0.00033596587467548344,0.38445485752240505,-0.4337582101302041,0.8148915741815403,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0006000732922170005,-0.0007898650826593121,-0.00033596587467548344],[0.0,-6.322561953925332,3.427675987121061],[-1.5599154507447753e-11,0.0,0.0]],[[0.0,3.8800335558812007,7.1569636781720884],[-2.975421004060993e-11,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[5.312654008775726e-11,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[-1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_214","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,2.0,0.0,0,0,-0.33200290952083833,-0.38614343937213014,-0.18144728437352886,0.4079597707214411,-0.40506392979197137,-0.2008054999446044,1.368215738404622e-10,1.114939554682108e-10,5.306387597270322e-11,0.007823331463605573,-0.13174981667770022,0.25665120424086757,-6.8949232134479535e-12,-5.618574908466365e-12,-2.674076463016942e-12,1.23456e-61,1.23456e-61,1.23456e-61,-0.146824009622325,0.04150846011852098,0.29136110718135816,1.23456e-61,1.23456e-61,1.23456e-61,-0.742381492061504,-0.6049561241916612,-0.2879197944698114,-0.33200290952083833,-0.38614343937213014,-0.18144728437352886,-0.031448473572196,0.049490586874737515,-0.02289828283001062,-7.377918819392183e-13,-6.012161161488708e-13,-2.8613979373267617e-13,-0.01636991221552924,0.004627920536977369,0.032484848780844365,1.285248524441221e-12,1.0473307514845719e-12,4.984613638092791e-13,1.23456e-61,1.23456e-61,1.23456e-61,-2.48767667362946e-13,-2.0271723565492706e-13,-9.648022805495793e-14,1.23456e-61,1.23456e-61,1.23456e-61,-0.742381492061504,-0.6049561241916612,-0.2879197944698114,-0.33200290952083833,-0.38614343937213014,-0.18144728437352886,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,2.0,0.0,0,0,-0.33200290952083833,-0.38614343937213014,-0.18144728437352886,0.4079597707214411,-0.40506392979197137,-0.2008054999446044,1.368215738404622e-10,1.114939554682108e-10,5.306387597270322e-11,0.007823331463605573,-0.13174981667770022,0.25665120424086757,-6.8949232134479535e-12,-5.618574908466365e-12,-2.674076463016942e-12,1.23456e-61,1.23456e-61,1.23456e-61,-0.146824009622325,0.04150846011852098,0.29136110718135816,1.23456e-61,1.23456e-61,1.23456e-61,-0.742381492061504,-0.6049561241916612,-0.2879197944698114,-0.33200290952083833,-0.38614343937213014,-0.18144728437352886,-0.031448473572196,0.049490586874737515,-0.02289828283001062,-7.377918819392183e-13,-6.012161161488708e-13,-2.8613979373267617e-13,-0.01636991221552924,0.004627920536977369,0.032484848780844365,1.285248524441221e-12,1.0473307514845719e-12,4.984613638092791e-13,1.23456e-61,1.23456e-61,1.23456e-61,-2.48767667362946e-13,-2.0271723565492706e-13,-9.648022805495793e-14,1.23456e-61,1.23456e-61,1.23456e-61,-0.742381492061504,-0.6049561241916612,-0.2879197944698114,-0.33200290952083833,-0.38614343937213014,-0.18144728437352886,-0.742381492061504,-0.6049561241916612,-0.2879197944698114,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,2.0,0.0,0,0,-0.33200290952083833,-0.38614343937213014,-0.18144728437352886,0.4079597707214411,-0.40506392979197137,-0.2008054999446044,1.368215738404622e-10,1.114939554682108e-10,5.306387597270322e-11,0.007823331463605573,-0.13174981667770022,0.25665120424086757,-6.8949232134479535e-12,-5.618574908466365e-12,-2.674076463016942e-12,1.23456e-61,1.23456e-61,1.23456e-61,-0.146824009622325,0.04150846011852098,0.29136110718135816,1.23456e-61,1.23456e-61,1.23456e-61,-0.742381492061504,-0.6049561241916612,-0.2879197944698114,-0.33200290952083833,-0.38614343937213014,-0.18144728437352886,-0.031448473572196,0.049490586874737515,-0.02289828283001062,-7.377918819392183e-13,-6.012161161488708e-13,-2.8613979373267617e-13,-0.01636991221552924,0.004627920536977369,0.032484848780844365,1.285248524441221e-12,1.0473307514845719e-12,4.984613638092791e-13,1.23456e-61,1.23456e-61,1.23456e-61,-2.48767667362946e-13,-2.0271723565492706e-13,-9.648022805495793e-14,1.23456e-61,1.23456e-61,1.23456e-61,-0.742381492061504,-0.6049561241916612,-0.2879197944698114,-0.33200290952083833,-0.38614343937213014,-0.18144728437352886,-0.49958154005618693,0.7861934396404284,-0.3637556326731455,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.33200290952083833,-0.38614343937213014,-0.18144728437352886],[-0.031448473572196,0.049490586874737515,-0.02289828283001062],[-7.377918819392183e-13,-6.012161161488708e-13,-2.8613979373267617e-13]],[[-0.01636991221552924,0.004627920536977369,0.032484848780844365],[1.285248524441221e-12,1.0473307514845719e-12,4.984613638092791e-13],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-2.48767667362946e-13,-2.0271723565492706e-13,-9.648022805495793e-14],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.742381492061504,-0.6049561241916612,-0.2879197944698114]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_215","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.7356405463765918,2.0,0,0,2.0,0.0,0,0,-0.49187759376318785,-0.8365548403844387,-0.9749878798088347,58.89053963632685,-16.100904846555014,60.1410248178148,0.0,0.0,-0.0,35.72121027133088,47.1928346282677,-22.34404906838863,-0.6058236100161305,0.16563455452952225,-0.6186877041745308,1.23456e-61,1.23456e-61,1.23456e-61,0.3362789191145765,0.44427261277548935,-0.21034653115858284,1.23456e-61,1.23456e-61,1.23456e-61,0.45713747386282155,-0.6389431369078237,-0.6186897427537554,-0.49187759376318785,-0.8365548403844387,-0.9749878798088347,0.023053431151052354,-0.006302898625855633,0.023542949063689398,-0.19544664808163412,-0.2582130132631181,0.12225424227837652,0.012781165577889103,0.016885750199732947,-0.00799477365560475,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.45713747386282155,-0.6389431369078237,-0.6186897427537554,-0.49187759376318785,-0.8365548403844387,-0.9749878798088347,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.7356405463765918,2.0,0,0,2.0,0.0,0,0,-0.49187759376318785,-0.8365548403844387,-0.9749878798088347,58.89053963632685,-16.100904846555014,60.1410248178148,0.0,0.0,-0.0,35.72121027133088,47.1928346282677,-22.34404906838863,-0.6058236100161305,0.16563455452952225,-0.6186877041745308,1.23456e-61,1.23456e-61,1.23456e-61,0.3362789191145765,0.44427261277548935,-0.21034653115858284,1.23456e-61,1.23456e-61,1.23456e-61,0.45713747386282155,-0.6389431369078237,-0.6186897427537554,-0.49187759376318785,-0.8365548403844387,-0.9749878798088347,0.023053431151052354,-0.006302898625855633,0.023542949063689398,-0.19544664808163412,-0.2582130132631181,0.12225424227837652,0.012781165577889103,0.016885750199732947,-0.00799477365560475,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.45713747386282155,-0.6389431369078237,-0.6186897427537554,-0.49187759376318785,-0.8365548403844387,-0.9749878798088347,0.5646307961216794,0.7459581460145406,-0.3531833921145611,0,0,0,0,0,0,0],[1,1,1,1,1,1.7356405463765918,2.0,0,0,2.0,0.0,0,0,-0.49187759376318785,-0.8365548403844387,-0.9749878798088347,58.89053963632685,-16.100904846555014,60.1410248178148,0.0,0.0,-0.0,35.72121027133088,47.1928346282677,-22.34404906838863,-0.6058236100161305,0.16563455452952225,-0.6186877041745308,1.23456e-61,1.23456e-61,1.23456e-61,0.3362789191145765,0.44427261277548935,-0.21034653115858284,1.23456e-61,1.23456e-61,1.23456e-61,0.45713747386282155,-0.6389431369078237,-0.6186897427537554,-0.49187759376318785,-0.8365548403844387,-0.9749878798088347,0.023053431151052354,-0.006302898625855633,0.023542949063689398,-0.19544664808163412,-0.2582130132631181,0.12225424227837652,0.012781165577889103,0.016885750199732947,-0.00799477365560475,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.45713747386282155,-0.6389431369078237,-0.6186897427537554,-0.49187759376318785,-0.8365548403844387,-0.9749878798088347,-0.16311210362361822,0.7425495781912609,-0.6496264815872722,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.49187759376318785,-0.8365548403844387,-0.9749878798088347],[0.023053431151052354,-0.006302898625855633,0.023542949063689398],[-0.19544664808163412,-0.2582130132631181,0.12225424227837652]],[[0.012781165577889103,0.016885750199732947,-0.00799477365560475],[0.0,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0.45713747386282155,-0.6389431369078237,-0.6186897427537554]]],"normal":[0.45713747386282155,-0.6389431369078237,-0.6186897427537554]},{"op":"state"}]}}, +{"name":"adv_sing_216","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.3667243636730049,2.0,0,0,0.0,1.8559381763467475,0,0,-0.36547668032648906,-0.9444747644940603,0.7207088761672573,0.10078301400004808,0.026455025710416503,-0.09562345751936523,0.12332145327440613,0.4751845900072625,-0.3003684438353702,0.07452587470969844,-0.0729207293973615,-0.0335335197131484,-0.03472261782258939,-0.016551922410963118,-0.04117537383830556,1.23456e-61,1.23456e-61,1.23456e-61,-0.0055729446861322585,0.14985554066188297,-0.17018525085178415,1.23456e-61,1.23456e-61,1.23456e-61,0.6162231571008987,0.2937473763149631,0.7307403776723143,-0.36547668032648906,-0.9444747644940603,0.7207088761672573,0.009414276226300873,0.1022823523926103,-0.04905499787876433,0.12162502496213458,0.4607625199301334,-0.2877790990148922,0.08968637687980288,0.12127957545260254,-0.12438395656899996,-0.2432463504935846,0.1537288070515073,0.14333087152268667,1.23456e-61,1.23456e-61,1.23456e-61,-0.07607917516351408,-0.2882231509113949,0.1800185764124048,1.23456e-61,1.23456e-61,1.23456e-61,0.6162231571008987,0.2937473763149631,0.7307403776723143,-0.36547668032648906,-0.9444747644940603,0.7207088761672573,0.9570675579176153,0.05447838404444243,-0.28469948235555037,0,0,0,0,0,0,0],[1,1,1,1,1,1.3667243636730049,2.0,0,0,0.0,1.8559381763467475,0,0,-0.36547668032648906,-0.9444747644940603,0.7207088761672573,0.10078301400004808,0.026455025710416503,-0.09562345751936523,0.12332145327440613,0.4751845900072625,-0.3003684438353702,0.07452587470969844,-0.0729207293973615,-0.0335335197131484,-0.03472261782258939,-0.016551922410963118,-0.04117537383830556,1.23456e-61,1.23456e-61,1.23456e-61,-0.0055729446861322585,0.14985554066188297,-0.17018525085178415,1.23456e-61,1.23456e-61,1.23456e-61,0.6162231571008987,0.2937473763149631,0.7307403776723143,-0.36547668032648906,-0.9444747644940603,0.7207088761672573,0.009414276226300873,0.1022823523926103,-0.04905499787876433,0.12162502496213458,0.4607625199301334,-0.2877790990148922,0.08968637687980288,0.12127957545260254,-0.12438395656899996,-0.2432463504935846,0.1537288070515073,0.14333087152268667,1.23456e-61,1.23456e-61,1.23456e-61,-0.07607917516351408,-0.2882231509113949,0.1800185764124048,1.23456e-61,1.23456e-61,1.23456e-61,0.6162231571008987,0.2937473763149631,0.7307403776723143,-0.36547668032648906,-0.9444747644940603,0.7207088761672573,-0.218471589141254,-0.8276698127283343,0.516945689445554,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.36547668032648906,-0.9444747644940603,0.7207088761672573],[0.009414276226300873,0.1022823523926103,-0.04905499787876433],[0.12162502496213458,0.4607625199301334,-0.2877790990148922]],[[0.08968637687980288,0.12127957545260254,-0.12438395656899996],[-0.2432463504935846,0.1537288070515073,0.14333087152268667],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.07607917516351408,-0.2882231509113949,0.1800185764124048],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6162231571008987,0.2937473763149631,0.7307403776723143]]],"normal":[0.6162231571008987,0.2937473763149631,0.7307403776723143]},{"op":"state"}]}}, +{"name":"adv_sing_217","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.9176260703821411,1.3460038816576059,0,0,0.0,0.0,0,0,224.1199151139224,910.9022164318568,860.358497055544,16.037323115722494,6.7932610043152,33.723721426099694,-7.812958026340923e-05,-0.0014025422979698954,0.0003196807697189082,26.86304319663302,-4.214650538901018,-11.925732554297056,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-4.7812144330011486e-05,-0.0008582991813522956,0.00019563170632426805,1.23456e-61,1.23456e-61,1.23456e-61,-0.05423279374715501,-0.9735593985148471,0.22190291040404966,224.1199151139224,910.9022164318568,860.358497055544,-1.7922134810612904,-0.0036661566520817535,-0.45409934079210956,0.2965201219537616,-0.04652558761212005,-0.13163815730674175,0.7643356146986557,-0.18697814865600754,-0.6335305739768236,5.865175149902438e-08,1.052886269836097e-06,-2.3998384480444257e-07,1.23456e-61,1.23456e-61,1.23456e-61,-5.5346233576235445e-08,-9.935473013202209e-07,2.2645874316797944e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.05423279374715501,0.9735593985148471,-0.22190291040404966,224.1199151139224,910.9022164318568,860.358497055544,0.8452901946198347,-0.4615483001087733,0.2691795934803825,0,0,0,0,0,0,0],[1,1,1,1,1,0.9176260703821411,1.3460038816576059,0,0,0.0,0.0,0,0,224.1199151139224,910.9022164318568,860.358497055544,16.037323115722494,6.7932610043152,33.723721426099694,-7.812958026340923e-05,-0.0014025422979698954,0.0003196807697189082,26.86304319663302,-4.214650538901018,-11.925732554297056,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-4.7812144330011486e-05,-0.0008582991813522956,0.00019563170632426805,1.23456e-61,1.23456e-61,1.23456e-61,-0.05423279374715501,-0.9735593985148471,0.22190291040404966,224.1199151139224,910.9022164318568,860.358497055544,-1.7922134810612904,-0.0036661566520817535,-0.45409934079210956,0.2965201219537616,-0.04652558761212005,-0.13163815730674175,0.7643356146986557,-0.18697814865600754,-0.6335305739768236,5.865175149902438e-08,1.052886269836097e-06,-2.3998384480444257e-07,1.23456e-61,1.23456e-61,1.23456e-61,-5.5346233576235445e-08,-9.935473013202209e-07,2.2645874316797944e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.05423279374715501,0.9735593985148471,-0.22190291040404966,224.1199151139224,910.9022164318568,860.358497055544,-0.05423279374715501,-0.9735593985148471,0.22190291040404966,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[224.1199151139224,910.9022164318568,860.358497055544],[-1.7922134810612904,-0.0036661566520817535,-0.45409934079210956],[0.2965201219537616,-0.04652558761212005,-0.13163815730674175]],[[0.7643356146986557,-0.18697814865600754,-0.6335305739768236],[5.865175149902438e-08,1.052886269836097e-06,-2.3998384480444257e-07],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-5.5346233576235445e-08,-9.935473013202209e-07,2.2645874316797944e-07],[1.23456e-61,1.23456e-61,1.23456e-61],[0.05423279374715501,0.9735593985148471,-0.22190291040404966]]],"normal":[0.05423279374715501,0.9735593985148471,-0.22190291040404966]},{"op":"state"}]}}, +{"name":"adv_sing_218","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.8495281379131274,0.0,0,0,0.42329816027614475,2.0,0,0,-0.9484841447124315,0.9344043699039155,-0.8508123820010953,-1.1699113393818146,0.3459152597819626,-18.1185115309501,0.18609627099217468,-0.2464618801657157,-0.043366456144936415,-42.09755807627514,52.88235575600834,-34.05914098371744,-0.08679873982232018,0.06506036957444625,-0.742228572004412,1.23456e-61,1.23456e-61,1.23456e-61,0.4488499243670987,-0.5944471411595678,-0.10459656422423592,1.23456e-61,1.23456e-61,1.23456e-61,0.794053314503608,0.6065508162833034,-0.03969182525272118,-0.9484841447124315,0.9344043699039155,-0.8508123820010953,-10.656265904036239,17.186077294777043,49.4455958633106,-0.13256151242655398,0.1802937045947022,0.03130591863055491,3.089996091743734,-5.600236279215843,-23.763236940603264,-0.0010355806399937148,-0.0007910454764716172,5.176489417895997e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.00048088553346353475,0.00036733240392489223,-2.4037711589590617e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.794053314503608,0.6065508162833034,-0.03969182525272118,-0.9484841447124315,0.9344043699039155,-0.8508123820010953,0.5967324089422834,-0.7902995083115677,-0.13905797093454908,0,0,0,0,0,0,0],[1,1,1,1,1,0.8495281379131274,0.0,0,0,0.42329816027614475,2.0,0,0,-0.9484841447124315,0.9344043699039155,-0.8508123820010953,-1.1699113393818146,0.3459152597819626,-18.1185115309501,0.18609627099217468,-0.2464618801657157,-0.043366456144936415,-42.09755807627514,52.88235575600834,-34.05914098371744,-0.08679873982232018,0.06506036957444625,-0.742228572004412,1.23456e-61,1.23456e-61,1.23456e-61,0.4488499243670987,-0.5944471411595678,-0.10459656422423592,1.23456e-61,1.23456e-61,1.23456e-61,0.794053314503608,0.6065508162833034,-0.03969182525272118,-0.9484841447124315,0.9344043699039155,-0.8508123820010953,-10.656265904036239,17.186077294777043,49.4455958633106,-0.13256151242655398,0.1802937045947022,0.03130591863055491,3.089996091743734,-5.600236279215843,-23.763236940603264,-0.0010355806399937148,-0.0007910454764716172,5.176489417895997e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.00048088553346353475,0.00036733240392489223,-2.4037711589590617e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.794053314503608,0.6065508162833034,-0.03969182525272118,-0.9484841447124315,0.9344043699039155,-0.8508123820010953,0.794053314503608,0.6065508162833034,-0.03969182525272118,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.9484841447124315,0.9344043699039155,-0.8508123820010953],[-10.656265904036239,17.186077294777043,49.4455958633106],[-0.13256151242655398,0.1802937045947022,0.03130591863055491]],[[3.089996091743734,-5.600236279215843,-23.763236940603264],[-0.0010355806399937148,-0.0007910454764716172,5.176489417895997e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.00048088553346353475,0.00036733240392489223,-2.4037711589590617e-05],[1.23456e-61,1.23456e-61,1.23456e-61],[0.794053314503608,0.6065508162833034,-0.03969182525272118]]],"normal":[-0.794053314503608,-0.6065508162833034,0.03969182525272118]},{"op":"state"}]}}, +{"name":"adv_sing_219","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,0.5087861985450468,0.8060317920416473,0,0,-0.057347689346559205,-0.11371362966827925,-0.6995282654368313,-26.31477920198529,8.627587566395157,-19.240521814198196,-0.05293132648653933,0.3027919342354126,0.34841303727193285,29.251117930059923,-21.77589413505138,4.861104908925707,-6.052819175494009e-07,-6.98148189729341e-07,5.147742597473491e-07,1.23456e-61,1.23456e-61,1.23456e-61,5.63303483907758e-07,6.497291529055716e-07,-4.790728510703482e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.5722520602854425,0.6600506778307322,-0.4866833490004126,-0.057347689346559205,-0.11371362966827925,-0.6995282654368313,76.18453763049999,-35.05409774425601,42.03817058078389,-66.16898127642428,-76.90133657324506,55.79087393006623,-10.31133978427085,58.984813130960134,67.87222229977928,389.49734427052016,448.22637266333703,-330.36061897362526,1.23456e-61,1.23456e-61,1.23456e-61,-2282.281445148257,-2632.685517680605,1940.810935571991,1.23456e-61,1.23456e-61,1.23456e-61,0.5722520602854425,0.6600506778307322,-0.4866833490004126,-0.057347689346559205,-0.11371362966827925,-0.6995282654368313,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.5087861985450468,0.8060317920416473,0,0,-0.057347689346559205,-0.11371362966827925,-0.6995282654368313,-26.31477920198529,8.627587566395157,-19.240521814198196,-0.05293132648653933,0.3027919342354126,0.34841303727193285,29.251117930059923,-21.77589413505138,4.861104908925707,-6.052819175494009e-07,-6.98148189729341e-07,5.147742597473491e-07,1.23456e-61,1.23456e-61,1.23456e-61,5.63303483907758e-07,6.497291529055716e-07,-4.790728510703482e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.5722520602854425,0.6600506778307322,-0.4866833490004126,-0.057347689346559205,-0.11371362966827925,-0.6995282654368313,76.18453763049999,-35.05409774425601,42.03817058078389,-66.16898127642428,-76.90133657324506,55.79087393006623,-10.31133978427085,58.984813130960134,67.87222229977928,389.49734427052016,448.22637266333703,-330.36061897362526,1.23456e-61,1.23456e-61,1.23456e-61,-2282.281445148257,-2632.685517680605,1940.810935571991,1.23456e-61,1.23456e-61,1.23456e-61,0.5722520602854425,0.6600506778307322,-0.4866833490004126,-0.057347689346559205,-0.11371362966827925,-0.6995282654368313,0.5722520602854425,0.6600506778307322,-0.4866833490004126,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.057347689346559205,-0.11371362966827925,-0.6995282654368313],[76.18453763049999,-35.05409774425601,42.03817058078389],[-66.16898127642428,-76.90133657324506,55.79087393006623]],[[-10.31133978427085,58.984813130960134,67.87222229977928],[389.49734427052016,448.22637266333703,-330.36061897362526],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-2282.281445148257,-2632.685517680605,1940.810935571991],[1.23456e-61,1.23456e-61,1.23456e-61],[0.5722520602854425,0.6600506778307322,-0.4866833490004126]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_220","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,0.0,2.0,0,0,993.7892206138455,-409.5789710165094,-790.5326134103839,1.6499464372533839,5.634544782414247,-2.024037384733427,-105.9116620464003,15.252807702384567,-43.875642846438744,-2.0145838273334924,2.6702717061615444,5.791301183237551,-2.768568188186376,0.39871377116946394,-1.1469247736633554,1.23456e-61,1.23456e-61,1.23456e-61,40.907338187035734,-5.89124701593214,16.9465356827895,1.23456e-61,1.23456e-61,1.23456e-61,-0.9157920784352351,0.13188727471409256,-0.3793818865520094,993.7892206138455,-409.5789710165094,-790.5326134103839,18.40198392546626,6.717975220211805,-42.08523450645862,146.89406456659546,-21.354875362415783,60.29648357952128,6.577752761156613,-4.095347136675326,-17.301769742075283,139.8216122362169,-20.136329870284406,57.92339580132205,1.23456e-61,1.23456e-61,1.23456e-61,82.0889192677083,-11.739777649492439,34.23554204321736,1.23456e-61,1.23456e-61,1.23456e-61,-0.9157920784352351,0.13188727471409256,-0.3793818865520094,993.7892206138455,-409.5789710165094,-790.5326134103839,-0.2656813673581542,-0.9072982785578,0.32591907701875095,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.0,2.0,0,0,993.7892206138455,-409.5789710165094,-790.5326134103839,1.6499464372533839,5.634544782414247,-2.024037384733427,-105.9116620464003,15.252807702384567,-43.875642846438744,-2.0145838273334924,2.6702717061615444,5.791301183237551,-2.768568188186376,0.39871377116946394,-1.1469247736633554,1.23456e-61,1.23456e-61,1.23456e-61,40.907338187035734,-5.89124701593214,16.9465356827895,1.23456e-61,1.23456e-61,1.23456e-61,-0.9157920784352351,0.13188727471409256,-0.3793818865520094,993.7892206138455,-409.5789710165094,-790.5326134103839,18.40198392546626,6.717975220211805,-42.08523450645862,146.89406456659546,-21.354875362415783,60.29648357952128,6.577752761156613,-4.095347136675326,-17.301769742075283,139.8216122362169,-20.136329870284406,57.92339580132205,1.23456e-61,1.23456e-61,1.23456e-61,82.0889192677083,-11.739777649492439,34.23554204321736,1.23456e-61,1.23456e-61,1.23456e-61,-0.9157920784352351,0.13188727471409256,-0.3793818865520094,993.7892206138455,-409.5789710165094,-790.5326134103839,0.3012279537393131,-0.39926880731474934,-0.8659365677643391,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[993.7892206138455,-409.5789710165094,-790.5326134103839],[18.40198392546626,6.717975220211805,-42.08523450645862],[146.89406456659546,-21.354875362415783,60.29648357952128]],[[6.577752761156613,-4.095347136675326,-17.301769742075283],[139.8216122362169,-20.136329870284406,57.92339580132205],[1.23456e-61,1.23456e-61,1.23456e-61]],[[82.0889192677083,-11.739777649492439,34.23554204321736],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.9157920784352351,0.13188727471409256,-0.3793818865520094]]],"normal":[0.9157920784352351,-0.13188727471409256,0.3793818865520094]},{"op":"state"}]}}, +{"name":"adv_sing_221","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,2.0,2.0,0,0,-0.13545091507351925,-0.9118548579705825,-0.40366643211792885,0.018168105485842512,0.009531626597639857,0.016318237900603598,-0.0001456499605390076,0.00012663587657331605,8.819199514590964e-05,0.011538800293121028,-0.017248853278561543,0.04382426608879118,0.5157654782198083,0.09410645515102213,0.7174191788934003,1.23456e-61,1.23456e-61,1.23456e-61,0.11827299935866639,0.21843894173499426,-0.11368115044212498,1.23456e-61,1.23456e-61,1.23456e-61,0.6863840604625076,-0.5967790642781718,-0.41560999745226346,-0.13545091507351925,-0.9118548579705825,-0.40366643211792885,0.03222842879115416,0.023909492123144093,0.0188936635969274,0.31613642699734834,0.5779792453416661,-0.3030908871220693,0.04608970838363462,0.03950478024389538,0.01939225583318893,-0.0019193555674825713,0.0016687905293248217,0.0011621822365366426,1.23456e-61,1.23456e-61,1.23456e-61,-0.0027873702983190357,0.0024234890264012263,0.0016877707821511508,1.23456e-61,1.23456e-61,1.23456e-61,-0.6863840604625076,0.5967790642781718,0.41560999745226346,-0.13545091507351925,-0.9118548579705825,-0.40366643211792885,0.580685739991752,0.10569653294149753,0.8072374584311472,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,2.0,2.0,0,0,-0.13545091507351925,-0.9118548579705825,-0.40366643211792885,0.018168105485842512,0.009531626597639857,0.016318237900603598,-0.0001456499605390076,0.00012663587657331605,8.819199514590964e-05,0.011538800293121028,-0.017248853278561543,0.04382426608879118,0.5157654782198083,0.09410645515102213,0.7174191788934003,1.23456e-61,1.23456e-61,1.23456e-61,0.11827299935866639,0.21843894173499426,-0.11368115044212498,1.23456e-61,1.23456e-61,1.23456e-61,0.6863840604625076,-0.5967790642781718,-0.41560999745226346,-0.13545091507351925,-0.9118548579705825,-0.40366643211792885,0.03222842879115416,0.023909492123144093,0.0188936635969274,0.31613642699734834,0.5779792453416661,-0.3030908871220693,0.04608970838363462,0.03950478024389538,0.01939225583318893,-0.0019193555674825713,0.0016687905293248217,0.0011621822365366426,1.23456e-61,1.23456e-61,1.23456e-61,-0.0027873702983190357,0.0024234890264012263,0.0016877707821511508,1.23456e-61,1.23456e-61,1.23456e-61,-0.6863840604625076,0.5967790642781718,0.41560999745226346,-0.13545091507351925,-0.9118548579705825,-0.40366643211792885,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.13545091507351925,-0.9118548579705825,-0.40366643211792885],[0.03222842879115416,0.023909492123144093,0.0188936635969274],[0.31613642699734834,0.5779792453416661,-0.3030908871220693]],[[0.04608970838363462,0.03950478024389538,0.01939225583318893],[-0.0019193555674825713,0.0016687905293248217,0.0011621822365366426],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0027873702983190357,0.0024234890264012263,0.0016877707821511508],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6863840604625076,0.5967790642781718,0.41560999745226346]]],"normal":[-0.6863840604625076,0.5967790642781718,0.41560999745226346]},{"op":"state"}]}}, +{"name":"adv_sing_222","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,1.8558455359251758,0,0,1.023995166191401,2.0,0,0,1.8452120223627202,-1.9741577567654103,-0.8734513549512668,-0.9439535823843449,-0.15798475782000132,-5.309827918501484,0.0,0.0,0.0,-1.4522394364088074,1.0124425819378455,-6.308388730290668,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.20490070036779337,-0.5103192931728016,0.3454921236482975,1.23456e-61,1.23456e-61,1.23456e-61,0.948924567229515,0.26153067354765713,-0.17647626611526718,1.8452120223627202,-1.9741577567654103,-0.8734513549512668,-5.433343251338732,27.374903195275195,11.353050592466559,13302.991575292723,3666.403491947553,-2474.0241347368237,7.140988958291817,-6.5312831783832,28.718473478776282,7482.118442511122,2062.191434016662,-1391.3927444559615,1.23456e-61,1.23456e-61,1.23456e-61,12386.956072818788,3413.8312928086984,-2303.5926757106213,1.23456e-61,1.23456e-61,1.23456e-61,0.948924567229515,0.26153067354765713,-0.17647626611526718,1.8452120223627202,-1.9741577567654103,-0.8734513549512668,0.948924567229515,0.26153067354765713,-0.17647626611526718,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.8558455359251758,0,0,1.023995166191401,2.0,0,0,1.8452120223627202,-1.9741577567654103,-0.8734513549512668,-0.9439535823843449,-0.15798475782000132,-5.309827918501484,0.0,0.0,0.0,-1.4522394364088074,1.0124425819378455,-6.308388730290668,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.20490070036779337,-0.5103192931728016,0.3454921236482975,1.23456e-61,1.23456e-61,1.23456e-61,0.948924567229515,0.26153067354765713,-0.17647626611526718,1.8452120223627202,-1.9741577567654103,-0.8734513549512668,-5.433343251338732,27.374903195275195,11.353050592466559,13302.991575292723,3666.403491947553,-2474.0241347368237,7.140988958291817,-6.5312831783832,28.718473478776282,7482.118442511122,2062.191434016662,-1391.3927444559615,1.23456e-61,1.23456e-61,1.23456e-61,12386.956072818788,3413.8312928086984,-2303.5926757106213,1.23456e-61,1.23456e-61,1.23456e-61,0.948924567229515,0.26153067354765713,-0.17647626611526718,1.8452120223627202,-1.9741577567654103,-0.8734513549512668,-0.3155027033215773,0.7857811918854858,-0.5319830473575282,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.8558455359251758,0,0,1.023995166191401,2.0,0,0,1.8452120223627202,-1.9741577567654103,-0.8734513549512668,-0.9439535823843449,-0.15798475782000132,-5.309827918501484,0.0,0.0,0.0,-1.4522394364088074,1.0124425819378455,-6.308388730290668,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.20490070036779337,-0.5103192931728016,0.3454921236482975,1.23456e-61,1.23456e-61,1.23456e-61,0.948924567229515,0.26153067354765713,-0.17647626611526718,1.8452120223627202,-1.9741577567654103,-0.8734513549512668,-5.433343251338732,27.374903195275195,11.353050592466559,13302.991575292723,3666.403491947553,-2474.0241347368237,7.140988958291817,-6.5312831783832,28.718473478776282,7482.118442511122,2062.191434016662,-1391.3927444559615,1.23456e-61,1.23456e-61,1.23456e-61,12386.956072818788,3413.8312928086984,-2303.5926757106213,1.23456e-61,1.23456e-61,1.23456e-61,0.948924567229515,0.26153067354765713,-0.17647626611526718,1.8452120223627202,-1.9741577567654103,-0.8734513549512668,-0.003503860255918287,-0.9992692310852825,0.038062143522603065,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[1.8452120223627202,-1.9741577567654103,-0.8734513549512668],[-5.433343251338732,27.374903195275195,11.353050592466559],[13302.991575292723,3666.403491947553,-2474.0241347368237]],[[7.140988958291817,-6.5312831783832,28.718473478776282],[7482.118442511122,2062.191434016662,-1391.3927444559615],[1.23456e-61,1.23456e-61,1.23456e-61]],[[12386.956072818788,3413.8312928086984,-2303.5926757106213],[1.23456e-61,1.23456e-61,1.23456e-61],[0.948924567229515,0.26153067354765713,-0.17647626611526718]]],"normal":[-0.948924567229515,-0.26153067354765713,0.17647626611526718]},{"op":"state"}]}}, +{"name":"adv_sing_223","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,1.6388630994609474,0.0,0,0,-0.0008407089575087786,0.0004418245128816105,0.0002101124873510707,9.120146282152565,32.55138319514372,-7.200524494165782,-934.3885514614327,452.48588451140733,862.0595830841083,20.51575964911832,1.5093966874276692,21.444817282052753,-11226.87670672185,5436.713911997488,10357.828804725887,1.23456e-61,1.23456e-61,1.23456e-61,-183301.3464775288,88765.34546194623,169112.46939955888,1.23456e-61,1.23456e-61,1.23456e-61,0.69242996683115,-0.33531530915458735,-0.6388304818030961,-0.0008407089575087786,0.0004418245128816105,0.0002101124873510707,-0.9718678967746122,0.4889711983284172,-1.3100658279500248,-536.769002476648,259.93511637538177,495.2188912886003,0.7012976367421789,1.571377950583724,-0.06466126011072904,157.60788333335395,-76.32300543978458,-145.40780276536583,1.23456e-61,1.23456e-61,1.23456e-61,-46.95369546222165,22.752181675164664,43.339914939506855,1.23456e-61,1.23456e-61,1.23456e-61,0.69242996683115,-0.33531530915458735,-0.6388304818030961,-0.0008407089575087786,0.0004418245128816105,0.0002101124873510707,-0.011930678496451685,-0.7152994722499588,0.6987161969709481,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,1.6388630994609474,0.0,0,0,-0.0008407089575087786,0.0004418245128816105,0.0002101124873510707,9.120146282152565,32.55138319514372,-7.200524494165782,-934.3885514614327,452.48588451140733,862.0595830841083,20.51575964911832,1.5093966874276692,21.444817282052753,-11226.87670672185,5436.713911997488,10357.828804725887,1.23456e-61,1.23456e-61,1.23456e-61,-183301.3464775288,88765.34546194623,169112.46939955888,1.23456e-61,1.23456e-61,1.23456e-61,0.69242996683115,-0.33531530915458735,-0.6388304818030961,-0.0008407089575087786,0.0004418245128816105,0.0002101124873510707,-0.9718678967746122,0.4889711983284172,-1.3100658279500248,-536.769002476648,259.93511637538177,495.2188912886003,0.7012976367421789,1.571377950583724,-0.06466126011072904,157.60788333335395,-76.32300543978458,-145.40780276536583,1.23456e-61,1.23456e-61,1.23456e-61,-46.95369546222165,22.752181675164664,43.339914939506855,1.23456e-61,1.23456e-61,1.23456e-61,0.69242996683115,-0.33531530915458735,-0.6388304818030961,-0.0008407089575087786,0.0004418245128816105,0.0002101124873510707,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,1.6388630994609474,0.0,0,0,-0.0008407089575087786,0.0004418245128816105,0.0002101124873510707,9.120146282152565,32.55138319514372,-7.200524494165782,-934.3885514614327,452.48588451140733,862.0595830841083,20.51575964911832,1.5093966874276692,21.444817282052753,-11226.87670672185,5436.713911997488,10357.828804725887,1.23456e-61,1.23456e-61,1.23456e-61,-183301.3464775288,88765.34546194623,169112.46939955888,1.23456e-61,1.23456e-61,1.23456e-61,0.69242996683115,-0.33531530915458735,-0.6388304818030961,-0.0008407089575087786,0.0004418245128816105,0.0002101124873510707,-0.9718678967746122,0.4889711983284172,-1.3100658279500248,-536.769002476648,259.93511637538177,495.2188912886003,0.7012976367421789,1.571377950583724,-0.06466126011072904,157.60788333335395,-76.32300543978458,-145.40780276536583,1.23456e-61,1.23456e-61,1.23456e-61,-46.95369546222165,22.752181675164664,43.339914939506855,1.23456e-61,1.23456e-61,1.23456e-61,0.69242996683115,-0.33531530915458735,-0.6388304818030961,-0.0008407089575087786,0.0004418245128816105,0.0002101124873510707,-0.12728519010783318,0.8147755594494056,-0.5656317424819092,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.0008407089575087786,0.0004418245128816105,0.0002101124873510707],[-0.9718678967746122,0.4889711983284172,-1.3100658279500248],[-536.769002476648,259.93511637538177,495.2188912886003]],[[0.7012976367421789,1.571377950583724,-0.06466126011072904],[157.60788333335395,-76.32300543978458,-145.40780276536583],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-46.95369546222165,22.752181675164664,43.339914939506855],[1.23456e-61,1.23456e-61,1.23456e-61],[0.69242996683115,-0.33531530915458735,-0.6388304818030961]]],"normal":[0.69242996683115,-0.33531530915458735,-0.6388304818030961]},{"op":"state"}]}}, +{"name":"adv_sing_224","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.534643190564317,0,0,1.2715014463023053,1.5484969740486263,0,0,1.31221827316284,0.7457179701115515,-0.42138445021648296,-0.006464547738063372,-0.003789213596175534,0.0,0.35506745175468246,0.7789991396076289,-6.95600075122397e-06,0.0032358442078597002,-0.011689988390283774,0.0,-0.2126298549022482,0.09691659067189266,6.420310659809158e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.398737623316972,-0.8748091776875061,-2.5888441436242517e-05,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,1.31221827316284,0.7457179701115515,-0.42138445021648296,0.7093568257234977,-0.7328306486194532,0.0,-0.1039652113501123,-0.2280941544786208,1.0402278657565251,-1.114479489655686,-0.9529361895646122,0.0,0.0,-0.0,-0.09222278722451605,1.23456e-61,1.23456e-61,1.23456e-61,0.3482588346833814,0.7640613952037126,2.150151914245121,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,1.31221827316284,0.7457179701115515,-0.42138445021648296,-0.41474846055121173,-0.9099361046086698,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.534643190564317,0,0,1.2715014463023053,1.5484969740486263,0,0,1.31221827316284,0.7457179701115515,-0.42138445021648296,-0.006464547738063372,-0.003789213596175534,0.0,0.35506745175468246,0.7789991396076289,-6.95600075122397e-06,0.0032358442078597002,-0.011689988390283774,0.0,-0.2126298549022482,0.09691659067189266,6.420310659809158e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.398737623316972,-0.8748091776875061,-2.5888441436242517e-05,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,1.31221827316284,0.7457179701115515,-0.42138445021648296,0.7093568257234977,-0.7328306486194532,0.0,-0.1039652113501123,-0.2280941544786208,1.0402278657565251,-1.114479489655686,-0.9529361895646122,0.0,0.0,-0.0,-0.09222278722451605,1.23456e-61,1.23456e-61,1.23456e-61,0.3482588346833814,0.7640613952037126,2.150151914245121,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,1.31221827316284,0.7457179701115515,-0.42138445021648296,0.4951876440574581,-1.3246845651598815,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.534643190564317,0,0,1.2715014463023053,1.5484969740486263,0,0,1.31221827316284,0.7457179701115515,-0.42138445021648296,-0.006464547738063372,-0.003789213596175534,0.0,0.35506745175468246,0.7789991396076289,-6.95600075122397e-06,0.0032358442078597002,-0.011689988390283774,0.0,-0.2126298549022482,0.09691659067189266,6.420310659809158e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.398737623316972,-0.8748091776875061,-2.5888441436242517e-05,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,1.31221827316284,0.7457179701115515,-0.42138445021648296,0.7093568257234977,-0.7328306486194532,0.0,-0.1039652113501123,-0.2280941544786208,1.0402278657565251,-1.114479489655686,-0.9529361895646122,0.0,0.0,-0.0,-0.09222278722451605,1.23456e-61,1.23456e-61,1.23456e-61,0.3482588346833814,0.7640613952037126,2.150151914245121,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,1.31221827316284,0.7457179701115515,-0.42138445021648296,0.6292894919501203,0.7560200550567396,0.18007890402033136,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.31221827316284,0.7457179701115515,-0.42138445021648296],[0.7093568257234977,-0.7328306486194532,0.0],[-0.1039652113501123,-0.2280941544786208,1.0402278657565251]],[[-1.114479489655686,-0.9529361895646122,0.0],[0.0,-0.0,-0.09222278722451605],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.3482588346833814,0.7640613952037126,2.150151914245121],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_225","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.7431836255397171,2.0,0,0,2.0,0.3017575479356651,0,0,-0.2742708702143013,-0.3316648837370748,-0.9383306423752986,-0.026772751341598212,-0.056815883212981096,-0.05755533963292176,0.3788894997189776,0.1458734050240195,-0.3202455380021816,-0.04082683396396037,-0.012537651823127997,0.03136780092071603,-0.11274951360656094,-0.2674170770645535,-0.2536355001562125,1.23456e-61,1.23456e-61,1.23456e-61,-0.2760796813970423,-0.07896996259317303,0.20637808600027,1.23456e-61,1.23456e-61,1.23456e-61,0.5546409236011483,-0.7065606613486498,0.4394831938782462,-0.2742708702143013,-0.3316648837370748,-0.9383306423752986,-8.015790983700638,-5.886255742725272,0.6527871102750291,0.04154225684803208,0.012756731297385688,-0.03191685567401387,6.554023395361424,0.5519365248963815,-7.384020591587312,0.12673361485731677,0.26896130518318073,0.2724537646523,1.23456e-61,1.23456e-61,1.23456e-61,0.6889301960757911,0.21150575213817474,-0.5292548552035287,1.23456e-61,1.23456e-61,1.23456e-61,0.5546409236011483,-0.7065606613486498,0.4394831938782462,-0.2742708702143013,-0.3316648837370748,-0.9383306423752986,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.7431836255397171,2.0,0,0,2.0,0.3017575479356651,0,0,-0.2742708702143013,-0.3316648837370748,-0.9383306423752986,-0.026772751341598212,-0.056815883212981096,-0.05755533963292176,0.3788894997189776,0.1458734050240195,-0.3202455380021816,-0.04082683396396037,-0.012537651823127997,0.03136780092071603,-0.11274951360656094,-0.2674170770645535,-0.2536355001562125,1.23456e-61,1.23456e-61,1.23456e-61,-0.2760796813970423,-0.07896996259317303,0.20637808600027,1.23456e-61,1.23456e-61,1.23456e-61,0.5546409236011483,-0.7065606613486498,0.4394831938782462,-0.2742708702143013,-0.3316648837370748,-0.9383306423752986,-8.015790983700638,-5.886255742725272,0.6527871102750291,0.04154225684803208,0.012756731297385688,-0.03191685567401387,6.554023395361424,0.5519365248963815,-7.384020591587312,0.12673361485731677,0.26896130518318073,0.2724537646523,1.23456e-61,1.23456e-61,1.23456e-61,0.6889301960757911,0.21150575213817474,-0.5292548552035287,1.23456e-61,1.23456e-61,1.23456e-61,0.5546409236011483,-0.7065606613486498,0.4394831938782462,-0.2742708702143013,-0.3316648837370748,-0.9383306423752986,0.7704599851584002,0.23660318716105874,-0.5919546799333094,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.2742708702143013,-0.3316648837370748,-0.9383306423752986],[-8.015790983700638,-5.886255742725272,0.6527871102750291],[0.04154225684803208,0.012756731297385688,-0.03191685567401387]],[[6.554023395361424,0.5519365248963815,-7.384020591587312],[0.12673361485731677,0.26896130518318073,0.2724537646523],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.6889301960757911,0.21150575213817474,-0.5292548552035287],[1.23456e-61,1.23456e-61,1.23456e-61],[0.5546409236011483,-0.7065606613486498,0.4394831938782462]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_226","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.9255289526083799,2.0,0,0,2.0,0.4990934041398367,0,0,-3.7794251263168825e-05,-0.0006908989030201069,-0.0003428833473886033,-0.030801560442823728,0.37726399760763285,0.4278640365367511,-1669.2318787887525,-2060.1568477015558,1696.5691552002768,0.16815370317011893,-0.03524932202994057,0.12259856210587924,-287.1313549124443,-354.49361531108246,291.9001691897238,1.23456e-61,1.23456e-61,1.23456e-61,-49.40092117871736,-60.99059140957077,50.22139520287841,1.23456e-61,1.23456e-61,1.23456e-61,-0.5301672012389723,-0.6545467245953366,0.5389724705882034,-3.7794251263168825e-05,-0.0006908989030201069,-0.0003428833473886033,-2.5187991996398345,-4.446632958473475,-7.8777933796298605,-0.0,0.0,0.0,-4.62390092647787,3.3879508703493295,-0.43391542329566457,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.7294167250495334,0.5344465782836991,-0.06844981586789636,1.23456e-61,1.23456e-61,1.23456e-61,0.5301672012389723,0.6545467245953366,-0.5389724705882034,-3.7794251263168825e-05,-0.0006908989030201069,-0.0003428833473886033,-0.8043458133724217,0.589347423702846,-0.0754813002343986,0,0,0,0,0,0,0],[1,1,1,1,1,0.9255289526083799,2.0,0,0,2.0,0.4990934041398367,0,0,-3.7794251263168825e-05,-0.0006908989030201069,-0.0003428833473886033,-0.030801560442823728,0.37726399760763285,0.4278640365367511,-1669.2318787887525,-2060.1568477015558,1696.5691552002768,0.16815370317011893,-0.03524932202994057,0.12259856210587924,-287.1313549124443,-354.49361531108246,291.9001691897238,1.23456e-61,1.23456e-61,1.23456e-61,-49.40092117871736,-60.99059140957077,50.22139520287841,1.23456e-61,1.23456e-61,1.23456e-61,-0.5301672012389723,-0.6545467245953366,0.5389724705882034,-3.7794251263168825e-05,-0.0006908989030201069,-0.0003428833473886033,-2.5187991996398345,-4.446632958473475,-7.8777933796298605,-0.0,0.0,0.0,-4.62390092647787,3.3879508703493295,-0.43391542329566457,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.7294167250495334,0.5344465782836991,-0.06844981586789636,1.23456e-61,1.23456e-61,1.23456e-61,0.5301672012389723,0.6545467245953366,-0.5389724705882034,-3.7794251263168825e-05,-0.0006908989030201069,-0.0003428833473886033,0.8043458133724217,-0.589347423702846,0.0754813002343986,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-3.7794251263168825e-05,-0.0006908989030201069,-0.0003428833473886033],[-2.5187991996398345,-4.446632958473475,-7.8777933796298605],[-0.0,0.0,0.0]],[[-4.62390092647787,3.3879508703493295,-0.43391542329566457],[-0.0,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.7294167250495334,0.5344465782836991,-0.06844981586789636],[1.23456e-61,1.23456e-61,1.23456e-61],[0.5301672012389723,0.6545467245953366,-0.5389724705882034]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_227","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.8368252179216786,1.7567716598970418,0,0,0.0,2.0,0,0,-1.1901398807420693,0.6255509938845227,-0.825419773789609,0.12531268376222657,-0.09297803646232772,0.3079082361838542,6.730401140764997e-09,2.1957482471031257e-10,-2.6728385180189707e-09,0.0981096101681493,0.07988999480009741,0.25361010746824664,-0.3377248047698711,0.02262837283749152,-0.8485565897401641,1.23456e-61,1.23456e-61,1.23456e-61,7.080858926212897e-09,2.3100827499041588e-10,-2.812015522226228e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.9289669653939548,0.030306924404934345,-0.3689198660140986,-1.1901398807420693,0.6255509938845227,-0.825419773789609,0.29712370282507716,-0.20687396116846746,0.7311842378453981,-0.011313709006520444,0.5946317258308201,0.02035983076136751,0.0689630139355355,0.74091519983532,0.2345203679779199,0.18118807560907904,-0.012140006673227493,0.45524652887879424,1.23456e-61,1.23456e-61,1.23456e-61,-0.014440819411068135,0.7589926433973943,0.025987414037742497,1.23456e-61,1.23456e-61,1.23456e-61,0.9289669653939548,0.030306924404934345,-0.3689198660140986,-1.1901398807420693,0.6255509938845227,-0.825419773789609,0.01901222514559241,-0.9992336986249555,-0.0342133135972664,0,0,0,0,0,0,0],[1,1,1,1,1,1.8368252179216786,1.7567716598970418,0,0,0.0,2.0,0,0,-1.1901398807420693,0.6255509938845227,-0.825419773789609,0.12531268376222657,-0.09297803646232772,0.3079082361838542,6.730401140764997e-09,2.1957482471031257e-10,-2.6728385180189707e-09,0.0981096101681493,0.07988999480009741,0.25361010746824664,-0.3377248047698711,0.02262837283749152,-0.8485565897401641,1.23456e-61,1.23456e-61,1.23456e-61,7.080858926212897e-09,2.3100827499041588e-10,-2.812015522226228e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.9289669653939548,0.030306924404934345,-0.3689198660140986,-1.1901398807420693,0.6255509938845227,-0.825419773789609,0.29712370282507716,-0.20687396116846746,0.7311842378453981,-0.011313709006520444,0.5946317258308201,0.02035983076136751,0.0689630139355355,0.74091519983532,0.2345203679779199,0.18118807560907904,-0.012140006673227493,0.45524652887879424,1.23456e-61,1.23456e-61,1.23456e-61,-0.014440819411068135,0.7589926433973943,0.025987414037742497,1.23456e-61,1.23456e-61,1.23456e-61,0.9289669653939548,0.030306924404934345,-0.3689198660140986,-1.1901398807420693,0.6255509938845227,-0.825419773789609,0.5003809316858537,0.7821078966942252,0.3713841153492329,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-1.1901398807420693,0.6255509938845227,-0.825419773789609],[0.29712370282507716,-0.20687396116846746,0.7311842378453981],[-0.011313709006520444,0.5946317258308201,0.02035983076136751]],[[0.0689630139355355,0.74091519983532,0.2345203679779199],[0.18118807560907904,-0.012140006673227493,0.45524652887879424],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.014440819411068135,0.7589926433973943,0.025987414037742497],[1.23456e-61,1.23456e-61,1.23456e-61],[0.9289669653939548,0.030306924404934345,-0.3689198660140986]]],"normal":[0.9289669653939548,0.030306924404934345,-0.3689198660140986]},{"op":"state"}]}}, +{"name":"adv_sing_228","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,2.0,1.3770145648020602,0,0,1.4569857112514546,1.388225068033663,-1.9508785792252588,3.8226310929005507,26.127952138867023,8.47013528588918,-150.9312590888426,-137.6202543299328,493.17362542765306,28.217439282099075,-9.812220295622215,5.878834572711658,392.51439380508975,359.0524287054312,-1284.7188423139185,1.23456e-61,1.23456e-61,1.23456e-61,-1803.730737725776,-1649.3357921722645,5902.5258189816805,1.23456e-61,1.23456e-61,1.23456e-61,0.2822830285271572,0.2582183190594782,-0.923926182932183,1.4569857112514546,1.388225068033663,-1.9508785792252588,1.3793466902990656,1.6565394215109248,0.8843942309456331,-1.532291095068253e-09,-1.4016628379777572e-09,5.01526382933498e-09,-0.9009002835654537,0.7806241921707645,-0.05707966144975462,0.35718663267706907,0.42896665648035737,0.22901696833150947,1.23456e-61,1.23456e-61,1.23456e-61,-0.45254412771051844,0.3921265211707654,-0.028672502465801997,1.23456e-61,1.23456e-61,1.23456e-61,-0.2822830285271572,-0.2582183190594782,0.923926182932183,1.4569857112514546,1.388225068033663,-1.9508785792252588,-0.5919957432857993,-0.7109628732330979,-0.37956927274956287,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,2.0,1.3770145648020602,0,0,1.4569857112514546,1.388225068033663,-1.9508785792252588,3.8226310929005507,26.127952138867023,8.47013528588918,-150.9312590888426,-137.6202543299328,493.17362542765306,28.217439282099075,-9.812220295622215,5.878834572711658,392.51439380508975,359.0524287054312,-1284.7188423139185,1.23456e-61,1.23456e-61,1.23456e-61,-1803.730737725776,-1649.3357921722645,5902.5258189816805,1.23456e-61,1.23456e-61,1.23456e-61,0.2822830285271572,0.2582183190594782,-0.923926182932183,1.4569857112514546,1.388225068033663,-1.9508785792252588,1.3793466902990656,1.6565394215109248,0.8843942309456331,-1.532291095068253e-09,-1.4016628379777572e-09,5.01526382933498e-09,-0.9009002835654537,0.7806241921707645,-0.05707966144975462,0.35718663267706907,0.42896665648035737,0.22901696833150947,1.23456e-61,1.23456e-61,1.23456e-61,-0.45254412771051844,0.3921265211707654,-0.028672502465801997,1.23456e-61,1.23456e-61,1.23456e-61,-0.2822830285271572,-0.2582183190594782,0.923926182932183,1.4569857112514546,1.388225068033663,-1.9508785792252588,0.2822830285271572,0.2582183190594782,-0.923926182932183,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,2.0,1.3770145648020602,0,0,1.4569857112514546,1.388225068033663,-1.9508785792252588,3.8226310929005507,26.127952138867023,8.47013528588918,-150.9312590888426,-137.6202543299328,493.17362542765306,28.217439282099075,-9.812220295622215,5.878834572711658,392.51439380508975,359.0524287054312,-1284.7188423139185,1.23456e-61,1.23456e-61,1.23456e-61,-1803.730737725776,-1649.3357921722645,5902.5258189816805,1.23456e-61,1.23456e-61,1.23456e-61,0.2822830285271572,0.2582183190594782,-0.923926182932183,1.4569857112514546,1.388225068033663,-1.9508785792252588,1.3793466902990656,1.6565394215109248,0.8843942309456331,-1.532291095068253e-09,-1.4016628379777572e-09,5.01526382933498e-09,-0.9009002835654537,0.7806241921707645,-0.05707966144975462,0.35718663267706907,0.42896665648035737,0.22901696833150947,1.23456e-61,1.23456e-61,1.23456e-61,-0.45254412771051844,0.3921265211707654,-0.028672502465801997,1.23456e-61,1.23456e-61,1.23456e-61,-0.2822830285271572,-0.2582183190594782,0.923926182932183,1.4569857112514546,1.388225068033663,-1.9508785792252588,0.7548889532487744,-0.6541063312537462,0.04782860730498274,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[1.4569857112514546,1.388225068033663,-1.9508785792252588],[1.3793466902990656,1.6565394215109248,0.8843942309456331],[-1.532291095068253e-09,-1.4016628379777572e-09,5.01526382933498e-09]],[[-0.9009002835654537,0.7806241921707645,-0.05707966144975462],[0.35718663267706907,0.42896665648035737,0.22901696833150947],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.45254412771051844,0.3921265211707654,-0.028672502465801997],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.2822830285271572,-0.2582183190594782,0.923926182932183]]],"normal":[0.2822830285271572,0.2582183190594782,-0.923926182932183]},{"op":"state"}]}}, +{"name":"adv_sing_229","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,1.6057173328587622,0.0,0,0,-4.9589221619792846e-05,0.0005058057488485173,-2.147806442782407e-05,-0.000553164514510929,-0.0037747732446424013,0.0025745824220310856,0.01034721554127597,-0.00982542325523385,-0.012182570692365047,0.018241157755163263,-0.006700794014340226,0.02089734053516902,0.014094619457389237,-0.013383852036122397,-0.016594676822635702,1.23456e-61,1.23456e-61,1.23456e-61,-0.014229636051667514,-0.42790099853272173,0.28043257449236714,1.23456e-61,1.23456e-61,1.23456e-61,-0.5514936826793138,0.5236828046440485,0.6493158230668277,-4.9589221619792846e-05,0.0005058057488485173,-2.147806442782407e-05,0.005056158476600545,0.01314439228263136,-0.006306719491445154,0.0004671546552629397,-0.00044359684934573457,-0.0005500170156218068,-0.0040688503713313205,-0.0018248880295385675,-0.00198406191304829,0.5420880886760778,0.18571349749850272,0.3108618166800022,1.23456e-61,1.23456e-61,1.23456e-61,8.765656221118513e-05,-8.323619251845836e-05,-0.00010320479567933802,1.23456e-61,1.23456e-61,1.23456e-61,-0.5514936826793138,0.5236828046440485,0.6493158230668277,-4.9589221619792846e-05,0.0005058057488485173,-2.147806442782407e-05,0.6500667085360609,-0.6273671928532539,0.428746638219497,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,1.6057173328587622,0.0,0,0,-4.9589221619792846e-05,0.0005058057488485173,-2.147806442782407e-05,-0.000553164514510929,-0.0037747732446424013,0.0025745824220310856,0.01034721554127597,-0.00982542325523385,-0.012182570692365047,0.018241157755163263,-0.006700794014340226,0.02089734053516902,0.014094619457389237,-0.013383852036122397,-0.016594676822635702,1.23456e-61,1.23456e-61,1.23456e-61,-0.014229636051667514,-0.42790099853272173,0.28043257449236714,1.23456e-61,1.23456e-61,1.23456e-61,-0.5514936826793138,0.5236828046440485,0.6493158230668277,-4.9589221619792846e-05,0.0005058057488485173,-2.147806442782407e-05,0.005056158476600545,0.01314439228263136,-0.006306719491445154,0.0004671546552629397,-0.00044359684934573457,-0.0005500170156218068,-0.0040688503713313205,-0.0018248880295385675,-0.00198406191304829,0.5420880886760778,0.18571349749850272,0.3108618166800022,1.23456e-61,1.23456e-61,1.23456e-61,8.765656221118513e-05,-8.323619251845836e-05,-0.00010320479567933802,1.23456e-61,1.23456e-61,1.23456e-61,-0.5514936826793138,0.5236828046440485,0.6493158230668277,-4.9589221619792846e-05,0.0005058057488485173,-2.147806442782407e-05,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-4.9589221619792846e-05,0.0005058057488485173,-2.147806442782407e-05],[0.005056158476600545,0.01314439228263136,-0.006306719491445154],[0.0004671546552629397,-0.00044359684934573457,-0.0005500170156218068]],[[-0.0040688503713313205,-0.0018248880295385675,-0.00198406191304829],[0.5420880886760778,0.18571349749850272,0.3108618166800022],[1.23456e-61,1.23456e-61,1.23456e-61]],[[8.765656221118513e-05,-8.323619251845836e-05,-0.00010320479567933802],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.5514936826793138,0.5236828046440485,0.6493158230668277]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_230","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.6923373207338221,0,0,0.0,0.0,0,0,0.6355947612830024,-0.7857496819018801,-0.22768747165007341,-0.6421740807771581,-3.1671300190374647,6.414827307296857,0.05011005560577902,-0.11765007657165488,-0.053069816855173695,1.3696951124284897,-3.2158163213867206,-1.4505964481414786,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1.3289282443207446e-11,-4.138460776519311e-12,-3.37360229019127e-12,1.23456e-61,1.23456e-61,1.23456e-61,-0.9279078653314689,-0.2889629535160375,-0.2355576467688648,0.6355947612830024,-0.7857496819018801,-0.22768747165007341,-3.163202103272864,11.78615722142692,-1.9978238724286843,10.610967899695014,3.304397708563912,2.693688373359404,-3.065878254878274,6.756373551013096,3.7889276902466285,15.805845477708921,4.922152255305363,4.012454150920914,1.23456e-61,1.23456e-61,1.23456e-61,17.602446964978956,6.025418487521361,4.73701278500373,1.23456e-61,1.23456e-61,1.23456e-61,-0.9279078653314689,-0.2889629535160375,-0.2355576467688648,0.6355947612830024,-0.7857496819018801,-0.22768747165007341,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.6923373207338221,0,0,0.0,0.0,0,0,0.6355947612830024,-0.7857496819018801,-0.22768747165007341,-0.6421740807771581,-3.1671300190374647,6.414827307296857,0.05011005560577902,-0.11765007657165488,-0.053069816855173695,1.3696951124284897,-3.2158163213867206,-1.4505964481414786,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1.3289282443207446e-11,-4.138460776519311e-12,-3.37360229019127e-12,1.23456e-61,1.23456e-61,1.23456e-61,-0.9279078653314689,-0.2889629535160375,-0.2355576467688648,0.6355947612830024,-0.7857496819018801,-0.22768747165007341,-3.163202103272864,11.78615722142692,-1.9978238724286843,10.610967899695014,3.304397708563912,2.693688373359404,-3.065878254878274,6.756373551013096,3.7889276902466285,15.805845477708921,4.922152255305363,4.012454150920914,1.23456e-61,1.23456e-61,1.23456e-61,17.602446964978956,6.025418487521361,4.73701278500373,1.23456e-61,1.23456e-61,1.23456e-61,-0.9279078653314689,-0.2889629535160375,-0.2355576467688648,0.6355947612830024,-0.7857496819018801,-0.22768747165007341,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.6923373207338221,0,0,0.0,0.0,0,0,0.6355947612830024,-0.7857496819018801,-0.22768747165007341,-0.6421740807771581,-3.1671300190374647,6.414827307296857,0.05011005560577902,-0.11765007657165488,-0.053069816855173695,1.3696951124284897,-3.2158163213867206,-1.4505964481414786,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1.3289282443207446e-11,-4.138460776519311e-12,-3.37360229019127e-12,1.23456e-61,1.23456e-61,1.23456e-61,-0.9279078653314689,-0.2889629535160375,-0.2355576467688648,0.6355947612830024,-0.7857496819018801,-0.22768747165007341,-3.163202103272864,11.78615722142692,-1.9978238724286843,10.610967899695014,3.304397708563912,2.693688373359404,-3.065878254878274,6.756373551013096,3.7889276902466285,15.805845477708921,4.922152255305363,4.012454150920914,1.23456e-61,1.23456e-61,1.23456e-61,17.602446964978956,6.025418487521361,4.73701278500373,1.23456e-61,1.23456e-61,1.23456e-61,-0.9279078653314689,-0.2889629535160375,-0.2355576467688648,0.6355947612830024,-0.7857496819018801,-0.22768747165007341,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.6355947612830024,-0.7857496819018801,-0.22768747165007341],[-3.163202103272864,11.78615722142692,-1.9978238724286843],[10.610967899695014,3.304397708563912,2.693688373359404]],[[-3.065878254878274,6.756373551013096,3.7889276902466285],[15.805845477708921,4.922152255305363,4.012454150920914],[1.23456e-61,1.23456e-61,1.23456e-61]],[[17.602446964978956,6.025418487521361,4.73701278500373],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.9279078653314689,-0.2889629535160375,-0.2355576467688648]]],"normal":[-0.9279078653314689,-0.2889629535160375,-0.2355576467688648]},{"op":"state"}]}}, +{"name":"adv_sing_231","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.5510385973851493,1.2582687367696854,0,0,0.9820667133138758,0.0,0,0,1.6195732712247448,1.7212825866576056,0.10772849923202754,0.07778464323262411,0.06191329731593356,-0.012939218444349546,-52.38560048202467,60.322088474383364,-26.281018985116802,-0.009080474254570153,0.0291957914906059,0.08511227114633355,-21.07486906608251,23.87071766310774,-10.436735968060017,1.23456e-61,1.23456e-61,1.23456e-61,-8.31599345642927,9.577436364412229,-4.164542024748863,1.23456e-61,1.23456e-61,1.23456e-61,-0.6228574824315454,0.7172212175950842,-0.31247764977748776,1.6195732712247448,1.7212825866576056,0.10772849923202754,100.30256118818919,79.83661085674784,-16.68499970952342,2924.7950465225586,-3368.1082505193103,1466.3522219101328,-7.743935015712765,24.89851363454522,72.58474373904073,-310.1283623958732,357.11322086073477,-155.58644560628534,1.23456e-61,1.23456e-61,1.23456e-61,626.307886151344,-721.1943620573577,314.2086622089947,1.23456e-61,1.23456e-61,1.23456e-61,-0.6228574824315454,0.7172212175950842,-0.31247764977748776,1.6195732712247448,1.7212825866576056,0.10772849923202754,0.5454264430642021,-0.8364834707214633,-0.05296601189543639,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.6195732712247448,1.7212825866576056,0.10772849923202754],[100.30256118818919,79.83661085674784,-16.68499970952342],[2924.7950465225586,-3368.1082505193103,1466.3522219101328]],[[-7.743935015712765,24.89851363454522,72.58474373904073],[-310.1283623958732,357.11322086073477,-155.58644560628534],[1.23456e-61,1.23456e-61,1.23456e-61]],[[626.307886151344,-721.1943620573577,314.2086622089947],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6228574824315454,0.7172212175950842,-0.31247764977748776]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_232","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,2.0,0.0,0,0,0.0009074018515054669,0.000669806239836992,0.0007251980163607612,0.0,-11.614905642681565,-4.26946543836103,-0.0,0.0,0.0,0.0,-14.291902236924102,0.7926589741328867,0.0,-0.13102421182590038,0.37054738977940094,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0009074018515054669,0.000669806239836992,0.0007251980163607612,0.0,-0.017357322457799314,0.04908795436100854,16.311920509204164,0.0,0.0,0.0,0.03547950780870847,0.012545425159719552,15.64971005413125,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-8.521389190451126,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,0.0009074018515054669,0.000669806239836992,0.0007251980163607612,-0.0,0.33336935134628914,-0.9427963065174546,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,0.0,0,0,0.0009074018515054669,0.000669806239836992,0.0007251980163607612,0.0,-11.614905642681565,-4.26946543836103,-0.0,0.0,0.0,0.0,-14.291902236924102,0.7926589741328867,0.0,-0.13102421182590038,0.37054738977940094,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0009074018515054669,0.000669806239836992,0.0007251980163607612,0.0,-0.017357322457799314,0.04908795436100854,16.311920509204164,0.0,0.0,0.0,0.03547950780870847,0.012545425159719552,15.64971005413125,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-8.521389190451126,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,0.0009074018515054669,0.000669806239836992,0.0007251980163607612,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0009074018515054669,0.000669806239836992,0.0007251980163607612],[0.0,-0.017357322457799314,0.04908795436100854],[16.311920509204164,0.0,0.0]],[[0.0,0.03547950780870847,0.012545425159719552],[15.64971005413125,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-8.521389190451126,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[-1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_233","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.0052383686029156,2.0,0,0,0.0,0.0,0,0,-49.89065542000981,-712.85774988191,-810.0156323351317,0.010093068872885955,0.012230377108190818,0.001383431929852092,0.055072042035947524,-0.04341008475593563,-0.01801621448648742,-0.004203141161813529,-0.007861363876680467,0.006093783215107507,-1.9716786982550238,0.8917596645885592,-0.13801833778303518,1.23456e-61,1.23456e-61,1.23456e-61,2.294478061422408,-1.8086034843590286,-0.7506133304834286,1.23456e-61,1.23456e-61,1.23456e-61,-0.7606498322927293,0.5995759820901925,0.24883824933804663,-49.89065542000981,-712.85774988191,-810.0156323351317,-41.42319672833632,-36.29283336307865,-39.17499204349086,0.0,0.0,0.0,43.144233116106875,43.723852317348566,26.530816736520478,0.0,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.21338758662953072,-0.41717935109997273,0.3529099219835475,1.23456e-61,1.23456e-61,1.23456e-61,0.7606498322927293,-0.5995759820901925,-0.24883824933804663,-49.89065542000981,-712.85774988191,-810.0156323351317,0.6710948296133739,0.5759838420486004,-0.4667701183292795,0,0,0,0,0,0,0],[1,1,1,1,1,1.0052383686029156,2.0,0,0,0.0,0.0,0,0,-49.89065542000981,-712.85774988191,-810.0156323351317,0.010093068872885955,0.012230377108190818,0.001383431929852092,0.055072042035947524,-0.04341008475593563,-0.01801621448648742,-0.004203141161813529,-0.007861363876680467,0.006093783215107507,-1.9716786982550238,0.8917596645885592,-0.13801833778303518,1.23456e-61,1.23456e-61,1.23456e-61,2.294478061422408,-1.8086034843590286,-0.7506133304834286,1.23456e-61,1.23456e-61,1.23456e-61,-0.7606498322927293,0.5995759820901925,0.24883824933804663,-49.89065542000981,-712.85774988191,-810.0156323351317,-41.42319672833632,-36.29283336307865,-39.17499204349086,0.0,0.0,0.0,43.144233116106875,43.723852317348566,26.530816736520478,0.0,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.21338758662953072,-0.41717935109997273,0.3529099219835475,1.23456e-61,1.23456e-61,1.23456e-61,0.7606498322927293,-0.5995759820901925,-0.24883824933804663,-49.89065542000981,-712.85774988191,-810.0156323351317,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-49.89065542000981,-712.85774988191,-810.0156323351317],[-41.42319672833632,-36.29283336307865,-39.17499204349086],[0.0,0.0,0.0]],[[43.144233116106875,43.723852317348566,26.530816736520478],[0.0,-0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.21338758662953072,-0.41717935109997273,0.3529099219835475],[1.23456e-61,1.23456e-61,1.23456e-61],[0.7606498322927293,-0.5995759820901925,-0.24883824933804663]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_234","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,2.0,1.659886641582339,0,0,-0.0005136432749261357,-3.123397847018916e-05,-0.00045223647190421667,-0.04840309607179186,-0.01890631519679683,-0.02307710626309585,0.0,0.0,-0.0,0.02556808791630652,0.007125849322641861,-0.05946578195197235,0.20013993790770057,0.07817493211463188,0.0954205616875208,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.3480551116073375,0.9367276816418008,-0.03740173431782153,-0.0005136432749261357,-3.123397847018916e-05,-0.00045223647190421667,0.10544029525996396,0.04332227201664904,0.10379565990189772,0.00014373414472799125,-0.0003868345778404017,1.5445560528300843e-05,-0.07996799500672408,-0.024879717821231318,0.12105719467502667,-0.7472971060339888,-0.29416110715800586,-0.35655977499787433,1.23456e-61,1.23456e-61,1.23456e-61,0.3569518634053853,0.08831378658775714,-0.8210415728408123,1.23456e-61,1.23456e-61,1.23456e-61,-0.3480551116073375,0.9367276816418008,-0.03740173431782153,-0.0005136432749261357,-3.123397847018916e-05,-0.00045223647190421667,0.8512940655232396,0.332516620508593,0.40587080591052405,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,1.659886641582339,0,0,-0.0005136432749261357,-3.123397847018916e-05,-0.00045223647190421667,-0.04840309607179186,-0.01890631519679683,-0.02307710626309585,0.0,0.0,-0.0,0.02556808791630652,0.007125849322641861,-0.05946578195197235,0.20013993790770057,0.07817493211463188,0.0954205616875208,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.3480551116073375,0.9367276816418008,-0.03740173431782153,-0.0005136432749261357,-3.123397847018916e-05,-0.00045223647190421667,0.10544029525996396,0.04332227201664904,0.10379565990189772,0.00014373414472799125,-0.0003868345778404017,1.5445560528300843e-05,-0.07996799500672408,-0.024879717821231318,0.12105719467502667,-0.7472971060339888,-0.29416110715800586,-0.35655977499787433,1.23456e-61,1.23456e-61,1.23456e-61,0.3569518634053853,0.08831378658775714,-0.8210415728408123,1.23456e-61,1.23456e-61,1.23456e-61,-0.3480551116073375,0.9367276816418008,-0.03740173431782153,-0.0005136432749261357,-3.123397847018916e-05,-0.00045223647190421667,-0.4586669481600628,-0.22309108632428387,-1.3190356317659446,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.0005136432749261357,-3.123397847018916e-05,-0.00045223647190421667],[0.10544029525996396,0.04332227201664904,0.10379565990189772],[0.00014373414472799125,-0.0003868345778404017,1.5445560528300843e-05]],[[-0.07996799500672408,-0.024879717821231318,0.12105719467502667],[-0.7472971060339888,-0.29416110715800586,-0.35655977499787433],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.3569518634053853,0.08831378658775714,-0.8210415728408123],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.3480551116073375,0.9367276816418008,-0.03740173431782153]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_235","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.6816454717295244,2.0,0,0,2.0,0.0,0,0,0.06856375991490493,-1.6705171152383178,0.09376255234135744,0.4864913711913714,1.385140003118516,1.2594525192664503,17063.423781333277,-25481.652101178723,21433.91438437483,0.14731552659122893,1.127491941706168,1.2231563087843544,14474.581445402157,-21616.217547366687,18182.288189405303,1.23456e-61,1.23456e-61,1.23456e-61,12719.44072635263,-18995.105237326963,15977.562996687866,1.23456e-61,1.23456e-61,1.23456e-61,0.456049006063573,-0.6810597297417501,0.5728673045239374,0.06856375991490493,-1.6705171152383178,0.09376255234135744,-0.5650552054672839,0.5374046553834304,1.0887295002812278,-7989.494443359453,11931.269977722264,-10035.941390505463,1.8587078414262161,1.452841548018525,0.24754425202173821,2179.5832537637402,-3254.971202702389,2737.8899350020533,1.23456e-61,1.23456e-61,1.23456e-61,-588.041995595819,878.1769443029101,-738.6706877657231,1.23456e-61,1.23456e-61,1.23456e-61,-0.456049006063573,0.6810597297417501,-0.5728673045239374,0.06856375991490493,-1.6705171152383178,0.09376255234135744,0.4219388391074992,-0.4012915804145777,-0.812977664847557,0,0,0,0,0,0,0],[1,1,1,1,1,0.6816454717295244,2.0,0,0,2.0,0.0,0,0,0.06856375991490493,-1.6705171152383178,0.09376255234135744,0.4864913711913714,1.385140003118516,1.2594525192664503,17063.423781333277,-25481.652101178723,21433.91438437483,0.14731552659122893,1.127491941706168,1.2231563087843544,14474.581445402157,-21616.217547366687,18182.288189405303,1.23456e-61,1.23456e-61,1.23456e-61,12719.44072635263,-18995.105237326963,15977.562996687866,1.23456e-61,1.23456e-61,1.23456e-61,0.456049006063573,-0.6810597297417501,0.5728673045239374,0.06856375991490493,-1.6705171152383178,0.09376255234135744,-0.5650552054672839,0.5374046553834304,1.0887295002812278,-7989.494443359453,11931.269977722264,-10035.941390505463,1.8587078414262161,1.452841548018525,0.24754425202173821,2179.5832537637402,-3254.971202702389,2737.8899350020533,1.23456e-61,1.23456e-61,1.23456e-61,-588.041995595819,878.1769443029101,-738.6706877657231,1.23456e-61,1.23456e-61,1.23456e-61,-0.456049006063573,0.6810597297417501,-0.5728673045239374,0.06856375991490493,-1.6705171152383178,0.09376255234135744,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.6816454717295244,2.0,0,0,2.0,0.0,0,0,0.06856375991490493,-1.6705171152383178,0.09376255234135744,0.4864913711913714,1.385140003118516,1.2594525192664503,17063.423781333277,-25481.652101178723,21433.91438437483,0.14731552659122893,1.127491941706168,1.2231563087843544,14474.581445402157,-21616.217547366687,18182.288189405303,1.23456e-61,1.23456e-61,1.23456e-61,12719.44072635263,-18995.105237326963,15977.562996687866,1.23456e-61,1.23456e-61,1.23456e-61,0.456049006063573,-0.6810597297417501,0.5728673045239374,0.06856375991490493,-1.6705171152383178,0.09376255234135744,-0.5650552054672839,0.5374046553834304,1.0887295002812278,-7989.494443359453,11931.269977722264,-10035.941390505463,1.8587078414262161,1.452841548018525,0.24754425202173821,2179.5832537637402,-3254.971202702389,2737.8899350020533,1.23456e-61,1.23456e-61,1.23456e-61,-588.041995595819,878.1769443029101,-738.6706877657231,1.23456e-61,1.23456e-61,1.23456e-61,-0.456049006063573,0.6810597297417501,-0.5728673045239374,0.06856375991490493,-1.6705171152383178,0.09376255234135744,-0.7835731747074061,-0.6124726214390852,-0.10435692534035264,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.06856375991490493,-1.6705171152383178,0.09376255234135744],[-0.5650552054672839,0.5374046553834304,1.0887295002812278],[-7989.494443359453,11931.269977722264,-10035.941390505463]],[[1.8587078414262161,1.452841548018525,0.24754425202173821],[2179.5832537637402,-3254.971202702389,2737.8899350020533],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-588.041995595819,878.1769443029101,-738.6706877657231],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.456049006063573,0.6810597297417501,-0.5728673045239374]]],"normal":[-0.456049006063573,0.6810597297417501,-0.5728673045239374]},{"op":"state"}]}}, +{"name":"adv_sing_236","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,2.0,0.0,0,0,-315.1187994912796,107.85350548784977,-896.3266973702353,10.233754512099866,-2.5939226076479938,12.266141034509724,-1041752.2008763391,-1161212.903394133,623580.3209287821,-13.720791395796926,14.765977550124415,4.574849681435786,1413094.1731128485,1575138.8476392927,-845862.6534497674,1.23456e-61,1.23456e-61,1.23456e-61,-1917162.983669685,-2137011.071372536,1147592.7077741963,1.23456e-61,1.23456e-61,1.23456e-61,-0.6200775479903523,-0.6911841071688594,0.3711716105461987,-315.1187994912796,107.85350548784977,-896.3266973702353,0.609570403633151,-0.390207807310905,0.29171273672168585,1.1321900554444395e-12,1.262022427927034e-12,-6.777165334975828e-13,-0.7259962693363105,0.4213270020829081,-0.4282640543156805,0.18758114287120337,-0.2820119107941264,-0.21178154098195912,1.23456e-61,1.23456e-61,1.23456e-61,-0.3993280017970009,0.09813398835476525,-0.48437345413437055,1.23456e-61,1.23456e-61,1.23456e-61,0.6200775479903523,0.6911841071688594,-0.3711716105461987,-315.1187994912796,107.85350548784977,-896.3266973702353,-0.6820448226076207,0.23489966511327393,0.6925583060535849,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-315.1187994912796,107.85350548784977,-896.3266973702353],[0.609570403633151,-0.390207807310905,0.29171273672168585],[1.1321900554444395e-12,1.262022427927034e-12,-6.777165334975828e-13]],[[-0.7259962693363105,0.4213270020829081,-0.4282640543156805],[0.18758114287120337,-0.2820119107941264,-0.21178154098195912],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.3993280017970009,0.09813398835476525,-0.48437345413437055],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6200775479903523,0.6911841071688594,-0.3711716105461987]]],"normal":[-0.6200775479903523,-0.6911841071688594,0.3711716105461987]},{"op":"state"}]}}, +{"name":"adv_sing_237","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,0.9951834971011082,0.0,0,0,-0.000834004051610915,0.0005936952809691024,-0.0002159461527969122,25.154562531542826,39.08347547769792,25.171494604142943,5034290.463210882,-1223706.510484381,-3130869.743880891,-14.014988810137577,31.451092754792892,-34.828170270071325,-21017363.52253121,5108781.364246358,13070881.060005968,1.23456e-61,1.23456e-61,1.23456e-61,-4322031.470707392,1050575.0032560604,2687909.0645983582,1.23456e-61,1.23456e-61,1.23456e-61,0.8316441549681409,-0.20215136486975602,-0.5172067528451475,-0.000834004051610915,0.0005936952809691024,-0.0002159461527969122,0.01146099954296646,0.05424545268066587,-0.0027732024175701683,-0.25133410324195304,0.5640198744554129,-0.6245818042650448,-0.0195153895635317,-0.029812119717493684,-0.019727698673223566,-8.21260592062633e-10,1.9962738703498148e-10,5.107491245178892e-10,1.23456e-61,1.23456e-61,1.23456e-61,-0.2599672444010392,0.5833935387212563,-0.64603572472587,1.23456e-61,1.23456e-61,1.23456e-61,-0.8316441549681409,0.20215136486975602,0.5172067528451475,-0.000834004051610915,0.0005936952809691024,-0.0002159461527969122,-0.2314006227391483,-0.713970997811194,-0.6608321769408798,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.000834004051610915,0.0005936952809691024,-0.0002159461527969122],[0.01146099954296646,0.05424545268066587,-0.0027732024175701683],[-0.25133410324195304,0.5640198744554129,-0.6245818042650448]],[[-0.0195153895635317,-0.029812119717493684,-0.019727698673223566],[-8.21260592062633e-10,1.9962738703498148e-10,5.107491245178892e-10],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.2599672444010392,0.5833935387212563,-0.64603572472587],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.8316441549681409,0.20215136486975602,0.5172067528451475]]],"normal":[-0.8316441549681409,0.20215136486975602,0.5172067528451475]},{"op":"state"}]}}, +{"name":"adv_sing_238","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.4184776031123556,1.3234900905660985,0,0,0.0,0.0,0,0,1.362809410287344,0.39144644864957456,-0.11373840890128006,-0.05965985643001401,0.7871342371909247,0.7207305664020021,-0.18943694047163037,0.5201302424587969,-0.583732842647543,-0.1438215920381132,0.3948882933087647,-0.4431759744231422,0.014484979394048692,-0.19111046984471486,-0.17498814137758753,1.23456e-61,1.23456e-61,1.23456e-61,0.035130621753822235,-0.09645856847894596,0.10825367093812928,1.23456e-61,1.23456e-61,1.23456e-61,0.970275210171798,0.19927371073433628,-0.1373171683958022,1.362809410287344,0.39144644864957456,-0.11373840890128006,-1.351842737219753,17.8358072821013,16.331155319251856,-264.9862707611993,-54.19100163238152,37.249079079580206,-8.768563737155388,24.07568376810078,-27.019703532940042,111.10038451558329,22.254280367747043,-16.225336658204593,1.23456e-61,1.23456e-61,1.23456e-61,-46.62697050821325,-9.381101088623682,6.385780897422294,1.23456e-61,1.23456e-61,1.23456e-61,0.970275210171798,0.19927371073433628,-0.1373171683958022,1.362809410287344,0.39144644864957456,-0.11373840890128006,-0.28545819384024534,0.9052005971428327,-0.31484202149923357,0,0,0,0,0,0,0],[1,1,1,1,1,0.4184776031123556,1.3234900905660985,0,0,0.0,0.0,0,0,1.362809410287344,0.39144644864957456,-0.11373840890128006,-0.05965985643001401,0.7871342371909247,0.7207305664020021,-0.18943694047163037,0.5201302424587969,-0.583732842647543,-0.1438215920381132,0.3948882933087647,-0.4431759744231422,0.014484979394048692,-0.19111046984471486,-0.17498814137758753,1.23456e-61,1.23456e-61,1.23456e-61,0.035130621753822235,-0.09645856847894596,0.10825367093812928,1.23456e-61,1.23456e-61,1.23456e-61,0.970275210171798,0.19927371073433628,-0.1373171683958022,1.362809410287344,0.39144644864957456,-0.11373840890128006,-1.351842737219753,17.8358072821013,16.331155319251856,-264.9862707611993,-54.19100163238152,37.249079079580206,-8.768563737155388,24.07568376810078,-27.019703532940042,111.10038451558329,22.254280367747043,-16.225336658204593,1.23456e-61,1.23456e-61,1.23456e-61,-46.62697050821325,-9.381101088623682,6.385780897422294,1.23456e-61,1.23456e-61,1.23456e-61,0.970275210171798,0.19927371073433628,-0.1373171683958022,1.362809410287344,0.39144644864957456,-0.11373840890128006,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.362809410287344,0.39144644864957456,-0.11373840890128006],[-1.351842737219753,17.8358072821013,16.331155319251856],[-264.9862707611993,-54.19100163238152,37.249079079580206]],[[-8.768563737155388,24.07568376810078,-27.019703532940042],[111.10038451558329,22.254280367747043,-16.225336658204593],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-46.62697050821325,-9.381101088623682,6.385780897422294],[1.23456e-61,1.23456e-61,1.23456e-61],[0.970275210171798,0.19927371073433628,-0.1373171683958022]]],"normal":[-0.970275210171798,-0.19927371073433628,0.1373171683958022]},{"op":"state"}]}}, +{"name":"adv_sing_239","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.4866781888990974,0.0,0,0,0.1004198821936988,0.9303001784628797,0,0,-0.0006840779817606788,-0.0008209113148734732,0.0003322716993193764,0.04526536932906893,0.0005020943819850909,-0.040396240895467075,-0.007383075879025034,0.014198190120013868,-0.008096516351641379,0.04879407652659419,0.012315910547552655,-0.022897098200756395,-0.004732620197958479,0.00910117171182392,-0.005189942165938989,1.23456e-61,1.23456e-61,1.23456e-61,-0.003033653493945773,0.005833935580650474,-0.003326801122107588,1.23456e-61,1.23456e-61,1.23456e-61,0.4116652526435464,-0.7916621227531603,0.45144523827800564,-0.0006840779817606788,-0.0008209113148734732,0.0003322716993193764,-1.7920530876146126,-0.006195290376317386,1.623278635363186,-16.847681734453165,32.399313276303374,-18.47570482619271,-3.1009616265937154,-2.0519740345247275,-0.7706626165415869,-12.445300035615427,23.933214137522484,-13.647912725061898,1.23456e-61,1.23456e-61,1.23456e-61,-41.554877590804445,79.91304195102731,-45.570403368092386,1.23456e-61,1.23456e-61,1.23456e-61,0.4116652526435464,-0.7916621227531603,0.45144523827800564,-0.0006840779817606788,-0.0008209113148734732,0.0003322716993193764,0.4116652526435464,-0.7916621227531603,0.45144523827800564,0,0,0,0,0,0,0],[1,1,1,1,1,0.4866781888990974,0.0,0,0,0.1004198821936988,0.9303001784628797,0,0,-0.0006840779817606788,-0.0008209113148734732,0.0003322716993193764,0.04526536932906893,0.0005020943819850909,-0.040396240895467075,-0.007383075879025034,0.014198190120013868,-0.008096516351641379,0.04879407652659419,0.012315910547552655,-0.022897098200756395,-0.004732620197958479,0.00910117171182392,-0.005189942165938989,1.23456e-61,1.23456e-61,1.23456e-61,-0.003033653493945773,0.005833935580650474,-0.003326801122107588,1.23456e-61,1.23456e-61,1.23456e-61,0.4116652526435464,-0.7916621227531603,0.45144523827800564,-0.0006840779817606788,-0.0008209113148734732,0.0003322716993193764,-1.7920530876146126,-0.006195290376317386,1.623278635363186,-16.847681734453165,32.399313276303374,-18.47570482619271,-3.1009616265937154,-2.0519740345247275,-0.7706626165415869,-12.445300035615427,23.933214137522484,-13.647912725061898,1.23456e-61,1.23456e-61,1.23456e-61,-41.554877590804445,79.91304195102731,-45.570403368092386,1.23456e-61,1.23456e-61,1.23456e-61,0.4116652526435464,-0.7916621227531603,0.45144523827800564,-0.0006840779817606788,-0.0008209113148734732,0.0003322716993193764,0.3713458265275421,0.5980929670384902,0.7102021401683271,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.0006840779817606788,-0.0008209113148734732,0.0003322716993193764],[-1.7920530876146126,-0.006195290376317386,1.623278635363186],[-16.847681734453165,32.399313276303374,-18.47570482619271]],[[-3.1009616265937154,-2.0519740345247275,-0.7706626165415869],[-12.445300035615427,23.933214137522484,-13.647912725061898],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-41.554877590804445,79.91304195102731,-45.570403368092386],[1.23456e-61,1.23456e-61,1.23456e-61],[0.4116652526435464,-0.7916621227531603,0.45144523827800564]]],"normal":[-0.4116652526435464,0.7916621227531603,-0.45144523827800564]},{"op":"state"}]}}, +{"name":"adv_sing_240","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.6671829197017247,0.0,0,0,0.022630368976206405,0.5464561234658012,0,0,0.00023313465224674657,3.7402067379322505e-05,0.00014114440921435923,-0.0023748301446940593,0.009616999377202291,0.0,-0.13760712636344616,0.31921828691162657,0.0,0.031180978937659615,-0.01172451352929404,-0.0,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.00023313465224674657,3.7402067379322505e-05,0.00014114440921435923,-0.1269782461210268,-0.05473718855029822,0.0,0.33797518037595986,-0.7840281310236062,-0.0057358904395088854,-0.05285936275615587,0.1226221030275262,0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.00534908771456404,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,0.00023313465224674657,3.7402067379322505e-05,0.00014114440921435923,-0.427948727851261,0.7662134512992175,-0.4793504285787477,0,0,0,0,0,0,0],[1,1,1,1,1,0.6671829197017247,0.0,0,0,0.022630368976206405,0.5464561234658012,0,0,0.00023313465224674657,3.7402067379322505e-05,0.00014114440921435923,-0.0023748301446940593,0.009616999377202291,0.0,-0.13760712636344616,0.31921828691162657,0.0,0.031180978937659615,-0.01172451352929404,-0.0,-0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.00023313465224674657,3.7402067379322505e-05,0.00014114440921435923,-0.1269782461210268,-0.05473718855029822,0.0,0.33797518037595986,-0.7840281310236062,-0.0057358904395088854,-0.05285936275615587,0.1226221030275262,0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.00534908771456404,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,0.00023313465224674657,3.7402067379322505e-05,0.00014114440921435923,0,0,1,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.00023313465224674657,3.7402067379322505e-05,0.00014114440921435923],[-0.1269782461210268,-0.05473718855029822,0.0],[0.33797518037595986,-0.7840281310236062,-0.0057358904395088854]],[[-0.05285936275615587,0.1226221030275262,0.0],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,-0.00534908771456404],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,-1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_241","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.4512339597507091,0.0,0,0,0.0,0.15469563828431254,0,0,-0.6879925761834327,-0.07771303290705656,0.7570116706466603,0.0027926837813863816,0.003928395720877427,-0.005227275346520577,0.18434811672968274,-0.09917546698541663,-0.2391084926835388,0.0065613378982797635,0.020356047941425533,-0.012338472135544462,0.0689172111716208,0.00018976791199468181,0.03696179147697112,1.23456e-61,1.23456e-61,1.23456e-61,0.10904764616534061,0.0003002696099991488,0.058484612045323105,1.23456e-61,1.23456e-61,1.23456e-61,-0.8812544849738942,-0.0024265901174235164,-0.4726358475335939,-0.6879925761834327,-0.07771303290705656,0.7570116706466603,0.023302663488885725,-0.897045262024235,-0.03884346826317159,-0.1755757955574381,0.1236566277536524,0.32673546482649657,-0.3128353736002862,1.5292676923245174,0.5754465548771452,-0.12835786533368057,-0.8258310343997558,0.24356996730804564,1.23456e-61,1.23456e-61,1.23456e-61,2.4291833950012756e-12,6.6889105476654915e-15,1.3028236137090094e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.8812544849738942,0.0024265901174235164,0.4726358475335939,-0.6879925761834327,-0.07771303290705656,0.7570116706466603,-0.8812544849738942,-0.0024265901174235164,-0.4726358475335939,0,0,0,0,0,0,0],[1,1,1,1,1,1.4512339597507091,0.0,0,0,0.0,0.15469563828431254,0,0,-0.6879925761834327,-0.07771303290705656,0.7570116706466603,0.0027926837813863816,0.003928395720877427,-0.005227275346520577,0.18434811672968274,-0.09917546698541663,-0.2391084926835388,0.0065613378982797635,0.020356047941425533,-0.012338472135544462,0.0689172111716208,0.00018976791199468181,0.03696179147697112,1.23456e-61,1.23456e-61,1.23456e-61,0.10904764616534061,0.0003002696099991488,0.058484612045323105,1.23456e-61,1.23456e-61,1.23456e-61,-0.8812544849738942,-0.0024265901174235164,-0.4726358475335939,-0.6879925761834327,-0.07771303290705656,0.7570116706466603,0.023302663488885725,-0.897045262024235,-0.03884346826317159,-0.1755757955574381,0.1236566277536524,0.32673546482649657,-0.3128353736002862,1.5292676923245174,0.5754465548771452,-0.12835786533368057,-0.8258310343997558,0.24356996730804564,1.23456e-61,1.23456e-61,1.23456e-61,2.4291833950012756e-12,6.6889105476654915e-15,1.3028236137090094e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.8812544849738942,0.0024265901174235164,0.4726358475335939,-0.6879925761834327,-0.07771303290705656,0.7570116706466603,-0.8812544849738942,-0.0024265901174235164,-0.4726358475335939,0,0,0,0,0,0,0],[1,1,1,1,1,1.4512339597507091,0.0,0,0,0.0,0.15469563828431254,0,0,-0.6879925761834327,-0.07771303290705656,0.7570116706466603,0.0027926837813863816,0.003928395720877427,-0.005227275346520577,0.18434811672968274,-0.09917546698541663,-0.2391084926835388,0.0065613378982797635,0.020356047941425533,-0.012338472135544462,0.0689172111716208,0.00018976791199468181,0.03696179147697112,1.23456e-61,1.23456e-61,1.23456e-61,0.10904764616534061,0.0003002696099991488,0.058484612045323105,1.23456e-61,1.23456e-61,1.23456e-61,-0.8812544849738942,-0.0024265901174235164,-0.4726358475335939,-0.6879925761834327,-0.07771303290705656,0.7570116706466603,0.023302663488885725,-0.897045262024235,-0.03884346826317159,-0.1755757955574381,0.1236566277536524,0.32673546482649657,-0.3128353736002862,1.5292676923245174,0.5754465548771452,-0.12835786533368057,-0.8258310343997558,0.24356996730804564,1.23456e-61,1.23456e-61,1.23456e-61,2.4291833950012756e-12,6.6889105476654915e-15,1.3028236137090094e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.8812544849738942,0.0024265901174235164,0.4726358475335939,-0.6879925761834327,-0.07771303290705656,0.7570116706466603,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.6879925761834327,-0.07771303290705656,0.7570116706466603],[0.023302663488885725,-0.897045262024235,-0.03884346826317159],[-0.1755757955574381,0.1236566277536524,0.32673546482649657]],[[-0.3128353736002862,1.5292676923245174,0.5754465548771452],[-0.12835786533368057,-0.8258310343997558,0.24356996730804564],[1.23456e-61,1.23456e-61,1.23456e-61]],[[2.4291833950012756e-12,6.6889105476654915e-15,1.3028236137090094e-12],[1.23456e-61,1.23456e-61,1.23456e-61],[0.8812544849738942,0.0024265901174235164,0.4726358475335939]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_242","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.3561358381376465,0,0,2.0,0.31470513825658,0,0,0.00016757755216663872,-0.0005333814658507728,0.0005356290836215714,0.008718458693098152,0.0,-0.009974264258031091,0.5604822126151107,-1.7549746947229525e-16,0.4674573913456783,0.0070730207188354,-0.0,-0.07304128840016022,0.0,-7.901989512228529e-16,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-5.385057433244455e-15,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.00016757755216663872,-0.0005333814658507728,0.0005356290836215714,-3.851243712415999,-0.0,-10.890688149623411,0.0,55.251855667266625,0.0,-12.621411458568126,0.0,-1.546888779065453,-0.0,51.90781262676349,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.6384238545189969,48.766163220158084,-0.5324628380512806,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.00016757755216663872,-0.0005333814658507728,0.0005356290836215714,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.3561358381376465,0,0,2.0,0.31470513825658,0,0,0.00016757755216663872,-0.0005333814658507728,0.0005356290836215714,0.008718458693098152,0.0,-0.009974264258031091,0.5604822126151107,-1.7549746947229525e-16,0.4674573913456783,0.0070730207188354,-0.0,-0.07304128840016022,0.0,-7.901989512228529e-16,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-5.385057433244455e-15,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.00016757755216663872,-0.0005333814658507728,0.0005356290836215714,-3.851243712415999,-0.0,-10.890688149623411,0.0,55.251855667266625,0.0,-12.621411458568126,0.0,-1.546888779065453,-0.0,51.90781262676349,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.6384238545189969,48.766163220158084,-0.5324628380512806,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.00016757755216663872,-0.0005333814658507728,0.0005356290836215714,0,-1,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.00016757755216663872,-0.0005333814658507728,0.0005356290836215714],[-3.851243712415999,-0.0,-10.890688149623411],[0.0,55.251855667266625,0.0]],[[-12.621411458568126,0.0,-1.546888779065453],[-0.0,51.90781262676349,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.6384238545189969,48.766163220158084,-0.5324628380512806],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_243","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,0.3741526438384739,2.0,0,0,0.0976222781928644,-0.7638300375093374,-0.3175751969248919,0.0,-4.164353886126858,0.5600185451769707,-0.20464784585155554,0.06167141733212635,0.4585948244782391,0.0,0.3695939714525861,2.7483377194611673,-1.2472475623662915,0.9389563973074665,-0.12627000730089213,1.23456e-61,1.23456e-61,1.23456e-61,-7.600816444195052,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0976222781928644,-0.7638300375093374,-0.3175751969248919,-0.0,4.7013740598371685,3.515712342935907,-13.21923138619232,0.0,0.0,0.0,0.07484564704350591,1.115779806109808,-4.062454520068539,0.7466457657004907,-0.10040824745060978,1.23456e-61,1.23456e-61,1.23456e-61,-1.2484471615297301,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0976222781928644,-0.7638300375093374,-0.3175751969248919,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.3741526438384739,2.0,0,0,0.0976222781928644,-0.7638300375093374,-0.3175751969248919,0.0,-4.164353886126858,0.5600185451769707,-0.20464784585155554,0.06167141733212635,0.4585948244782391,0.0,0.3695939714525861,2.7483377194611673,-1.2472475623662915,0.9389563973074665,-0.12627000730089213,1.23456e-61,1.23456e-61,1.23456e-61,-7.600816444195052,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0976222781928644,-0.7638300375093374,-0.3175751969248919,-0.0,4.7013740598371685,3.515712342935907,-13.21923138619232,0.0,0.0,0.0,0.07484564704350591,1.115779806109808,-4.062454520068539,0.7466457657004907,-0.10040824745060978,1.23456e-61,1.23456e-61,1.23456e-61,-1.2484471615297301,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0976222781928644,-0.7638300375093374,-0.3175751969248919,0.6225993813826746,-0.24121805855726583,-0.744435261475284,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.3741526438384739,2.0,0,0,0.0976222781928644,-0.7638300375093374,-0.3175751969248919,0.0,-4.164353886126858,0.5600185451769707,-0.20464784585155554,0.06167141733212635,0.4585948244782391,0.0,0.3695939714525861,2.7483377194611673,-1.2472475623662915,0.9389563973074665,-0.12627000730089213,1.23456e-61,1.23456e-61,1.23456e-61,-7.600816444195052,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0976222781928644,-0.7638300375093374,-0.3175751969248919,-0.0,4.7013740598371685,3.515712342935907,-13.21923138619232,0.0,0.0,0.0,0.07484564704350591,1.115779806109808,-4.062454520068539,0.7466457657004907,-0.10040824745060978,1.23456e-61,1.23456e-61,1.23456e-61,-1.2484471615297301,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.0976222781928644,-0.7638300375093374,-0.3175751969248919,0.0,-0.9910785120031802,0.13327934215609796,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0976222781928644,-0.7638300375093374,-0.3175751969248919],[-0.0,4.7013740598371685,3.515712342935907],[-13.21923138619232,0.0,0.0]],[[0.0,0.07484564704350591,1.115779806109808],[-4.062454520068539,0.7466457657004907,-0.10040824745060978],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-1.2484471615297301,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_244","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,-0.9392948462952462,0.2655140056604095,-0.6962854813606669,0.03383532264989744,0.09056093502347726,-0.01180359079671632,0.19656500853062736,0.1771628445359213,-0.14142351202801465,0.05426469291795108,-0.07084468492398895,-0.055044781653959755,-0.00438310959686154,0.0009200785796577354,-0.005505168051816229,1.23456e-61,1.23456e-61,1.23456e-61,-0.002759515504487673,0.0005792625189501329,-0.003465940391879499,1.23456e-61,1.23456e-61,1.23456e-61,-0.6176146809189262,0.12964632205467572,-0.7757215589959507,-0.9392948462952462,0.2655140056604095,-0.6962854813606669,0.01323491312460713,-0.02665174074621837,-0.01499168957686091,0.3993552459053366,0.3447574298924413,-0.26034114676685344,0.014183612109750528,0.012244474737570277,-0.009246302193157757,-1.8027893759664318e-11,3.784317621555579e-12,-2.264296216510424e-11,1.23456e-61,1.23456e-61,1.23456e-61,-2.6966900098068075e-07,5.6607453205752695e-08,-3.387031822857109e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.6176146809189262,0.12964632205467572,-0.7757215589959507,-0.9392948462952462,0.2655140056604095,-0.6962854813606669,-0.3972051015838024,0.7998698057794073,0.4499293289820241,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,-0.9392948462952462,0.2655140056604095,-0.6962854813606669,0.03383532264989744,0.09056093502347726,-0.01180359079671632,0.19656500853062736,0.1771628445359213,-0.14142351202801465,0.05426469291795108,-0.07084468492398895,-0.055044781653959755,-0.00438310959686154,0.0009200785796577354,-0.005505168051816229,1.23456e-61,1.23456e-61,1.23456e-61,-0.002759515504487673,0.0005792625189501329,-0.003465940391879499,1.23456e-61,1.23456e-61,1.23456e-61,-0.6176146809189262,0.12964632205467572,-0.7757215589959507,-0.9392948462952462,0.2655140056604095,-0.6962854813606669,0.01323491312460713,-0.02665174074621837,-0.01499168957686091,0.3993552459053366,0.3447574298924413,-0.26034114676685344,0.014183612109750528,0.012244474737570277,-0.009246302193157757,-1.8027893759664318e-11,3.784317621555579e-12,-2.264296216510424e-11,1.23456e-61,1.23456e-61,1.23456e-61,-2.6966900098068075e-07,5.6607453205752695e-08,-3.387031822857109e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.6176146809189262,0.12964632205467572,-0.7757215589959507,-0.9392948462952462,0.2655140056604095,-0.6962854813606669,1.07601303700384,-0.2138662861823757,-0.8924444833334624,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.9392948462952462,0.2655140056604095,-0.6962854813606669],[0.01323491312460713,-0.02665174074621837,-0.01499168957686091],[0.3993552459053366,0.3447574298924413,-0.26034114676685344]],[[0.014183612109750528,0.012244474737570277,-0.009246302193157757],[-1.8027893759664318e-11,3.784317621555579e-12,-2.264296216510424e-11],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-2.6966900098068075e-07,5.6607453205752695e-08,-3.387031822857109e-07],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6176146809189262,0.12964632205467572,-0.7757215589959507]]],"normal":[0.6176146809189262,-0.12964632205467572,0.7757215589959507]},{"op":"state"}]}}, +{"name":"adv_sing_245","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.32237663990664966,0,0,0.0,0.0,0,0,0.14278176088475503,-0.206697347701426,-1.8471946794607481,-2.7501533772248483,-3.5419940965390375,0.0,0.0,0.0,26.36369961293079,-2.430342081081569,1.8870199384660318,0.0,0.0,0.0,17.22674153108303,1.23456e-61,1.23456e-61,1.23456e-61,0.07013323319522517,-0.05445439570777686,11.256410448296354,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.14278176088475503,-0.206697347701426,-1.8471946794607481,-28.179417127380397,-36.29300457773414,0.0,-0.05809369003514583,0.045106387388313636,2773.2108295458193,-23.514571687436693,18.257703705206353,0.0,0.2508305809455081,0.3230512320869039,1707.6723376945192,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,1051.5411412828994,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.14278176088475503,-0.206697347701426,-1.8471946794607481,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.32237663990664966,0,0,0.0,0.0,0,0,0.14278176088475503,-0.206697347701426,-1.8471946794607481,-2.7501533772248483,-3.5419940965390375,0.0,0.0,0.0,26.36369961293079,-2.430342081081569,1.8870199384660318,0.0,0.0,0.0,17.22674153108303,1.23456e-61,1.23456e-61,1.23456e-61,0.07013323319522517,-0.05445439570777686,11.256410448296354,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.14278176088475503,-0.206697347701426,-1.8471946794607481,-28.179417127380397,-36.29300457773414,0.0,-0.05809369003514583,0.045106387388313636,2773.2108295458193,-23.514571687436693,18.257703705206353,0.0,0.2508305809455081,0.3230512320869039,1707.6723376945192,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,1051.5411412828994,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.14278176088475503,-0.206697347701426,-1.8471946794607481,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.14278176088475503,-0.206697347701426,-1.8471946794607481],[-28.179417127380397,-36.29300457773414,0.0],[-0.05809369003514583,0.045106387388313636,2773.2108295458193]],[[-23.514571687436693,18.257703705206353,0.0],[0.2508305809455081,0.3230512320869039,1707.6723376945192],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,1051.5411412828994],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_246","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,0.0,1.771209422483238,0,0,0.566596614356258,0.8754389268364022,0.740712481859084,0.21871901708114289,-0.14652150175526946,-0.22058432920897272,-38.99439916171757,-50.19407442888856,-4.7235115203177465,-0.6678025661783012,0.5443976310019877,-0.3133047956420994,-31.53425170346478,-40.21836969667611,-4.630474501092156,1.23456e-61,1.23456e-61,1.23456e-61,-25.81739359613043,-33.5693898673316,-3.300857940290486,1.23456e-61,1.23456e-61,1.23456e-61,-0.6077899559184242,-0.7902865140783204,-0.07770839819875672,0.566596614356258,0.8754389268364022,0.740712481859084,-5.53861581198624,5.0913604621271,-8.458782661214663,-0.1766767456967916,0.0371491054818103,0.11485476095079152,-4.481845459123093,4.606108793501158,-11.78926639955592,-0.030764926375068582,-0.04000248142319147,-0.00393341996857568,1.23456e-61,1.23456e-61,1.23456e-61,-0.01197454136349536,-0.015570047612161504,-0.0015309934286687565,1.23456e-61,1.23456e-61,1.23456e-61,-0.6077899559184242,-0.7902865140783204,-0.07770839819875672,0.566596614356258,0.8754389268364022,0.740712481859084,-0.6077899559184242,-0.7902865140783204,-0.07770839819875672,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,1.771209422483238,0,0,0.566596614356258,0.8754389268364022,0.740712481859084,0.21871901708114289,-0.14652150175526946,-0.22058432920897272,-38.99439916171757,-50.19407442888856,-4.7235115203177465,-0.6678025661783012,0.5443976310019877,-0.3133047956420994,-31.53425170346478,-40.21836969667611,-4.630474501092156,1.23456e-61,1.23456e-61,1.23456e-61,-25.81739359613043,-33.5693898673316,-3.300857940290486,1.23456e-61,1.23456e-61,1.23456e-61,-0.6077899559184242,-0.7902865140783204,-0.07770839819875672,0.566596614356258,0.8754389268364022,0.740712481859084,-5.53861581198624,5.0913604621271,-8.458782661214663,-0.1766767456967916,0.0371491054818103,0.11485476095079152,-4.481845459123093,4.606108793501158,-11.78926639955592,-0.030764926375068582,-0.04000248142319147,-0.00393341996857568,1.23456e-61,1.23456e-61,1.23456e-61,-0.01197454136349536,-0.015570047612161504,-0.0015309934286687565,1.23456e-61,1.23456e-61,1.23456e-61,-0.6077899559184242,-0.7902865140783204,-0.07770839819875672,0.566596614356258,0.8754389268364022,0.740712481859084,-0.6650383414516636,0.4530903521111704,0.5936607930653632,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.566596614356258,0.8754389268364022,0.740712481859084],[-5.53861581198624,5.0913604621271,-8.458782661214663],[-0.1766767456967916,0.0371491054818103,0.11485476095079152]],[[-4.481845459123093,4.606108793501158,-11.78926639955592],[-0.030764926375068582,-0.04000248142319147,-0.00393341996857568],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.01197454136349536,-0.015570047612161504,-0.0015309934286687565],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6077899559184242,-0.7902865140783204,-0.07770839819875672]]],"normal":[-0.6077899559184242,-0.7902865140783204,-0.07770839819875672]},{"op":"state"}]}}, +{"name":"adv_sing_247","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.5889026455323814,0,0,1.442183736472319,2.0,0,0,888.1470267747728,247.82347185282094,312.1135024911665,0.0,6.957309356022441,-53.9190583985442,1.7512989400324494e-09,0.6793463321983108,0.08765773612082307,0.0,-62.75854610316789,-8.097890299688997,-1.3758480021135728e-09,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,2.4324700163811957e-09,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,888.1470267747728,247.82347185282094,312.1135024911665,-0.0,0.07204639318455433,0.46260812118045525,2065491.4090597157,0.0,0.0,-0.0,0.09610963730010212,0.03231737764524159,107913.92016111138,-0.11271954094280026,0.8735749985719534,1.23456e-61,1.23456e-61,1.23456e-61,5552.148519465349,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,888.1470267747728,247.82347185282094,312.1135024911665,-0.6089831606400832,-0.7859060262612436,0.1071971452188726,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.5889026455323814,0,0,1.442183736472319,2.0,0,0,888.1470267747728,247.82347185282094,312.1135024911665,0.0,6.957309356022441,-53.9190583985442,1.7512989400324494e-09,0.6793463321983108,0.08765773612082307,0.0,-62.75854610316789,-8.097890299688997,-1.3758480021135728e-09,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,2.4324700163811957e-09,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,888.1470267747728,247.82347185282094,312.1135024911665,-0.0,0.07204639318455433,0.46260812118045525,2065491.4090597157,0.0,0.0,-0.0,0.09610963730010212,0.03231737764524159,107913.92016111138,-0.11271954094280026,0.8735749985719534,1.23456e-61,1.23456e-61,1.23456e-61,5552.148519465349,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,888.1470267747728,247.82347185282094,312.1135024911665,1,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[888.1470267747728,247.82347185282094,312.1135024911665],[-0.0,0.07204639318455433,0.46260812118045525],[2065491.4090597157,0.0,0.0]],[[-0.0,0.09610963730010212,0.03231737764524159],[107913.92016111138,-0.11271954094280026,0.8735749985719534],[1.23456e-61,1.23456e-61,1.23456e-61]],[[5552.148519465349,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_248","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.5034881872267105,0,0,2.0,2.0,0,0,0.9867992327982005,-0.43708969349415394,0.43140420674457713,41.78609608128791,-7.007260877600928,-63.231949657952484,-0.817941537336446,3.608276041284651,-0.9403903490142868,52.563810637297365,20.379778202544003,32.47772732463234,0.13499339484640888,-2.1573250808568716,1.1352407465620957,1.23456e-61,1.23456e-61,1.23456e-61,-0.5506670476104099,1.27111929349446,-0.5047652465085907,1.23456e-61,1.23456e-61,1.23456e-61,-0.2142631608632077,0.9452027982222667,-0.24633913235558832,0.9867992327982005,-0.43708969349415394,0.43140420674457713,41.24132678307669,5.240044447113615,-15.765227080964571,999.9588177147656,-4411.229017639893,1149.6562757441975,-13.114558681110228,3.463591463091139,24.696697926058047,-310.11180527849734,1367.525512405149,-356.21976576277785,1.23456e-61,1.23456e-61,1.23456e-61,-115.54625514031423,509.72198507075615,-132.84394817816803,1.23456e-61,1.23456e-61,1.23456e-61,0.2142631608632077,-0.9452027982222667,0.24633913235558832,0.9867992327982005,-0.43708969349415394,0.43140420674457713,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.5034881872267105,0,0,2.0,2.0,0,0,0.9867992327982005,-0.43708969349415394,0.43140420674457713,41.78609608128791,-7.007260877600928,-63.231949657952484,-0.817941537336446,3.608276041284651,-0.9403903490142868,52.563810637297365,20.379778202544003,32.47772732463234,0.13499339484640888,-2.1573250808568716,1.1352407465620957,1.23456e-61,1.23456e-61,1.23456e-61,-0.5506670476104099,1.27111929349446,-0.5047652465085907,1.23456e-61,1.23456e-61,1.23456e-61,-0.2142631608632077,0.9452027982222667,-0.24633913235558832,0.9867992327982005,-0.43708969349415394,0.43140420674457713,41.24132678307669,5.240044447113615,-15.765227080964571,999.9588177147656,-4411.229017639893,1149.6562757441975,-13.114558681110228,3.463591463091139,24.696697926058047,-310.11180527849734,1367.525512405149,-356.21976576277785,1.23456e-61,1.23456e-61,1.23456e-61,-115.54625514031423,509.72198507075615,-132.84394817816803,1.23456e-61,1.23456e-61,1.23456e-61,0.2142631608632077,-0.9452027982222667,0.24633913235558832,0.9867992327982005,-0.43708969349415394,0.43140420674457713,-0.3499502168019924,0.694088755922732,-0.6291070216281749,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.5034881872267105,0,0,2.0,2.0,0,0,0.9867992327982005,-0.43708969349415394,0.43140420674457713,41.78609608128791,-7.007260877600928,-63.231949657952484,-0.817941537336446,3.608276041284651,-0.9403903490142868,52.563810637297365,20.379778202544003,32.47772732463234,0.13499339484640888,-2.1573250808568716,1.1352407465620957,1.23456e-61,1.23456e-61,1.23456e-61,-0.5506670476104099,1.27111929349446,-0.5047652465085907,1.23456e-61,1.23456e-61,1.23456e-61,-0.2142631608632077,0.9452027982222667,-0.24633913235558832,0.9867992327982005,-0.43708969349415394,0.43140420674457713,41.24132678307669,5.240044447113615,-15.765227080964571,999.9588177147656,-4411.229017639893,1149.6562757441975,-13.114558681110228,3.463591463091139,24.696697926058047,-310.11180527849734,1367.525512405149,-356.21976576277785,1.23456e-61,1.23456e-61,1.23456e-61,-115.54625514031423,509.72198507075615,-132.84394817816803,1.23456e-61,1.23456e-61,1.23456e-61,0.2142631608632077,-0.9452027982222667,0.24633913235558832,0.9867992327982005,-0.43708969349415394,0.43140420674457713,0.5489879727991527,-0.0920617694600002,-0.830744747997705,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.9867992327982005,-0.43708969349415394,0.43140420674457713],[41.24132678307669,5.240044447113615,-15.765227080964571],[999.9588177147656,-4411.229017639893,1149.6562757441975]],[[-13.114558681110228,3.463591463091139,24.696697926058047],[-310.11180527849734,1367.525512405149,-356.21976576277785],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-115.54625514031423,509.72198507075615,-132.84394817816803],[1.23456e-61,1.23456e-61,1.23456e-61],[0.2142631608632077,-0.9452027982222667,0.24633913235558832]]],"normal":[0.2142631608632077,-0.9452027982222667,0.24633913235558832]},{"op":"state"}]}}, +{"name":"adv_sing_249","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.837185730043523,2.0,0,0,0.7061488142899666,2.0,0,0,-5.419823860168016e-05,-0.0002605468176025714,-0.0003489570912043829,-0.015580460473277165,0.0,0.011871701755004264,0.8947351388900638,-0.0,-0.3395346393083623,-0.01226788296859333,0.0,0.005223891898670932,-0.011083350013830396,-0.0,-0.029206630387380025,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-5.419823860168016e-05,-0.0002605468176025714,-0.0003489570912043829,0.0347855492419904,0.0,0.16692505334900773,-0.058755527269759945,200.9113919754069,0.022296583527118843,0.21444834331867466,0.0,-0.01767775386001144,-0.11463825742614903,2.4002394091905472,-0.30209252696349015,1.23456e-61,1.23456e-61,1.23456e-61,0.0847917347292412,0.35205838982307264,-0.032176819503632624,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-5.419823860168016e-05,-0.0002605468176025714,-0.0003489570912043829,0,-1,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-5.419823860168016e-05,-0.0002605468176025714,-0.0003489570912043829],[0.0347855492419904,0.0,0.16692505334900773],[-0.058755527269759945,200.9113919754069,0.022296583527118843]],[[0.21444834331867466,0.0,-0.01767775386001144],[-0.11463825742614903,2.4002394091905472,-0.30209252696349015],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0847917347292412,0.35205838982307264,-0.032176819503632624],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_250","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.8175108853711366,0.0,0,0,0.8610289081145059,0.5418115779460775,0,0,0.0008192677725789886,0.0009951322547674464,-0.0009390739086218263,1.390556588560706,-9.667590500059587,-0.6065119153854376,0.5409791307132673,-0.06366023457852767,0.5971752506483657,2.352542672659427,-5.315000788137231,1.461676732036449,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.7407741768874547,0.14766347709941657,-0.6553236729949743,0.0008192677725789886,0.0009951322547674464,-0.0009390739086218263,-0.0071490026085393905,0.0054236273160940904,-0.006859091224918523,0.0,0.0,0.0,-0.006236578629709262,0.007841865988706367,-0.005282792831754273,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.7407741768874547,0.14766347709941657,-0.6553236729949743,0.0008192677725789886,0.0009951322547674464,-0.0009390739086218263,0.6692901531188233,-0.07875935637751223,0.7388150341737653,0,0,0,0,0,0,0],[1,1,1,1,1,1.8175108853711366,0.0,0,0,0.8610289081145059,0.5418115779460775,0,0,0.0008192677725789886,0.0009951322547674464,-0.0009390739086218263,1.390556588560706,-9.667590500059587,-0.6065119153854376,0.5409791307132673,-0.06366023457852767,0.5971752506483657,2.352542672659427,-5.315000788137231,1.461676732036449,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.7407741768874547,0.14766347709941657,-0.6553236729949743,0.0008192677725789886,0.0009951322547674464,-0.0009390739086218263,-0.0071490026085393905,0.0054236273160940904,-0.006859091224918523,0.0,0.0,0.0,-0.006236578629709262,0.007841865988706367,-0.005282792831754273,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.7407741768874547,0.14766347709941657,-0.6553236729949743,0.0008192677725789886,0.0009951322547674464,-0.0009390739086218263,-0.2150852605921366,-0.9725029676679058,-0.08931018168791717,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0008192677725789886,0.0009951322547674464,-0.0009390739086218263],[-0.0071490026085393905,0.0054236273160940904,-0.006859091224918523],[0.0,0.0,0.0]],[[-0.006236578629709262,0.007841865988706367,-0.005282792831754273],[0.0,0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0.7407741768874547,0.14766347709941657,-0.6553236729949743]]],"normal":[-0.7407741768874547,-0.14766347709941657,0.6553236729949743]},{"op":"state"}]}}, +{"name":"adv_sing_251","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,1.1626109265277702,2.0,0,0,0.029283718073956244,-0.876576036204805,-1.9795586136713528,0.0,0.0038475229004237346,0.10746164070684466,0.028907019139690644,-0.49182294777240676,0.5274015913273158,0.0,-0.05163103360444877,0.04062611239362177,0.01041774277298402,-0.3176841896720016,-0.29625313460270525,1.23456e-61,1.23456e-61,1.23456e-61,0.010790611598207269,0.49897235113651406,-0.5350681850239888,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.029283718073956244,-0.876576036204805,-1.9795586136713528,0.0,-0.1643695591045842,-0.1532811474448057,0.12628122966364755,0.0,0.0,0.0,-0.10060018546971256,0.10787763796881988,-2.9225368439616075e-08,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.05439496671229122,0.10017805018190039,-0.10742496526707647,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.029283718073956244,-0.876576036204805,-1.9795586136713528,-0.9384293598575789,0.29475822057784573,0.18018858998026677,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,1.1626109265277702,2.0,0,0,0.029283718073956244,-0.876576036204805,-1.9795586136713528,0.0,0.0038475229004237346,0.10746164070684466,0.028907019139690644,-0.49182294777240676,0.5274015913273158,0.0,-0.05163103360444877,0.04062611239362177,0.01041774277298402,-0.3176841896720016,-0.29625313460270525,1.23456e-61,1.23456e-61,1.23456e-61,0.010790611598207269,0.49897235113651406,-0.5350681850239888,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.029283718073956244,-0.876576036204805,-1.9795586136713528,0.0,-0.1643695591045842,-0.1532811474448057,0.12628122966364755,0.0,0.0,0.0,-0.10060018546971256,0.10787763796881988,-2.9225368439616075e-08,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.05439496671229122,0.10017805018190039,-0.10742496526707647,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.029283718073956244,-0.876576036204805,-1.9795586136713528,1,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,1.1626109265277702,2.0,0,0,0.029283718073956244,-0.876576036204805,-1.9795586136713528,0.0,0.0038475229004237346,0.10746164070684466,0.028907019139690644,-0.49182294777240676,0.5274015913273158,0.0,-0.05163103360444877,0.04062611239362177,0.01041774277298402,-0.3176841896720016,-0.29625313460270525,1.23456e-61,1.23456e-61,1.23456e-61,0.010790611598207269,0.49897235113651406,-0.5350681850239888,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.029283718073956244,-0.876576036204805,-1.9795586136713528,0.0,-0.1643695591045842,-0.1532811474448057,0.12628122966364755,0.0,0.0,0.0,-0.10060018546971256,0.10787763796881988,-2.9225368439616075e-08,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.05439496671229122,0.10017805018190039,-0.10742496526707647,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.029283718073956244,-0.876576036204805,-1.9795586136713528,0.0,-0.731344704877093,-0.682008007759614,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.029283718073956244,-0.876576036204805,-1.9795586136713528],[0.0,-0.1643695591045842,-0.1532811474448057],[0.12628122966364755,0.0,0.0]],[[0.0,-0.10060018546971256,0.10787763796881988],[-2.9225368439616075e-08,-0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.05439496671229122,0.10017805018190039,-0.10742496526707647],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_252","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,2.0,1.1250573844858969,0,0,-0.8401619990300588,-1.9705201788997742,-0.5350357118893938,0.0,-0.03913133465489664,-0.005677609087550418,-1.56349659682455e-09,-0.0,0.0,0.0,-0.017803382439733673,0.041164014706201145,-4.6295693226234197e-10,0.29352807066874775,0.35177575929884797,1.23456e-61,1.23456e-61,1.23456e-61,-2.011436533027761e-09,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.8401619990300588,-1.9705201788997742,-0.5350357118893938,0.0,-0.022357829473130145,-0.00031485772065575554,0.0815912119554103,0.06111919771912949,-0.05099896656630302,-0.0,0.03110159440847736,-0.0045935597612103175,-0.2557720996580582,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.8017942805628837,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,-0.8401619990300588,-1.9705201788997742,-0.5350357118893938,-0.0,0.6406758268146523,0.7678114904944844,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,2.0,1.1250573844858969,0,0,-0.8401619990300588,-1.9705201788997742,-0.5350357118893938,0.0,-0.03913133465489664,-0.005677609087550418,-1.56349659682455e-09,-0.0,0.0,0.0,-0.017803382439733673,0.041164014706201145,-4.6295693226234197e-10,0.29352807066874775,0.35177575929884797,1.23456e-61,1.23456e-61,1.23456e-61,-2.011436533027761e-09,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.8401619990300588,-1.9705201788997742,-0.5350357118893938,0.0,-0.022357829473130145,-0.00031485772065575554,0.0815912119554103,0.06111919771912949,-0.05099896656630302,-0.0,0.03110159440847736,-0.0045935597612103175,-0.2557720996580582,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.8017942805628837,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,-0.8401619990300588,-1.9705201788997742,-0.5350357118893938,0.49365993494867966,-0.8040315710610209,-0.33141077436259064,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.8401619990300588,-1.9705201788997742,-0.5350357118893938],[0.0,-0.022357829473130145,-0.00031485772065575554],[0.0815912119554103,0.06111919771912949,-0.05099896656630302]],[[-0.0,0.03110159440847736,-0.0045935597612103175],[-0.2557720996580582,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.8017942805628837,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[-1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_253","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.8761209558749101,2.0,0,0,1.2496205035036094,0.0,0,0,-0.40397771180941255,0.8967489603213805,0.47270309549764944,0.0,0.0008403995863552344,0.009417975083360031,-1.8809467639456342e-05,0.8334805658741277,-0.07437445062191045,0.0,0.013496642621239919,-0.0012043536721725737,-5.222081126173104e-05,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.00014498087777417584,0.5002586383293183,-0.044639866744327864,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.40397771180941255,0.8967489603213805,0.47270309549764944,0.0,0.13108520187426526,0.008688345907040661,0.0,0.22408941453917944,-0.01999629958865052,-0.0,-0.09422659498178756,0.2996141822901355,0.0,-0.05299079470626778,-0.5938436813795895,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.40397771180941255,0.8967489603213805,0.47270309549764944,0.0,0.9960423041747573,-0.08888041569569959,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.40397771180941255,0.8967489603213805,0.47270309549764944],[0.0,0.13108520187426526,0.008688345907040661],[0.0,0.22408941453917944,-0.01999629958865052]],[[-0.0,-0.09422659498178756,0.2996141822901355],[0.0,-0.05299079470626778,-0.5938436813795895],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_254","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.6101944055001787,0.0,0,0,0.0,0.6636463565161004,0,0,-0.2095727062452215,0.6487394573529559,1.5743997230915667,56.97240275363504,18.061373229149872,-0.6929000582659949,-0.21378314288396308,0.6806594282518025,0.16438829224168744,2.518300838055151,-6.74638953789829,31.20881568605726,0.031524458031113645,0.79801393134545,0.16996238568632327,1.23456e-61,1.23456e-61,1.23456e-61,-0.2384583539697165,0.7592222879939182,0.18336226631826769,1.23456e-61,1.23456e-61,1.23456e-61,-0.2919989836325479,0.9296891165891211,0.2245322695144258,-0.2095727062452215,0.6487394573529559,1.5743997230915667,0.024734469351901534,0.013723286583728319,-0.02465547727839801,0.05546176960485888,-0.14858399896568708,0.6871975380548321,-0.02690576692333685,-0.013948918002113248,0.022765995597625002,-1.4719577010479352e-05,4.6865336232330355e-05,1.1318601151757225e-05,1.23456e-61,1.23456e-61,1.23456e-61,2.2028361689074815e-05,-7.013561439101817e-05,-1.693868239608927e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.2919989836325479,0.9296891165891211,0.2245322695144258,-0.2095727062452215,0.6487394573529559,1.5743997230915667,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.6101944055001787,0.0,0,0,0.0,0.6636463565161004,0,0,-0.2095727062452215,0.6487394573529559,1.5743997230915667,56.97240275363504,18.061373229149872,-0.6929000582659949,-0.21378314288396308,0.6806594282518025,0.16438829224168744,2.518300838055151,-6.74638953789829,31.20881568605726,0.031524458031113645,0.79801393134545,0.16996238568632327,1.23456e-61,1.23456e-61,1.23456e-61,-0.2384583539697165,0.7592222879939182,0.18336226631826769,1.23456e-61,1.23456e-61,1.23456e-61,-0.2919989836325479,0.9296891165891211,0.2245322695144258,-0.2095727062452215,0.6487394573529559,1.5743997230915667,0.024734469351901534,0.013723286583728319,-0.02465547727839801,0.05546176960485888,-0.14858399896568708,0.6871975380548321,-0.02690576692333685,-0.013948918002113248,0.022765995597625002,-1.4719577010479352e-05,4.6865336232330355e-05,1.1318601151757225e-05,1.23456e-61,1.23456e-61,1.23456e-61,2.2028361689074815e-05,-7.013561439101817e-05,-1.693868239608927e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.2919989836325479,0.9296891165891211,0.2245322695144258,-0.2095727062452215,0.6487394573529559,1.5743997230915667,-0.07862607029439853,0.21063492098499195,-0.9743976965960596,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.2095727062452215,0.6487394573529559,1.5743997230915667],[0.024734469351901534,0.013723286583728319,-0.02465547727839801],[0.05546176960485888,-0.14858399896568708,0.6871975380548321]],[[-0.02690576692333685,-0.013948918002113248,0.022765995597625002],[-1.4719577010479352e-05,4.6865336232330355e-05,1.1318601151757225e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[2.2028361689074815e-05,-7.013561439101817e-05,-1.693868239608927e-05],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.2919989836325479,0.9296891165891211,0.2245322695144258]]],"normal":[0.2919989836325479,-0.9296891165891211,-0.2245322695144258]},{"op":"state"}]}}, +{"name":"adv_sing_255","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.3887649010931664,0.029961670940105156,0,0,2.0,2.0,0,0,-448.4771064325748,-82.33367070326759,110.39101209910717,-1.3429881393767498,2.220739570813695,0.0,0.0,0.0,0.004859141650794692,1.2330237228541625,0.7456688110243194,0.0,-0.0,0.0,-0.0016764418205892084,1.23456e-61,1.23456e-61,1.23456e-61,-0.2969173729027922,-0.1795602309356996,0.0005783855215171226,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-448.4771064325748,-82.33367070326759,110.39101209910717,-14.413865858951896,23.834493651023497,0.0,-0.5719347809712719,-0.34587649872876336,-775.8437656061332,13.137141653533318,7.944662065684262,0.0,0.0,0.0,-0.005165387257112498,1.23456e-61,1.23456e-61,1.23456e-61,-0.03680004609267653,-0.02225475966678691,-235.7253673079226,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-448.4771064325748,-82.33367070326759,110.39101209910717,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.3887649010931664,0.029961670940105156,0,0,2.0,2.0,0,0,-448.4771064325748,-82.33367070326759,110.39101209910717,-1.3429881393767498,2.220739570813695,0.0,0.0,0.0,0.004859141650794692,1.2330237228541625,0.7456688110243194,0.0,-0.0,0.0,-0.0016764418205892084,1.23456e-61,1.23456e-61,1.23456e-61,-0.2969173729027922,-0.1795602309356996,0.0005783855215171226,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-448.4771064325748,-82.33367070326759,110.39101209910717,-14.413865858951896,23.834493651023497,0.0,-0.5719347809712719,-0.34587649872876336,-775.8437656061332,13.137141653533318,7.944662065684262,0.0,0.0,0.0,-0.005165387257112498,1.23456e-61,1.23456e-61,1.23456e-61,-0.03680004609267653,-0.02225475966678691,-235.7253673079226,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-448.4771064325748,-82.33367070326759,110.39101209910717,0.6942351430869275,0.3673092017668398,0.6189681061254129,0,0,0,0,0,0,0],[1,1,1,1,1,1.3887649010931664,0.029961670940105156,0,0,2.0,2.0,0,0,-448.4771064325748,-82.33367070326759,110.39101209910717,-1.3429881393767498,2.220739570813695,0.0,0.0,0.0,0.004859141650794692,1.2330237228541625,0.7456688110243194,0.0,-0.0,0.0,-0.0016764418205892084,1.23456e-61,1.23456e-61,1.23456e-61,-0.2969173729027922,-0.1795602309356996,0.0005783855215171226,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-448.4771064325748,-82.33367070326759,110.39101209910717,-14.413865858951896,23.834493651023497,0.0,-0.5719347809712719,-0.34587649872876336,-775.8437656061332,13.137141653533318,7.944662065684262,0.0,0.0,0.0,-0.005165387257112498,1.23456e-61,1.23456e-61,1.23456e-61,-0.03680004609267653,-0.02225475966678691,-235.7253673079226,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-448.4771064325748,-82.33367070326759,110.39101209910717,-0.46678315224477934,0.525080217098434,0.7116208642193458,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-448.4771064325748,-82.33367070326759,110.39101209910717],[-14.413865858951896,23.834493651023497,0.0],[-0.5719347809712719,-0.34587649872876336,-775.8437656061332]],[[13.137141653533318,7.944662065684262,0.0],[0.0,0.0,-0.005165387257112498],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.03680004609267653,-0.02225475966678691,-235.7253673079226],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,-1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_256","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,0.0,2.0,0,0,0.000722408770860447,-0.00035030136028509084,-0.0001683136622721375,-0.18377796156775128,16.08644516378429,0.0,-0.0,0.0,-0.0001955517162686331,16.426774204441298,8.533407470441588,0.0,0.0,0.0,1.2791544078659858e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.0040161924602781784,-0.7497901644157596,-8.363666887879046e-07,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.000722408770860447,-0.00035030136028509084,-0.0001683136622721375,-0.05781387883446428,-0.025145619777895548,0.0,-0.0,0.0,-22.68805125025654,-0.12081485874279814,-0.07605949888444916,0.0,-0.0,-0.0,-54.47911776860322,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,-130.81263384052653,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.000722408770860447,-0.00035030136028509084,-0.0001683136622721375,0.9999856546808799,0.005356345064682304,-0.0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.0,2.0,0,0,0.000722408770860447,-0.00035030136028509084,-0.0001683136622721375,-0.18377796156775128,16.08644516378429,0.0,-0.0,0.0,-0.0001955517162686331,16.426774204441298,8.533407470441588,0.0,0.0,0.0,1.2791544078659858e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.0040161924602781784,-0.7497901644157596,-8.363666887879046e-07,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.000722408770860447,-0.00035030136028509084,-0.0001683136622721375,-0.05781387883446428,-0.025145619777895548,0.0,-0.0,0.0,-22.68805125025654,-0.12081485874279814,-0.07605949888444916,0.0,-0.0,-0.0,-54.47911776860322,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,-130.81263384052653,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.000722408770860447,-0.00035030136028509084,-0.0001683136622721375,0.5762551224066735,-0.783857042308889,-0.23129671662786414,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.000722408770860447,-0.00035030136028509084,-0.0001683136622721375],[-0.05781387883446428,-0.025145619777895548,0.0],[-0.0,0.0,-22.68805125025654]],[[-0.12081485874279814,-0.07605949888444916,0.0],[-0.0,-0.0,-54.47911776860322],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0,0.0,-130.81263384052653],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_257","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,1.0283254788575464,0.0,0,0,622.8192690296542,-477.9211802511958,137.80911405899099,-29.50955941024855,33.04269520226353,3.7272886181738567,1134.8477557158556,1122.0133198953347,-962.4431212283567,-20.738503192708013,34.37425410455318,15.62858351150556,947.4684700246256,935.7409074189397,-802.6568129066426,1.23456e-61,1.23456e-61,1.23456e-61,789.9383849865064,781.0001250332982,-669.5524918680925,1.23456e-61,1.23456e-61,1.23456e-61,-0.6090403862328537,-0.6021490116679318,0.516223183986025,622.8192690296542,-477.9211802511958,137.80911405899099,-0.014749578029634187,0.009941290523655725,-0.005805532431294448,0.19923600204185196,0.18897342446430634,0.500643483611097,-0.024214004048658474,0.003568823504968824,-0.02440483733106733,0.28196021536598886,-0.2759662364087119,-0.008505295631887445,1.23456e-61,1.23456e-61,1.23456e-61,-0.00227088605957055,-0.00224519067584147,0.0019248050845889048,1.23456e-61,1.23456e-61,1.23456e-61,-0.6090403862328537,-0.6021490116679318,0.516223183986025,622.8192690296542,-477.9211802511958,137.80911405899099,-0.6090403862328537,-0.6021490116679318,0.516223183986025,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,1.0283254788575464,0.0,0,0,622.8192690296542,-477.9211802511958,137.80911405899099,-29.50955941024855,33.04269520226353,3.7272886181738567,1134.8477557158556,1122.0133198953347,-962.4431212283567,-20.738503192708013,34.37425410455318,15.62858351150556,947.4684700246256,935.7409074189397,-802.6568129066426,1.23456e-61,1.23456e-61,1.23456e-61,789.9383849865064,781.0001250332982,-669.5524918680925,1.23456e-61,1.23456e-61,1.23456e-61,-0.6090403862328537,-0.6021490116679318,0.516223183986025,622.8192690296542,-477.9211802511958,137.80911405899099,-0.014749578029634187,0.009941290523655725,-0.005805532431294448,0.19923600204185196,0.18897342446430634,0.500643483611097,-0.024214004048658474,0.003568823504968824,-0.02440483733106733,0.28196021536598886,-0.2759662364087119,-0.008505295631887445,1.23456e-61,1.23456e-61,1.23456e-61,-0.00227088605957055,-0.00224519067584147,0.0019248050845889048,1.23456e-61,1.23456e-61,1.23456e-61,-0.6090403862328537,-0.6021490116679318,0.516223183986025,622.8192690296542,-477.9211802511958,137.80911405899099,0.32527761409863165,-1.0705318356829119,-0.8649601508483941,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,1.0283254788575464,0.0,0,0,622.8192690296542,-477.9211802511958,137.80911405899099,-29.50955941024855,33.04269520226353,3.7272886181738567,1134.8477557158556,1122.0133198953347,-962.4431212283567,-20.738503192708013,34.37425410455318,15.62858351150556,947.4684700246256,935.7409074189397,-802.6568129066426,1.23456e-61,1.23456e-61,1.23456e-61,789.9383849865064,781.0001250332982,-669.5524918680925,1.23456e-61,1.23456e-61,1.23456e-61,-0.6090403862328537,-0.6021490116679318,0.516223183986025,622.8192690296542,-477.9211802511958,137.80911405899099,-0.014749578029634187,0.009941290523655725,-0.005805532431294448,0.19923600204185196,0.18897342446430634,0.500643483611097,-0.024214004048658474,0.003568823504968824,-0.02440483733106733,0.28196021536598886,-0.2759662364087119,-0.008505295631887445,1.23456e-61,1.23456e-61,1.23456e-61,-0.00227088605957055,-0.00224519067584147,0.0019248050845889048,1.23456e-61,1.23456e-61,1.23456e-61,-0.6090403862328537,-0.6021490116679318,0.516223183986025,622.8192690296542,-477.9211802511958,137.80911405899099,0.37409531932075546,0.3558260084817758,0.8564114336872373,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[622.8192690296542,-477.9211802511958,137.80911405899099],[-0.014749578029634187,0.009941290523655725,-0.005805532431294448],[0.19923600204185196,0.18897342446430634,0.500643483611097]],[[-0.024214004048658474,0.003568823504968824,-0.02440483733106733],[0.28196021536598886,-0.2759662364087119,-0.008505295631887445],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.00227088605957055,-0.00224519067584147,0.0019248050845889048],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6090403862328537,-0.6021490116679318,0.516223183986025]]],"normal":[-0.6090403862328537,-0.6021490116679318,0.516223183986025]},{"op":"state"}]}}, +{"name":"adv_sing_258","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.8342133571757893,0,0,0.0,2.0,0,0,-409.89291345475556,-867.0778768740148,-796.3559818413141,-23.15442653625677,-0.08569589961174644,-25.28566546536609,3759030.071601631,10580774.268914472,-3478054.185700672,-14.479030890932803,9.491698999768793,13.226476394451693,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1517920.7377715202,4272584.869564057,-1404460.850093036,1.23456e-61,1.23456e-61,1.23456e-61,-0.3197814871146861,-0.9001086218894245,0.2958788084656299,-409.89291345475556,-867.0778768740148,-796.3559818413141,15.195522773278121,-5.966300045055269,-1.7272992414018082,861760.6182751326,2425650.62009365,-797346.6732500565,-0.5182645605288769,13.166991956415657,39.49587208707159,-494557.1492129223,-1392060.4286387472,457590.52954431635,1.23456e-61,1.23456e-61,1.23456e-61,5543610.942456595,15603942.71328216,-5129243.14365588,1.23456e-61,1.23456e-61,1.23456e-61,0.3197814871146861,0.9001086218894245,-0.2958788084656299,-409.89291345475556,-867.0778768740148,-796.3559818413141,-0.5752474032086801,0.2732419743847418,0.7709923790388581,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-409.89291345475556,-867.0778768740148,-796.3559818413141],[15.195522773278121,-5.966300045055269,-1.7272992414018082],[861760.6182751326,2425650.62009365,-797346.6732500565]],[[-0.5182645605288769,13.166991956415657,39.49587208707159],[-494557.1492129223,-1392060.4286387472,457590.52954431635],[1.23456e-61,1.23456e-61,1.23456e-61]],[[5543610.942456595,15603942.71328216,-5129243.14365588],[1.23456e-61,1.23456e-61,1.23456e-61],[0.3197814871146861,0.9001086218894245,-0.2958788084656299]]],"normal":[-0.3197814871146861,-0.9001086218894245,0.2958788084656299]},{"op":"state"}]}}, +{"name":"adv_sing_259","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,1.1992309684357996,2.0,0,0,0.0006348450280844502,-0.0007173716248790208,8.774407587180022e-05,-0.015030844267856518,-0.009398182320106445,-0.01900369788010711,1.8570919614211413e-11,-3.5466135206409512e-09,1.7392711720546395e-09,-0.013665286944994573,-0.006921380722341595,-0.013967738841609751,-6.757695104857307e-12,1.2905625206042776e-09,-6.328961909036923e-10,1.23456e-61,1.23456e-61,1.23456e-61,-1.1942963700345457e-12,2.2808281666221575e-10,-1.1185257867903335e-10,1.23456e-61,1.23456e-61,1.23456e-61,-0.0047012912518737335,0.8978372350288389,-0.4403023929713924,0.0006348450280844502,-0.0007173716248790208,8.774407587180022e-05,0.18917092094980312,0.17984500951839152,0.36470889335909445,-0.22600370877274098,0.3030383526657129,-0.5217198042416926,0.6850499540891167,0.09027256585769296,0.1767636352079306,-0.002471631839671981,0.47202416911649253,-0.23148223652770336,1.23456e-61,1.23456e-61,1.23456e-61,-0.00597872562279129,1.1417974753262905,-0.559941313481738,1.23456e-61,1.23456e-61,1.23456e-61,-0.0047012912518737335,0.8978372350288389,-0.4403023929713924,0.0006348450280844502,-0.0007173716248790208,8.774407587180022e-05,-0.0047012912518737335,0.8978372350288389,-0.4403023929713924,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,1.1992309684357996,2.0,0,0,0.0006348450280844502,-0.0007173716248790208,8.774407587180022e-05,-0.015030844267856518,-0.009398182320106445,-0.01900369788010711,1.8570919614211413e-11,-3.5466135206409512e-09,1.7392711720546395e-09,-0.013665286944994573,-0.006921380722341595,-0.013967738841609751,-6.757695104857307e-12,1.2905625206042776e-09,-6.328961909036923e-10,1.23456e-61,1.23456e-61,1.23456e-61,-1.1942963700345457e-12,2.2808281666221575e-10,-1.1185257867903335e-10,1.23456e-61,1.23456e-61,1.23456e-61,-0.0047012912518737335,0.8978372350288389,-0.4403023929713924,0.0006348450280844502,-0.0007173716248790208,8.774407587180022e-05,0.18917092094980312,0.17984500951839152,0.36470889335909445,-0.22600370877274098,0.3030383526657129,-0.5217198042416926,0.6850499540891167,0.09027256585769296,0.1767636352079306,-0.002471631839671981,0.47202416911649253,-0.23148223652770336,1.23456e-61,1.23456e-61,1.23456e-61,-0.00597872562279129,1.1417974753262905,-0.559941313481738,1.23456e-61,1.23456e-61,1.23456e-61,-0.0047012912518737335,0.8978372350288389,-0.4403023929713924,0.0006348450280844502,-0.0007173716248790208,8.774407587180022e-05,-0.0047012912518737335,0.8978372350288389,-0.4403023929713924,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0006348450280844502,-0.0007173716248790208,8.774407587180022e-05],[0.18917092094980312,0.17984500951839152,0.36470889335909445],[-0.22600370877274098,0.3030383526657129,-0.5217198042416926]],[[0.6850499540891167,0.09027256585769296,0.1767636352079306],[-0.002471631839671981,0.47202416911649253,-0.23148223652770336],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.00597872562279129,1.1417974753262905,-0.559941313481738],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.0047012912518737335,0.8978372350288389,-0.4403023929713924]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_260","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.39376266570732255,0.01863644966496869,0,0,2.0,2.0,0,0,-250.21458090960857,-988.0603447572287,997.0636655758518,-0.47150414075642044,0.4887419058154905,0.17110035742859764,0.18994913952885104,1.2651387085281427,-3.090376347850008,-0.37917415799045917,-0.3128106959989386,-0.1513643234155552,-0.5964978495725844,0.8053432147380452,-0.17007575553157586,1.23456e-61,1.23456e-61,1.23456e-61,0.49197057139995004,0.334019556207523,0.40161696969888494,1.23456e-61,1.23456e-61,1.23456e-61,0.056790920522095854,0.3782506834390572,-0.9239595293215711,-250.21458090960857,-988.0603447572287,997.0636655758518,-6.461041022555911,6.697250840363997,2.344595376292239,-26.32232087676158,-175.31738823397737,428.2508363019301,-5.738979544851471,-4.734537277706126,-2.290970356487247,11.341781561269773,75.54088906337851,-184.52504479024344,1.23456e-61,1.23456e-61,1.23456e-61,-11.754807063815639,-77.32107184751999,188.4718903847342,1.23456e-61,1.23456e-61,1.23456e-61,-0.056790920522095854,-0.3782506834390572,0.9239595293215711,-250.21458090960857,-988.0603447572287,997.0636655758518,0.24755961951988512,0.0434427562478592,0.9678982186742359,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-250.21458090960857,-988.0603447572287,997.0636655758518],[-6.461041022555911,6.697250840363997,2.344595376292239],[-26.32232087676158,-175.31738823397737,428.2508363019301]],[[-5.738979544851471,-4.734537277706126,-2.290970356487247],[11.341781561269773,75.54088906337851,-184.52504479024344],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-11.754807063815639,-77.32107184751999,188.4718903847342],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.056790920522095854,-0.3782506834390572,0.9239595293215711]]],"normal":[0.056790920522095854,0.3782506834390572,-0.9239595293215711]},{"op":"state"}]}}, +{"name":"adv_sing_261","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,1.2716485409322966,0,0,1.7783272812485669,1.1774766558774545,0,0,0.6511376407403628,-0.03493857765423192,-0.058153937857073235,-22.367463071398465,-28.366907494938722,11.805544829662635,199.65473619749966,-267.3649426769593,-264.1594862732516,-42.75687065440677,14.321640256622262,-46.59692449715851,-45.74162741783553,61.38731110795956,60.839548181101165,1.23456e-61,1.23456e-61,1.23456e-61,10.509923942718558,-14.104788290525287,-13.978930357064923,1.23456e-61,1.23456e-61,1.23456e-61,-0.4677716069286479,0.6277704310713366,0.6221687951222714,0.6511376407403628,-0.03493857765423192,-0.058153937857073235,-0.0054002570591026,0.00703957652328822,-0.011163087839504354,1.2550039605121794,-1.3795085840182502,-0.9369442757366331,0.013535674224922582,0.002639860116394076,0.007513038256602613,-0.60590644770223,0.8131535694532898,0.8058977478323402,1.23456e-61,1.23456e-61,1.23456e-61,2.522037975083038,-3.384687833431635,-3.354486046113048,1.23456e-61,1.23456e-61,1.23456e-61,-0.4677716069286479,0.6277704310713366,0.6221687951222714,0.6511376407403628,-0.03493857765423192,-0.058153937857073235,0.7071557249907008,-0.4065866300261776,-0.5784618335697114,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.2716485409322966,0,0,1.7783272812485669,1.1774766558774545,0,0,0.6511376407403628,-0.03493857765423192,-0.058153937857073235,-22.367463071398465,-28.366907494938722,11.805544829662635,199.65473619749966,-267.3649426769593,-264.1594862732516,-42.75687065440677,14.321640256622262,-46.59692449715851,-45.74162741783553,61.38731110795956,60.839548181101165,1.23456e-61,1.23456e-61,1.23456e-61,10.509923942718558,-14.104788290525287,-13.978930357064923,1.23456e-61,1.23456e-61,1.23456e-61,-0.4677716069286479,0.6277704310713366,0.6221687951222714,0.6511376407403628,-0.03493857765423192,-0.058153937857073235,-0.0054002570591026,0.00703957652328822,-0.011163087839504354,1.2550039605121794,-1.3795085840182502,-0.9369442757366331,0.013535674224922582,0.002639860116394076,0.007513038256602613,-0.60590644770223,0.8131535694532898,0.8058977478323402,1.23456e-61,1.23456e-61,1.23456e-61,2.522037975083038,-3.384687833431635,-3.354486046113048,1.23456e-61,1.23456e-61,1.23456e-61,-0.4677716069286479,0.6277704310713366,0.6221687951222714,0.6511376407403628,-0.03493857765423192,-0.058153937857073235,0.41381345133748737,0.047999796503175804,0.909095400399656,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.2716485409322966,0,0,1.7783272812485669,1.1774766558774545,0,0,0.6511376407403628,-0.03493857765423192,-0.058153937857073235,-22.367463071398465,-28.366907494938722,11.805544829662635,199.65473619749966,-267.3649426769593,-264.1594862732516,-42.75687065440677,14.321640256622262,-46.59692449715851,-45.74162741783553,61.38731110795956,60.839548181101165,1.23456e-61,1.23456e-61,1.23456e-61,10.509923942718558,-14.104788290525287,-13.978930357064923,1.23456e-61,1.23456e-61,1.23456e-61,-0.4677716069286479,0.6277704310713366,0.6221687951222714,0.6511376407403628,-0.03493857765423192,-0.058153937857073235,-0.0054002570591026,0.00703957652328822,-0.011163087839504354,1.2550039605121794,-1.3795085840182502,-0.9369442757366331,0.013535674224922582,0.002639860116394076,0.007513038256602613,-0.60590644770223,0.8131535694532898,0.8058977478323402,1.23456e-61,1.23456e-61,1.23456e-61,2.522037975083038,-3.384687833431635,-3.354486046113048,1.23456e-61,1.23456e-61,1.23456e-61,-0.4677716069286479,0.6277704310713366,0.6221687951222714,0.6511376407403628,-0.03493857765423192,-0.058153937857073235,-0.5885449587892413,-0.7464056316666183,0.3106339719028281,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.6511376407403628,-0.03493857765423192,-0.058153937857073235],[-0.0054002570591026,0.00703957652328822,-0.011163087839504354],[1.2550039605121794,-1.3795085840182502,-0.9369442757366331]],[[0.013535674224922582,0.002639860116394076,0.007513038256602613],[-0.60590644770223,0.8131535694532898,0.8058977478323402],[1.23456e-61,1.23456e-61,1.23456e-61]],[[2.522037975083038,-3.384687833431635,-3.354486046113048],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.4677716069286479,0.6277704310713366,0.6221687951222714]]],"normal":[-0.4677716069286479,0.6277704310713366,0.6221687951222714]},{"op":"state"}]}}, +{"name":"adv_sing_262","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.56801903072414,0.0,0,0,0.0,0.45199317892662516,0,0,0.0009571254890728942,0.00041189838555903837,-0.00023539366085266746,-2.6965242731184516,1.2436843645960114,0.0,0.10309484305049486,-0.9443471485110769,-88179.93954257578,-6.332854005692796,9.178144742338116,0.0,0.0,0.0,-284914.09656511043,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-1243433.8076872807,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.0009571254890728942,0.00041189838555903837,-0.00023539366085266746,29.18060473318396,3.185660982647464,0.0,0.004784910741618919,-0.04382970749094282,6.516286976250178e-11,2.453189557896844,-22.471177948467847,0.0,-0.16445585108195226,-0.01795372621473061,1.7543761085368595e-10,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,4.723296474545521e-10,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.0009571254890728942,0.00041189838555903837,-0.00023539366085266746,0,0,1,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0009571254890728942,0.00041189838555903837,-0.00023539366085266746],[29.18060473318396,3.185660982647464,0.0],[0.004784910741618919,-0.04382970749094282,6.516286976250178e-11]],[[2.453189557896844,-22.471177948467847,0.0],[-0.16445585108195226,-0.01795372621473061,1.7543761085368595e-10],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,4.723296474545521e-10],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_263","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,0.0,0.30267789812867085,0,0,427.4059005340101,-410.9239459935368,289.88900014407307,2.002449137291096,5.721304599395042,-0.0,0.0,0.0,0.0,-3.29796574175473,-2.695042433205881,0.0,-0.9426139312298987,-0.276821135870394,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.26234038518802894,0.8933049892484782,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,427.4059005340101,-410.9239459935368,289.88900014407307,0.2657315608878304,-0.7217666372331069,0.0,0.0,0.0,0.0,-0.5995727217236327,0.27377753469594196,0.0,0.5457771683878007,0.16028052491024555,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.16653835261291328,-0.5670859299215758,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,427.4059005340101,-410.9239459935368,289.88900014407307,-0.959480669573042,-0.2817744571739372,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.0,0.30267789812867085,0,0,427.4059005340101,-410.9239459935368,289.88900014407307,2.002449137291096,5.721304599395042,-0.0,0.0,0.0,0.0,-3.29796574175473,-2.695042433205881,0.0,-0.9426139312298987,-0.276821135870394,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.26234038518802894,0.8933049892484782,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,427.4059005340101,-410.9239459935368,289.88900014407307,0.2657315608878304,-0.7217666372331069,0.0,0.0,0.0,0.0,-0.5995727217236327,0.27377753469594196,0.0,0.5457771683878007,0.16028052491024555,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.16653835261291328,-0.5670859299215758,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,427.4059005340101,-410.9239459935368,289.88900014407307,-0.2817744571739372,0.959480669573042,-0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[427.4059005340101,-410.9239459935368,289.88900014407307],[0.2657315608878304,-0.7217666372331069,0.0],[0.0,0.0,0.0]],[[-0.5995727217236327,0.27377753469594196,0.0],[0.5457771683878007,0.16028052491024555,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.16653835261291328,-0.5670859299215758,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_264","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.6950118963949568,0,0,2.0,2.0,0,0,1.3183043939283232,1.0883325578056158,-0.16105295224743088,1.5178082919072935,0.0,-10.432706655155876,-0.0,0.18641558710259165,-0.0,-3.568881508110815,0.0,8.156413884590833,0.0,-1.4366811130439108,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.07730006777041896,7.758846978990685,0.07746048010440004,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,1.3183043939283232,1.0883325578056158,-0.16105295224743088,0.051137376069456536,0.0,-0.051031476056470376,0.0,0.01559821205606212,0.0,-0.05815127195871264,0.0,-0.05827194690154154,0.29203807144853267,0.0012683899870068996,-0.29143329197144635,1.23456e-61,1.23456e-61,1.23456e-61,-0.17619491194245465,-0.006699908292666169,-0.17656054987623013,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,1.3183043939283232,1.0883325578056158,-0.16105295224743088,-0.7063734717273272,-0.0,-0.7078393309500983,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.6950118963949568,0,0,2.0,2.0,0,0,1.3183043939283232,1.0883325578056158,-0.16105295224743088,1.5178082919072935,0.0,-10.432706655155876,-0.0,0.18641558710259165,-0.0,-3.568881508110815,0.0,8.156413884590833,0.0,-1.4366811130439108,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.07730006777041896,7.758846978990685,0.07746048010440004,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,1.3183043939283232,1.0883325578056158,-0.16105295224743088,0.051137376069456536,0.0,-0.051031476056470376,0.0,0.01559821205606212,0.0,-0.05815127195871264,0.0,-0.05827194690154154,0.29203807144853267,0.0012683899870068996,-0.29143329197144635,1.23456e-61,1.23456e-61,1.23456e-61,-0.17619491194245465,-0.006699908292666169,-0.17656054987623013,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,1.3183043939283232,1.0883325578056158,-0.16105295224743088,0.0014658592227710932,0.0,-1.4142128026774254,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[1.3183043939283232,1.0883325578056158,-0.16105295224743088],[0.051137376069456536,0.0,-0.051031476056470376],[0.0,0.01559821205606212,0.0]],[[-0.05815127195871264,0.0,-0.05827194690154154],[0.29203807144853267,0.0012683899870068996,-0.29143329197144635],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.17619491194245465,-0.006699908292666169,-0.17656054987623013],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_265","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,0.0,1.4421044040193418,0,0,-0.7824020306793105,0.6043622206562254,-0.222745831419616,-0.005389332452608075,-0.03914267182524894,0.0,-0.028404352037029432,0.00391083411249721,-0.5009677942490764,-0.049335584614376954,0.006792736796754481,0.0,-0.08115043970350708,-0.5893948940284514,3.4662330848333767,1.23456e-61,1.23456e-61,1.23456e-61,-0.06653809003408932,0.00916125218932969,-24.00630914509051,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.7824020306793105,0.6043622206562254,-0.222745831419616,11.861541113377106,0.713705440538221,-0.0,-0.7623675321435077,0.10496606108388987,-649393.7316487666,21.93981976518389,-5.985405428915346,0.0,-0.015105276229639392,-0.10970948173746042,-745301.6335952021,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,-855374.0171687127,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.7824020306793105,0.6043622206562254,-0.222745831419616,0.682438424445417,0.46628733203495465,0.5628977889672162,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,1.4421044040193418,0,0,-0.7824020306793105,0.6043622206562254,-0.222745831419616,-0.005389332452608075,-0.03914267182524894,0.0,-0.028404352037029432,0.00391083411249721,-0.5009677942490764,-0.049335584614376954,0.006792736796754481,0.0,-0.08115043970350708,-0.5893948940284514,3.4662330848333767,1.23456e-61,1.23456e-61,1.23456e-61,-0.06653809003408932,0.00916125218932969,-24.00630914509051,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.7824020306793105,0.6043622206562254,-0.222745831419616,11.861541113377106,0.713705440538221,-0.0,-0.7623675321435077,0.10496606108388987,-649393.7316487666,21.93981976518389,-5.985405428915346,0.0,-0.015105276229639392,-0.10970948173746042,-745301.6335952021,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,-855374.0171687127,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.7824020306793105,0.6043622206562254,-0.222745831419616,-0.17486893724147384,-0.4249379722821621,-0.8881714780946087,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,1.4421044040193418,0,0,-0.7824020306793105,0.6043622206562254,-0.222745831419616,-0.005389332452608075,-0.03914267182524894,0.0,-0.028404352037029432,0.00391083411249721,-0.5009677942490764,-0.049335584614376954,0.006792736796754481,0.0,-0.08115043970350708,-0.5893948940284514,3.4662330848333767,1.23456e-61,1.23456e-61,1.23456e-61,-0.06653809003408932,0.00916125218932969,-24.00630914509051,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.7824020306793105,0.6043622206562254,-0.222745831419616,11.861541113377106,0.713705440538221,-0.0,-0.7623675321435077,0.10496606108388987,-649393.7316487666,21.93981976518389,-5.985405428915346,0.0,-0.015105276229639392,-0.10970948173746042,-745301.6335952021,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,-855374.0171687127,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.7824020306793105,0.6043622206562254,-0.222745831419616,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.7824020306793105,0.6043622206562254,-0.222745831419616],[11.861541113377106,0.713705440538221,-0.0],[-0.7623675321435077,0.10496606108388987,-649393.7316487666]],[[21.93981976518389,-5.985405428915346,0.0],[-0.015105276229639392,-0.10970948173746042,-745301.6335952021],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0,0.0,-855374.0171687127],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_266","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,1.2932185853741456,2.0,0,0,0.0004080163330922568,-0.0009965753358841143,0.0007169845587403801,-0.0420230779896449,0.05349387244167508,-0.03118100861896743,-0.057557901838051095,-0.13239303324348276,0.5836333681325293,0.04345345853896483,-0.06037903706634818,0.04830717496287924,0.004508553372777408,0.0043390946130932,0.0013678737677048874,1.23456e-61,1.23456e-61,1.23456e-61,-0.005065390051112475,-0.004875001994366578,-0.0015368153820571736,1.23456e-61,1.23456e-61,1.23456e-61,-0.7038956692004418,-0.6774390040159922,-0.21355861658730277,0.0004080163330922568,-0.0009965753358841143,0.0007169845587403801,0.24222860186928258,-0.27003964025047117,0.05821221977605303,-5.145695572370216e-08,-4.952289147446558e-08,-1.561179697359193e-08,0.13249511630418928,-0.24816492411564162,0.3505073298565623,-0.4162550490049934,0.4157237244481618,0.05325288030181618,1.23456e-61,1.23456e-61,1.23456e-61,0.019097810245919687,0.04579333941986824,-0.20821066608783934,1.23456e-61,1.23456e-61,1.23456e-61,-0.7038956692004418,-0.6774390040159922,-0.21355861658730277,0.0004080163330922568,-0.0009965753358841143,0.0007169845587403801,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,1.2932185853741456,2.0,0,0,0.0004080163330922568,-0.0009965753358841143,0.0007169845587403801,-0.0420230779896449,0.05349387244167508,-0.03118100861896743,-0.057557901838051095,-0.13239303324348276,0.5836333681325293,0.04345345853896483,-0.06037903706634818,0.04830717496287924,0.004508553372777408,0.0043390946130932,0.0013678737677048874,1.23456e-61,1.23456e-61,1.23456e-61,-0.005065390051112475,-0.004875001994366578,-0.0015368153820571736,1.23456e-61,1.23456e-61,1.23456e-61,-0.7038956692004418,-0.6774390040159922,-0.21355861658730277,0.0004080163330922568,-0.0009965753358841143,0.0007169845587403801,0.24222860186928258,-0.27003964025047117,0.05821221977605303,-5.145695572370216e-08,-4.952289147446558e-08,-1.561179697359193e-08,0.13249511630418928,-0.24816492411564162,0.3505073298565623,-0.4162550490049934,0.4157237244481618,0.05325288030181618,1.23456e-61,1.23456e-61,1.23456e-61,0.019097810245919687,0.04579333941986824,-0.20821066608783934,1.23456e-61,1.23456e-61,1.23456e-61,-0.7038956692004418,-0.6774390040159922,-0.21355861658730277,0.0004080163330922568,-0.0009965753358841143,0.0007169845587403801,-0.08922551844413919,-0.21394722392493407,0.9727617345646306,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0004080163330922568,-0.0009965753358841143,0.0007169845587403801],[0.24222860186928258,-0.27003964025047117,0.05821221977605303],[-5.145695572370216e-08,-4.952289147446558e-08,-1.561179697359193e-08]],[[0.13249511630418928,-0.24816492411564162,0.3505073298565623],[-0.4162550490049934,0.4157237244481618,0.05325288030181618],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.019097810245919687,0.04579333941986824,-0.20821066608783934],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.7038956692004418,-0.6774390040159922,-0.21355861658730277]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_267","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.6643356883884828,0,0,0.8095220278247699,0.0,0,0,-1.1923998377377822,-0.686211511965003,-1.5069616294502692,0.32114813231613404,0.0,0.06595295131504059,0.0,0.0,0.0,0.10640501581778897,0.0,-0.5181234716202723,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-1.1923998377377822,-0.686211511965003,-1.5069616294502692,-0.8465891223783736,0.0,-0.724895646851135,0.1868174791105036,-8.350920429989605e-10,-0.9096800568296098,0.23560021842458406,0.0,1.8115934912077403,0.25353641822053513,1.6566514699197879e-09,0.0520677947802241,1.23456e-61,1.23456e-61,1.23456e-61,0.17493339066035915,-3.286457002908853e-09,-0.8518122475209268,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-1.1923998377377822,-0.686211511965003,-1.5069616294502692,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-1.1923998377377822,-0.686211511965003,-1.5069616294502692],[-0.8465891223783736,0.0,-0.724895646851135],[0.1868174791105036,-8.350920429989605e-10,-0.9096800568296098]],[[0.23560021842458406,0.0,1.8115934912077403],[0.25353641822053513,1.6566514699197879e-09,0.0520677947802241],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.17493339066035915,-3.286457002908853e-09,-0.8518122475209268],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_268","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.0900310328882243,0.0,0,0,1.292697857010975,0.2845902359799295,0,0,0.21196672829992425,0.6506666738191966,0.5040026116229015,-0.16043292349800792,0.08431951953410025,0.07962575726200298,-0.32315610936724504,-0.2702361667614607,-0.36494090140141633,-0.06413150302233249,-0.05362934830272014,-0.07242384668828442,2.0308245443341692e-20,1.8495812422448093e-19,-1.549431918160687e-19,1.23456e-61,1.23456e-61,1.23456e-61,0.057448021613353335,0.04804035170253853,0.06487617650909147,1.23456e-61,1.23456e-61,1.23456e-61,0.08387160532807547,0.763863862117289,-0.6399043318895029,0.21196672829992425,0.6506666738191966,0.5040026116229015,-38.059280931931134,41.14273405030314,44.124337550525254,2292.7118188610525,20879.074083790132,-17490.408670666893,-20.086342734547905,7.030365475632708,5.759561438056974,805.1284181790195,7339.688658492419,-6147.931039896764,1.23456e-61,1.23456e-61,1.23456e-61,283.33984066604467,2580.094588597726,-2161.301857579972,1.23456e-61,1.23456e-61,1.23456e-61,0.08387160532807547,0.763863862117289,-0.6399043318895029,0.21196672829992425,0.6506666738191966,0.5040026116229015,0.7521469841690991,0.14836472515166674,-0.6420769599790973,0,0,0,0,0,0,0],[1,1,1,1,1,1.0900310328882243,0.0,0,0,1.292697857010975,0.2845902359799295,0,0,0.21196672829992425,0.6506666738191966,0.5040026116229015,-0.16043292349800792,0.08431951953410025,0.07962575726200298,-0.32315610936724504,-0.2702361667614607,-0.36494090140141633,-0.06413150302233249,-0.05362934830272014,-0.07242384668828442,2.0308245443341692e-20,1.8495812422448093e-19,-1.549431918160687e-19,1.23456e-61,1.23456e-61,1.23456e-61,0.057448021613353335,0.04804035170253853,0.06487617650909147,1.23456e-61,1.23456e-61,1.23456e-61,0.08387160532807547,0.763863862117289,-0.6399043318895029,0.21196672829992425,0.6506666738191966,0.5040026116229015,-38.059280931931134,41.14273405030314,44.124337550525254,2292.7118188610525,20879.074083790132,-17490.408670666893,-20.086342734547905,7.030365475632708,5.759561438056974,805.1284181790195,7339.688658492419,-6147.931039896764,1.23456e-61,1.23456e-61,1.23456e-61,283.33984066604467,2580.094588597726,-2161.301857579972,1.23456e-61,1.23456e-61,1.23456e-61,0.08387160532807547,0.763863862117289,-0.6399043318895029,0.21196672829992425,0.6506666738191966,0.5040026116229015,-0.07809546665063026,-0.9935661244025309,-0.08202106149248933,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.21196672829992425,0.6506666738191966,0.5040026116229015],[-38.059280931931134,41.14273405030314,44.124337550525254],[2292.7118188610525,20879.074083790132,-17490.408670666893]],[[-20.086342734547905,7.030365475632708,5.759561438056974],[805.1284181790195,7339.688658492419,-6147.931039896764],[1.23456e-61,1.23456e-61,1.23456e-61]],[[283.33984066604467,2580.094588597726,-2161.301857579972],[1.23456e-61,1.23456e-61,1.23456e-61],[0.08387160532807547,0.763863862117289,-0.6399043318895029]]],"normal":[0.08387160532807547,0.763863862117289,-0.6399043318895029]},{"op":"state"}]}}, +{"name":"adv_sing_269","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.8367963323690182,2.0,0,0,0.0,0.28701061258844485,0,0,-0.8589780306253669,-0.7169873325257632,-0.6557251338267156,-0.0812897760066954,-0.0307020569542982,0.0,0.0,0.0,0.0,-0.016211445221425265,0.0429230117303258,0.0,-0.2798924096068943,-0.1057116051115561,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.12542049878346856,0.33207560874284825,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.8589780306253669,-0.7169873325257632,-0.6557251338267156,-4.017952945332023,-1.5175268800976094,0.0,0.0,0.0,162174887.22082114,-2.837846429045419,7.51376042660252,0.0,0.0,0.0,112507065.19296938,1.23456e-61,1.23456e-61,1.23456e-61,-0.22264965935709347,0.5895090665764442,77316774.92018284,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.8589780306253669,-0.7169873325257632,-0.6557251338267156,0.9926947295454149,-0.07595880585957,-0.09374131290494822,0,0,0,0,0,0,0],[1,1,1,1,1,0.8367963323690182,2.0,0,0,0.0,0.28701061258844485,0,0,-0.8589780306253669,-0.7169873325257632,-0.6557251338267156,-0.0812897760066954,-0.0307020569542982,0.0,0.0,0.0,0.0,-0.016211445221425265,0.0429230117303258,0.0,-0.2798924096068943,-0.1057116051115561,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.12542049878346856,0.33207560874284825,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.8589780306253669,-0.7169873325257632,-0.6557251338267156,-4.017952945332023,-1.5175268800976094,0.0,0.0,0.0,162174887.22082114,-2.837846429045419,7.51376042660252,0.0,0.0,0.0,112507065.19296938,1.23456e-61,1.23456e-61,1.23456e-61,-0.22264965935709347,0.5895090665764442,77316774.92018284,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.8589780306253669,-0.7169873325257632,-0.6557251338267156,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.8367963323690182,2.0,0,0,0.0,0.28701061258844485,0,0,-0.8589780306253669,-0.7169873325257632,-0.6557251338267156,-0.0812897760066954,-0.0307020569542982,0.0,0.0,0.0,0.0,-0.016211445221425265,0.0429230117303258,0.0,-0.2798924096068943,-0.1057116051115561,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.12542049878346856,0.33207560874284825,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.8589780306253669,-0.7169873325257632,-0.6557251338267156,-4.017952945332023,-1.5175268800976094,0.0,0.0,0.0,162174887.22082114,-2.837846429045419,7.51376042660252,0.0,0.0,0.0,112507065.19296938,1.23456e-61,1.23456e-61,1.23456e-61,-0.22264965935709347,0.5895090665764442,77316774.92018284,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.8589780306253669,-0.7169873325257632,-0.6557251338267156,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.8589780306253669,-0.7169873325257632,-0.6557251338267156],[-4.017952945332023,-1.5175268800976094,0.0],[0.0,0.0,162174887.22082114]],[[-2.837846429045419,7.51376042660252,0.0],[0.0,0.0,112507065.19296938],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.22264965935709347,0.5895090665764442,77316774.92018284],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_270","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.06883675837263548,0,0,2.0,0.0,0,0,955.7114830288709,-95.63718545020316,601.9533434749516,-0.012811534955068172,-0.0006011712155946876,-0.0024541649252820806,-2.9112424666215847e-08,-1.149937862037307e-07,1.8014510594683446e-07,-0.009231482839261895,0.0016317431349177503,-0.00045025107450477717,-0.02807890403228749,0.6890089622689837,0.4352842758550725,1.23456e-61,1.23456e-61,1.23456e-61,-1.2181265976498238e-08,-4.8115878751170165e-08,7.537659521878915e-08,1.23456e-61,1.23456e-61,1.23456e-61,-0.13497173352099293,-0.5331369972103889,0.8351931353620117,955.7114830288709,-95.63718545020316,601.9533434749516,-0.6337190231246335,0.4912952578334765,0.21120087788104758,0.21656970390374575,-2.6038723522645095,4.135626174733113,0.1709819718224162,-0.22672247014634841,-0.11709435776653938,0.23097826621807366,0.9123618409569619,-1.4292730583707718,1.23456e-61,1.23456e-61,1.23456e-61,-0.08914113828194839,-0.3521066044851699,0.5515974702944707,1.23456e-61,1.23456e-61,1.23456e-61,-0.13497173352099293,-0.5331369972103889,0.8351931353620117,955.7114830288709,-95.63718545020316,601.9533434749516,0.6727099213808383,0.07760406775273493,0.7358253667440497,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.06883675837263548,0,0,2.0,0.0,0,0,955.7114830288709,-95.63718545020316,601.9533434749516,-0.012811534955068172,-0.0006011712155946876,-0.0024541649252820806,-2.9112424666215847e-08,-1.149937862037307e-07,1.8014510594683446e-07,-0.009231482839261895,0.0016317431349177503,-0.00045025107450477717,-0.02807890403228749,0.6890089622689837,0.4352842758550725,1.23456e-61,1.23456e-61,1.23456e-61,-1.2181265976498238e-08,-4.8115878751170165e-08,7.537659521878915e-08,1.23456e-61,1.23456e-61,1.23456e-61,-0.13497173352099293,-0.5331369972103889,0.8351931353620117,955.7114830288709,-95.63718545020316,601.9533434749516,-0.6337190231246335,0.4912952578334765,0.21120087788104758,0.21656970390374575,-2.6038723522645095,4.135626174733113,0.1709819718224162,-0.22672247014634841,-0.11709435776653938,0.23097826621807366,0.9123618409569619,-1.4292730583707718,1.23456e-61,1.23456e-61,1.23456e-61,-0.08914113828194839,-0.3521066044851699,0.5515974702944707,1.23456e-61,1.23456e-61,1.23456e-61,-0.13497173352099293,-0.5331369972103889,0.8351931353620117,955.7114830288709,-95.63718545020316,601.9533434749516,-0.5157141601316165,0.4232050278969688,0.7449405408503871,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[955.7114830288709,-95.63718545020316,601.9533434749516],[-0.6337190231246335,0.4912952578334765,0.21120087788104758],[0.21656970390374575,-2.6038723522645095,4.135626174733113]],[[0.1709819718224162,-0.22672247014634841,-0.11709435776653938],[0.23097826621807366,0.9123618409569619,-1.4292730583707718],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.08914113828194839,-0.3521066044851699,0.5515974702944707],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.13497173352099293,-0.5331369972103889,0.8351931353620117]]],"normal":[0.13497173352099293,0.5331369972103889,-0.8351931353620117]},{"op":"state"}]}}, +{"name":"adv_sing_271","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,2.0,2.0,0,0,-969.146676076807,-927.7891942547296,-413.3328422266094,78.53577183721035,31.556471672191556,-72.02063782561459,4328.580574092017,-11826.441692705383,-461.70593480893297,-59.9549191738353,-19.06115992801726,-73.73037738043655,-4545.631632270352,12420.531454363136,485.32561388608946,1.23456e-61,1.23456e-61,1.23456e-61,4773.934207698078,-13044.347801266702,-509.7009035124281,1.23456e-61,1.23456e-61,1.23456e-61,0.3434527238841331,-0.9384538179040592,-0.036669580279355726,-969.146676076807,-927.7891942547296,-413.3328422266094,0.029262604471352024,0.011758012017362596,-0.026835050947661438,0.0014722709147386344,-0.004022848458734856,-0.000157190648804352,-0.014876983845050118,-0.004729763165801787,-0.018295173245048604,-0.18911802590908103,-0.07598954575337995,0.17342926072625361,1.23456e-61,1.23456e-61,1.23456e-61,-0.10339150352757927,-0.03438564919478562,-0.12781088273588492,1.23456e-61,1.23456e-61,1.23456e-61,0.3434527238841331,-0.9384538179040592,-0.036669580279355726,-969.146676076807,-927.7891942547296,-413.3328422266094,-0.9895316132543507,-0.006682652718264895,0.14416146684495437,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-969.146676076807,-927.7891942547296,-413.3328422266094],[0.029262604471352024,0.011758012017362596,-0.026835050947661438],[0.0014722709147386344,-0.004022848458734856,-0.000157190648804352]],[[-0.014876983845050118,-0.004729763165801787,-0.018295173245048604],[-0.18911802590908103,-0.07598954575337995,0.17342926072625361],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.10339150352757927,-0.03438564919478562,-0.12781088273588492],[1.23456e-61,1.23456e-61,1.23456e-61],[0.3434527238841331,-0.9384538179040592,-0.036669580279355726]]],"normal":[0.3434527238841331,-0.9384538179040592,-0.036669580279355726]},{"op":"state"}]}}, +{"name":"adv_sing_272","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.03755613596052387,0,0,0.0,1.7912112465658339,0,0,0.0006657102391480088,-0.00016632613666149766,-9.522171564680716e-05,-0.0002248500981673466,0.014436149226164395,-0.007958339762836658,-0.0,0.0,0.0,0.007186319141536544,0.01192198281825503,0.0063931663724984345,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.09754386294795621,-0.3867541775962844,0.37416977464805445,1.23456e-61,1.23456e-61,1.23456e-61,-0.8415494013334599,0.2506757970829636,0.47849373023281744,0.0006657102391480088,-0.00016632613666149766,-9.522171564680716e-05,0.004496485860944742,0.00624769078826563,0.004635107998232088,-2.1480556858824068e-05,6.398502219643313e-06,1.221355723451359e-05,-0.0004448228332511728,0.0020064540419155487,-0.0018334824468078724,0.32621702483761855,0.4229581599042762,0.352140593540191,1.23456e-61,1.23456e-61,1.23456e-61,-0.15949884110208243,0.6323976695543838,-0.6118196004413634,1.23456e-61,1.23456e-61,1.23456e-61,-0.8415494013334599,0.2506757970829636,0.47849373023281744,0.0006657102391480088,-0.00016632613666149766,-9.522171564680716e-05,-0.178358659014362,0.7071788465162586,-0.6841683037049673,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0006657102391480088,-0.00016632613666149766,-9.522171564680716e-05],[0.004496485860944742,0.00624769078826563,0.004635107998232088],[-2.1480556858824068e-05,6.398502219643313e-06,1.221355723451359e-05]],[[-0.0004448228332511728,0.0020064540419155487,-0.0018334824468078724],[0.32621702483761855,0.4229581599042762,0.352140593540191],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.15949884110208243,0.6323976695543838,-0.6118196004413634],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.8415494013334599,0.2506757970829636,0.47849373023281744]]],"normal":[0.8415494013334599,-0.2506757970829636,-0.47849373023281744]},{"op":"state"}]}}, +{"name":"adv_sing_273","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,812.6342162960351,877.1026224890885,41.440852259724494,0.12165310648949414,0.19149208756943703,0.021349423372319067,-0.011419226384345726,-0.050397304594856696,0.517103869063661,0.07119139555868938,-0.05549744232848462,0.09211802243609686,0.4815680801206217,0.8053340698117599,0.11301238497013978,1.23456e-61,1.23456e-61,1.23456e-61,-0.017811143934691336,0.00916500171496706,0.019286501168179954,1.23456e-61,1.23456e-61,1.23456e-61,-0.6405381231248732,0.32959887464089377,0.6935960601525367,812.6342162960351,877.1026224890885,41.440852259724494,-0.07223162929892946,-1.3141537321751553,0.5577835590409659,-4.19399190341713,2.08029935473536,5.2390772099201595,0.6274100522564507,0.059678189256517744,0.5510558886369897,1.5557177739299561,-0.9672556681434373,-1.785035444017384,1.23456e-61,1.23456e-61,1.23456e-61,-1.8490603501216207,0.9514628224936598,2.0022242666399452,1.23456e-61,1.23456e-61,1.23456e-61,-0.6405381231248732,0.32959887464089377,0.6935960601525367,812.6342162960351,877.1026224890885,41.440852259724494,-0.5338718959300688,-0.8403586788400739,-0.09369145977195423,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,812.6342162960351,877.1026224890885,41.440852259724494,0.12165310648949414,0.19149208756943703,0.021349423372319067,-0.011419226384345726,-0.050397304594856696,0.517103869063661,0.07119139555868938,-0.05549744232848462,0.09211802243609686,0.4815680801206217,0.8053340698117599,0.11301238497013978,1.23456e-61,1.23456e-61,1.23456e-61,-0.017811143934691336,0.00916500171496706,0.019286501168179954,1.23456e-61,1.23456e-61,1.23456e-61,-0.6405381231248732,0.32959887464089377,0.6935960601525367,812.6342162960351,877.1026224890885,41.440852259724494,-0.07223162929892946,-1.3141537321751553,0.5577835590409659,-4.19399190341713,2.08029935473536,5.2390772099201595,0.6274100522564507,0.059678189256517744,0.5510558886369897,1.5557177739299561,-0.9672556681434373,-1.785035444017384,1.23456e-61,1.23456e-61,1.23456e-61,-1.8490603501216207,0.9514628224936598,2.0022242666399452,1.23456e-61,1.23456e-61,1.23456e-61,-0.6405381231248732,0.32959887464089377,0.6935960601525367,812.6342162960351,877.1026224890885,41.440852259724494,0.5519888690541673,-0.43030439543841786,0.7142453469968699,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,812.6342162960351,877.1026224890885,41.440852259724494,0.12165310648949414,0.19149208756943703,0.021349423372319067,-0.011419226384345726,-0.050397304594856696,0.517103869063661,0.07119139555868938,-0.05549744232848462,0.09211802243609686,0.4815680801206217,0.8053340698117599,0.11301238497013978,1.23456e-61,1.23456e-61,1.23456e-61,-0.017811143934691336,0.00916500171496706,0.019286501168179954,1.23456e-61,1.23456e-61,1.23456e-61,-0.6405381231248732,0.32959887464089377,0.6935960601525367,812.6342162960351,877.1026224890885,41.440852259724494,-0.07223162929892946,-1.3141537321751553,0.5577835590409659,-4.19399190341713,2.08029935473536,5.2390772099201595,0.6274100522564507,0.059678189256517744,0.5510558886369897,1.5557177739299561,-0.9672556681434373,-1.785035444017384,1.23456e-61,1.23456e-61,1.23456e-61,-1.8490603501216207,0.9514628224936598,2.0022242666399452,1.23456e-61,1.23456e-61,1.23456e-61,-0.6405381231248732,0.32959887464089377,0.6935960601525367,812.6342162960351,877.1026224890885,41.440852259724494,0.5046038173692498,0.34734736820401324,-0.7903953398762714,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[812.6342162960351,877.1026224890885,41.440852259724494],[-0.07223162929892946,-1.3141537321751553,0.5577835590409659],[-4.19399190341713,2.08029935473536,5.2390772099201595]],[[0.6274100522564507,0.059678189256517744,0.5510558886369897],[1.5557177739299561,-0.9672556681434373,-1.785035444017384],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-1.8490603501216207,0.9514628224936598,2.0022242666399452],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6405381231248732,0.32959887464089377,0.6935960601525367]]],"normal":[0.6405381231248732,-0.32959887464089377,-0.6935960601525367]},{"op":"state"}]}}, +{"name":"adv_sing_274","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.7733382078004691,0.0,0,0,1.0330325579747368,0.0,0,0,0.5028839001995458,-0.6296981575878124,0.20141504104877228,-0.07858505115459749,0.12852830157267092,0.0,0.02397455436968583,-0.12927162221678073,0.0,0.08500839168318844,-0.04830646491271046,-0.0,0.9493219698501163,0.17606007250641936,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.08843283313723838,-0.4768328795855109,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.5028839001995458,-0.6296981575878124,0.20141504104877228,7.334101629589682,-3.0987735091989106,-0.0,0.18029342325191022,-0.9721483427554741,3.8838624445773334e-10,0.45381620068405404,-9.1902790061012,0.0,0.9828334314806014,0.18227506652514078,4.905809171341986e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.10065289971807914,-0.5427238991282886,7.318090699398972e-08,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.5028839001995458,-0.6296981575878124,0.20141504104877228,-0.18234932025369202,0.9832338101403025,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,1.7733382078004691,0.0,0,0,1.0330325579747368,0.0,0,0,0.5028839001995458,-0.6296981575878124,0.20141504104877228,-0.07858505115459749,0.12852830157267092,0.0,0.02397455436968583,-0.12927162221678073,0.0,0.08500839168318844,-0.04830646491271046,-0.0,0.9493219698501163,0.17606007250641936,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.08843283313723838,-0.4768328795855109,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.5028839001995458,-0.6296981575878124,0.20141504104877228,7.334101629589682,-3.0987735091989106,-0.0,0.18029342325191022,-0.9721483427554741,3.8838624445773334e-10,0.45381620068405404,-9.1902790061012,0.0,0.9828334314806014,0.18227506652514078,4.905809171341986e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.10065289971807914,-0.5427238991282886,7.318090699398972e-08,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.5028839001995458,-0.6296981575878124,0.20141504104877228,-0.43340737283597647,-0.8878280915492566,0.1546587502452475,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.5028839001995458,-0.6296981575878124,0.20141504104877228],[7.334101629589682,-3.0987735091989106,-0.0],[0.18029342325191022,-0.9721483427554741,3.8838624445773334e-10]],[[0.45381620068405404,-9.1902790061012,0.0],[0.9828334314806014,0.18227506652514078,4.905809171341986e-09],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.10065289971807914,-0.5427238991282886,7.318090699398972e-08],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_275","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.897848824483199,2.0,0,0,1.835959672445941,2.0,0,0,676.0675316661815,-283.4675986695705,-935.8627144579872,-0.018066908386504845,0.15485739915720428,0.0,0.3123060128738433,0.03643612868261086,6.961758293283036e-05,0.09694484582782031,0.011310364617043763,0.0,-0.10321443505147197,0.8846847853332831,-0.0012868888447031385,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.023788284925364753,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,676.0675316661815,-283.4675986695705,-935.8627144579872,-0.640444724226194,5.708751377886817,0.0,-0.8928390792866798,-0.10416578049970007,46234.668808098104,13.589148048573572,5.519150259496993,0.0,-0.09252972561288021,0.7931026353044123,243908.92429359016,1.23456e-61,1.23456e-61,1.23456e-61,0.5819356606629026,0.06789328973143684,-1559237.9080191094,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,676.0675316661815,-283.4675986695705,-935.8627144579872,0.33761689909140724,-0.6064569960231307,0.7198782823661949,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[676.0675316661815,-283.4675986695705,-935.8627144579872],[-0.640444724226194,5.708751377886817,0.0],[-0.8928390792866798,-0.10416578049970007,46234.668808098104]],[[13.589148048573572,5.519150259496993,0.0],[-0.09252972561288021,0.7931026353044123,243908.92429359016],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.5819356606629026,0.06789328973143684,-1559237.9080191094],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_276","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.025113033295930398,2.0,0,0,0.0,0.5407410129809103,0,0,-0.15010499862219207,0.48236522332667464,0.4677638375740403,-1.410397232660122,4.879678619515617,0.512863867910051,-0.4671465212738609,0.7650985982446725,-0.3758812141903396,-2.7427927769175007,-2.7585022746386083,-2.775141248226237,0.9987115904829634,0.38980963119943635,-1.5967559281196262,1.23456e-61,1.23456e-61,1.23456e-61,8.953991472126656,4.19082185547679,-13.036151427878963,1.23456e-61,1.23456e-61,1.23456e-61,0.5571406118049783,0.24444464943603414,-0.7936253222016475,-0.15010499862219207,0.48236522332667464,0.4677638375740403,-1.399079067643071,-1.5751139990930947,-1.4673321584671122,3.1837735528929945,1.3968761090657418,-4.535162682802671,1.1160747555735422,-1.3374697591191227,0.37155221424026263,0.8652828901485154,0.37964163491888947,-1.232562117963256,1.23456e-61,1.23456e-61,1.23456e-61,0.2351677839435232,0.10317953006241411,-0.3349874418577762,1.23456e-61,1.23456e-61,1.23456e-61,-0.5571406118049783,-0.24444464943603414,0.7936253222016475,-0.15010499862219207,0.48236522332667464,0.4677638375740403,0.5449430506876031,0.6135088771591289,0.5715277151234517,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.15010499862219207,0.48236522332667464,0.4677638375740403],[-1.399079067643071,-1.5751139990930947,-1.4673321584671122],[3.1837735528929945,1.3968761090657418,-4.535162682802671]],[[1.1160747555735422,-1.3374697591191227,0.37155221424026263],[0.8652828901485154,0.37964163491888947,-1.232562117963256],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.2351677839435232,0.10317953006241411,-0.3349874418577762],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.5571406118049783,-0.24444464943603414,0.7936253222016475]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_277","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.9909108893942888,0,0,2.0,0.5962959903243026,0,0,-0.0007835359771690121,0.0001824785502168953,-0.0007843797629788328,0.07358516569476492,-0.11045266843618758,-0.046053211306194046,-0.47466082591869113,-0.06860209466530665,0.4709149249146542,-0.0179733354924241,0.0049804371215933126,0.016144791942887336,-0.016811735140345514,0.0898393277057155,-0.0038578221389711383,1.23456e-61,1.23456e-61,1.23456e-61,0.6320382451226361,0.09134764268759706,-0.6270503620625816,1.23456e-61,1.23456e-61,1.23456e-61,-0.6837509690910325,-0.15853758949646435,-0.7122853676608303,-0.0007835359771690121,0.0001824785502168953,-0.0007843797629788328,-1.2511303447835744,1.5871929698766007,0.8477386530878777,1.1443899415827112,0.26534342324035204,1.1921477952290453,2.502198035019821,-2.1577313819728206,-1.9217000114979426,-1.6694331255387236,-0.38708230849062314,-1.7391021605282784,1.23456e-61,1.23456e-61,1.23456e-61,2.43536478138404,0.5646746833843329,2.5369977917580386,1.23456e-61,1.23456e-61,1.23456e-61,0.6837509690910325,0.15853758949646435,0.7122853676608303,-0.0007835359771690121,0.0001824785502168953,-0.0007843797629788328,-0.7061950840736265,-0.10206543149172974,0.7006219743375528,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.9909108893942888,0,0,2.0,0.5962959903243026,0,0,-0.0007835359771690121,0.0001824785502168953,-0.0007843797629788328,0.07358516569476492,-0.11045266843618758,-0.046053211306194046,-0.47466082591869113,-0.06860209466530665,0.4709149249146542,-0.0179733354924241,0.0049804371215933126,0.016144791942887336,-0.016811735140345514,0.0898393277057155,-0.0038578221389711383,1.23456e-61,1.23456e-61,1.23456e-61,0.6320382451226361,0.09134764268759706,-0.6270503620625816,1.23456e-61,1.23456e-61,1.23456e-61,-0.6837509690910325,-0.15853758949646435,-0.7122853676608303,-0.0007835359771690121,0.0001824785502168953,-0.0007843797629788328,-1.2511303447835744,1.5871929698766007,0.8477386530878777,1.1443899415827112,0.26534342324035204,1.1921477952290453,2.502198035019821,-2.1577313819728206,-1.9217000114979426,-1.6694331255387236,-0.38708230849062314,-1.7391021605282784,1.23456e-61,1.23456e-61,1.23456e-61,2.43536478138404,0.5646746833843329,2.5369977917580386,1.23456e-61,1.23456e-61,1.23456e-61,0.6837509690910325,0.15853758949646435,0.7122853676608303,-0.0007835359771690121,0.0001824785502168953,-0.0007843797629788328,-0.6837509690910325,-0.15853758949646435,-0.7122853676608303,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0007835359771690121,0.0001824785502168953,-0.0007843797629788328],[-1.2511303447835744,1.5871929698766007,0.8477386530878777],[1.1443899415827112,0.26534342324035204,1.1921477952290453]],[[2.502198035019821,-2.1577313819728206,-1.9217000114979426],[-1.6694331255387236,-0.38708230849062314,-1.7391021605282784],[1.23456e-61,1.23456e-61,1.23456e-61]],[[2.43536478138404,0.5646746833843329,2.5369977917580386],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6837509690910325,0.15853758949646435,0.7122853676608303]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_278","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.5603085044029104,0,0,0.0,2.0,0,0,0.34173248842916326,0.008236783243101176,0.5885759302713196,1.2313351726604944,0.0,-1.0957014323502792,-0.05795501009811925,22505.092330231022,-0.6464840486470989,1.7741109712084597,0.0,-3.0144257854979077,0.0,35554.07611380826,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0015565562830038532,42281.763368435524,0.01736327551457137,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.34173248842916326,0.008236783243101176,0.5885759302713196,-0.02646143036941821,0.0,0.06577491585842238,0.0,0.9340314797429126,0.0,0.02922386033506288,0.0,-0.008158308359830448,0.0,2.058996044913888,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,4.548239917547531,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.34173248842916326,0.008236783243101176,0.5885759302713196,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.5603085044029104,0,0,0.0,2.0,0,0,0.34173248842916326,0.008236783243101176,0.5885759302713196,1.2313351726604944,0.0,-1.0957014323502792,-0.05795501009811925,22505.092330231022,-0.6464840486470989,1.7741109712084597,0.0,-3.0144257854979077,0.0,35554.07611380826,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0015565562830038532,42281.763368435524,0.01736327551457137,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.34173248842916326,0.008236783243101176,0.5885759302713196,-0.02646143036941821,0.0,0.06577491585842238,0.0,0.9340314797429126,0.0,0.02922386033506288,0.0,-0.008158308359830448,0.0,2.058996044913888,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,4.548239917547531,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.34173248842916326,0.008236783243101176,0.5885759302713196,-0.39934164449408704,0.23144380480225524,0.887107668883216,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.34173248842916326,0.008236783243101176,0.5885759302713196],[-0.02646143036941821,0.0,0.06577491585842238],[0.0,0.9340314797429126,0.0]],[[0.02922386033506288,0.0,-0.008158308359830448],[0.0,2.058996044913888,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,4.548239917547531,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_279","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.3015200524397943,0,0,2.0,0.0,0,0,0.10436120989153852,0.42883900332633296,-0.3635621560200162,-79.43168620540622,15.741595337004048,-26.673064100015083,-16.82350603423555,-3065.5222973966497,-1759.0739434382547,12.640102492622693,31.878903192838344,-55.67596504972669,7.883904235136243,1410.4188325129471,810.0407663247586,1.23456e-61,1.23456e-61,1.23456e-61,-11.639208045884835,-2127.162446115726,-1220.6286529823142,1.23456e-61,1.23456e-61,1.23456e-61,0.004759919761085375,0.8673364595781883,0.4976995168274145,0.10436120989153852,0.42883900332633296,-0.3635621560200162,-0.25418682071661386,0.3962693421969008,-0.688144006272493,-23.386575560776656,-4261.422600938249,-2445.311673529615,0.9794813975941752,0.0612355559856733,-0.11608225693531053,-12.705009329567968,-2315.0637750041865,-1328.4419322169233,1.23456e-61,1.23456e-61,1.23456e-61,-6.146162901406785,-1257.5994071971757,-721.8439316013264,1.23456e-61,1.23456e-61,1.23456e-61,-0.004759919761085375,-0.8673364595781883,-0.4976995168274145,0.10436120989153852,0.42883900332633296,-0.3635621560200162,-0.652230603871003,-0.2510401009515778,0.7152440891669699,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.3015200524397943,0,0,2.0,0.0,0,0,0.10436120989153852,0.42883900332633296,-0.3635621560200162,-79.43168620540622,15.741595337004048,-26.673064100015083,-16.82350603423555,-3065.5222973966497,-1759.0739434382547,12.640102492622693,31.878903192838344,-55.67596504972669,7.883904235136243,1410.4188325129471,810.0407663247586,1.23456e-61,1.23456e-61,1.23456e-61,-11.639208045884835,-2127.162446115726,-1220.6286529823142,1.23456e-61,1.23456e-61,1.23456e-61,0.004759919761085375,0.8673364595781883,0.4976995168274145,0.10436120989153852,0.42883900332633296,-0.3635621560200162,-0.25418682071661386,0.3962693421969008,-0.688144006272493,-23.386575560776656,-4261.422600938249,-2445.311673529615,0.9794813975941752,0.0612355559856733,-0.11608225693531053,-12.705009329567968,-2315.0637750041865,-1328.4419322169233,1.23456e-61,1.23456e-61,1.23456e-61,-6.146162901406785,-1257.5994071971757,-721.8439316013264,1.23456e-61,1.23456e-61,1.23456e-61,-0.004759919761085375,-0.8673364595781883,-0.4976995168274145,0.10436120989153852,0.42883900332633296,-0.3635621560200162,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.10436120989153852,0.42883900332633296,-0.3635621560200162],[-0.25418682071661386,0.3962693421969008,-0.688144006272493],[-23.386575560776656,-4261.422600938249,-2445.311673529615]],[[0.9794813975941752,0.0612355559856733,-0.11608225693531053],[-12.705009329567968,-2315.0637750041865,-1328.4419322169233],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-6.146162901406785,-1257.5994071971757,-721.8439316013264],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.004759919761085375,-0.8673364595781883,-0.4976995168274145]]],"normal":[-0.004759919761085375,-0.8673364595781883,-0.4976995168274145]},{"op":"state"}]}}, +{"name":"adv_sing_280","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.142304301434478,2.0,0,0,0.0,2.0,0,0,-971.839335314057,-342.80823344815013,817.8304908273726,-37.86651029361909,-9.942719959537873,0.0,-0.1359331889846992,0.517696920046094,0.0015327287492802719,-5.888981348236521,22.42798487228978,0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.21452318187233443,0.817004230999807,0.0005376940690569301,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-971.839335314057,-342.80823344815013,817.8304908273726,-16.898797661123957,-4.4371665488742495,0.0,-0.15392700142219504,0.5862257418029885,0.0008835272906876098,-3.5545008656469603,13.537195472209046,0.0,-0.6492586160345498,-0.1704777269015058,0.00010938932430370667,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.00021658274735573087,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-971.839335314057,-342.80823344815013,817.8304908273726,0.9672136440657533,0.2539641052059251,-0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-971.839335314057,-342.80823344815013,817.8304908273726],[-16.898797661123957,-4.4371665488742495,0.0],[-0.15392700142219504,0.5862257418029885,0.0008835272906876098]],[[-3.5545008656469603,13.537195472209046,0.0],[-0.6492586160345498,-0.1704777269015058,0.00010938932430370667],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.00021658274735573087],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_281","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.752393042588213,0.0,0,0,0.46246916625415735,0.0,0,0,-0.2780988523717629,-0.6406400141906332,0.4999436379306317,0.22064649680617532,0.0,0.2922295428404714,0.43714751038065525,1316.8696677455134,-0.3300661042531477,0.3047028614216357,0.0,-0.2300644154112894,0.014739594990145441,-129.76760580082043,0.019521475155835577,1.23456e-61,1.23456e-61,1.23456e-61,0.0,754.9165485028218,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.2780988523717629,-0.6406400141906332,0.4999436379306317,12.995364508396776,0.0,-51.05455745516905,-0.0774511996261832,0.0010749408836299064,0.05847915205575972,36.11070694989311,0.0,-21.654605748625293,0.47276576772100515,-0.00015106343153463512,0.6261423869017766,1.23456e-61,1.23456e-61,1.23456e-61,0.0,2.122922357363439e-05,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.2780988523717629,-0.6406400141906332,0.4999436379306317,0.015390980616106742,-0.3245663694013837,0.9457376959650489,0,0,0,0,0,0,0],[1,1,1,1,1,1.752393042588213,0.0,0,0,0.46246916625415735,0.0,0,0,-0.2780988523717629,-0.6406400141906332,0.4999436379306317,0.22064649680617532,0.0,0.2922295428404714,0.43714751038065525,1316.8696677455134,-0.3300661042531477,0.3047028614216357,0.0,-0.2300644154112894,0.014739594990145441,-129.76760580082043,0.019521475155835577,1.23456e-61,1.23456e-61,1.23456e-61,0.0,754.9165485028218,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.2780988523717629,-0.6406400141906332,0.4999436379306317,12.995364508396776,0.0,-51.05455745516905,-0.0774511996261832,0.0010749408836299064,0.05847915205575972,36.11070694989311,0.0,-21.654605748625293,0.47276576772100515,-0.00015106343153463512,0.6261423869017766,1.23456e-61,1.23456e-61,1.23456e-61,0.0,2.122922357363439e-05,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.2780988523717629,-0.6406400141906332,0.4999436379306317,0,-1,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.2780988523717629,-0.6406400141906332,0.4999436379306317],[12.995364508396776,0.0,-51.05455745516905],[-0.0774511996261832,0.0010749408836299064,0.05847915205575972]],[[36.11070694989311,0.0,-21.654605748625293],[0.47276576772100515,-0.00015106343153463512,0.6261423869017766],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,2.122922357363439e-05,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_282","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,1.1109627875971502,0,0,0.0,0.0,0,0,-0.385455349295309,-1.5451802514313688,-1.682058835924062,0.0,-0.013333523508728571,0.005192592208514938,-1.8242229492733747e-10,0.0,0.0,0.0,0.005598251754296005,0.014375174936957889,-1.0022999822415068e-10,-0.5350563587276355,0.20837173892007657,1.23456e-61,1.23456e-61,1.23456e-61,2.1203830798873502e-10,0.09942759708064272,0.2553099010773837,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.385455349295309,-1.5451802514313688,-1.682058835924062,-0.0,5.867050007445008,2.251814951803156,1.4509223525681655e-05,-0.22856026244232766,-0.5868963920252704,0.0,1.6056587669798184,11.20266818773019,7.049616440106814e-05,-0.7940506413583407,0.30923417735637815,1.23456e-61,1.23456e-61,1.23456e-61,7.663708234111563e-05,0.17942010226847238,0.4607144284529423,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.385455349295309,-1.5451802514313688,-1.682058835924062,-0.23642548699958477,0.6258542609186609,0.7432425130379491,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.1109627875971502,0,0,0.0,0.0,0,0,-0.385455349295309,-1.5451802514313688,-1.682058835924062,0.0,-0.013333523508728571,0.005192592208514938,-1.8242229492733747e-10,0.0,0.0,0.0,0.005598251754296005,0.014375174936957889,-1.0022999822415068e-10,-0.5350563587276355,0.20837173892007657,1.23456e-61,1.23456e-61,1.23456e-61,2.1203830798873502e-10,0.09942759708064272,0.2553099010773837,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.385455349295309,-1.5451802514313688,-1.682058835924062,-0.0,5.867050007445008,2.251814951803156,1.4509223525681655e-05,-0.22856026244232766,-0.5868963920252704,0.0,1.6056587669798184,11.20266818773019,7.049616440106814e-05,-0.7940506413583407,0.30923417735637815,1.23456e-61,1.23456e-61,1.23456e-61,7.663708234111563e-05,0.17942010226847238,0.4607144284529423,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.385455349295309,-1.5451802514313688,-1.682058835924062,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.1109627875971502,0,0,0.0,0.0,0,0,-0.385455349295309,-1.5451802514313688,-1.682058835924062,0.0,-0.013333523508728571,0.005192592208514938,-1.8242229492733747e-10,0.0,0.0,0.0,0.005598251754296005,0.014375174936957889,-1.0022999822415068e-10,-0.5350563587276355,0.20837173892007657,1.23456e-61,1.23456e-61,1.23456e-61,2.1203830798873502e-10,0.09942759708064272,0.2553099010773837,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.385455349295309,-1.5451802514313688,-1.682058835924062,-0.0,5.867050007445008,2.251814951803156,1.4509223525681655e-05,-0.22856026244232766,-0.5868963920252704,0.0,1.6056587669798184,11.20266818773019,7.049616440106814e-05,-0.7940506413583407,0.30923417735637815,1.23456e-61,1.23456e-61,1.23456e-61,7.663708234111563e-05,0.17942010226847238,0.4607144284529423,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.385455349295309,-1.5451802514313688,-1.682058835924062,0.0,-0.9318314482155405,0.3628913778481497,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.385455349295309,-1.5451802514313688,-1.682058835924062],[-0.0,5.867050007445008,2.251814951803156],[1.4509223525681655e-05,-0.22856026244232766,-0.5868963920252704]],[[0.0,1.6056587669798184,11.20266818773019],[7.049616440106814e-05,-0.7940506413583407,0.30923417735637815],[1.23456e-61,1.23456e-61,1.23456e-61]],[[7.663708234111563e-05,0.17942010226847238,0.4607144284529423],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_283","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,0.08109946734495277,2.0,0,0,-1.2956852893211077,0.8375319157709926,1.9334310278966416,-0.0,0.009561746965143725,0.15147773396504968,226.91587013249307,0.30987621240505775,0.36336665836491466,-0.0,-0.0682365962015084,0.0825424042285603,126.21881062993671,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,97.48154060989026,-0.26177514612389496,-0.3069624459127228,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-1.2956852893211077,0.8375319157709926,1.9334310278966416,-0.0,-0.012314153804533655,0.013982973430798636,2.900298170564822,0.0,0.0,0.0,-0.003602218387258783,-0.019508985182960407,-2.591199575736332,0.07302488939931588,-0.062275048129575995,1.23456e-61,1.23456e-61,1.23456e-61,3.7709634174200635,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-1.2956852893211077,0.8375319157709926,1.9334310278966416,0.0,-0.648880938235409,-0.7608899578748135,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-1.2956852893211077,0.8375319157709926,1.9334310278966416],[-0.0,-0.012314153804533655,0.013982973430798636],[2.900298170564822,0.0,0.0]],[[0.0,-0.003602218387258783,-0.019508985182960407],[-2.591199575736332,0.07302488939931588,-0.062275048129575995],[1.23456e-61,1.23456e-61,1.23456e-61]],[[3.7709634174200635,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_284","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,0.0,2.0,0,0,587.8854060779956,-325.5872617807536,-498.5969881904757,0.0002689372340664211,5.230061776415615e-05,-0.011893609177861132,-0.6667108335195434,0.42815307584657875,-0.14487909910988117,-0.0043541513298806815,0.0028878783858167175,-0.0054746468570060925,-0.0003346563303651114,-0.0005232802196518738,-9.868276723035468e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.00012601099419925327,-0.00019703515140800254,-3.715786160525852e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.538708136732635,-0.8423426857342156,-0.015885314227968017,587.8854060779956,-325.5872617807536,-498.5969881904757,1.6019332117305618,-0.4316794261845063,-31.43484864491157,2884.509972079193,4509.319949601147,85.14295153693453,6.490658704048451,-4.814647371313044,35.190512001670236,-3939.372767880497,-6159.739590218195,-116.16341022511759,1.23456e-61,1.23456e-61,1.23456e-61,4875.96539001432,7624.22822696327,143.7814599476084,1.23456e-61,1.23456e-61,1.23456e-61,-0.538708136732635,-0.8423426857342156,-0.015885314227968017,587.8854060779956,-325.5872617807536,-498.5969881904757,0.1599521241624179,-0.08374650709164133,-0.9835658801147386,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.0,2.0,0,0,587.8854060779956,-325.5872617807536,-498.5969881904757,0.0002689372340664211,5.230061776415615e-05,-0.011893609177861132,-0.6667108335195434,0.42815307584657875,-0.14487909910988117,-0.0043541513298806815,0.0028878783858167175,-0.0054746468570060925,-0.0003346563303651114,-0.0005232802196518738,-9.868276723035468e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.00012601099419925327,-0.00019703515140800254,-3.715786160525852e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.538708136732635,-0.8423426857342156,-0.015885314227968017,587.8854060779956,-325.5872617807536,-498.5969881904757,1.6019332117305618,-0.4316794261845063,-31.43484864491157,2884.509972079193,4509.319949601147,85.14295153693453,6.490658704048451,-4.814647371313044,35.190512001670236,-3939.372767880497,-6159.739590218195,-116.16341022511759,1.23456e-61,1.23456e-61,1.23456e-61,4875.96539001432,7624.22822696327,143.7814599476084,1.23456e-61,1.23456e-61,1.23456e-61,-0.538708136732635,-0.8423426857342156,-0.015885314227968017,587.8854060779956,-325.5872617807536,-498.5969881904757,0.667217061309323,-0.44864932529251456,1.163415306763807,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[587.8854060779956,-325.5872617807536,-498.5969881904757],[1.6019332117305618,-0.4316794261845063,-31.43484864491157],[2884.509972079193,4509.319949601147,85.14295153693453]],[[6.490658704048451,-4.814647371313044,35.190512001670236],[-3939.372767880497,-6159.739590218195,-116.16341022511759],[1.23456e-61,1.23456e-61,1.23456e-61]],[[4875.96539001432,7624.22822696327,143.7814599476084],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.538708136732635,-0.8423426857342156,-0.015885314227968017]]],"normal":[0.538708136732635,0.8423426857342156,0.015885314227968017]},{"op":"state"}]}}, +{"name":"adv_sing_285","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.8173795583614742,0,0,2.0,0.0,0,0,9.356725917342469e-05,-0.00028119753848103744,-3.066376529984427e-05,1.253041536791811,0.0,1.3649433250547427,-0.7134348217880172,-34320.63694205009,-0.5538028848571261,1.748966650121247,0.0,0.49199250198939004,0.0,-28941.05156946683,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-24406.972881750415,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,9.356725917342469e-05,-0.00028119753848103744,-3.066376529984427e-05,0.02272138174599409,0.0,-0.016146113562255364,-0.017013126291273745,-0.15952709244314095,-0.013206417927474743,0.025104788568230438,0.0,0.0376995113354592,0.0,-1.7707808097036997,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-19.905561663231317,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,9.356725917342469e-05,-0.00028119753848103744,-3.066376529984427e-05,0.726978692604049,-0.6839861462811472,0.060538683460847086,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[9.356725917342469e-05,-0.00028119753848103744,-3.066376529984427e-05],[0.02272138174599409,0.0,-0.016146113562255364],[-0.017013126291273745,-0.15952709244314095,-0.013206417927474743]],[[0.025104788568230438,0.0,0.0376995113354592],[0.0,-1.7707808097036997,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-19.905561663231317,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_286","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,1.8417119579385708,0,0,2.0,2.0,0,0,-1.2277760110833502,-1.5100755254854246,0.09031591605850897,0.05952166921456594,0.0,0.05434456574244562,0.0,-0.045473126522762405,0.0,0.04685890578672214,0.0,0.009845347830704822,-0.4763689087878928,-0.023269130097057368,-0.6047884092091921,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.01604881547805526,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-1.2277760110833502,-1.5100755254854246,0.09031591605850897,-0.021616190746410725,0.0,-0.0356600376176778,0.0,-4.50191163755727e-15,0.0,-0.002323137182777154,0.0,0.060064179197175584,0.0,4.298978127985109e-15,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.18864066718470288,-5.3764647274947834e-15,0.1485851041644453,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-1.2277760110833502,-1.5100755254854246,0.09031591605850897,-0.6187671933338651,-0.0,-0.7855744143324243,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.8417119579385708,0,0,2.0,2.0,0,0,-1.2277760110833502,-1.5100755254854246,0.09031591605850897,0.05952166921456594,0.0,0.05434456574244562,0.0,-0.045473126522762405,0.0,0.04685890578672214,0.0,0.009845347830704822,-0.4763689087878928,-0.023269130097057368,-0.6047884092091921,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.01604881547805526,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-1.2277760110833502,-1.5100755254854246,0.09031591605850897,-0.021616190746410725,0.0,-0.0356600376176778,0.0,-4.50191163755727e-15,0.0,-0.002323137182777154,0.0,0.060064179197175584,0.0,4.298978127985109e-15,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.18864066718470288,-5.3764647274947834e-15,0.1485851041644453,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-1.2277760110833502,-1.5100755254854246,0.09031591605850897,0,-1,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.8417119579385708,0,0,2.0,2.0,0,0,-1.2277760110833502,-1.5100755254854246,0.09031591605850897,0.05952166921456594,0.0,0.05434456574244562,0.0,-0.045473126522762405,0.0,0.04685890578672214,0.0,0.009845347830704822,-0.4763689087878928,-0.023269130097057368,-0.6047884092091921,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.01604881547805526,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-1.2277760110833502,-1.5100755254854246,0.09031591605850897,-0.021616190746410725,0.0,-0.0356600376176778,0.0,-4.50191163755727e-15,0.0,-0.002323137182777154,0.0,0.060064179197175584,0.0,4.298978127985109e-15,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.18864066718470288,-5.3764647274947834e-15,0.1485851041644453,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-1.2277760110833502,-1.5100755254854246,0.09031591605850897,0.2856324314499017,0.9557368425605972,0.07057763014098406,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-1.2277760110833502,-1.5100755254854246,0.09031591605850897],[-0.021616190746410725,0.0,-0.0356600376176778],[0.0,-4.50191163755727e-15,0.0]],[[-0.002323137182777154,0.0,0.060064179197175584],[0.0,4.298978127985109e-15,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.18864066718470288,-5.3764647274947834e-15,0.1485851041644453],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_287","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.0410571440561076,2.0,0,0,0.0,2.0,0,0,230.0020293001901,575.9974616908299,-262.210082588376,0.0,-0.07377558736340013,-0.03450031847162147,-0.0019291889591802425,0.0,-0.0,0.0,-0.023375781703665978,-0.09780058087751549,0.0014276514814620643,0.11105150812817385,0.012312277182562146,1.23456e-61,1.23456e-61,1.23456e-61,-0.0010565003198996644,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,230.0020293001901,575.9974616908299,-262.210082588376,0.0,-0.11035335877370267,-0.12135074609147295,-0.20123267258090122,-0.09679916923428603,0.8730873720294862,0.0,0.07220750697566845,0.0011354069536245095,0.08262737781795908,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.08842256092103473,0.07811311536154887,-0.7045471066697406,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,230.0020293001901,575.9974616908299,-262.210082588376,0.0,0.11019477151519533,-0.9939100121895916,0,0,0,0,0,0,0],[1,1,1,1,1,1.0410571440561076,2.0,0,0,0.0,2.0,0,0,230.0020293001901,575.9974616908299,-262.210082588376,0.0,-0.07377558736340013,-0.03450031847162147,-0.0019291889591802425,0.0,-0.0,0.0,-0.023375781703665978,-0.09780058087751549,0.0014276514814620643,0.11105150812817385,0.012312277182562146,1.23456e-61,1.23456e-61,1.23456e-61,-0.0010565003198996644,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,230.0020293001901,575.9974616908299,-262.210082588376,0.0,-0.11035335877370267,-0.12135074609147295,-0.20123267258090122,-0.09679916923428603,0.8730873720294862,0.0,0.07220750697566845,0.0011354069536245095,0.08262737781795908,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.08842256092103473,0.07811311536154887,-0.7045471066697406,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,230.0020293001901,575.9974616908299,-262.210082588376,-0.0,0.9939100121895916,0.11019477151519533,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[230.0020293001901,575.9974616908299,-262.210082588376],[0.0,-0.11035335877370267,-0.12135074609147295],[-0.20123267258090122,-0.09679916923428603,0.8730873720294862]],[[0.0,0.07220750697566845,0.0011354069536245095],[0.08262737781795908,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.08842256092103473,0.07811311536154887,-0.7045471066697406],[1.23456e-61,1.23456e-61,1.23456e-61],[-1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_288","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,1.79767766202446,0.0,0,0,0.1772554501754957,-1.1987207322085625,1.1059070633721273,1.6242423085465254,0.0,-2.2019047777723295,-0.6148577687920378,4.7323507625556935,-0.45355185741542803,-1.1535590457868945,0.0,-0.8509266279303943,0.23278387856076294,-1.8913733113565387,-0.31557356417466786,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.7559230459451173,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.1772554501754957,-1.1987207322085625,1.1059070633721273,3.6422965463867785,0.0,-4.937680865319594,0.08239673640461154,23.76085505140797,0.06078022387958306,-9.725807770627977,0.0,-7.174274121802142,0.5592512054372716,-35.77877686690618,-0.7581491349829529,1.23456e-61,1.23456e-61,1.23456e-61,0.5607830509917401,53.87473951418917,0.4136634638025054,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.1772554501754957,-1.1987207322085625,1.1059070633721273,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,1.79767766202446,0.0,0,0,0.1772554501754957,-1.1987207322085625,1.1059070633721273,1.6242423085465254,0.0,-2.2019047777723295,-0.6148577687920378,4.7323507625556935,-0.45355185741542803,-1.1535590457868945,0.0,-0.8509266279303943,0.23278387856076294,-1.8913733113565387,-0.31557356417466786,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.7559230459451173,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.1772554501754957,-1.1987207322085625,1.1059070633721273,3.6422965463867785,0.0,-4.937680865319594,0.08239673640461154,23.76085505140797,0.06078022387958306,-9.725807770627977,0.0,-7.174274121802142,0.5592512054372716,-35.77877686690618,-0.7581491349829529,1.23456e-61,1.23456e-61,1.23456e-61,0.5607830509917401,53.87473951418917,0.4136634638025054,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.1772554501754957,-1.1987207322085625,1.1059070633721273,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,1.79767766202446,0.0,0,0,0.1772554501754957,-1.1987207322085625,1.1059070633721273,1.6242423085465254,0.0,-2.2019047777723295,-0.6148577687920378,4.7323507625556935,-0.45355185741542803,-1.1535590457868945,0.0,-0.8509266279303943,0.23278387856076294,-1.8913733113565387,-0.31557356417466786,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.7559230459451173,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.1772554501754957,-1.1987207322085625,1.1059070633721273,3.6422965463867785,0.0,-4.937680865319594,0.08239673640461154,23.76085505140797,0.06078022387958306,-9.725807770627977,0.0,-7.174274121802142,0.5592512054372716,-35.77877686690618,-0.7581491349829529,1.23456e-61,1.23456e-61,1.23456e-61,0.5607830509917401,53.87473951418917,0.4136634638025054,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.1772554501754957,-1.1987207322085625,1.1059070633721273,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.1772554501754957,-1.1987207322085625,1.1059070633721273],[3.6422965463867785,0.0,-4.937680865319594],[0.08239673640461154,23.76085505140797,0.06078022387958306]],[[-9.725807770627977,0.0,-7.174274121802142],[0.5592512054372716,-35.77877686690618,-0.7581491349829529],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.5607830509917401,53.87473951418917,0.4136634638025054],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_289","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,2.0,0.0,0,0,-870.2689702363924,697.5869805708119,-906.5921591383161,-0.011461456694553965,0.020109820316846487,0.0035648395587847097,0.5437508426086475,0.1884902124425754,-0.5661232631514387,0.013385698429618044,0.0034865419355467574,-0.01353560654668045,0.21468135435929028,-0.5935320759602012,0.00858148843586565,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.656230925367289,0.24766490121966475,0.7127573705654997,-870.2689702363924,697.5869805708119,-906.5921591383161,0.009421606369289907,-0.026048026406083176,0.0003766112168736682,0.24608861229534634,0.0853060339505557,-0.2562223527761142,-0.010067666509890476,-0.0034899377629398053,0.01048189679956371,0.2702813857086994,-0.7472089960409387,0.010817695043455443,1.23456e-61,1.23456e-61,1.23456e-61,-0.5584048709147691,-0.19357132084408604,0.5812891433857101,1.23456e-61,1.23456e-61,1.23456e-61,0.656230925367289,0.24766490121966475,0.7127573705654997,-870.2689702363924,697.5869805708119,-906.5921591383161,-0.6885126235152916,-0.56873593547983,-0.4499886698062218,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,0.0,0,0,-870.2689702363924,697.5869805708119,-906.5921591383161,-0.011461456694553965,0.020109820316846487,0.0035648395587847097,0.5437508426086475,0.1884902124425754,-0.5661232631514387,0.013385698429618044,0.0034865419355467574,-0.01353560654668045,0.21468135435929028,-0.5935320759602012,0.00858148843586565,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.656230925367289,0.24766490121966475,0.7127573705654997,-870.2689702363924,697.5869805708119,-906.5921591383161,0.009421606369289907,-0.026048026406083176,0.0003766112168736682,0.24608861229534634,0.0853060339505557,-0.2562223527761142,-0.010067666509890476,-0.0034899377629398053,0.01048189679956371,0.2702813857086994,-0.7472089960409387,0.010817695043455443,1.23456e-61,1.23456e-61,1.23456e-61,-0.5584048709147691,-0.19357132084408604,0.5812891433857101,1.23456e-61,1.23456e-61,1.23456e-61,0.656230925367289,0.24766490121966475,0.7127573705654997,-870.2689702363924,697.5869805708119,-906.5921591383161,-0.6735653198288852,-0.2334901581382464,0.7012789074087343,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,0.0,0,0,-870.2689702363924,697.5869805708119,-906.5921591383161,-0.011461456694553965,0.020109820316846487,0.0035648395587847097,0.5437508426086475,0.1884902124425754,-0.5661232631514387,0.013385698429618044,0.0034865419355467574,-0.01353560654668045,0.21468135435929028,-0.5935320759602012,0.00858148843586565,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.656230925367289,0.24766490121966475,0.7127573705654997,-870.2689702363924,697.5869805708119,-906.5921591383161,0.009421606369289907,-0.026048026406083176,0.0003766112168736682,0.24608861229534634,0.0853060339505557,-0.2562223527761142,-0.010067666509890476,-0.0034899377629398053,0.01048189679956371,0.2702813857086994,-0.7472089960409387,0.010817695043455443,1.23456e-61,1.23456e-61,1.23456e-61,-0.5584048709147691,-0.19357132084408604,0.5812891433857101,1.23456e-61,1.23456e-61,1.23456e-61,0.656230925367289,0.24766490121966475,0.7127573705654997,-870.2689702363924,697.5869805708119,-906.5921591383161,0.3401040024983578,-0.9402895526147412,0.01359502586119668,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-870.2689702363924,697.5869805708119,-906.5921591383161],[0.009421606369289907,-0.026048026406083176,0.0003766112168736682],[0.24608861229534634,0.0853060339505557,-0.2562223527761142]],[[-0.010067666509890476,-0.0034899377629398053,0.01048189679956371],[0.2702813857086994,-0.7472089960409387,0.010817695043455443],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.5584048709147691,-0.19357132084408604,0.5812891433857101],[1.23456e-61,1.23456e-61,1.23456e-61],[0.656230925367289,0.24766490121966475,0.7127573705654997]]],"normal":[-0.656230925367289,-0.24766490121966475,-0.7127573705654997]},{"op":"state"}]}}, +{"name":"adv_sing_290","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,2.0,2.0,0,0,-1.4710284006459284,1.2264965489514665,-0.5995929353482934,-2.9277902111619856,23.163893773800986,-42.64597792901796,0.6898519744342422,1.5145427309961932,0.7752891757766822,33.39376263894901,2.500351319735888,-0.9344857577652049,-0.03884817588016782,0.6522476283106577,0.35694653575073254,1.23456e-61,1.23456e-61,1.23456e-61,-0.017314922827953,0.29071165101164653,0.15909374327622616,1.23456e-61,1.23456e-61,1.23456e-61,-0.052177082150019705,0.8760354202858313,0.4794157845784151,-1.4710284006459284,1.2264965489514665,-0.5995929353482934,-0.004181420399164831,0.004915504548726464,-0.009437174482917922,-2.6957021335226515e-09,4.5259919761631135e-08,2.4768770120503593e-08,0.007848584058544966,-0.0024829149052237954,0.005391223444986436,-0.04928377662176758,0.3899200665840289,-0.7178638944564419,1.23456e-61,1.23456e-61,1.23456e-61,0.509895353435594,0.038178314283728934,-0.014268829970025727,1.23456e-61,1.23456e-61,1.23456e-61,-0.052177082150019705,0.8760354202858313,0.4794157845784151,-1.4710284006459284,1.2264965489514665,-0.5995929353482934,0.9827469439888225,-0.013166474253776388,-0.18448601040825535,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,2.0,2.0,0,0,-1.4710284006459284,1.2264965489514665,-0.5995929353482934,-2.9277902111619856,23.163893773800986,-42.64597792901796,0.6898519744342422,1.5145427309961932,0.7752891757766822,33.39376263894901,2.500351319735888,-0.9344857577652049,-0.03884817588016782,0.6522476283106577,0.35694653575073254,1.23456e-61,1.23456e-61,1.23456e-61,-0.017314922827953,0.29071165101164653,0.15909374327622616,1.23456e-61,1.23456e-61,1.23456e-61,-0.052177082150019705,0.8760354202858313,0.4794157845784151,-1.4710284006459284,1.2264965489514665,-0.5995929353482934,-0.004181420399164831,0.004915504548726464,-0.009437174482917922,-2.6957021335226515e-09,4.5259919761631135e-08,2.4768770120503593e-08,0.007848584058544966,-0.0024829149052237954,0.005391223444986436,-0.04928377662176758,0.3899200665840289,-0.7178638944564419,1.23456e-61,1.23456e-61,1.23456e-61,0.509895353435594,0.038178314283728934,-0.014268829970025727,1.23456e-61,1.23456e-61,1.23456e-61,-0.052177082150019705,0.8760354202858313,0.4794157845784151,-1.4710284006459284,1.2264965489514665,-0.5995929353482934,0.9366016376512571,0.5510727799186751,-0.9050393160419534,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-1.4710284006459284,1.2264965489514665,-0.5995929353482934],[-0.004181420399164831,0.004915504548726464,-0.009437174482917922],[-2.6957021335226515e-09,4.5259919761631135e-08,2.4768770120503593e-08]],[[0.007848584058544966,-0.0024829149052237954,0.005391223444986436],[-0.04928377662176758,0.3899200665840289,-0.7178638944564419],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.509895353435594,0.038178314283728934,-0.014268829970025727],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.052177082150019705,0.8760354202858313,0.4794157845784151]]],"normal":[-0.052177082150019705,0.8760354202858313,0.4794157845784151]},{"op":"state"}]}}, +{"name":"adv_sing_291","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,2.0,2.0,0,0,1.4093804888274102,1.3746029814494052,-0.1650828604406258,-0.00880886548668056,0.0,-0.0009664605537479127,0.0,0.0,0.0,0.01525020486542785,0.0,-0.011784759887784619,-0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,1.4093804888274102,1.3746029814494052,-0.1650828604406258,0.6405154144700798,-0.0,-2.0963618773242025,0.4394081785509725,-4.804993116872033,-0.5326445739497753,5.773026748711599,0.0,-1.7682122872951296,-0.5252677756970451,-7.404525450799605,-0.4333226467680544,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-36.45441253428109,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,1.4093804888274102,1.3746029814494052,-0.1650828604406258,0,-1,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,2.0,2.0,0,0,1.4093804888274102,1.3746029814494052,-0.1650828604406258,-0.00880886548668056,0.0,-0.0009664605537479127,0.0,0.0,0.0,0.01525020486542785,0.0,-0.011784759887784619,-0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,1.4093804888274102,1.3746029814494052,-0.1650828604406258,0.6405154144700798,-0.0,-2.0963618773242025,0.4394081785509725,-4.804993116872033,-0.5326445739497753,5.773026748711599,0.0,-1.7682122872951296,-0.5252677756970451,-7.404525450799605,-0.4333226467680544,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-36.45441253428109,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,1.4093804888274102,1.3746029814494052,-0.1650828604406258,-0.45287729136319865,-0.5327789423527193,-0.7148767429096085,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.4093804888274102,1.3746029814494052,-0.1650828604406258],[0.6405154144700798,-0.0,-2.0963618773242025],[0.4394081785509725,-4.804993116872033,-0.5326445739497753]],[[5.773026748711599,0.0,-1.7682122872951296],[-0.5252677756970451,-7.404525450799605,-0.4333226467680544],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0,-36.45441253428109,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_292","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,0.0,2.0,0,0,-7.115655438002766e-05,-0.0001244847237023654,-0.0008320625173051264,0.00696717338383081,-0.01013784453888933,-0.0,0.7951489395458982,0.42632465656073854,-1.5425014473468616e-05,-0.0030600579261845454,-0.014530580907893213,0.0,0.0,0.0,5.9500019773673926e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-2.2947969236262517e-06,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-7.115655438002766e-05,-0.0001244847237023654,-0.0008320625173051264,-0.15659005992382352,-0.16008992939823458,0.0,0.6886027071379363,0.36919915002971576,30.682926635469858,0.24223168143122142,-0.13587811855230275,-0.0,-0.0,0.0,19.34867839190887,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,12.318852294467371,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-7.115655438002766e-05,-0.0001244847237023654,-0.0008320625173051264,0.8813175136060427,0.4725245392688751,-0.0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.0,2.0,0,0,-7.115655438002766e-05,-0.0001244847237023654,-0.0008320625173051264,0.00696717338383081,-0.01013784453888933,-0.0,0.7951489395458982,0.42632465656073854,-1.5425014473468616e-05,-0.0030600579261845454,-0.014530580907893213,0.0,0.0,0.0,5.9500019773673926e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-2.2947969236262517e-06,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-7.115655438002766e-05,-0.0001244847237023654,-0.0008320625173051264,-0.15659005992382352,-0.16008992939823458,0.0,0.6886027071379363,0.36919915002971576,30.682926635469858,0.24223168143122142,-0.13587811855230275,-0.0,-0.0,0.0,19.34867839190887,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,12.318852294467371,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-7.115655438002766e-05,-0.0001244847237023654,-0.0008320625173051264,0.6688261730471111,-0.5895120554572237,0.4529316578886431,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-7.115655438002766e-05,-0.0001244847237023654,-0.0008320625173051264],[-0.15659005992382352,-0.16008992939823458,0.0],[0.6886027071379363,0.36919915002971576,30.682926635469858]],[[0.24223168143122142,-0.13587811855230275,-0.0],[-0.0,0.0,19.34867839190887],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,12.318852294467371],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,-1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_293","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,2.0,0.6063456703693504,0,0,0.00047088317873233645,0.0008136434348253975,0.0008359634491646724,-12.346257927743551,-8.206638961231969,-0.2824916119873322,1804268.5224350109,-2763199.179398602,1418142.9727667242,3.69886243556924,4.505819480221095,4.073450801423902,-986885.569265845,1511394.4300682268,-775685.446803918,1.23456e-61,1.23456e-61,1.23456e-61,711731.6224531212,-1090001.9651511372,559416.2877239406,1.23456e-61,1.23456e-61,1.23456e-61,-0.502315162247857,0.7692850741803867,-0.39481635277580146,0.00047088317873233645,0.0008136434348253975,0.0008359634491646724,-0.15630479481069176,-0.22138776300188992,-0.23250311865936063,-0.1600489423131527,0.7462242865954848,-0.6029532387671737,0.19573539552396674,0.04048821547906137,-0.17013955131228725,-0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.627997767230826,0.2912315575070874,0.14487530021430245,1.23456e-61,1.23456e-61,1.23456e-61,-0.502315162247857,0.7692850741803867,-0.39481635277580146,0.00047088317873233645,0.0008136434348253975,0.0008359634491646724,-0.502315162247857,0.7692850741803867,-0.39481635277580146,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,0.6063456703693504,0,0,0.00047088317873233645,0.0008136434348253975,0.0008359634491646724,-12.346257927743551,-8.206638961231969,-0.2824916119873322,1804268.5224350109,-2763199.179398602,1418142.9727667242,3.69886243556924,4.505819480221095,4.073450801423902,-986885.569265845,1511394.4300682268,-775685.446803918,1.23456e-61,1.23456e-61,1.23456e-61,711731.6224531212,-1090001.9651511372,559416.2877239406,1.23456e-61,1.23456e-61,1.23456e-61,-0.502315162247857,0.7692850741803867,-0.39481635277580146,0.00047088317873233645,0.0008136434348253975,0.0008359634491646724,-0.15630479481069176,-0.22138776300188992,-0.23250311865936063,-0.1600489423131527,0.7462242865954848,-0.6029532387671737,0.19573539552396674,0.04048821547906137,-0.17013955131228725,-0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.627997767230826,0.2912315575070874,0.14487530021430245,1.23456e-61,1.23456e-61,1.23456e-61,-0.502315162247857,0.7692850741803867,-0.39481635277580146,0.00047088317873233645,0.0008136434348253975,0.0008359634491646724,-0.7456972979636566,-0.15424881535240528,0.648184266063348,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.00047088317873233645,0.0008136434348253975,0.0008359634491646724],[-0.15630479481069176,-0.22138776300188992,-0.23250311865936063],[-0.1600489423131527,0.7462242865954848,-0.6029532387671737]],[[0.19573539552396674,0.04048821547906137,-0.17013955131228725],[-0.0,0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.627997767230826,0.2912315575070874,0.14487530021430245],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.502315162247857,0.7692850741803867,-0.39481635277580146]]],"normal":[-0.502315162247857,0.7692850741803867,-0.39481635277580146]},{"op":"state"}]}}, +{"name":"adv_sing_294","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,2.0,2.0,0,0,-0.7131741763151371,0.4664260210370361,0.07931706891616885,-0.0,22.047806532111366,35.64473754058226,1756.653087214407,0.0,0.0,0.0,-39.53809160051211,16.75050264763002,-274.66092370938793,0.5672838262038091,-0.1451070026325826,1.23456e-61,1.23456e-61,1.23456e-61,1843.8400263587464,-0.011403816332434638,-0.04458227683724758,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.7131741763151371,0.4664260210370361,0.07931706891616885,0.0,-0.23913180730102124,0.13234262603430214,366.5714633327147,0.20061863375208897,0.7843019571621354,0.0,0.30098537578667456,-0.48008439935057257,-1318.2206074396586,-0.8323111153209574,0.21289902095431001,1.23456e-61,1.23456e-61,1.23456e-61,3207.155420803467,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,-0.7131741763151371,0.4664260210370361,0.07931706891616885,-0.0,0.9688076722709887,-0.2478138296158401,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.7131741763151371,0.4664260210370361,0.07931706891616885],[0.0,-0.23913180730102124,0.13234262603430214],[366.5714633327147,0.20061863375208897,0.7843019571621354]],[[0.0,0.30098537578667456,-0.48008439935057257],[-1318.2206074396586,-0.8323111153209574,0.21289902095431001],[1.23456e-61,1.23456e-61,1.23456e-61]],[[3207.155420803467,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[-1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_295","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,2.0,2.0,0,0,-0.8087683699759141,0.5731124530351728,-0.2018119174519648,-0.05884955041576009,-0.42740144305272704,0.0,-0.0,0.0,-52.360368879641925,-0.5454618204046525,0.07510546213999511,0.0,0.10856789724640818,0.7884864986137334,-392.7788334742099,1.23456e-61,1.23456e-61,1.23456e-61,-0.3251061646696599,0.04476435898659625,-2946.411873917289,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.8087683699759141,0.5731124530351728,-0.2018119174519648,11.900543625767982,9.516240408873983,-0.0,-0.0,0.0,-1.046569400200734e-05,-35.42516178038429,-7.661839498458528,0.0,0.0,0.0,0.00019186468757594378,1.23456e-61,1.23456e-61,1.23456e-61,-0.15460936841720027,0.021288397522547384,-0.0006277861914705663,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.8087683699759141,0.5731124530351728,-0.2018119174519648,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,2.0,0,0,-0.8087683699759141,0.5731124530351728,-0.2018119174519648,-0.05884955041576009,-0.42740144305272704,0.0,-0.0,0.0,-52.360368879641925,-0.5454618204046525,0.07510546213999511,0.0,0.10856789724640818,0.7884864986137334,-392.7788334742099,1.23456e-61,1.23456e-61,1.23456e-61,-0.3251061646696599,0.04476435898659625,-2946.411873917289,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.8087683699759141,0.5731124530351728,-0.2018119174519648,11.900543625767982,9.516240408873983,-0.0,-0.0,0.0,-1.046569400200734e-05,-35.42516178038429,-7.661839498458528,0.0,0.0,0.0,0.00019186468757594378,1.23456e-61,1.23456e-61,1.23456e-61,-0.15460936841720027,0.021288397522547384,-0.0006277861914705663,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.8087683699759141,0.5731124530351728,-0.2018119174519648,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.8087683699759141,0.5731124530351728,-0.2018119174519648],[11.900543625767982,9.516240408873983,-0.0],[-0.0,0.0,-1.046569400200734e-05]],[[-35.42516178038429,-7.661839498458528,0.0],[0.0,0.0,0.00019186468757594378],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.15460936841720027,0.021288397522547384,-0.0006277861914705663],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_296","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,0.0,0.0,0,0,0.00012251247481757588,0.0007040951288921086,0.0005536649747396581,1.3030486031742852,2.0829361213414948,1.437842469787326,6.560501273407045e-09,-4.683010582730412e-09,8.385896955289111e-10,1.162450855756692,1.143271320938508,-2.7096786863622215,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,8.096019778629989e-09,-5.779092895691085e-09,1.034865855247602e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.8095436997304307,-0.5778676895296931,0.10347913617913712,0.00012251247481757588,0.0007040951288921086,0.0005536649747396581,-0.0011224305066861902,-0.006309310668448437,-0.02645258101777795,-0.3457532550946437,-0.3400485953573612,0.8059525453763572,-0.011396150094570344,-0.016598925935148494,-0.0035398581984958464,1.7094126651932706e-13,-1.2202112716298846e-13,2.1850401161392295e-14,1.23456e-61,1.23456e-61,1.23456e-61,0.0717599511140502,0.07057596774409111,-0.16727280048376392,1.23456e-61,1.23456e-61,1.23456e-61,0.8095436997304307,-0.5778676895296931,0.10347913617913712,0.00012251247481757588,0.0007040951288921086,0.0005536649747396581,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.0,0.0,0,0,0.00012251247481757588,0.0007040951288921086,0.0005536649747396581,1.3030486031742852,2.0829361213414948,1.437842469787326,6.560501273407045e-09,-4.683010582730412e-09,8.385896955289111e-10,1.162450855756692,1.143271320938508,-2.7096786863622215,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,8.096019778629989e-09,-5.779092895691085e-09,1.034865855247602e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.8095436997304307,-0.5778676895296931,0.10347913617913712,0.00012251247481757588,0.0007040951288921086,0.0005536649747396581,-0.0011224305066861902,-0.006309310668448437,-0.02645258101777795,-0.3457532550946437,-0.3400485953573612,0.8059525453763572,-0.011396150094570344,-0.016598925935148494,-0.0035398581984958464,1.7094126651932706e-13,-1.2202112716298846e-13,2.1850401161392295e-14,1.23456e-61,1.23456e-61,1.23456e-61,0.0717599511140502,0.07057596774409111,-0.16727280048376392,1.23456e-61,1.23456e-61,1.23456e-61,0.8095436997304307,-0.5778676895296931,0.10347913617913712,0.00012251247481757588,0.0007040951288921086,0.0005536649747396581,-0.3675860064086144,-0.36152112325791813,0.856844796524376,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.00012251247481757588,0.0007040951288921086,0.0005536649747396581],[-0.0011224305066861902,-0.006309310668448437,-0.02645258101777795],[-0.3457532550946437,-0.3400485953573612,0.8059525453763572]],[[-0.011396150094570344,-0.016598925935148494,-0.0035398581984958464],[1.7094126651932706e-13,-1.2202112716298846e-13,2.1850401161392295e-14],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0717599511140502,0.07057596774409111,-0.16727280048376392],[1.23456e-61,1.23456e-61,1.23456e-61],[0.8095436997304307,-0.5778676895296931,0.10347913617913712]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_297","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,2.0,0.6443172088386724,0,0,0.0006673645521113123,0.00036434852777446694,-0.0008279402368290168,0.10036488055011124,-0.08178155810887824,-0.10930712490526215,-2.1159922662543757e-14,-4.3257350727348e-14,1.2935482777489766e-14,-0.12022434665734386,0.021082343740983424,-0.12616239904906856,-1.2177169275799936e-14,-2.489385668511891e-14,7.44414646299806e-15,1.23456e-61,1.23456e-61,1.23456e-61,0.11716530864633004,-0.020545915865514575,0.12295227077658266,1.23456e-61,1.23456e-61,1.23456e-61,-0.42436558392951756,-0.867532986457909,0.2594231458131309,0.0006673645521113123,0.00036434852777446694,-0.0008279402368290168,0.2217553764425295,-0.07049084119662699,0.1270211250003125,2.468082864716524e-08,5.045515893694003e-08,-1.508788283355673e-08,-0.22287824601956024,0.08715847316765163,-0.07311994631618908,0.405617609408955,-0.33051448962552515,-0.44175707330906056,1.23456e-61,1.23456e-61,1.23456e-61,2.5346826619971594e-08,5.1816662395758626e-08,-1.549502067826774e-08,1.23456e-61,1.23456e-61,1.23456e-61,-0.42436558392951756,-0.867532986457909,0.2594231458131309,0.0006673645521113123,0.00036434852777446694,-0.0008279402368290168,-0.6848715998994447,0.12009795760146375,-0.7186983875250674,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0006673645521113123,0.00036434852777446694,-0.0008279402368290168],[0.2217553764425295,-0.07049084119662699,0.1270211250003125],[2.468082864716524e-08,5.045515893694003e-08,-1.508788283355673e-08]],[[-0.22287824601956024,0.08715847316765163,-0.07311994631618908],[0.405617609408955,-0.33051448962552515,-0.44175707330906056],[1.23456e-61,1.23456e-61,1.23456e-61]],[[2.5346826619971594e-08,5.1816662395758626e-08,-1.549502067826774e-08],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.42436558392951756,-0.867532986457909,0.2594231458131309]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_298","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.02892829308433198,0,0,0.43100184416420273,2.0,0,0,0.0007498099531922157,0.0008340284879870643,-0.00015899944024650204,-2.113454651920299,19.55590343495882,-0.39249773173961483,3204482.6150828646,361852.5504464753,774080.5100544889,-2.3076448666894906,-0.05712253410421669,9.57972419590215,-656045.8976099958,-74081.18868948378,-158475.61183538157,1.23456e-61,1.23456e-61,1.23456e-61,134310.67397436182,15166.460788725824,32444.32487368875,1.23456e-61,1.23456e-61,1.23456e-61,-0.9662385146123988,-0.10910836876019973,-0.23340629114510464,0.0007498099531922157,0.0008340284879870643,-0.00015899944024650204,0.003994329399865227,-0.02494499028591616,-0.00487462313796735,6.396820399521508e-10,7.22333697620963e-11,1.5452272932554274e-10,0.002617501205906145,0.015476590819038273,-0.01807044717917719,-2.778505723252298e-10,-3.1375092430107426e-11,-6.711807757424324e-11,1.23456e-61,1.23456e-61,1.23456e-61,0.08881854029694042,0.0021985792888100947,-0.3687123292658309,1.23456e-61,1.23456e-61,1.23456e-61,0.9662385146123988,0.10910836876019973,0.23340629114510464,0.0007498099531922157,0.0008340284879870643,-0.00015899944024650204,-0.3793149025953995,0.7999485690483761,0.46497579673193556,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.02892829308433198,0,0,0.43100184416420273,2.0,0,0,0.0007498099531922157,0.0008340284879870643,-0.00015899944024650204,-2.113454651920299,19.55590343495882,-0.39249773173961483,3204482.6150828646,361852.5504464753,774080.5100544889,-2.3076448666894906,-0.05712253410421669,9.57972419590215,-656045.8976099958,-74081.18868948378,-158475.61183538157,1.23456e-61,1.23456e-61,1.23456e-61,134310.67397436182,15166.460788725824,32444.32487368875,1.23456e-61,1.23456e-61,1.23456e-61,-0.9662385146123988,-0.10910836876019973,-0.23340629114510464,0.0007498099531922157,0.0008340284879870643,-0.00015899944024650204,0.003994329399865227,-0.02494499028591616,-0.00487462313796735,6.396820399521508e-10,7.22333697620963e-11,1.5452272932554274e-10,0.002617501205906145,0.015476590819038273,-0.01807044717917719,-2.778505723252298e-10,-3.1375092430107426e-11,-6.711807757424324e-11,1.23456e-61,1.23456e-61,1.23456e-61,0.08881854029694042,0.0021985792888100947,-0.3687123292658309,1.23456e-61,1.23456e-61,1.23456e-61,0.9662385146123988,0.10910836876019973,0.23340629114510464,0.0007498099531922157,0.0008340284879870643,-0.00015899944024650204,0.2323680990909357,-0.9638485715274806,0.13038787401173574,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.02892829308433198,0,0,0.43100184416420273,2.0,0,0,0.0007498099531922157,0.0008340284879870643,-0.00015899944024650204,-2.113454651920299,19.55590343495882,-0.39249773173961483,3204482.6150828646,361852.5504464753,774080.5100544889,-2.3076448666894906,-0.05712253410421669,9.57972419590215,-656045.8976099958,-74081.18868948378,-158475.61183538157,1.23456e-61,1.23456e-61,1.23456e-61,134310.67397436182,15166.460788725824,32444.32487368875,1.23456e-61,1.23456e-61,1.23456e-61,-0.9662385146123988,-0.10910836876019973,-0.23340629114510464,0.0007498099531922157,0.0008340284879870643,-0.00015899944024650204,0.003994329399865227,-0.02494499028591616,-0.00487462313796735,6.396820399521508e-10,7.22333697620963e-11,1.5452272932554274e-10,0.002617501205906145,0.015476590819038273,-0.01807044717917719,-2.778505723252298e-10,-3.1375092430107426e-11,-6.711807757424324e-11,1.23456e-61,1.23456e-61,1.23456e-61,0.08881854029694042,0.0021985792888100947,-0.3687123292658309,1.23456e-61,1.23456e-61,1.23456e-61,0.9662385146123988,0.10910836876019973,0.23340629114510464,0.0007498099531922157,0.0008340284879870643,-0.00015899944024650204,-0.10742542863081805,0.9940129573419219,-0.019950386458702226,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0007498099531922157,0.0008340284879870643,-0.00015899944024650204],[0.003994329399865227,-0.02494499028591616,-0.00487462313796735],[6.396820399521508e-10,7.22333697620963e-11,1.5452272932554274e-10]],[[0.002617501205906145,0.015476590819038273,-0.01807044717917719],[-2.778505723252298e-10,-3.1375092430107426e-11,-6.711807757424324e-11],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.08881854029694042,0.0021985792888100947,-0.3687123292658309],[1.23456e-61,1.23456e-61,1.23456e-61],[0.9662385146123988,0.10910836876019973,0.23340629114510464]]],"normal":[-0.9662385146123988,-0.10910836876019973,-0.23340629114510464]},{"op":"state"}]}}, +{"name":"adv_sing_299","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,1.271885241262692,2.0,0,0,-0.0004067385818606668,-0.0008696853719472313,0.0005198129551727291,-4.7986982560567855,8.09405273249101,14.498440089750487,-165.87898702103294,159.46803450119265,-143.9289932721002,7.384078199767214,6.611731603373821,-1.2471507940883841,-30.745650523358634,29.471446569593546,-25.79559203134296,1.23456e-61,1.23456e-61,1.23456e-61,-5.575799666155116,5.37205802316275,-4.844541938358973,1.23456e-61,1.23456e-61,1.23456e-61,0.613639334813827,-0.5853685697115917,0.5298965978028631,-0.0004067385818606668,-0.0008696853719472313,0.0005198129551727291,22.28365745465929,1.1539201789172093,-24.530559710893023,-218.1312883074555,208.08183732977497,-188.36313285481324,8.614066760241078,-4.979557618591057,-15.476239613144825,-177.87551497513647,169.78707709291882,-153.03693013326773,1.23456e-61,1.23456e-61,1.23456e-61,-144.81225308351887,138.1406579647156,-125.04987192909452,1.23456e-61,1.23456e-61,1.23456e-61,-0.613639334813827,0.5853685697115917,-0.5298965978028631,-0.0004067385818606668,-0.0008696853719472313,0.0005198129551727291,0.62877307500717,0.6296178476270234,-0.4563176372830028,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,1.271885241262692,2.0,0,0,-0.0004067385818606668,-0.0008696853719472313,0.0005198129551727291,-4.7986982560567855,8.09405273249101,14.498440089750487,-165.87898702103294,159.46803450119265,-143.9289932721002,7.384078199767214,6.611731603373821,-1.2471507940883841,-30.745650523358634,29.471446569593546,-25.79559203134296,1.23456e-61,1.23456e-61,1.23456e-61,-5.575799666155116,5.37205802316275,-4.844541938358973,1.23456e-61,1.23456e-61,1.23456e-61,0.613639334813827,-0.5853685697115917,0.5298965978028631,-0.0004067385818606668,-0.0008696853719472313,0.0005198129551727291,22.28365745465929,1.1539201789172093,-24.530559710893023,-218.1312883074555,208.08183732977497,-188.36313285481324,8.614066760241078,-4.979557618591057,-15.476239613144825,-177.87551497513647,169.78707709291882,-153.03693013326773,1.23456e-61,1.23456e-61,1.23456e-61,-144.81225308351887,138.1406579647156,-125.04987192909452,1.23456e-61,1.23456e-61,1.23456e-61,-0.613639334813827,0.5853685697115917,-0.5298965978028631,-0.0004067385818606668,-0.0008696853719472313,0.0005198129551727291,0.739165887893383,0.6618519372227966,-0.12484311502529048,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.0004067385818606668,-0.0008696853719472313,0.0005198129551727291],[22.28365745465929,1.1539201789172093,-24.530559710893023],[-218.1312883074555,208.08183732977497,-188.36313285481324]],[[8.614066760241078,-4.979557618591057,-15.476239613144825],[-177.87551497513647,169.78707709291882,-153.03693013326773],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-144.81225308351887,138.1406579647156,-125.04987192909452],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.613639334813827,0.5853685697115917,-0.5298965978028631]]],"normal":[-0.613639334813827,0.5853685697115917,-0.5298965978028631]},{"op":"state"}]}}, +{"name":"adv_sing_300","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.8254365911810746,2.0,0,0,0.1588712081924757,2.0,0,0,0.00025435149997113116,0.0008552839067381887,-0.0007996428758022944,-20.51836943683414,-19.734608031791463,-20.324273179632115,-847218.9233856697,855424.5455918945,24703.602015045042,22.172988657983385,23.258983822806123,-44.968914444626506,-169632.64483364893,171275.49097839798,4946.331632341471,1.23456e-61,1.23456e-61,1.23456e-61,-31780.657924098454,32088.444974164166,926.6947039630754,1.23456e-61,1.23456e-61,1.23456e-61,-0.7035429520462616,0.7103565746692421,0.020514664272492825,0.00025435149997113116,0.0008552839067381887,-0.0007996428758022944,-0.22302371236220478,-0.2145046446703519,-0.22091398975631904,-100.09495122508038,101.06434367244938,2.9186765552574903,0.12459685552516801,0.13069939698855035,-0.25269418672450433,-10.360971431798193,10.46131462923685,0.30211638087201365,1.23456e-61,1.23456e-61,1.23456e-61,-1.3148155349252453,0.6867086703644005,0.6605866948622546,1.23456e-61,1.23456e-61,1.23456e-61,-0.7035429520462616,0.7103565746692421,0.020514664272492825,0.00025435149997113116,0.0008552839067381887,-0.0007996428758022944,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.00025435149997113116,0.0008552839067381887,-0.0007996428758022944],[-0.22302371236220478,-0.2145046446703519,-0.22091398975631904],[-100.09495122508038,101.06434367244938,2.9186765552574903]],[[0.12459685552516801,0.13069939698855035,-0.25269418672450433],[-10.360971431798193,10.46131462923685,0.30211638087201365],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-1.3148155349252453,0.6867086703644005,0.6605866948622546],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.7035429520462616,0.7103565746692421,0.020514664272492825]]],"normal":[0.7035429520462616,-0.7103565746692421,-0.020514664272492825]},{"op":"state"}]}}, +{"name":"adv_sing_301","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,1.4698370359748774,0.0,0,0,-907.4745372399055,-468.52509362220405,-713.6865468749876,1.2727452031020814,-0.5770613706974347,0.0,-0.16381487071520853,-0.361304016325999,0.0,-0.38282978125837785,-0.8443551976323367,0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-907.4745372399055,-468.52509362220405,-713.6865468749876,44.773276142637414,-20.3001575166124,0.0,-0.23016937458261671,-0.5076530543830663,-620.3513331242466,-16.159055612784154,-35.63981503903884,0.0,0.0,-0.0,-298.711711213429,1.23456e-61,1.23456e-61,1.23456e-61,0.18841872159686537,0.41556935928184635,393.0708659610781,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-907.4745372399055,-468.52509362220405,-713.6865468749876,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,1.4698370359748774,0.0,0,0,-907.4745372399055,-468.52509362220405,-713.6865468749876,1.2727452031020814,-0.5770613706974347,0.0,-0.16381487071520853,-0.361304016325999,0.0,-0.38282978125837785,-0.8443551976323367,0.0,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-907.4745372399055,-468.52509362220405,-713.6865468749876,44.773276142637414,-20.3001575166124,0.0,-0.23016937458261671,-0.5076530543830663,-620.3513331242466,-16.159055612784154,-35.63981503903884,0.0,0.0,-0.0,-298.711711213429,1.23456e-61,1.23456e-61,1.23456e-61,0.18841872159686537,0.41556935928184635,393.0708659610781,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-907.4745372399055,-468.52509362220405,-713.6865468749876,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-907.4745372399055,-468.52509362220405,-713.6865468749876],[44.773276142637414,-20.3001575166124,0.0],[-0.23016937458261671,-0.5076530543830663,-620.3513331242466]],[[-16.159055612784154,-35.63981503903884,0.0],[0.0,-0.0,-298.711711213429],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.18841872159686537,0.41556935928184635,393.0708659610781],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_302","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.34613708443735036,0.0,0,0,2.0,2.0,0,0,348.17084733787016,578.5799432774745,-936.2255155367308,-0.232689729285071,0.3778083591406502,0.33638264131990664,-0.7874368633784016,-0.6764361288455877,-0.007896084263970066,0.36992593214879355,0.6411869784353905,0.4463598158431207,0.3887242293865095,-0.5913105770739973,-0.13691367006804142,1.23456e-61,1.23456e-61,1.23456e-61,0.09468573653335081,-0.4594841697145644,0.5815679365750003,1.23456e-61,1.23456e-61,1.23456e-61,0.12672022699590368,-0.614938853717901,0.7783265318991898,348.17084733787016,578.5799432774745,-936.2255155367308,-90.21230565445003,103.88626617132824,96.76584595286556,27470.541380317376,-133307.0783401343,168726.42757045222,77.03608584836225,45.266297989008876,23.22158422086867,-5845.71552228844,28368.634197053227,-35906.76666820846,1.23456e-61,1.23456e-61,1.23456e-61,21965.727068594202,-106593.70918802277,134915.3846646419,1.23456e-61,1.23456e-61,1.23456e-61,0.12672022699590368,-0.614938853717901,0.7783265318991898,348.17084733787016,578.5799432774745,-936.2255155367308,0.12672022699590368,-0.614938853717901,0.7783265318991898,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[348.17084733787016,578.5799432774745,-936.2255155367308],[-90.21230565445003,103.88626617132824,96.76584595286556],[27470.541380317376,-133307.0783401343,168726.42757045222]],[[77.03608584836225,45.266297989008876,23.22158422086867],[-5845.71552228844,28368.634197053227,-35906.76666820846],[1.23456e-61,1.23456e-61,1.23456e-61]],[[21965.727068594202,-106593.70918802277,134915.3846646419],[1.23456e-61,1.23456e-61,1.23456e-61],[0.12672022699590368,-0.614938853717901,0.7783265318991898]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_303","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,2.0,0.0,0,0,0.6741179303922888,-1.7961926366856278,0.8728122117895709,35.102031454909756,-19.08910908918543,-7.185398549675369,5070.611725081265,7273.731186940184,5447.119444514836,-8.546702485167236,-37.61429053982921,58.17585107730808,-4173.63025171074,-5986.8403384718395,-4484.017390732518,1.23456e-61,1.23456e-61,1.23456e-61,-14989.432514867005,-21501.506798313934,-16104.175985959719,1.23456e-61,1.23456e-61,1.23456e-61,0.4872603240250159,0.6989478193508173,0.5234972038662422,0.6741179303922888,-1.7961926366856278,0.8728122117895709,0.5325935738233694,-0.4628987541312349,0.12231270186837671,-0.03049849005060329,-0.13422475718328833,0.2075976809003977,0.49519813109483546,-0.8366540152962586,0.6561393168708063,1.353732119772367e-13,1.9418533922156116e-13,1.45440731482248e-13,1.23456e-61,1.23456e-61,1.23456e-61,4.78135795290173e-13,6.85859190649961e-13,5.136940964844842e-13,1.23456e-61,1.23456e-61,1.23456e-61,0.4872603240250159,0.6989478193508173,0.5234972038662422,0.6741179303922888,-1.7961926366856278,0.8728122117895709,-0.8646301439430957,0.4702012520480287,0.17699010355781977,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,2.0,0.0,0,0,0.6741179303922888,-1.7961926366856278,0.8728122117895709,35.102031454909756,-19.08910908918543,-7.185398549675369,5070.611725081265,7273.731186940184,5447.119444514836,-8.546702485167236,-37.61429053982921,58.17585107730808,-4173.63025171074,-5986.8403384718395,-4484.017390732518,1.23456e-61,1.23456e-61,1.23456e-61,-14989.432514867005,-21501.506798313934,-16104.175985959719,1.23456e-61,1.23456e-61,1.23456e-61,0.4872603240250159,0.6989478193508173,0.5234972038662422,0.6741179303922888,-1.7961926366856278,0.8728122117895709,0.5325935738233694,-0.4628987541312349,0.12231270186837671,-0.03049849005060329,-0.13422475718328833,0.2075976809003977,0.49519813109483546,-0.8366540152962586,0.6561393168708063,1.353732119772367e-13,1.9418533922156116e-13,1.45440731482248e-13,1.23456e-61,1.23456e-61,1.23456e-61,4.78135795290173e-13,6.85859190649961e-13,5.136940964844842e-13,1.23456e-61,1.23456e-61,1.23456e-61,0.4872603240250159,0.6989478193508173,0.5234972038662422,0.6741179303922888,-1.7961926366856278,0.8728122117895709,-0.7776971734862484,-0.24838578219484966,-0.5774873241508881,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.6741179303922888,-1.7961926366856278,0.8728122117895709],[0.5325935738233694,-0.4628987541312349,0.12231270186837671],[-0.03049849005060329,-0.13422475718328833,0.2075976809003977]],[[0.49519813109483546,-0.8366540152962586,0.6561393168708063],[1.353732119772367e-13,1.9418533922156116e-13,1.45440731482248e-13],[1.23456e-61,1.23456e-61,1.23456e-61]],[[4.78135795290173e-13,6.85859190649961e-13,5.136940964844842e-13],[1.23456e-61,1.23456e-61,1.23456e-61],[0.4872603240250159,0.6989478193508173,0.5234972038662422]]],"normal":[-0.4872603240250159,-0.6989478193508173,-0.5234972038662422]},{"op":"state"}]}}, +{"name":"adv_sing_304","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,2.0,1.733747742480428,0,0,0.7521594479337628,1.25624478811016,-0.5959808097676862,0.05321144191886373,-0.012901828394504376,0.0,0.17358272086149826,0.715913015334659,29400.655802181707,-0.007344416987310846,-0.030290824369875687,0.0,0.0,0.0,2348.8450084515935,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,177.74546041682035,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.7521594479337628,1.25624478811016,-0.5959808097676862,0.02343627047496643,-0.005682438381133484,0.0,0.0694798405913836,0.2865580279873459,-0.004071100713930621,-0.004566443635746417,-0.018833536059337717,0.0,0.0,-0.0,-1.5747995257562402e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-0.0,-0.0026289773329831725,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.7521594479337628,1.25624478811016,-0.5959808097676862,-0.9718413863579184,0.2356359899546739,-0.0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,2.0,1.733747742480428,0,0,0.7521594479337628,1.25624478811016,-0.5959808097676862,0.05321144191886373,-0.012901828394504376,0.0,0.17358272086149826,0.715913015334659,29400.655802181707,-0.007344416987310846,-0.030290824369875687,0.0,0.0,0.0,2348.8450084515935,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,177.74546041682035,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.7521594479337628,1.25624478811016,-0.5959808097676862,0.02343627047496643,-0.005682438381133484,0.0,0.0694798405913836,0.2865580279873459,-0.004071100713930621,-0.004566443635746417,-0.018833536059337717,0.0,0.0,-0.0,-1.5747995257562402e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-0.0,-0.0026289773329831725,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.7521594479337628,1.25624478811016,-0.5959808097676862,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,2.0,1.733747742480428,0,0,0.7521594479337628,1.25624478811016,-0.5959808097676862,0.05321144191886373,-0.012901828394504376,0.0,0.17358272086149826,0.715913015334659,29400.655802181707,-0.007344416987310846,-0.030290824369875687,0.0,0.0,0.0,2348.8450084515935,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,177.74546041682035,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.7521594479337628,1.25624478811016,-0.5959808097676862,0.02343627047496643,-0.005682438381133484,0.0,0.0694798405913836,0.2865580279873459,-0.004071100713930621,-0.004566443635746417,-0.018833536059337717,0.0,0.0,-0.0,-1.5747995257562402e-07,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-0.0,-0.0026289773329831725,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.7521594479337628,1.25624478811016,-0.5959808097676862,0.2356359899546739,0.9718413863579184,-0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.7521594479337628,1.25624478811016,-0.5959808097676862],[0.02343627047496643,-0.005682438381133484,0.0],[0.0694798405913836,0.2865580279873459,-0.004071100713930621]],[[-0.004566443635746417,-0.018833536059337717,0.0],[0.0,-0.0,-1.5747995257562402e-07],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0,-0.0,-0.0026289773329831725],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_305","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.87102396243139,0,0,0.9322262636941241,0.0,0,0,0.0008602951607936476,-0.0005453706578334279,0.0009642056967462529,6.209229596894968,0.0,5.128057726974455,-0.24627459532808416,-453.96055766697185,-0.23845691396230542,4.453643331356173,0.0,7.340644081483852,0.0,-457.0785841306525,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.6169802726654495,-516.0399611777005,-0.5973949996727392,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.0008602951607936476,-0.0005453706578334279,0.0009642056967462529,0.10898001732838551,0.0,-0.11255286844246577,-0.0,2.6820097720411956e-12,-0.0,-0.1159111527177338,0.0,-0.11223169703745875,0.0,7.921462833388544e-12,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,2.3158268810853362e-11,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.0008602951607936476,-0.0005453706578334279,0.0009642056967462529,0,-1,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.87102396243139,0,0,0.9322262636941241,0.0,0,0,0.0008602951607936476,-0.0005453706578334279,0.0009642056967462529,6.209229596894968,0.0,5.128057726974455,-0.24627459532808416,-453.96055766697185,-0.23845691396230542,4.453643331356173,0.0,7.340644081483852,0.0,-457.0785841306525,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.6169802726654495,-516.0399611777005,-0.5973949996727392,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.0008602951607936476,-0.0005453706578334279,0.0009642056967462529,0.10898001732838551,0.0,-0.11255286844246577,-0.0,2.6820097720411956e-12,-0.0,-0.1159111527177338,0.0,-0.11223169703745875,0.0,7.921462833388544e-12,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,2.3158268810853362e-11,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.0008602951607936476,-0.0005453706578334279,0.0009642056967462529,0.5143023207876842,0.7397315479000396,-0.43392437114526466,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.87102396243139,0,0,0.9322262636941241,0.0,0,0,0.0008602951607936476,-0.0005453706578334279,0.0009642056967462529,6.209229596894968,0.0,5.128057726974455,-0.24627459532808416,-453.96055766697185,-0.23845691396230542,4.453643331356173,0.0,7.340644081483852,0.0,-457.0785841306525,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.6169802726654495,-516.0399611777005,-0.5973949996727392,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.0008602951607936476,-0.0005453706578334279,0.0009642056967462529,0.10898001732838551,0.0,-0.11255286844246577,-0.0,2.6820097720411956e-12,-0.0,-0.1159111527177338,0.0,-0.11223169703745875,0.0,7.921462833388544e-12,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,2.3158268810853362e-11,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.0008602951607936476,-0.0005453706578334279,0.0009642056967462529,0.6956122016135835,0.0,-0.718417472620414,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0008602951607936476,-0.0005453706578334279,0.0009642056967462529],[0.10898001732838551,0.0,-0.11255286844246577],[-0.0,2.6820097720411956e-12,-0.0]],[[-0.1159111527177338,0.0,-0.11223169703745875],[0.0,7.921462833388544e-12,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0,2.3158268810853362e-11,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_306","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.9231134925936559,0.0,0,0,2.0,1.1868240171648297,0,0,-901.5987115282762,999.5088897030208,789.8064009174508,85.62303358255654,-65.57949024331609,58.06997891038166,-13535.45706552372,-10378.243997944786,8237.422379795249,-1.787269430832357,42.66520992846441,50.81789599552319,-15636.704088380258,-11989.958893876164,9516.47250542123,1.23456e-61,1.23456e-61,1.23456e-61,-18064.901453010076,-13851.107402975937,10994.030185017622,1.23456e-61,1.23456e-61,1.23456e-61,0.7146011680180328,0.5479221600128997,-0.43488674069700195,-901.5987115282762,999.5088897030208,789.8064009174508,2.3118306828800064,-1.7706529583064718,1.5678953826107453,6.482149169592739e-06,4.970203427430518e-06,-3.94485882648995e-06,-0.10095600947344675,2.4099944101425557,2.8705084421185356,0.38520381586513,-0.295036351205881,0.2612514864179415,1.23456e-61,1.23456e-61,1.23456e-61,1.7147829674733222e-06,1.3148139543309604e-06,-1.0435700487245603e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.7146011680180328,-0.5479221600128997,0.43488674069700195,-901.5987115282762,999.5088897030208,789.8064009174508,0.7146011680180328,0.5479221600128997,-0.43488674069700195,0,0,0,0,0,0,0],[1,1,1,1,1,0.9231134925936559,0.0,0,0,2.0,1.1868240171648297,0,0,-901.5987115282762,999.5088897030208,789.8064009174508,85.62303358255654,-65.57949024331609,58.06997891038166,-13535.45706552372,-10378.243997944786,8237.422379795249,-1.787269430832357,42.66520992846441,50.81789599552319,-15636.704088380258,-11989.958893876164,9516.47250542123,1.23456e-61,1.23456e-61,1.23456e-61,-18064.901453010076,-13851.107402975937,10994.030185017622,1.23456e-61,1.23456e-61,1.23456e-61,0.7146011680180328,0.5479221600128997,-0.43488674069700195,-901.5987115282762,999.5088897030208,789.8064009174508,2.3118306828800064,-1.7706529583064718,1.5678953826107453,6.482149169592739e-06,4.970203427430518e-06,-3.94485882648995e-06,-0.10095600947344675,2.4099944101425557,2.8705084421185356,0.38520381586513,-0.295036351205881,0.2612514864179415,1.23456e-61,1.23456e-61,1.23456e-61,1.7147829674733222e-06,1.3148139543309604e-06,-1.0435700487245603e-06,1.23456e-61,1.23456e-61,1.23456e-61,-0.7146011680180328,-0.5479221600128997,0.43488674069700195,-901.5987115282762,999.5088897030208,789.8064009174508,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-901.5987115282762,999.5088897030208,789.8064009174508],[2.3118306828800064,-1.7706529583064718,1.5678953826107453],[6.482149169592739e-06,4.970203427430518e-06,-3.94485882648995e-06]],[[-0.10095600947344675,2.4099944101425557,2.8705084421185356],[0.38520381586513,-0.295036351205881,0.2612514864179415],[1.23456e-61,1.23456e-61,1.23456e-61]],[[1.7147829674733222e-06,1.3148139543309604e-06,-1.0435700487245603e-06],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.7146011680180328,-0.5479221600128997,0.43488674069700195]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_307","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.9280954554325438,0.0,0,0,2.0,1.891102464846139,0,0,0.1274987365992286,-0.8811767799262431,-0.17131524668368092,0.003792985688042823,-0.02107088500163844,0.0,0.0,0.0,0.0011459223379549233,-0.01502519955135907,-0.0027046973515284676,0.0,0.01711622693587458,-0.09508447410300057,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0005826800233038147,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.1274987365992286,-0.8811767799262431,-0.17131524668368092,0.19144913505187333,4.061791436807235,-0.0,-0.39755355561030986,-0.07156391136600046,16.534802447432696,10.583023137174575,-7.734425055271156,0.0,0.14413853819893666,-0.8007218620066078,-29.389510832281676,1.23456e-61,1.23456e-61,1.23456e-61,-0.08176795258475386,-0.01471910998851824,171.8217096575786,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.1274987365992286,-0.8811767799262431,-0.17131524668368092,0.3294223942214381,0.7118607208906028,0.6202702638677164,0,0,0,0,0,0,0],[1,1,1,1,1,1.9280954554325438,0.0,0,0,2.0,1.891102464846139,0,0,0.1274987365992286,-0.8811767799262431,-0.17131524668368092,0.003792985688042823,-0.02107088500163844,0.0,0.0,0.0,0.0011459223379549233,-0.01502519955135907,-0.0027046973515284676,0.0,0.01711622693587458,-0.09508447410300057,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0005826800233038147,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.1274987365992286,-0.8811767799262431,-0.17131524668368092,0.19144913505187333,4.061791436807235,-0.0,-0.39755355561030986,-0.07156391136600046,16.534802447432696,10.583023137174575,-7.734425055271156,0.0,0.14413853819893666,-0.8007218620066078,-29.389510832281676,1.23456e-61,1.23456e-61,1.23456e-61,-0.08176795258475386,-0.01471910998851824,171.8217096575786,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.1274987365992286,-0.8811767799262431,-0.17131524668368092,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.1274987365992286,-0.8811767799262431,-0.17131524668368092],[0.19144913505187333,4.061791436807235,-0.0],[-0.39755355561030986,-0.07156391136600046,16.534802447432696]],[[10.583023137174575,-7.734425055271156,0.0],[0.14413853819893666,-0.8007218620066078,-29.389510832281676],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.08176795258475386,-0.01471910998851824,171.8217096575786],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_308","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,0.0,0.5800088275264352,0,0,0.6170767066799308,-0.5846747029267911,-0.8332776663926829,0.0,-0.01780914601591462,-0.0014000031900563495,5.432698445827932e-06,0.7432130047631119,0.6528326810196348,0.0,0.007472133283871153,-0.01819602204914283,6.694333442720864e-05,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0008248958319098405,-0.29370391289527864,-0.2579872952337482,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.6170767066799308,-0.5846747029267911,-0.8332776663926829,0.0,-24.487317302750476,6.663285379293667,-6440280.807314916,0.648523835332519,0.5696584309100052,0.0,-5.203719141815957,-11.444096270389178,-511698.4242233031,-0.02332027422679857,0.026548810413303193,1.23456e-61,1.23456e-61,1.23456e-61,-1580460.3235283724,0.12860349376852281,0.11296433604812467,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.6170767066799308,-0.5846747029267911,-0.8332776663926829,-0.6458984148644293,-0.47148303716245327,-0.6004323303617871,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,0.5800088275264352,0,0,0.6170767066799308,-0.5846747029267911,-0.8332776663926829,0.0,-0.01780914601591462,-0.0014000031900563495,5.432698445827932e-06,0.7432130047631119,0.6528326810196348,0.0,0.007472133283871153,-0.01819602204914283,6.694333442720864e-05,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0008248958319098405,-0.29370391289527864,-0.2579872952337482,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.6170767066799308,-0.5846747029267911,-0.8332776663926829,0.0,-24.487317302750476,6.663285379293667,-6440280.807314916,0.648523835332519,0.5696584309100052,0.0,-5.203719141815957,-11.444096270389178,-511698.4242233031,-0.02332027422679857,0.026548810413303193,1.23456e-61,1.23456e-61,1.23456e-61,-1580460.3235283724,0.12860349376852281,0.11296433604812467,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.6170767066799308,-0.5846747029267911,-0.8332776663926829,0.0,-0.7513121990836812,-0.6599469520408766,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,0.5800088275264352,0,0,0.6170767066799308,-0.5846747029267911,-0.8332776663926829,0.0,-0.01780914601591462,-0.0014000031900563495,5.432698445827932e-06,0.7432130047631119,0.6528326810196348,0.0,0.007472133283871153,-0.01819602204914283,6.694333442720864e-05,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0008248958319098405,-0.29370391289527864,-0.2579872952337482,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.6170767066799308,-0.5846747029267911,-0.8332776663926829,0.0,-24.487317302750476,6.663285379293667,-6440280.807314916,0.648523835332519,0.5696584309100052,0.0,-5.203719141815957,-11.444096270389178,-511698.4242233031,-0.02332027422679857,0.026548810413303193,1.23456e-61,1.23456e-61,1.23456e-61,-1580460.3235283724,0.12860349376852281,0.11296433604812467,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.6170767066799308,-0.5846747029267911,-0.8332776663926829,0.0,-0.6599469520408766,0.7513121990836812,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.6170767066799308,-0.5846747029267911,-0.8332776663926829],[0.0,-24.487317302750476,6.663285379293667],[-6440280.807314916,0.648523835332519,0.5696584309100052]],[[0.0,-5.203719141815957,-11.444096270389178],[-511698.4242233031,-0.02332027422679857,0.026548810413303193],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-1580460.3235283724,0.12860349376852281,0.11296433604812467],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_309","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,0.0,2.0,0,0,622.9298318821636,-161.5808817038822,665.0943787892622,-0.009840586374022742,0.01057642119108745,-0.010119354742674242,-0.3484331194497865,0.2723249631209894,0.6234596848082694,-0.007711562979024899,0.00602712827702437,0.013798483436448154,-0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.19238254124281903,-0.1503604730016424,-0.34423466668487296,1.23456e-61,1.23456e-61,1.23456e-61,-0.6934947582193061,-0.7165923050124244,-0.07456868457554383,622.9298318821636,-161.5808817038822,665.0943787892622,0.054857331360467554,0.06823788406045428,-1.1659319843352782,0.04657233947569353,-0.03639955543961907,-0.08333299703314563,0.1425557327208002,-0.24258451052635577,1.005415887234161,0.19824891018265434,-0.2130730725864947,0.20386499068619496,1.23456e-61,1.23456e-61,1.23456e-61,-0.10587707394935217,0.08275037213914198,0.18944837190118666,1.23456e-61,1.23456e-61,1.23456e-61,-0.6934947582193061,-0.7165923050124244,-0.07456868457554383,622.9298318821636,-161.5808817038822,665.0943787892622,-0.455840797259438,0.35627161010764286,0.8156468030864754,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.0,2.0,0,0,622.9298318821636,-161.5808817038822,665.0943787892622,-0.009840586374022742,0.01057642119108745,-0.010119354742674242,-0.3484331194497865,0.2723249631209894,0.6234596848082694,-0.007711562979024899,0.00602712827702437,0.013798483436448154,-0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.19238254124281903,-0.1503604730016424,-0.34423466668487296,1.23456e-61,1.23456e-61,1.23456e-61,-0.6934947582193061,-0.7165923050124244,-0.07456868457554383,622.9298318821636,-161.5808817038822,665.0943787892622,0.054857331360467554,0.06823788406045428,-1.1659319843352782,0.04657233947569353,-0.03639955543961907,-0.08333299703314563,0.1425557327208002,-0.24258451052635577,1.005415887234161,0.19824891018265434,-0.2130730725864947,0.20386499068619496,1.23456e-61,1.23456e-61,1.23456e-61,-0.10587707394935217,0.08275037213914198,0.18944837190118666,1.23456e-61,1.23456e-61,1.23456e-61,-0.6934947582193061,-0.7165923050124244,-0.07456868457554383,622.9298318821636,-161.5808817038822,665.0943787892622,-0.5579195173824145,0.5996382311263087,-0.5737245017388446,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[622.9298318821636,-161.5808817038822,665.0943787892622],[0.054857331360467554,0.06823788406045428,-1.1659319843352782],[0.04657233947569353,-0.03639955543961907,-0.08333299703314563]],[[0.1425557327208002,-0.24258451052635577,1.005415887234161],[0.19824891018265434,-0.2130730725864947,0.20386499068619496],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.10587707394935217,0.08275037213914198,0.18944837190118666],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6934947582193061,-0.7165923050124244,-0.07456868457554383]]],"normal":[-0.6934947582193061,-0.7165923050124244,-0.07456868457554383]},{"op":"state"}]}}, +{"name":"adv_sing_310","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.45022770876018425,0,0,2.0,2.0,0,0,-0.2796521510117882,-0.3753813801282997,-0.760563628241415,0.6541803347858233,0.0,0.05027693172429326,0.39143654967971797,-4.30479680284101e-07,0.5073058260357782,0.19389555243404247,-0.0,-0.27724137832175466,0.0,-1.129038115557522e-07,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-1.1445826710744882e-07,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.2796521510117882,-0.3753813801282997,-0.760563628241415,-5.1258313655342205,0.0,3.9550851596632093,0.0,0.0,0.0,5.297848040931444,0.0,6.8660659788050795,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-0.2796521510117882,-0.3753813801282997,-0.760563628241415,0.8380398527974581,-0.5021972560661837,-0.21327709938671452,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.45022770876018425,0,0,2.0,2.0,0,0,-0.2796521510117882,-0.3753813801282997,-0.760563628241415,0.6541803347858233,0.0,0.05027693172429326,0.39143654967971797,-4.30479680284101e-07,0.5073058260357782,0.19389555243404247,-0.0,-0.27724137832175466,0.0,-1.129038115557522e-07,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-1.1445826710744882e-07,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.2796521510117882,-0.3753813801282997,-0.760563628241415,-5.1258313655342205,0.0,3.9550851596632093,0.0,0.0,0.0,5.297848040931444,0.0,6.8660659788050795,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-0.2796521510117882,-0.3753813801282997,-0.760563628241415,0,-1,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.2796521510117882,-0.3753813801282997,-0.760563628241415],[-5.1258313655342205,0.0,3.9550851596632093],[0.0,0.0,0.0]],[[5.297848040931444,0.0,6.8660659788050795],[-0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_311","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.1443161453345563,0.0,0,0,0.0,0.7683140774274988,0,0,-1.0687796905296034,-1.9968392809099123,0.6701942249914921,-27.41819835860968,101.58801557195319,51.922062862725866,0.0013055212671627564,0.0016016024527816298,-0.002444212861579362,-67.47072782077402,0.15662453564620718,-35.935339847511756,-0.16202107641995422,0.5827590739430878,0.30674412331939477,1.23456e-61,1.23456e-61,1.23456e-61,-0.0005541225040315656,-0.0006797928030136131,0.0010374349199136145,1.23456e-61,1.23456e-61,1.23456e-61,0.4079018546374519,0.5004105465867327,-0.7636788342281686,-1.0687796905296034,-1.9968392809099123,0.6701942249914921,-0.006440990425291106,0.023864713029833583,0.01219735539826835,0.0,0.0,-0.0,-0.042307043277549965,9.821030870620061e-05,-0.022533001009869717,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.4079018546374519,-0.5004105465867327,0.7636788342281686,-1.0687796905296034,-1.9968392809099123,0.6701942249914921,0.23367212390571215,-0.8657858204826475,-0.4425067813724242,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-1.0687796905296034,-1.9968392809099123,0.6701942249914921],[-0.006440990425291106,0.023864713029833583,0.01219735539826835],[0.0,0.0,-0.0]],[[-0.042307043277549965,9.821030870620061e-05,-0.022533001009869717],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.4079018546374519,-0.5004105465867327,0.7636788342281686]]],"normal":[0.4079018546374519,0.5004105465867327,-0.7636788342281686]},{"op":"state"}]}}, +{"name":"adv_sing_312","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,2.0,0.0,0,0,-720.611875927375,790.7968164322463,996.8754701915745,0.022771130151578698,0.008378245561525588,-3.272233301749791e-05,-0.49925639420177204,-0.15040197560211,-0.1759817480373439,-0.05586191959003248,-0.027338856907724283,0.03609557298708881,-0.0253999285099912,-0.027312640940777823,0.09540166559615251,1.23456e-61,1.23456e-61,1.23456e-61,0.36707846531625854,0.11058311325752058,0.1293906512634734,1.23456e-61,1.23456e-61,1.23456e-61,-0.33980620191905747,0.9242351657966899,0.1741295593577091,-720.611875927375,790.7968164322463,996.8754701915745,-80.96490206683849,-36.494930487933786,35.70629991316319,0.43008570157637543,0.12956416772333607,0.1515999283099604,23.054360727073508,5.179254587267539,17.499415638631167,0.23923106138986852,0.257246081580602,-0.8985474785864574,1.23456e-61,1.23456e-61,1.23456e-61,0.358724650099892,0.10806650991112715,0.12644603398539603,1.23456e-61,1.23456e-61,1.23456e-61,-0.33980620191905747,0.9242351657966899,0.1741295593577091,-720.611875927375,790.7968164322463,996.8754701915745,-0.9072182940368809,-0.2733013043201571,-0.31978330791602044,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,0.0,0,0,-720.611875927375,790.7968164322463,996.8754701915745,0.022771130151578698,0.008378245561525588,-3.272233301749791e-05,-0.49925639420177204,-0.15040197560211,-0.1759817480373439,-0.05586191959003248,-0.027338856907724283,0.03609557298708881,-0.0253999285099912,-0.027312640940777823,0.09540166559615251,1.23456e-61,1.23456e-61,1.23456e-61,0.36707846531625854,0.11058311325752058,0.1293906512634734,1.23456e-61,1.23456e-61,1.23456e-61,-0.33980620191905747,0.9242351657966899,0.1741295593577091,-720.611875927375,790.7968164322463,996.8754701915745,-80.96490206683849,-36.494930487933786,35.70629991316319,0.43008570157637543,0.12956416772333607,0.1515999283099604,23.054360727073508,5.179254587267539,17.499415638631167,0.23923106138986852,0.257246081580602,-0.8985474785864574,1.23456e-61,1.23456e-61,1.23456e-61,0.358724650099892,0.10806650991112715,0.12644603398539603,1.23456e-61,1.23456e-61,1.23456e-61,-0.33980620191905747,0.9242351657966899,0.1741295593577091,-720.611875927375,790.7968164322463,996.8754701915745,0.9072182940368809,0.2733013043201571,0.31978330791602044,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-720.611875927375,790.7968164322463,996.8754701915745],[-80.96490206683849,-36.494930487933786,35.70629991316319],[0.43008570157637543,0.12956416772333607,0.1515999283099604]],[[23.054360727073508,5.179254587267539,17.499415638631167],[0.23923106138986852,0.257246081580602,-0.8985474785864574],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.358724650099892,0.10806650991112715,0.12644603398539603],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.33980620191905747,0.9242351657966899,0.1741295593577091]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_313","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.267509292039124,0,0,2.0,0.0,0,0,-0.37959544118482236,0.4328624680910331,-0.35158474117300087,-1.3549897983032224,-2.387997521623484,0.0,0.0,0.0,6.810660355935613e-06,-1.6932782507075412,0.9607944458156766,0.0,0.0,0.0,2.2915801170575156e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.49191590897096044,-0.2791213274901387,-3.4243499402259014e-06,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.37959544118482236,0.4328624680910331,-0.35158474117300087,-0.01758248507495822,-0.03098689808259811,0.0,0.0,0.0,2.8801045993313953e-06,-0.05244452152208528,0.029757900079815772,0.0,0.2832753770319252,0.49923689398716453,0.00010223888899755701,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0036277068500408936,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.37959544118482236,0.4328624680910331,-0.35158474117300087,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.37959544118482236,0.4328624680910331,-0.35158474117300087],[-0.01758248507495822,-0.03098689808259811,0.0],[0.0,0.0,2.8801045993313953e-06]],[[-0.05244452152208528,0.029757900079815772,0.0],[0.2832753770319252,0.49923689398716453,0.00010223888899755701],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0036277068500408936],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_314","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.059538595891412,0.0,0,0,0.0,0.23923174704244032,0,0,1.370826838477896,1.0487978639910929,-0.4304997176266223,2.9707333675662286,-1.8438714737278272,-0.41122892005467127,3727.5537818696416,7687.49735988067,-7541.270897561938,0.1432618044486107,-1.231276000925061,-1.1843381635200823,-1067.4630793498607,-2201.4758430007614,2159.600833575438,1.23456e-61,1.23456e-61,1.23456e-61,300.97301250041573,620.709820538598,-608.9030911265619,1.23456e-61,1.23456e-61,1.23456e-61,-0.3271004460326357,-0.6745935705937497,0.6617619003227869,1.370826838477896,1.0487978639910929,-0.4304997176266223,4.045911812434827,-4.028356960571706,-2.1066249757233217,-0.2945690272017413,0.39172605315010683,0.2536670626717651,-4.1605974440000555,1.304084672830875,-0.7271590335714142,-5.2140964847505814e-06,-1.0753259458158222e-05,1.054871810804759e-05,1.23456e-61,1.23456e-61,1.23456e-61,2.9359941416485784e-06,6.055029258686599e-06,-5.939854518939059e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.3271004460326357,0.6745935705937497,-0.6617619003227869,1.370826838477896,1.0487978639910929,-0.4304997176266223,0.7797974491009337,0.2028715452381206,0.5922491658992636,0,0,0,0,0,0,0],[1,1,1,1,1,1.059538595891412,0.0,0,0,0.0,0.23923174704244032,0,0,1.370826838477896,1.0487978639910929,-0.4304997176266223,2.9707333675662286,-1.8438714737278272,-0.41122892005467127,3727.5537818696416,7687.49735988067,-7541.270897561938,0.1432618044486107,-1.231276000925061,-1.1843381635200823,-1067.4630793498607,-2201.4758430007614,2159.600833575438,1.23456e-61,1.23456e-61,1.23456e-61,300.97301250041573,620.709820538598,-608.9030911265619,1.23456e-61,1.23456e-61,1.23456e-61,-0.3271004460326357,-0.6745935705937497,0.6617619003227869,1.370826838477896,1.0487978639910929,-0.4304997176266223,4.045911812434827,-4.028356960571706,-2.1066249757233217,-0.2945690272017413,0.39172605315010683,0.2536670626717651,-4.1605974440000555,1.304084672830875,-0.7271590335714142,-5.2140964847505814e-06,-1.0753259458158222e-05,1.054871810804759e-05,1.23456e-61,1.23456e-61,1.23456e-61,2.9359941416485784e-06,6.055029258686599e-06,-5.939854518939059e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.3271004460326357,0.6745935705937497,-0.6617619003227869,1.370826838477896,1.0487978639910929,-0.4304997176266223,-0.5337801388033533,0.7097652081120014,0.4596869725941775,0,0,0,0,0,0,0],[1,1,1,1,1,1.059538595891412,0.0,0,0,0.0,0.23923174704244032,0,0,1.370826838477896,1.0487978639910929,-0.4304997176266223,2.9707333675662286,-1.8438714737278272,-0.41122892005467127,3727.5537818696416,7687.49735988067,-7541.270897561938,0.1432618044486107,-1.231276000925061,-1.1843381635200823,-1067.4630793498607,-2201.4758430007614,2159.600833575438,1.23456e-61,1.23456e-61,1.23456e-61,300.97301250041573,620.709820538598,-608.9030911265619,1.23456e-61,1.23456e-61,1.23456e-61,-0.3271004460326357,-0.6745935705937497,0.6617619003227869,1.370826838477896,1.0487978639910929,-0.4304997176266223,4.045911812434827,-4.028356960571706,-2.1066249757233217,-0.2945690272017413,0.39172605315010683,0.2536670626717651,-4.1605974440000555,1.304084672830875,-0.7271590335714142,-5.2140964847505814e-06,-1.0753259458158222e-05,1.054871810804759e-05,1.23456e-61,1.23456e-61,1.23456e-61,2.9359941416485784e-06,6.055029258686599e-06,-5.939854518939059e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.3271004460326357,0.6745935705937497,-0.6617619003227869,1.370826838477896,1.0487978639910929,-0.4304997176266223,0.5337801388033533,-0.7097652081120014,-0.4596869725941775,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.370826838477896,1.0487978639910929,-0.4304997176266223],[4.045911812434827,-4.028356960571706,-2.1066249757233217],[-0.2945690272017413,0.39172605315010683,0.2536670626717651]],[[-4.1605974440000555,1.304084672830875,-0.7271590335714142],[-5.2140964847505814e-06,-1.0753259458158222e-05,1.054871810804759e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[2.9359941416485784e-06,6.055029258686599e-06,-5.939854518939059e-06],[1.23456e-61,1.23456e-61,1.23456e-61],[0.3271004460326357,0.6745935705937497,-0.6617619003227869]]],"normal":[0.3271004460326357,0.6745935705937497,-0.6617619003227869]},{"op":"state"}]}}, +{"name":"adv_sing_315","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.36310891334406104,0.14674540177425843,0,0,2.0,2.0,0,0,0.6684724999886245,0.8156006776974778,-0.01555410008240421,4.942832928293815,0.6044647167060282,-0.22592241909541078,-2105.342752853823,8931.601103995774,-22164.775736478885,-3.8422389049193324,2.5326657800357664,1.3855312896165268,1248.152192624993,-5295.18512013179,13140.931884718386,1.23456e-61,1.23456e-61,1.23456e-61,-741.493614755241,3143.2364698616652,-7800.835181405204,1.23456e-61,1.23456e-61,1.23456e-61,0.08776199074317509,-0.37231709295224363,0.9239468682107133,0.6684724999886245,0.8156006776974778,-0.01555410008240421,0.01113572462254165,-0.013159453513413617,-0.00636052032902843,0.6590103378818496,0.2557232179799694,0.040085025905308165,-0.004179780944892019,-0.019476983671481627,-0.0074514977866455764,-2.2568608039762574e-05,9.574393728068981e-05,-0.0002375993814820723,1.23456e-61,1.23456e-61,1.23456e-61,-0.6009038277840393,-0.23286657860414572,-0.03724893809934027,1.23456e-61,1.23456e-61,1.23456e-61,0.08776199074317509,-0.37231709295224363,0.9239468682107133,0.6684724999886245,0.8156006776974778,-0.01555410008240421,0.354789643946992,-0.8550190172356539,-0.3782417067343884,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.6684724999886245,0.8156006776974778,-0.01555410008240421],[0.01113572462254165,-0.013159453513413617,-0.00636052032902843],[0.6590103378818496,0.2557232179799694,0.040085025905308165]],[[-0.004179780944892019,-0.019476983671481627,-0.0074514977866455764],[-2.2568608039762574e-05,9.574393728068981e-05,-0.0002375993814820723],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.6009038277840393,-0.23286657860414572,-0.03724893809934027],[1.23456e-61,1.23456e-61,1.23456e-61],[0.08776199074317509,-0.37231709295224363,0.9239468682107133]]],"normal":[0.08776199074317509,-0.37231709295224363,0.9239468682107133]},{"op":"state"}]}}, +{"name":"adv_sing_316","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.5381149678483865,0.0,0,0,1.2687661842453906,2.0,0,0,0.0004494398767720087,0.00029770018508284556,-0.00013017270332069385,0.04099650197205769,-0.005168378903983703,-0.007653903317580783,-0.002145595909279744,-0.009825529814311406,-0.0048576346434733445,-0.09522414136724879,0.02397848692784458,-0.006441161661140456,-0.4327806165562305,0.36578827782603496,-0.484185160153465,1.23456e-61,1.23456e-61,1.23456e-61,-0.1775865585590003,-0.08638380389645911,0.09739965321430169,1.23456e-61,1.23456e-61,1.23456e-61,0.19210687947794947,0.8797331611610658,0.43493046801851293,0.0004494398767720087,0.00029770018508284556,-0.00013017270332069385,16.216695119926033,-12.623860907856772,18.371420158249407,-227.62229141510642,-1039.1106843588216,-513.096285624013,-17.582775918557186,-2.861533832902065,13.554254880601752,651.9194739634528,2985.3963648301155,1475.9473616552743,1.23456e-61,1.23456e-61,1.23456e-61,-139.16005451643156,-637.2687693422178,-315.05872046222356,1.23456e-61,1.23456e-61,1.23456e-61,0.19210687947794947,0.8797331611610658,0.43493046801851293,0.0004494398767720087,0.00029770018508284556,-0.00013017270332069385,0.19210687947794947,0.8797331611610658,0.43493046801851293,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0004494398767720087,0.00029770018508284556,-0.00013017270332069385],[16.216695119926033,-12.623860907856772,18.371420158249407],[-227.62229141510642,-1039.1106843588216,-513.096285624013]],[[-17.582775918557186,-2.861533832902065,13.554254880601752],[651.9194739634528,2985.3963648301155,1475.9473616552743],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-139.16005451643156,-637.2687693422178,-315.05872046222356],[1.23456e-61,1.23456e-61,1.23456e-61],[0.19210687947794947,0.8797331611610658,0.43493046801851293]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_317","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.1736745197101821,1.74524852989872,0,0,0.20945148182507167,2.0,0,0,0.7435098638016966,-0.27335159407789766,0.5881546434351093,0.28271950851520133,-0.29090014429478284,0.7600536595823785,0.520463239689777,-0.6804554492953512,-0.14227768393300497,0.14144224114196333,-0.268134587772653,-0.9236907130295833,0.13510986026585406,-0.08739980961201396,0.9122399853449366,1.23456e-61,1.23456e-61,1.23456e-61,0.11212250122203873,-0.1465894632865469,-0.03065064797019831,1.23456e-61,1.23456e-61,1.23456e-61,0.7871057738936224,0.6141095821984621,-0.05774012257825876,0.7435098638016966,-0.27335159407789766,0.5881546434351093,-0.7901316826123026,0.8164237611546449,-2.087691353572559,3.715262289016393e-09,2.8986932223596104e-09,-2.7254240420193023e-10,-4.308663455450238,5.061154795334201,-4.905951253583947,1.4122708163368326e-08,1.1018710187849641e-08,-1.036006757333317e-09,1.23456e-61,1.23456e-61,1.23456e-61,5.369578629063325e-08,4.1894111285245495e-08,-3.938989377527004e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.7871057738936224,0.6141095821984621,-0.05774012257825876,0.7435098638016966,-0.27335159407789766,0.5881546434351093,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.1736745197101821,1.74524852989872,0,0,0.20945148182507167,2.0,0,0,0.7435098638016966,-0.27335159407789766,0.5881546434351093,0.28271950851520133,-0.29090014429478284,0.7600536595823785,0.520463239689777,-0.6804554492953512,-0.14227768393300497,0.14144224114196333,-0.268134587772653,-0.9236907130295833,0.13510986026585406,-0.08739980961201396,0.9122399853449366,1.23456e-61,1.23456e-61,1.23456e-61,0.11212250122203873,-0.1465894632865469,-0.03065064797019831,1.23456e-61,1.23456e-61,1.23456e-61,0.7871057738936224,0.6141095821984621,-0.05774012257825876,0.7435098638016966,-0.27335159407789766,0.5881546434351093,-0.7901316826123026,0.8164237611546449,-2.087691353572559,3.715262289016393e-09,2.8986932223596104e-09,-2.7254240420193023e-10,-4.308663455450238,5.061154795334201,-4.905951253583947,1.4122708163368326e-08,1.1018710187849641e-08,-1.036006757333317e-09,1.23456e-61,1.23456e-61,1.23456e-61,5.369578629063325e-08,4.1894111285245495e-08,-3.938989377527004e-09,1.23456e-61,1.23456e-61,1.23456e-61,0.7871057738936224,0.6141095821984621,-0.05774012257825876,0.7435098638016966,-0.27335159407789766,0.5881546434351093,0.7079743496298901,0.041589005064352806,-0.7050125352955728,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.7435098638016966,-0.27335159407789766,0.5881546434351093],[-0.7901316826123026,0.8164237611546449,-2.087691353572559],[3.715262289016393e-09,2.8986932223596104e-09,-2.7254240420193023e-10]],[[-4.308663455450238,5.061154795334201,-4.905951253583947],[1.4122708163368326e-08,1.1018710187849641e-08,-1.036006757333317e-09],[1.23456e-61,1.23456e-61,1.23456e-61]],[[5.369578629063325e-08,4.1894111285245495e-08,-3.938989377527004e-09],[1.23456e-61,1.23456e-61,1.23456e-61],[0.7871057738936224,0.6141095821984621,-0.05774012257825876]]],"normal":[-0.7871057738936224,-0.6141095821984621,0.05774012257825876]},{"op":"state"}]}}, +{"name":"adv_sing_318","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.2472358423798748,2.0,0,0,2.0,0.0,0,0,0.8695332051238815,-0.05372860532119583,0.8495494815228655,0.08061689029313385,-0.07122715114560271,0.04503607029277416,0.625099501813671,0.5217694744753346,-0.2937517561453755,0.0679930400956375,0.05675367312843577,-0.031951833069465474,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.21853665543260797,0.18241216882725625,-0.10269649252512242,1.23456e-61,1.23456e-61,1.23456e-61,0.02551132689770452,-0.5134604275224435,-0.8577339689952753,0.8695332051238815,-0.05372860532119583,0.8495494815228655,0.0009117347119564356,-0.3300002319404337,0.19757328712937428,0.0,0.0,-0.0,-0.15738921531468297,0.04094961031233926,-0.029194614000480592,-0.5138691293197557,0.4540169437202275,-0.28706944841436327,1.23456e-61,1.23456e-61,1.23456e-61,-0.5376490771635636,-0.44877475606659645,0.25265635334615016,1.23456e-61,1.23456e-61,1.23456e-61,0.02551132689770452,-0.5134604275224435,-0.8577339689952753,0.8695332051238815,-0.05372860532119583,0.8495494815228655,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.2472358423798748,2.0,0,0,2.0,0.0,0,0,0.8695332051238815,-0.05372860532119583,0.8495494815228655,0.08061689029313385,-0.07122715114560271,0.04503607029277416,0.625099501813671,0.5217694744753346,-0.2937517561453755,0.0679930400956375,0.05675367312843577,-0.031951833069465474,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.21853665543260797,0.18241216882725625,-0.10269649252512242,1.23456e-61,1.23456e-61,1.23456e-61,0.02551132689770452,-0.5134604275224435,-0.8577339689952753,0.8695332051238815,-0.05372860532119583,0.8495494815228655,0.0009117347119564356,-0.3300002319404337,0.19757328712937428,0.0,0.0,-0.0,-0.15738921531468297,0.04094961031233926,-0.029194614000480592,-0.5138691293197557,0.4540169437202275,-0.28706944841436327,1.23456e-61,1.23456e-61,1.23456e-61,-0.5376490771635636,-0.44877475606659645,0.25265635334615016,1.23456e-61,1.23456e-61,1.23456e-61,0.02551132689770452,-0.5134604275224435,-0.8577339689952753,0.8695332051238815,-0.05372860532119583,0.8495494815228655,0.689861731075933,0.714990405581161,-0.11348793734932407,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.8695332051238815,-0.05372860532119583,0.8495494815228655],[0.0009117347119564356,-0.3300002319404337,0.19757328712937428],[0.0,0.0,-0.0]],[[-0.15738921531468297,0.04094961031233926,-0.029194614000480592],[-0.5138691293197557,0.4540169437202275,-0.28706944841436327],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.5376490771635636,-0.44877475606659645,0.25265635334615016],[1.23456e-61,1.23456e-61,1.23456e-61],[0.02551132689770452,-0.5134604275224435,-0.8577339689952753]]],"normal":[0.02551132689770452,-0.5134604275224435,-0.8577339689952753]},{"op":"state"}]}}, +{"name":"adv_sing_319","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,0.0,2.0,0,0,0.8933590386608632,1.4116223145094593,0.35049977601028903,-0.05081751134291739,0.0,0.15272150808282528,0.0,0.0,0.0,0.11289558029651824,0.0,0.037565582636678634,-0.21818824211767196,0.0,0.6557195836941685,1.23456e-61,1.23456e-61,1.23456e-61,0.2978421610176773,0.0,0.09910586652736807,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.8933590386608632,1.4116223145094593,0.35049977601028903,-0.0026285935410331664,0.0,0.007899693611802766,0.0,-4.3406428262356624e-11,0.0,0.010631272366403753,0.0,0.003537516168163892,-0.0,2.0261681766282504e-11,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.6246185298621609,-1.0969222663929335e-10,0.20783948262907662,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.8933590386608632,1.4116223145094593,0.35049977601028903,0.9488502776749327,0.0,0.31572638558758914,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.8933590386608632,1.4116223145094593,0.35049977601028903],[-0.0026285935410331664,0.0,0.007899693611802766],[0.0,-4.3406428262356624e-11,0.0]],[[0.010631272366403753,0.0,0.003537516168163892],[-0.0,2.0261681766282504e-11,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.6246185298621609,-1.0969222663929335e-10,0.20783948262907662],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_320","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,2.0,1.6478467991382644,0,0,0.07574333908905428,-0.3124583259269178,0.7656347856474934,-0.2058357592373521,-5.221290071048641,3.7988459188510273,270977.1441008032,-192724.265800424,-250205.59653796497,-4.861910113881299,-4.094736763278609,-2.111509048940588,78923.44233007783,-56131.90192840795,-72873.62568734174,1.23456e-61,1.23456e-61,1.23456e-61,22986.59870566602,-16349.454779783508,-21224.48905661839,1.23456e-61,1.23456e-61,1.23456e-61,0.6511652214718214,-0.46312149181202955,-0.6012506450452706,0.07574333908905428,-0.3124583259269178,0.7656347856474934,0.006102690115305275,-0.004154752845317366,0.009809577661070488,0.0020531624886476435,-0.0014602494778909866,-0.001895778874510375,0.0054124313808082,0.010505112062042474,-0.0022299453681911604,0.09427686282950562,-0.024320064022729262,0.01516925779966155,1.23456e-61,1.23456e-61,1.23456e-61,0.5903416894796647,-1.5029745380527935,-0.4415201773398014,1.23456e-61,1.23456e-61,1.23456e-61,-0.6511652214718214,0.46312149181202955,0.6012506450452706,0.07574333908905428,-0.3124583259269178,0.7656347856474934,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,2.0,1.6478467991382644,0,0,0.07574333908905428,-0.3124583259269178,0.7656347856474934,-0.2058357592373521,-5.221290071048641,3.7988459188510273,270977.1441008032,-192724.265800424,-250205.59653796497,-4.861910113881299,-4.094736763278609,-2.111509048940588,78923.44233007783,-56131.90192840795,-72873.62568734174,1.23456e-61,1.23456e-61,1.23456e-61,22986.59870566602,-16349.454779783508,-21224.48905661839,1.23456e-61,1.23456e-61,1.23456e-61,0.6511652214718214,-0.46312149181202955,-0.6012506450452706,0.07574333908905428,-0.3124583259269178,0.7656347856474934,0.006102690115305275,-0.004154752845317366,0.009809577661070488,0.0020531624886476435,-0.0014602494778909866,-0.001895778874510375,0.0054124313808082,0.010505112062042474,-0.0022299453681911604,0.09427686282950562,-0.024320064022729262,0.01516925779966155,1.23456e-61,1.23456e-61,1.23456e-61,0.5903416894796647,-1.5029745380527935,-0.4415201773398014,1.23456e-61,1.23456e-61,1.23456e-61,-0.6511652214718214,0.46312149181202955,0.6012506450452706,0.07574333908905428,-0.3124583259269178,0.7656347856474934,-0.9898158306278136,-0.9514532506972533,-0.33911846481163643,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.07574333908905428,-0.3124583259269178,0.7656347856474934],[0.006102690115305275,-0.004154752845317366,0.009809577661070488],[0.0020531624886476435,-0.0014602494778909866,-0.001895778874510375]],[[0.0054124313808082,0.010505112062042474,-0.0022299453681911604],[0.09427686282950562,-0.024320064022729262,0.01516925779966155],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.5903416894796647,-1.5029745380527935,-0.4415201773398014],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6511652214718214,0.46312149181202955,0.6012506450452706]]],"normal":[0.6511652214718214,-0.46312149181202955,-0.6012506450452706]},{"op":"state"}]}}, +{"name":"adv_sing_321","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,0.0,1.226694976059168,0,0,0.44507725792934294,0.9997732307311415,0.003963072056621053,-5.451862979743371,0.0,-3.9790574148673623,0.14147815822120785,-1.0225894567831184,-0.6461187830491745,19.68708559394403,0.0,-3.914127880224201,0.0,16.824460116384305,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-276.8191980682735,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.44507725792934294,0.9997732307311415,0.003963072056621053,0.00394678924412744,0.0,0.13207248587269096,0.0,0.01745955966354603,-0.0,0.00819974703794912,0.0,-0.12540840771628958,-0.8040868181202333,-0.016531354927339096,-0.176067814559949,1.23456e-61,1.23456e-61,1.23456e-61,0.13284466439357384,0.015795116622925685,-0.6066903469180539,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.44507725792934294,0.9997732307311415,0.003963072056621053,0.21389840220631004,0.0,-0.9768559123706975,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,1.226694976059168,0,0,0.44507725792934294,0.9997732307311415,0.003963072056621053,-5.451862979743371,0.0,-3.9790574148673623,0.14147815822120785,-1.0225894567831184,-0.6461187830491745,19.68708559394403,0.0,-3.914127880224201,0.0,16.824460116384305,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-276.8191980682735,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.44507725792934294,0.9997732307311415,0.003963072056621053,0.00394678924412744,0.0,0.13207248587269096,0.0,0.01745955966354603,-0.0,0.00819974703794912,0.0,-0.12540840771628958,-0.8040868181202333,-0.016531354927339096,-0.176067814559949,1.23456e-61,1.23456e-61,1.23456e-61,0.13284466439357384,0.015795116622925685,-0.6066903469180539,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.44507725792934294,0.9997732307311415,0.003963072056621053,-0.5263420653784925,-0.5677899753381235,-0.6329127697547553,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.44507725792934294,0.9997732307311415,0.003963072056621053],[0.00394678924412744,0.0,0.13207248587269096],[0.0,0.01745955966354603,-0.0]],[[0.00819974703794912,0.0,-0.12540840771628958],[-0.8040868181202333,-0.016531354927339096,-0.176067814559949],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.13284466439357384,0.015795116622925685,-0.6066903469180539],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_322","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,0.8104953554209795,0.0,0,0,-0.48184781295172074,-0.30989704931976547,0.7167109196482309,-0.9819253769686652,-0.8441520888755687,0.40372673103444184,-0.08667304019744713,0.03842175865410884,-0.130466094498623,0.768445208472248,-0.3406482139263495,1.156715455661463,0.4727856752136025,0.40644943565273056,-0.1943897363393942,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.43255259607696034,-0.7455972950445641,-0.5069348333359145,-0.48184781295172074,-0.30989704931976547,0.7167109196482309,-0.034091503044324324,-0.02930814722053217,0.014017003127697963,9.592641448872682e-13,-1.6534977668563807e-12,-1.1242203001991126e-12,0.018276614287943777,-0.008101938752649132,0.02751119011602397,-0.681912510094269,-0.5862338252256302,0.28037396222690303,1.23456e-61,1.23456e-61,1.23456e-61,5.003133847792217e-13,-8.623975667911781e-13,-5.863478444680435e-13,1.23456e-61,1.23456e-61,1.23456e-61,0.43255259607696034,-0.7455972950445641,-0.5069348333359145,-0.48184781295172074,-0.30989704931976547,0.7167109196482309,0.43255259607696034,-0.7455972950445641,-0.5069348333359145,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.8104953554209795,0.0,0,0,-0.48184781295172074,-0.30989704931976547,0.7167109196482309,-0.9819253769686652,-0.8441520888755687,0.40372673103444184,-0.08667304019744713,0.03842175865410884,-0.130466094498623,0.768445208472248,-0.3406482139263495,1.156715455661463,0.4727856752136025,0.40644943565273056,-0.1943897363393942,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.43255259607696034,-0.7455972950445641,-0.5069348333359145,-0.48184781295172074,-0.30989704931976547,0.7167109196482309,-0.034091503044324324,-0.02930814722053217,0.014017003127697963,9.592641448872682e-13,-1.6534977668563807e-12,-1.1242203001991126e-12,0.018276614287943777,-0.008101938752649132,0.02751119011602397,-0.681912510094269,-0.5862338252256302,0.28037396222690303,1.23456e-61,1.23456e-61,1.23456e-61,5.003133847792217e-13,-8.623975667911781e-13,-5.863478444680435e-13,1.23456e-61,1.23456e-61,1.23456e-61,0.43255259607696034,-0.7455972950445641,-0.5069348333359145,-0.48184781295172074,-0.30989704931976547,0.7167109196482309,-0.7239311305083246,-0.6223568413184575,0.2976502651519929,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.48184781295172074,-0.30989704931976547,0.7167109196482309],[-0.034091503044324324,-0.02930814722053217,0.014017003127697963],[9.592641448872682e-13,-1.6534977668563807e-12,-1.1242203001991126e-12]],[[0.018276614287943777,-0.008101938752649132,0.02751119011602397],[-0.681912510094269,-0.5862338252256302,0.28037396222690303],[1.23456e-61,1.23456e-61,1.23456e-61]],[[5.003133847792217e-13,-8.623975667911781e-13,-5.863478444680435e-13],[1.23456e-61,1.23456e-61,1.23456e-61],[0.43255259607696034,-0.7455972950445641,-0.5069348333359145]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_323","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,1.2760009539959654,1.0383492488546302,0,0,-0.0007024370008876167,0.0004895967881129931,0.00033716328511146544,89.71271651791254,-111.5633842914867,-79.19548011279856,-58807.44774075623,-42287.11014664754,-7046.901763164703,-18.796483408613454,38.79420510866476,-75.9424198429647,39387.322175154186,28322.706332491132,4719.545830397242,1.23456e-61,1.23456e-61,1.23456e-61,-26380.531420425952,-18969.373814048333,-3161.5642202105437,1.23456e-61,1.23456e-61,1.23456e-61,-0.8080728495948154,-0.5810704752294737,-0.09682650754988775,-0.0007024370008876167,0.0004895967881129931,0.00033716328511146544,-4.083412457488273,5.149578389966272,3.175027026003109,-43.04863583052128,-30.95549032808643,-5.158259016308225,2.711473839057163,-2.5139191788124773,-7.542399269449932,38.75922348430295,27.8710519983962,4.644284543420111,1.23456e-61,1.23456e-61,1.23456e-61,-56.85111300411025,-41.34323892409566,-6.160403750656423,1.23456e-61,1.23456e-61,1.23456e-61,-0.8080728495948154,-0.5810704752294737,-0.09682650754988775,-0.0007024370008876167,0.0004895967881129931,0.00033716328511146544,0.5146629267709787,0.19736603023317156,-0.8343672584165375,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,1.2760009539959654,1.0383492488546302,0,0,-0.0007024370008876167,0.0004895967881129931,0.00033716328511146544,89.71271651791254,-111.5633842914867,-79.19548011279856,-58807.44774075623,-42287.11014664754,-7046.901763164703,-18.796483408613454,38.79420510866476,-75.9424198429647,39387.322175154186,28322.706332491132,4719.545830397242,1.23456e-61,1.23456e-61,1.23456e-61,-26380.531420425952,-18969.373814048333,-3161.5642202105437,1.23456e-61,1.23456e-61,1.23456e-61,-0.8080728495948154,-0.5810704752294737,-0.09682650754988775,-0.0007024370008876167,0.0004895967881129931,0.00033716328511146544,-4.083412457488273,5.149578389966272,3.175027026003109,-43.04863583052128,-30.95549032808643,-5.158259016308225,2.711473839057163,-2.5139191788124773,-7.542399269449932,38.75922348430295,27.8710519983962,4.644284543420111,1.23456e-61,1.23456e-61,1.23456e-61,-56.85111300411025,-41.34323892409566,-6.160403750656423,1.23456e-61,1.23456e-61,1.23456e-61,-0.8080728495948154,-0.5810704752294737,-0.09682650754988775,-0.0007024370008876167,0.0004895967881129931,0.00033716328511146544,-0.7261530658221255,-0.5673307094967636,0.38837815471396775,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0007024370008876167,0.0004895967881129931,0.00033716328511146544],[-4.083412457488273,5.149578389966272,3.175027026003109],[-43.04863583052128,-30.95549032808643,-5.158259016308225]],[[2.711473839057163,-2.5139191788124773,-7.542399269449932],[38.75922348430295,27.8710519983962,4.644284543420111],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-56.85111300411025,-41.34323892409566,-6.160403750656423],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.8080728495948154,-0.5810704752294737,-0.09682650754988775]]],"normal":[0.8080728495948154,0.5810704752294737,0.09682650754988775]},{"op":"state"}]}}, +{"name":"adv_sing_324","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.0372598470169,2.0,0,0,2.0,2.0,0,0,-7.148875947804445,784.8345334865687,-720.0630048179651,0.30948742021708175,0.09522635233908534,-0.3689410325841485,0.043724513539119395,-0.3269697835572859,-0.04771481446368131,0.24318072731183193,-0.25372768213364816,0.13850401492970116,-0.145591282813915,-0.04479196697330433,0.1735692073533663,1.23456e-61,1.23456e-61,1.23456e-61,-0.06188921772265674,-0.10203211057911316,-0.07825120410688056,1.23456e-61,1.23456e-61,1.23456e-61,0.4336932066533927,0.714997455889148,0.5483510194891075,-7.148875947804445,784.8345334865687,-720.0630048179651,-0.014630758892595085,0.009304903633034635,-0.0005611764619275275,0.41910127180684403,-0.43727838877311853,0.23869978593811025,-0.0036614224477051413,0.030394133097410184,-0.03673521718827882,0.5104790208911121,0.15706928561665748,-0.608544336036829,1.23456e-61,1.23456e-61,1.23456e-61,0.42155382911587297,-0.4398379175042407,0.24009648894543037,1.23456e-61,1.23456e-61,1.23456e-61,0.4336932066533927,0.714997455889148,0.5483510194891075,-7.148875947804445,784.8345334865687,-720.0630048179651,0.4336932066533927,0.714997455889148,0.5483510194891075,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-7.148875947804445,784.8345334865687,-720.0630048179651],[-0.014630758892595085,0.009304903633034635,-0.0005611764619275275],[0.41910127180684403,-0.43727838877311853,0.23869978593811025]],[[-0.0036614224477051413,0.030394133097410184,-0.03673521718827882],[0.5104790208911121,0.15706928561665748,-0.608544336036829],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.42155382911587297,-0.4398379175042407,0.24009648894543037],[1.23456e-61,1.23456e-61,1.23456e-61],[0.4336932066533927,0.714997455889148,0.5483510194891075]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_325","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,2.0,2.0,0,0,0.0008145071097084265,-0.0005683499599220838,4.5232373001013346e-05,6.60183644059279,10.539301794895682,8.177073722643838,148.43680577441398,32.14051149537237,-161.2672343074338,-5.793760660704568,6.72662480722226,-3.992194488357907,0.08718987252094956,0.13919163072665552,0.10799389259145369,1.23456e-61,1.23456e-61,1.23456e-61,64.07002164949081,13.074685947306618,-68.57928444431472,1.23456e-61,1.23456e-61,1.23456e-61,0.6700659636956222,0.14508708063650017,-0.7279844389333023,0.0008145071097084265,-0.0005683499599220838,4.5232373001013346e-05,0.02102300879630151,0.03356154553884605,0.02603922322918251,0.20215998763420284,0.6622866036946962,-1.0168265379855006,-0.04841665744359379,0.05621231323063573,-0.033361528773872835,3.9749554891426984,0.28898113971613626,-5.281825096273296,1.23456e-61,1.23456e-61,1.23456e-61,29.0845261895732,6.2975725154991595,-31.598504665094833,1.23456e-61,1.23456e-61,1.23456e-61,0.6700659636956222,0.14508708063650017,-0.7279844389333023,0.0008145071097084265,-0.0005683499599220838,4.5232373001013346e-05,0.6700659636956222,0.14508708063650017,-0.7279844389333023,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,2.0,2.0,0,0,0.0008145071097084265,-0.0005683499599220838,4.5232373001013346e-05,6.60183644059279,10.539301794895682,8.177073722643838,148.43680577441398,32.14051149537237,-161.2672343074338,-5.793760660704568,6.72662480722226,-3.992194488357907,0.08718987252094956,0.13919163072665552,0.10799389259145369,1.23456e-61,1.23456e-61,1.23456e-61,64.07002164949081,13.074685947306618,-68.57928444431472,1.23456e-61,1.23456e-61,1.23456e-61,0.6700659636956222,0.14508708063650017,-0.7279844389333023,0.0008145071097084265,-0.0005683499599220838,4.5232373001013346e-05,0.02102300879630151,0.03356154553884605,0.02603922322918251,0.20215998763420284,0.6622866036946962,-1.0168265379855006,-0.04841665744359379,0.05621231323063573,-0.033361528773872835,3.9749554891426984,0.28898113971613626,-5.281825096273296,1.23456e-61,1.23456e-61,1.23456e-61,29.0845261895732,6.2975725154991595,-31.598504665094833,1.23456e-61,1.23456e-61,1.23456e-61,0.6700659636956222,0.14508708063650017,-0.7279844389333023,0.0008145071097084265,-0.0005683499599220838,4.5232373001013346e-05,0.6700659636956222,0.14508708063650017,-0.7279844389333023,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0008145071097084265,-0.0005683499599220838,4.5232373001013346e-05],[0.02102300879630151,0.03356154553884605,0.02603922322918251],[0.20215998763420284,0.6622866036946962,-1.0168265379855006]],[[-0.04841665744359379,0.05621231323063573,-0.033361528773872835],[3.9749554891426984,0.28898113971613626,-5.281825096273296],[1.23456e-61,1.23456e-61,1.23456e-61]],[[29.0845261895732,6.2975725154991595,-31.598504665094833],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6700659636956222,0.14508708063650017,-0.7279844389333023]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_326","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.8075568274157043,0.13868465316269707,0,0,2.0,0.3629816076754093,0,0,-0.7809179649805276,0.8328263967478833,-1.5211967917053233,0.024762257155443036,-0.0385198975226191,0.041309603444042026,0.0002442839720328662,0.0008616326776926742,0.0006570138091302663,-0.0038488876617342764,-0.004010030920830827,0.0066899586961210265,-0.6144247502160881,0.29894546389062754,-0.16375546392670576,1.23456e-61,1.23456e-61,1.23456e-61,0.3610526413584744,0.3890570281822602,-0.6444538824709257,1.23456e-61,1.23456e-61,1.23456e-61,0.21992819971444266,0.7757255707082957,0.5915077564323676,-0.7809179649805276,0.8328263967478833,-1.5211967917053233,0.041961419275845,-0.02042169604910698,0.011180127989549862,0.38849038521126916,0.41861848276981733,-0.6934364731841681,-0.030884133295820664,-0.03327925095218598,0.05512667825320077,5.218697699529177e-16,1.8407267719999853e-15,1.4035945239197743e-15,1.23456e-61,1.23456e-61,1.23456e-61,-4.2899999157218324e-17,-1.5131586750961426e-16,-1.1538166676844876e-16,1.23456e-61,1.23456e-61,1.23456e-61,0.21992819971444266,0.7757255707082957,0.5915077564323676,-0.7809179649805276,0.8328263967478833,-1.5211967917053233,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.8075568274157043,0.13868465316269707,0,0,2.0,0.3629816076754093,0,0,-0.7809179649805276,0.8328263967478833,-1.5211967917053233,0.024762257155443036,-0.0385198975226191,0.041309603444042026,0.0002442839720328662,0.0008616326776926742,0.0006570138091302663,-0.0038488876617342764,-0.004010030920830827,0.0066899586961210265,-0.6144247502160881,0.29894546389062754,-0.16375546392670576,1.23456e-61,1.23456e-61,1.23456e-61,0.3610526413584744,0.3890570281822602,-0.6444538824709257,1.23456e-61,1.23456e-61,1.23456e-61,0.21992819971444266,0.7757255707082957,0.5915077564323676,-0.7809179649805276,0.8328263967478833,-1.5211967917053233,0.041961419275845,-0.02042169604910698,0.011180127989549862,0.38849038521126916,0.41861848276981733,-0.6934364731841681,-0.030884133295820664,-0.03327925095218598,0.05512667825320077,5.218697699529177e-16,1.8407267719999853e-15,1.4035945239197743e-15,1.23456e-61,1.23456e-61,1.23456e-61,-4.2899999157218324e-17,-1.5131586750961426e-16,-1.1538166676844876e-16,1.23456e-61,1.23456e-61,1.23456e-61,0.21992819971444266,0.7757255707082957,0.5915077564323676,-0.7809179649805276,0.8328263967478833,-1.5211967917053233,0.21992819971444266,0.7757255707082957,0.5915077564323676,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.7809179649805276,0.8328263967478833,-1.5211967917053233],[0.041961419275845,-0.02042169604910698,0.011180127989549862],[0.38849038521126916,0.41861848276981733,-0.6934364731841681]],[[-0.030884133295820664,-0.03327925095218598,0.05512667825320077],[5.218697699529177e-16,1.8407267719999853e-15,1.4035945239197743e-15],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-4.2899999157218324e-17,-1.5131586750961426e-16,-1.1538166676844876e-16],[1.23456e-61,1.23456e-61,1.23456e-61],[0.21992819971444266,0.7757255707082957,0.5915077564323676]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_327","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.10356983585806101,2.0,0,0,0.0,2.0,0,0,895.5578909088592,433.85672728487015,-507.36441588479784,-10.67793097854252,-14.199214958286959,-11.01835552249451,2.1079102477725026e-10,-3.207340336940241e-10,2.0904748178525874e-10,-20.54565198364634,-0.2855665297771431,20.27887681383716,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.29173365061084844,-0.004054842307844091,0.28794563366690407,1.23456e-61,1.23456e-61,1.23456e-61,0.48231509510772513,-0.7338778590259649,0.47832566005044297,895.5578909088592,433.85672728487015,-507.36441588479784,-1.7265645938406147,-2.2959374673403805,-1.7816094303021883,-1.9433432557263455,2.5116629423874643,-1.3534466952909605,-1.547693923739645,-0.02151158713830517,1.5275978805648203,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1.350394727187562,1.0319770440711291,-0.02122296649528088,1.23456e-61,1.23456e-61,1.23456e-61,0.48231509510772513,-0.7338778590259649,0.47832566005044297,895.5578909088592,433.85672728487015,-507.36441588479784,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[895.5578909088592,433.85672728487015,-507.36441588479784],[-1.7265645938406147,-2.2959374673403805,-1.7816094303021883],[-1.9433432557263455,2.5116629423874643,-1.3534466952909605]],[[-1.547693923739645,-0.02151158713830517,1.5275978805648203],[0.0,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-1.350394727187562,1.0319770440711291,-0.02122296649528088],[1.23456e-61,1.23456e-61,1.23456e-61],[0.48231509510772513,-0.7338778590259649,0.47832566005044297]]],"normal":[0.48231509510772513,-0.7338778590259649,0.47832566005044297]},{"op":"state"}]}}, +{"name":"adv_sing_328","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,2.0,1.8522694520607421,0,0,0.4242276715677016,0.6252406067866261,1.725547267597336,0.0,10.452477574022666,-36.51171062882682,-57171.8295747807,0.5656337504615173,0.22252745480680625,0.0,-31.706270035498978,-14.2931529713596,-259338.9197203874,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1206279.8019000776,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.4242276715677016,0.6252406067866261,1.725547267597336,0.0,-0.007010561150649626,0.017819868563743946,-0.0041613687702423035,0.0,0.0,0.0,0.023181807222125726,0.009120015477776269,-0.048253242229717296,0.07990321288311462,-0.20310282170008798,1.23456e-61,1.23456e-61,1.23456e-61,-0.6142110784874057,-0.3085390802051241,-0.12138316741258612,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.4242276715677016,0.6252406067866261,1.725547267597336,-0.0,0.9305754643264438,0.36610013001038905,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,1.8522694520607421,0,0,0.4242276715677016,0.6252406067866261,1.725547267597336,0.0,10.452477574022666,-36.51171062882682,-57171.8295747807,0.5656337504615173,0.22252745480680625,0.0,-31.706270035498978,-14.2931529713596,-259338.9197203874,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1206279.8019000776,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.4242276715677016,0.6252406067866261,1.725547267597336,0.0,-0.007010561150649626,0.017819868563743946,-0.0041613687702423035,0.0,0.0,0.0,0.023181807222125726,0.009120015477776269,-0.048253242229717296,0.07990321288311462,-0.20310282170008798,1.23456e-61,1.23456e-61,1.23456e-61,-0.6142110784874057,-0.3085390802051241,-0.12138316741258612,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.4242276715677016,0.6252406067866261,1.725547267597336,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.4242276715677016,0.6252406067866261,1.725547267597336],[0.0,-0.007010561150649626,0.017819868563743946],[-0.0041613687702423035,0.0,0.0]],[[0.0,0.023181807222125726,0.009120015477776269],[-0.048253242229717296,0.07990321288311462,-0.20310282170008798],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.6142110784874057,-0.3085390802051241,-0.12138316741258612],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_329","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,2.0,2.0,0,0,-0.16905544450300125,-1.279556393221541,0.16863300844148466,-5.8189573966013155,1.9574835754802937,4.718726886325262,0.06988822299321376,0.06271976782933471,-0.15694397667198745,0.07774097526331625,5.055372748231287,-5.965101374222495,1.4800196839238903e-05,1.4305484357993327e-05,1.231666201475011e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.2764485643528637,-0.248102434395005,0.6203916605672184,1.23456e-61,1.23456e-61,1.23456e-61,-0.6170001257484126,-0.5963762336168856,-0.5134649285037692,-0.16905544450300125,-1.279556393221541,0.16863300844148466,-0.01213286381391344,0.012800020169740252,-0.000287554829902699,-5.88980816233421e-09,-5.692934996274438e-09,-4.90147376113664e-09,-0.004820951231818676,-0.004326640196628939,0.010818329729212069,-0.28279749929823894,0.29834788566079673,-0.00670242077407168,1.23456e-61,1.23456e-61,1.23456e-61,-9.518977868276236e-08,-9.200795805477481e-08,-7.921653637646758e-08,1.23456e-61,1.23456e-61,1.23456e-61,0.6170001257484126,0.5963762336168856,0.5134649285037692,-0.16905544450300125,-1.279556393221541,0.16863300844148466,0.6878482957752119,-0.7256713826745161,0.016302342359079375,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,2.0,2.0,0,0,-0.16905544450300125,-1.279556393221541,0.16863300844148466,-5.8189573966013155,1.9574835754802937,4.718726886325262,0.06988822299321376,0.06271976782933471,-0.15694397667198745,0.07774097526331625,5.055372748231287,-5.965101374222495,1.4800196839238903e-05,1.4305484357993327e-05,1.231666201475011e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.2764485643528637,-0.248102434395005,0.6203916605672184,1.23456e-61,1.23456e-61,1.23456e-61,-0.6170001257484126,-0.5963762336168856,-0.5134649285037692,-0.16905544450300125,-1.279556393221541,0.16863300844148466,-0.01213286381391344,0.012800020169740252,-0.000287554829902699,-5.88980816233421e-09,-5.692934996274438e-09,-4.90147376113664e-09,-0.004820951231818676,-0.004326640196628939,0.010818329729212069,-0.28279749929823894,0.29834788566079673,-0.00670242077407168,1.23456e-61,1.23456e-61,1.23456e-61,-9.518977868276236e-08,-9.200795805477481e-08,-7.921653637646758e-08,1.23456e-61,1.23456e-61,1.23456e-61,0.6170001257484126,0.5963762336168856,0.5134649285037692,-0.16905544450300125,-1.279556393221541,0.16863300844148466,-0.6878482957752119,0.7256713826745161,-0.016302342359079375,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.16905544450300125,-1.279556393221541,0.16863300844148466],[-0.01213286381391344,0.012800020169740252,-0.000287554829902699],[-5.88980816233421e-09,-5.692934996274438e-09,-4.90147376113664e-09]],[[-0.004820951231818676,-0.004326640196628939,0.010818329729212069],[-0.28279749929823894,0.29834788566079673,-0.00670242077407168],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-9.518977868276236e-08,-9.200795805477481e-08,-7.921653637646758e-08],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6170001257484126,0.5963762336168856,0.5134649285037692]]],"normal":[-0.6170001257484126,-0.5963762336168856,-0.5134649285037692]},{"op":"state"}]}}, +{"name":"adv_sing_330","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,2.0,0.0,0,0,-3.2664982656676276e-05,9.24386832772961e-05,0.0007497235269290683,-0.03606705195508939,-0.0,0.004607038839725755,0.273028991012014,4.602865510576233,0.23022853028023668,0.019301183788929956,0.0,-0.006668579785657356,0.5701607209356497,-1.808347487620814,-0.676156018379908,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.7104032952753953,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-3.2664982656676276e-05,9.24386832772961e-05,0.0007497235269290683,-0.008698422314901975,0.0,-0.012801865169300267,0.0,-7.051352442660038e-16,0.0,-0.008551619301923406,0.0,-0.010064544866208745,0.3537626445299383,-6.05487560720873e-16,-0.41952862130589774,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-5.219680870020525e-16,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-3.2664982656676276e-05,9.24386832772961e-05,0.0007497235269290683,-0.5810291565475375,0.7965618955553913,0.16701576509676908,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,2.0,0.0,0,0,-3.2664982656676276e-05,9.24386832772961e-05,0.0007497235269290683,-0.03606705195508939,-0.0,0.004607038839725755,0.273028991012014,4.602865510576233,0.23022853028023668,0.019301183788929956,0.0,-0.006668579785657356,0.5701607209356497,-1.808347487620814,-0.676156018379908,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.7104032952753953,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-3.2664982656676276e-05,9.24386832772961e-05,0.0007497235269290683,-0.008698422314901975,0.0,-0.012801865169300267,0.0,-7.051352442660038e-16,0.0,-0.008551619301923406,0.0,-0.010064544866208745,0.3537626445299383,-6.05487560720873e-16,-0.41952862130589774,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-5.219680870020525e-16,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-3.2664982656676276e-05,9.24386832772961e-05,0.0007497235269290683,0.6446424479750925,0.0,-0.7644842145320466,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-3.2664982656676276e-05,9.24386832772961e-05,0.0007497235269290683],[-0.008698422314901975,0.0,-0.012801865169300267],[0.0,-7.051352442660038e-16,0.0]],[[-0.008551619301923406,0.0,-0.010064544866208745],[0.3537626445299383,-6.05487560720873e-16,-0.41952862130589774],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-5.219680870020525e-16,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_331","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.7532256565227675,0,0,0.0,0.0,0,0,-861.6741401509864,-72.02048394071836,941.3908712032134,-0.14175209309747713,0.4544598446336989,0.27965106905681764,27.854977326925724,50.965483420169356,-68.70441941215468,0.12912584667859683,0.26879088524870914,0.25174297498143583,14.435736827207922,26.412669351333964,-35.605805952003706,1.23456e-61,1.23456e-61,1.23456e-61,7.486241009935492,13.69736861004183,-18.46484512015385,1.23456e-61,1.23456e-61,1.23456e-61,-0.30962060953970966,-0.5665042859965018,0.7636805432220023,-861.6741401509864,-72.02048394071836,941.3908712032134,-0.012777947608514473,0.09876819886382268,0.06808644335748161,-0.4681022832665045,0.3136338960011698,0.048247682052650814,0.03520432531730153,-0.022576187298887367,-0.002474231168873797,-0.000773759853711598,-0.0014157270541883243,0.0019084819524265713,1.23456e-61,1.23456e-61,1.23456e-61,0.2254443739282222,-0.15376529220505564,-0.020669742727481556,1.23456e-61,1.23456e-61,1.23456e-61,0.30962060953970966,0.5665042859965018,-0.7636805432220023,-861.6741401509864,-72.02048394071836,941.3908712032134,0.47187590588105843,0.6057268569612169,0.640646629745928,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.7532256565227675,0,0,0.0,0.0,0,0,-861.6741401509864,-72.02048394071836,941.3908712032134,-0.14175209309747713,0.4544598446336989,0.27965106905681764,27.854977326925724,50.965483420169356,-68.70441941215468,0.12912584667859683,0.26879088524870914,0.25174297498143583,14.435736827207922,26.412669351333964,-35.605805952003706,1.23456e-61,1.23456e-61,1.23456e-61,7.486241009935492,13.69736861004183,-18.46484512015385,1.23456e-61,1.23456e-61,1.23456e-61,-0.30962060953970966,-0.5665042859965018,0.7636805432220023,-861.6741401509864,-72.02048394071836,941.3908712032134,-0.012777947608514473,0.09876819886382268,0.06808644335748161,-0.4681022832665045,0.3136338960011698,0.048247682052650814,0.03520432531730153,-0.022576187298887367,-0.002474231168873797,-0.000773759853711598,-0.0014157270541883243,0.0019084819524265713,1.23456e-61,1.23456e-61,1.23456e-61,0.2254443739282222,-0.15376529220505564,-0.020669742727481556,1.23456e-61,1.23456e-61,1.23456e-61,0.30962060953970966,0.5665042859965018,-0.7636805432220023,-861.6741401509864,-72.02048394071836,941.3908712032134,0.4613411419035949,0.696543266940682,-0.549537831333466,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.7532256565227675,0,0,0.0,0.0,0,0,-861.6741401509864,-72.02048394071836,941.3908712032134,-0.14175209309747713,0.4544598446336989,0.27965106905681764,27.854977326925724,50.965483420169356,-68.70441941215468,0.12912584667859683,0.26879088524870914,0.25174297498143583,14.435736827207922,26.412669351333964,-35.605805952003706,1.23456e-61,1.23456e-61,1.23456e-61,7.486241009935492,13.69736861004183,-18.46484512015385,1.23456e-61,1.23456e-61,1.23456e-61,-0.30962060953970966,-0.5665042859965018,0.7636805432220023,-861.6741401509864,-72.02048394071836,941.3908712032134,-0.012777947608514473,0.09876819886382268,0.06808644335748161,-0.4681022832665045,0.3136338960011698,0.048247682052650814,0.03520432531730153,-0.022576187298887367,-0.002474231168873797,-0.000773759853711598,-0.0014157270541883243,0.0019084819524265713,1.23456e-61,1.23456e-61,1.23456e-61,0.2254443739282222,-0.15376529220505564,-0.020669742727481556,1.23456e-61,1.23456e-61,1.23456e-61,0.30962060953970966,0.5665042859965018,-0.7636805432220023,-861.6741401509864,-72.02048394071836,941.3908712032134,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-861.6741401509864,-72.02048394071836,941.3908712032134],[-0.012777947608514473,0.09876819886382268,0.06808644335748161],[-0.4681022832665045,0.3136338960011698,0.048247682052650814]],[[0.03520432531730153,-0.022576187298887367,-0.002474231168873797],[-0.000773759853711598,-0.0014157270541883243,0.0019084819524265713],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.2254443739282222,-0.15376529220505564,-0.020669742727481556],[1.23456e-61,1.23456e-61,1.23456e-61],[0.30962060953970966,0.5665042859965018,-0.7636805432220023]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_332","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.0,0,0,0.0,1.1175176371676157,0,0,-0.43248727864618,-0.6305829778068426,-0.9637487926843653,-10.25216256430902,2.7594326929146704,-11.589690300147902,-0.00023448417350890193,-0.0002983901428618888,0.00013637830771838304,-3.9789294326425604,5.313684573222315,4.784889403459182,-0.4571142022667745,0.12013807470830702,-0.5135334969155083,1.23456e-61,1.23456e-61,1.23456e-61,-0.038912046994336244,-0.04951707864943698,0.02263163026968345,1.23456e-61,1.23456e-61,1.23456e-61,-0.5814715841943751,-0.7399449885316096,0.3381896076484907,-0.43248727864618,-0.6305829778068426,-0.9637487926843653,-0.1765754021600493,0.2823332397291507,0.3141358711416631,0.12186032358587728,0.15507195568832488,-0.070875165943878,-0.217434052631645,0.2050862568792311,0.07487168257188363,-0.3281735944523736,0.19573924276927218,-0.49026758423382294,1.23456e-61,1.23456e-61,1.23456e-61,0.30775196464736493,-0.2670094360798111,-0.33580860553589953,1.23456e-61,1.23456e-61,1.23456e-61,-0.5814715841943751,-0.7399449885316096,0.3381896076484907,-0.43248727864618,-0.6305829778068426,-0.9637487926843653,-0.2101268058313175,0.0710239115348754,-0.9750909339448368,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.0,1.1175176371676157,0,0,-0.43248727864618,-0.6305829778068426,-0.9637487926843653,-10.25216256430902,2.7594326929146704,-11.589690300147902,-0.00023448417350890193,-0.0002983901428618888,0.00013637830771838304,-3.9789294326425604,5.313684573222315,4.784889403459182,-0.4571142022667745,0.12013807470830702,-0.5135334969155083,1.23456e-61,1.23456e-61,1.23456e-61,-0.038912046994336244,-0.04951707864943698,0.02263163026968345,1.23456e-61,1.23456e-61,1.23456e-61,-0.5814715841943751,-0.7399449885316096,0.3381896076484907,-0.43248727864618,-0.6305829778068426,-0.9637487926843653,-0.1765754021600493,0.2823332397291507,0.3141358711416631,0.12186032358587728,0.15507195568832488,-0.070875165943878,-0.217434052631645,0.2050862568792311,0.07487168257188363,-0.3281735944523736,0.19573924276927218,-0.49026758423382294,1.23456e-61,1.23456e-61,1.23456e-61,0.30775196464736493,-0.2670094360798111,-0.33580860553589953,1.23456e-61,1.23456e-61,1.23456e-61,-0.5814715841943751,-0.7399449885316096,0.3381896076484907,-0.43248727864618,-0.6305829778068426,-0.9637487926843653,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.0,1.1175176371676157,0,0,-0.43248727864618,-0.6305829778068426,-0.9637487926843653,-10.25216256430902,2.7594326929146704,-11.589690300147902,-0.00023448417350890193,-0.0002983901428618888,0.00013637830771838304,-3.9789294326425604,5.313684573222315,4.784889403459182,-0.4571142022667745,0.12013807470830702,-0.5135334969155083,1.23456e-61,1.23456e-61,1.23456e-61,-0.038912046994336244,-0.04951707864943698,0.02263163026968345,1.23456e-61,1.23456e-61,1.23456e-61,-0.5814715841943751,-0.7399449885316096,0.3381896076484907,-0.43248727864618,-0.6305829778068426,-0.9637487926843653,-0.1765754021600493,0.2823332397291507,0.3141358711416631,0.12186032358587728,0.15507195568832488,-0.070875165943878,-0.217434052631645,0.2050862568792311,0.07487168257188363,-0.3281735944523736,0.19573924276927218,-0.49026758423382294,1.23456e-61,1.23456e-61,1.23456e-61,0.30775196464736493,-0.2670094360798111,-0.33580860553589953,1.23456e-61,1.23456e-61,1.23456e-61,-0.5814715841943751,-0.7399449885316096,0.3381896076484907,-0.43248727864618,-0.6305829778068426,-0.9637487926843653,-0.8321520862851274,0.48091055624884865,-0.27613029927867927,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.43248727864618,-0.6305829778068426,-0.9637487926843653],[-0.1765754021600493,0.2823332397291507,0.3141358711416631],[0.12186032358587728,0.15507195568832488,-0.070875165943878]],[[-0.217434052631645,0.2050862568792311,0.07487168257188363],[-0.3281735944523736,0.19573924276927218,-0.49026758423382294],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.30775196464736493,-0.2670094360798111,-0.33580860553589953],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.5814715841943751,-0.7399449885316096,0.3381896076484907]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_333","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.7096893470038546,1.7139070148189668,0,0,0.7251984516594319,0.0,0,0,-0.6124156823553808,-0.7217018989704147,-0.5208258530926271,0.0,70.74594928941883,-35.5348322027606,-142.28071013642875,0.3096761694538116,0.15420686388653218,-0.0,17.50970071418366,40.58723186485944,-9327.695942534938,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-11033.709241818256,0.11958797498840132,0.05955022827241779,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.6124156823553808,-0.7217018989704147,-0.5208258530926271,0.0,0.0030746683618781694,-0.006174508038422111,-3.0248693428150676e-06,-0.0,-0.0,0.0,-0.012236251408607401,-0.0060931842407394,-0.00018642228135509853,-0.43098960573202333,0.8655075838628609,1.23456e-61,1.23456e-61,1.23456e-61,-0.001202663313475741,-0.5279705660171218,-0.2629091071279251,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.6124156823553808,-0.7217018989704147,-0.5208258530926271,0.0,-0.8951558475007332,-0.445753304738444,0,0,0,0,0,0,0],[1,1,1,1,1,1.7096893470038546,1.7139070148189668,0,0,0.7251984516594319,0.0,0,0,-0.6124156823553808,-0.7217018989704147,-0.5208258530926271,0.0,70.74594928941883,-35.5348322027606,-142.28071013642875,0.3096761694538116,0.15420686388653218,-0.0,17.50970071418366,40.58723186485944,-9327.695942534938,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-11033.709241818256,0.11958797498840132,0.05955022827241779,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.6124156823553808,-0.7217018989704147,-0.5208258530926271,0.0,0.0030746683618781694,-0.006174508038422111,-3.0248693428150676e-06,-0.0,-0.0,0.0,-0.012236251408607401,-0.0060931842407394,-0.00018642228135509853,-0.43098960573202333,0.8655075838628609,1.23456e-61,1.23456e-61,1.23456e-61,-0.001202663313475741,-0.5279705660171218,-0.2629091071279251,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.6124156823553808,-0.7217018989704147,-0.5208258530926271,0.43903784097895954,0.8704730756154201,-0.22253628651787297,0,0,0,0,0,0,0],[1,1,1,1,1,1.7096893470038546,1.7139070148189668,0,0,0.7251984516594319,0.0,0,0,-0.6124156823553808,-0.7217018989704147,-0.5208258530926271,0.0,70.74594928941883,-35.5348322027606,-142.28071013642875,0.3096761694538116,0.15420686388653218,-0.0,17.50970071418366,40.58723186485944,-9327.695942534938,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-11033.709241818256,0.11958797498840132,0.05955022827241779,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.6124156823553808,-0.7217018989704147,-0.5208258530926271,0.0,0.0030746683618781694,-0.006174508038422111,-3.0248693428150676e-06,-0.0,-0.0,0.0,-0.012236251408607401,-0.0060931842407394,-0.00018642228135509853,-0.43098960573202333,0.8655075838628609,1.23456e-61,1.23456e-61,1.23456e-61,-0.001202663313475741,-0.5279705660171218,-0.2629091071279251,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.6124156823553808,-0.7217018989704147,-0.5208258530926271,-0.0,0.8951558475007332,0.445753304738444,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.6124156823553808,-0.7217018989704147,-0.5208258530926271],[0.0,0.0030746683618781694,-0.006174508038422111],[-3.0248693428150676e-06,-0.0,-0.0]],[[0.0,-0.012236251408607401,-0.0060931842407394],[-0.00018642228135509853,-0.43098960573202333,0.8655075838628609],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.001202663313475741,-0.5279705660171218,-0.2629091071279251],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_334","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,0.0,0.0,0,0,0.0007320574594451031,-0.0005889092104259077,0.0002107787817500597,0.027529787531180867,0.06291497291844321,0.12910302349313013,129.79548757677344,53.299722208254316,-53.65166970823146,-0.051500905262902734,0.09155699886825885,-0.0336359057072767,63.68379304006751,26.090107476496605,-26.490770285626787,1.23456e-61,1.23456e-61,1.23456e-61,31.26338115414889,12.838116038674169,-12.922888391268685,1.23456e-61,1.23456e-61,1.23456e-61,0.8640325087236512,0.35480965905406936,-0.35715253003534597,0.0007320574594451031,-0.0005889092104259077,0.0002107787817500597,0.004738210670057888,0.014663340810051129,0.026029951417673277,-0.21925011954256263,0.3897772816853524,-0.1431950810605867,-0.004620068091475712,0.015650479525402796,0.004370828006550915,-0.16136851101848598,-0.36878219545960755,-0.7567498516457054,1.23456e-61,1.23456e-61,1.23456e-61,0.08098746494496105,-0.14397745488645694,0.05289395854301937,1.23456e-61,1.23456e-61,1.23456e-61,0.8640325087236512,0.35480965905406936,-0.35715253003534597,0.0007320574594451031,-0.0005889092104259077,0.0002107787817500597,-0.46691066268947584,0.8300618949747153,-0.30494537802344085,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.0007320574594451031,-0.0005889092104259077,0.0002107787817500597],[0.004738210670057888,0.014663340810051129,0.026029951417673277],[-0.21925011954256263,0.3897772816853524,-0.1431950810605867]],[[-0.004620068091475712,0.015650479525402796,0.004370828006550915],[-0.16136851101848598,-0.36878219545960755,-0.7567498516457054],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.08098746494496105,-0.14397745488645694,0.05289395854301937],[1.23456e-61,1.23456e-61,1.23456e-61],[0.8640325087236512,0.35480965905406936,-0.35715253003534597]]],"normal":[-0.8640325087236512,-0.35480965905406936,0.35715253003534597]},{"op":"state"}]}}, +{"name":"adv_sing_335","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.8724263718014296,2.0,0,0,0.7834962939381056,0.5407245413415618,0,0,-0.0006548474904521351,0.0004483746123931294,-0.0002659702005495581,0.0,-0.10929256499358102,-0.4413579065925264,0.0,0.0,0.0,0.0,-0.7471697313531535,0.1850201281214201,0.0,0.1776941093142557,0.717584952877349,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.8770007901876212,0.2171699304109069,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.0006548474904521351,0.0004483746123931294,-0.0002659702005495581,0.0,37.753392198454506,-91.55185356612068,0.009807060513882727,0.0,0.0,0.0,53.34188602156674,-72.77918543249463,0.008676906470954756,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.008142166636555252,-0.32962110608653644,0.08162340726678821,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.0006548474904521351,0.0004483746123931294,-0.0002659702005495581,-0.0,0.2403679791543463,0.9706818400471166,0,0,0,0,0,0,0],[1,1,1,1,1,1.8724263718014296,2.0,0,0,0.7834962939381056,0.5407245413415618,0,0,-0.0006548474904521351,0.0004483746123931294,-0.0002659702005495581,0.0,-0.10929256499358102,-0.4413579065925264,0.0,0.0,0.0,0.0,-0.7471697313531535,0.1850201281214201,0.0,0.1776941093142557,0.717584952877349,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.8770007901876212,0.2171699304109069,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.0006548474904521351,0.0004483746123931294,-0.0002659702005495581,0.0,37.753392198454506,-91.55185356612068,0.009807060513882727,0.0,0.0,0.0,53.34188602156674,-72.77918543249463,0.008676906470954756,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.008142166636555252,-0.32962110608653644,0.08162340726678821,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.0006548474904521351,0.0004483746123931294,-0.0002659702005495581,0.0,-0.2403679791543463,-0.9706818400471166,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0006548474904521351,0.0004483746123931294,-0.0002659702005495581],[0.0,37.753392198454506,-91.55185356612068],[0.009807060513882727,0.0,0.0]],[[0.0,53.34188602156674,-72.77918543249463],[0.008676906470954756,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.008142166636555252,-0.32962110608653644,0.08162340726678821],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_336","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.2358879441866737,0.48473891388291257,0,0,2.0,0.0,0,0,-0.00019122599063242253,-0.0003589712543665338,0.0007230341288108681,5.395120539534517,-5.864314292777362,0.0,0.0024868282957904134,0.0019205138638980362,-19.049252328174024,9.376025461475823,-0.5165249461533676,0.0,-0.10129953296064298,0.1311703860369816,-16.08415565121302,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-0.0,-26.4529954422725,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00019122599063242253,-0.0003589712543665338,0.0007230341288108681,-0.019189160439286986,0.004056746162128272,0.0,0.0,0.0,3.846810677886392,-0.010077166580548316,-0.002390868685710912,0.0,0.0,0.0,1.8367321892265225,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,1.0726553936443286,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00019122599063242253,-0.0003589712543665338,0.0007230341288108681,-0.6112230588089584,0.7914583832269517,-0.0,0,0,0,0,0,0,0],[1,1,1,1,1,1.2358879441866737,0.48473891388291257,0,0,2.0,0.0,0,0,-0.00019122599063242253,-0.0003589712543665338,0.0007230341288108681,5.395120539534517,-5.864314292777362,0.0,0.0024868282957904134,0.0019205138638980362,-19.049252328174024,9.376025461475823,-0.5165249461533676,0.0,-0.10129953296064298,0.1311703860369816,-16.08415565121302,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-0.0,-26.4529954422725,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00019122599063242253,-0.0003589712543665338,0.0007230341288108681,-0.019189160439286986,0.004056746162128272,0.0,0.0,0.0,3.846810677886392,-0.010077166580548316,-0.002390868685710912,0.0,0.0,0.0,1.8367321892265225,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,1.0726553936443286,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00019122599063242253,-0.0003589712543665338,0.0007230341288108681,-0.7914583832269517,-0.6112230588089584,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,1.2358879441866737,0.48473891388291257,0,0,2.0,0.0,0,0,-0.00019122599063242253,-0.0003589712543665338,0.0007230341288108681,5.395120539534517,-5.864314292777362,0.0,0.0024868282957904134,0.0019205138638980362,-19.049252328174024,9.376025461475823,-0.5165249461533676,0.0,-0.10129953296064298,0.1311703860369816,-16.08415565121302,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,-0.0,-26.4529954422725,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00019122599063242253,-0.0003589712543665338,0.0007230341288108681,-0.019189160439286986,0.004056746162128272,0.0,0.0,0.0,3.846810677886392,-0.010077166580548316,-0.002390868685710912,0.0,0.0,0.0,1.8367321892265225,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,1.0726553936443286,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00019122599063242253,-0.0003589712543665338,0.0007230341288108681,-0.5827779390928859,-0.03475451743016641,0.8118879215906867,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.00019122599063242253,-0.0003589712543665338,0.0007230341288108681],[-0.019189160439286986,0.004056746162128272,0.0],[0.0,0.0,3.846810677886392]],[[-0.010077166580548316,-0.002390868685710912,0.0],[0.0,0.0,1.8367321892265225],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,1.0726553936443286],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_337","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,1.7412735736893479,0,0,0.0,0.23492226006794836,0,0,-697.6440198629741,-868.6983474109646,775.4520860667544,-0.01966162984700759,0.06709072069530574,0.03584118025815081,0.5741505375938769,-0.7072391027806645,-0.0056913106915119985,-0.010790983500263657,0.05891479745103672,0.03786943488803877,-0.0031492987818547927,-0.002626030672502741,0.003188007276455179,1.23456e-61,1.23456e-61,1.23456e-61,-0.5145710325111222,0.6215681580326675,0.01106015139426221,1.23456e-61,1.23456e-61,1.23456e-61,0.6063354098056687,0.5055904486256587,-0.6137879675216003,-697.6440198629741,-868.6983474109646,775.4520860667544,-1.3228998091642379,2.406649943600516,0.6755724267824944,-8973.155696843143,-7482.2313541095045,9083.446073494899,0.5129401752570983,1.0333541611057084,1.3579083158608831,6921.318638207414,5771.320775497511,-7006.831079235734,1.23456e-61,1.23456e-61,1.23456e-61,-5338.918946947641,-4451.837022727105,5404.54038509779,1.23456e-61,1.23456e-61,1.23456e-61,0.6063354098056687,0.5055904486256587,-0.6137879675216003,-697.6440198629741,-868.6983474109646,775.4520860667544,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.7412735736893479,0,0,0.0,0.23492226006794836,0,0,-697.6440198629741,-868.6983474109646,775.4520860667544,-0.01966162984700759,0.06709072069530574,0.03584118025815081,0.5741505375938769,-0.7072391027806645,-0.0056913106915119985,-0.010790983500263657,0.05891479745103672,0.03786943488803877,-0.0031492987818547927,-0.002626030672502741,0.003188007276455179,1.23456e-61,1.23456e-61,1.23456e-61,-0.5145710325111222,0.6215681580326675,0.01106015139426221,1.23456e-61,1.23456e-61,1.23456e-61,0.6063354098056687,0.5055904486256587,-0.6137879675216003,-697.6440198629741,-868.6983474109646,775.4520860667544,-1.3228998091642379,2.406649943600516,0.6755724267824944,-8973.155696843143,-7482.2313541095045,9083.446073494899,0.5129401752570983,1.0333541611057084,1.3579083158608831,6921.318638207414,5771.320775497511,-7006.831079235734,1.23456e-61,1.23456e-61,1.23456e-61,-5338.918946947641,-4451.837022727105,5404.54038509779,1.23456e-61,1.23456e-61,1.23456e-61,0.6063354098056687,0.5055904486256587,-0.6137879675216003,-697.6440198629741,-868.6983474109646,775.4520860667544,0.1545496798658889,-1.156137662466584,-0.799662492480205,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.7412735736893479,0,0,0.0,0.23492226006794836,0,0,-697.6440198629741,-868.6983474109646,775.4520860667544,-0.01966162984700759,0.06709072069530574,0.03584118025815081,0.5741505375938769,-0.7072391027806645,-0.0056913106915119985,-0.010790983500263657,0.05891479745103672,0.03786943488803877,-0.0031492987818547927,-0.002626030672502741,0.003188007276455179,1.23456e-61,1.23456e-61,1.23456e-61,-0.5145710325111222,0.6215681580326675,0.01106015139426221,1.23456e-61,1.23456e-61,1.23456e-61,0.6063354098056687,0.5055904486256587,-0.6137879675216003,-697.6440198629741,-868.6983474109646,775.4520860667544,-1.3228998091642379,2.406649943600516,0.6755724267824944,-8973.155696843143,-7482.2313541095045,9083.446073494899,0.5129401752570983,1.0333541611057084,1.3579083158608831,6921.318638207414,5771.320775497511,-7006.831079235734,1.23456e-61,1.23456e-61,1.23456e-61,-5338.918946947641,-4451.837022727105,5404.54038509779,1.23456e-61,1.23456e-61,1.23456e-61,0.6063354098056687,0.5055904486256587,-0.6137879675216003,-697.6440198629741,-868.6983474109646,775.4520860667544,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-697.6440198629741,-868.6983474109646,775.4520860667544],[-1.3228998091642379,2.406649943600516,0.6755724267824944],[-8973.155696843143,-7482.2313541095045,9083.446073494899]],[[0.5129401752570983,1.0333541611057084,1.3579083158608831],[6921.318638207414,5771.320775497511,-7006.831079235734],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-5338.918946947641,-4451.837022727105,5404.54038509779],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6063354098056687,0.5055904486256587,-0.6137879675216003]]],"normal":[0.6063354098056687,0.5055904486256587,-0.6137879675216003]},{"op":"state"}]}}, +{"name":"adv_sing_338","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,0.0,2.0,0,0,1.2616083443936796,0.6215790570006288,1.6553560057433532,56.75735403240824,-42.7752886891881,7.228536094784111,-0.42604358242825763,-0.5167278205990422,0.287461349574841,-32.70201043607862,-39.78599167111367,21.335205683732386,0.0011388147803636829,0.0026370565429460298,0.006663139066642026,1.23456e-61,1.23456e-61,1.23456e-61,8.547642141598122e-05,0.00019793048022316803,0.0005001175719125259,1.23456e-61,1.23456e-61,1.23456e-61,0.15694972304944363,0.3634351267806056,0.9183037041505757,1.2616083443936796,0.6215790570006288,1.6553560057433532,10.589020397439356,-98.00049313066867,36.975651599022385,1.7395401417255978,4.028105177024308,10.177948228440004,-11.438956266072612,-76.92347452471752,32.39890419667925,1.3521817700987486,3.1311323365091113,7.911536917942747,1.23456e-61,1.23456e-61,1.23456e-61,1.1139914107987303,2.5795751770049233,6.517898974604314,1.23456e-61,1.23456e-61,1.23456e-61,0.15694972304944363,0.3634351267806056,0.9183037041505757,1.2616083443936796,0.6215790570006288,1.6553560057433532,-0.586632683154749,-0.7137103418035798,0.38272659047586055,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.2616083443936796,0.6215790570006288,1.6553560057433532],[10.589020397439356,-98.00049313066867,36.975651599022385],[1.7395401417255978,4.028105177024308,10.177948228440004]],[[-11.438956266072612,-76.92347452471752,32.39890419667925],[1.3521817700987486,3.1311323365091113,7.911536917942747],[1.23456e-61,1.23456e-61,1.23456e-61]],[[1.1139914107987303,2.5795751770049233,6.517898974604314],[1.23456e-61,1.23456e-61,1.23456e-61],[0.15694972304944363,0.3634351267806056,0.9183037041505757]]],"normal":[0.15694972304944363,0.3634351267806056,0.9183037041505757]},{"op":"state"}]}}, +{"name":"adv_sing_339","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,1.2125884968194423,0,0,2.0,0.0,0,0,1.2734441992456387,1.5265172040124702,-1.5884190481457319,0.11066310833074554,-0.11861431091993556,-0.12568737797706298,0.4170930103510881,-0.14274466268787261,0.5019467332846503,0.19672564402450174,-0.07339572902809263,0.2424750644795398,0.4278615493757964,-0.534206746401151,-0.5088351361940702,1.23456e-61,1.23456e-61,1.23456e-61,0.13026493630498392,0.17681090492647022,-0.052167377492463606,1.23456e-61,1.23456e-61,1.23456e-61,0.5770917244502115,0.7832968173931791,-0.2311087134506137,1.2734441992456387,1.5265172040124702,-1.5884190481457319,0.0028784595617723906,0.009256576659442968,0.03856099623636855,0.002280839870177707,0.0030958243474999026,-0.0009134110673408417,-0.012270787474545054,0.003001852582765822,-0.020466681065636552,-0.0011494941436950847,-0.0015602287577876001,0.00046033949442174946,1.23456e-61,1.23456e-61,1.23456e-61,0.0008345732845237845,0.001132781098657484,-0.00033422270653819656,1.23456e-61,1.23456e-61,1.23456e-61,0.5770917244502115,0.7832968173931791,-0.2311087134506137,1.2734441992456387,1.5265172040124702,-1.5884190481457319,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.2125884968194423,0,0,2.0,0.0,0,0,1.2734441992456387,1.5265172040124702,-1.5884190481457319,0.11066310833074554,-0.11861431091993556,-0.12568737797706298,0.4170930103510881,-0.14274466268787261,0.5019467332846503,0.19672564402450174,-0.07339572902809263,0.2424750644795398,0.4278615493757964,-0.534206746401151,-0.5088351361940702,1.23456e-61,1.23456e-61,1.23456e-61,0.13026493630498392,0.17681090492647022,-0.052167377492463606,1.23456e-61,1.23456e-61,1.23456e-61,0.5770917244502115,0.7832968173931791,-0.2311087134506137,1.2734441992456387,1.5265172040124702,-1.5884190481457319,0.0028784595617723906,0.009256576659442968,0.03856099623636855,0.002280839870177707,0.0030958243474999026,-0.0009134110673408417,-0.012270787474545054,0.003001852582765822,-0.020466681065636552,-0.0011494941436950847,-0.0015602287577876001,0.00046033949442174946,1.23456e-61,1.23456e-61,1.23456e-61,0.0008345732845237845,0.001132781098657484,-0.00033422270653819656,1.23456e-61,1.23456e-61,1.23456e-61,0.5770917244502115,0.7832968173931791,-0.2311087134506137,1.2734441992456387,1.5265172040124702,-1.5884190481457319,0.48213436836482587,0.8211907000522185,0.30527411450890773,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[1.2734441992456387,1.5265172040124702,-1.5884190481457319],[0.0028784595617723906,0.009256576659442968,0.03856099623636855],[0.002280839870177707,0.0030958243474999026,-0.0009134110673408417]],[[-0.012270787474545054,0.003001852582765822,-0.020466681065636552],[-0.0011494941436950847,-0.0015602287577876001,0.00046033949442174946],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0008345732845237845,0.001132781098657484,-0.00033422270653819656],[1.23456e-61,1.23456e-61,1.23456e-61],[0.5770917244502115,0.7832968173931791,-0.2311087134506137]]],"normal":[-0.5770917244502115,-0.7832968173931791,0.2311087134506137]},{"op":"state"}]}}, +{"name":"adv_sing_340","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.7822700404363456,2.0,0,0,0.0,2.0,0,0,7.51874855689434e-05,-0.00028332807268851857,0.0009833621626428926,8.252012961660462,9.946024116577286,-14.883820613663282,-158540.49125315057,-3186686.4178328635,-2217383.493738645,30.634737994280677,-9.107665190378174,10.89862620540808,0.3522687257926392,0.42458406918746944,-0.6353727929005057,1.23456e-61,1.23456e-61,1.23456e-61,-465246.67410705163,-9351536.050051074,-6507054.01387618,1.23456e-61,1.23456e-61,1.23456e-61,0.040803352313269176,0.8201542135746095,0.5706856861669242,7.51874855689434e-05,-0.00028332807268851857,0.0009833621626428926,0.009750619169802242,0.004328773576333349,-0.006918203720889138,-2.938106111089587e-12,-5.905642478683802e-11,-4.1093072185961614e-11,9.369669677110294e-05,0.0031031573223484314,-0.0044663652066653835,-1.421960316205053e-12,-2.8581640447522825e-11,-1.988788549836189e-11,1.23456e-61,1.23456e-61,1.23456e-61,8.70768411024471e-14,1.750259086229889e-12,1.2178780417911401e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.040803352313269176,0.8201542135746095,0.5706856861669242,7.51874855689434e-05,-0.00028332807268851857,0.0009833621626428926,0.040803352313269176,0.8201542135746095,0.5706856861669242,0,0,0,0,0,0,0],[1,1,1,1,1,1.7822700404363456,2.0,0,0,0.0,2.0,0,0,7.51874855689434e-05,-0.00028332807268851857,0.0009833621626428926,8.252012961660462,9.946024116577286,-14.883820613663282,-158540.49125315057,-3186686.4178328635,-2217383.493738645,30.634737994280677,-9.107665190378174,10.89862620540808,0.3522687257926392,0.42458406918746944,-0.6353727929005057,1.23456e-61,1.23456e-61,1.23456e-61,-465246.67410705163,-9351536.050051074,-6507054.01387618,1.23456e-61,1.23456e-61,1.23456e-61,0.040803352313269176,0.8201542135746095,0.5706856861669242,7.51874855689434e-05,-0.00028332807268851857,0.0009833621626428926,0.009750619169802242,0.004328773576333349,-0.006918203720889138,-2.938106111089587e-12,-5.905642478683802e-11,-4.1093072185961614e-11,9.369669677110294e-05,0.0031031573223484314,-0.0044663652066653835,-1.421960316205053e-12,-2.8581640447522825e-11,-1.988788549836189e-11,1.23456e-61,1.23456e-61,1.23456e-61,8.70768411024471e-14,1.750259086229889e-12,1.2178780417911401e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.040803352313269176,0.8201542135746095,0.5706856861669242,7.51874855689434e-05,-0.00028332807268851857,0.0009833621626428926,0.040803352313269176,0.8201542135746095,0.5706856861669242,0,0,0,0,0,0,0],[1,1,1,1,1,1.7822700404363456,2.0,0,0,0.0,2.0,0,0,7.51874855689434e-05,-0.00028332807268851857,0.0009833621626428926,8.252012961660462,9.946024116577286,-14.883820613663282,-158540.49125315057,-3186686.4178328635,-2217383.493738645,30.634737994280677,-9.107665190378174,10.89862620540808,0.3522687257926392,0.42458406918746944,-0.6353727929005057,1.23456e-61,1.23456e-61,1.23456e-61,-465246.67410705163,-9351536.050051074,-6507054.01387618,1.23456e-61,1.23456e-61,1.23456e-61,0.040803352313269176,0.8201542135746095,0.5706856861669242,7.51874855689434e-05,-0.00028332807268851857,0.0009833621626428926,0.009750619169802242,0.004328773576333349,-0.006918203720889138,-2.938106111089587e-12,-5.905642478683802e-11,-4.1093072185961614e-11,9.369669677110294e-05,0.0031031573223484314,-0.0044663652066653835,-1.421960316205053e-12,-2.8581640447522825e-11,-1.988788549836189e-11,1.23456e-61,1.23456e-61,1.23456e-61,8.70768411024471e-14,1.750259086229889e-12,1.2178780417911401e-12,1.23456e-61,1.23456e-61,1.23456e-61,0.040803352313269176,0.8201542135746095,0.5706856861669242,7.51874855689434e-05,-0.00028332807268851857,0.0009833621626428926,-0.704439827027558,-0.49393801454011993,0.5096957601251441,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[7.51874855689434e-05,-0.00028332807268851857,0.0009833621626428926],[0.009750619169802242,0.004328773576333349,-0.006918203720889138],[-2.938106111089587e-12,-5.905642478683802e-11,-4.1093072185961614e-11]],[[9.369669677110294e-05,0.0031031573223484314,-0.0044663652066653835],[-1.421960316205053e-12,-2.8581640447522825e-11,-1.988788549836189e-11],[1.23456e-61,1.23456e-61,1.23456e-61]],[[8.70768411024471e-14,1.750259086229889e-12,1.2178780417911401e-12],[1.23456e-61,1.23456e-61,1.23456e-61],[0.040803352313269176,0.8201542135746095,0.5706856861669242]]],"normal":[0.040803352313269176,0.8201542135746095,0.5706856861669242]},{"op":"state"}]}}, +{"name":"adv_sing_341","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.3042613551143443,0.0,0,0,0.08946974334369195,2.0,0,0,-19.472232338700213,646.7942732181997,259.2524998801542,0.0,-9.733975976117627,-31.726232406773715,-463072.88663367333,0.48688132190967925,-0.14938083507442715,0.0,-17.799331628160434,5.461041331288764,-1240039.290268434,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-3320638.03732452,0.0666679194427961,-0.02045449071650151,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-19.472232338700213,646.7942732181997,259.2524998801542,-0.0,0.010175471840055616,0.010161635443137657,-0.8478753782941025,-0.0,0.0,0.0,-0.0029756007327777566,-0.018476897189424277,0.11795124269385918,-0.016903571210009252,-0.05509430370785643,1.23456e-61,1.23456e-61,1.23456e-61,-0.01640865628273952,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-19.472232338700213,646.7942732181997,259.2524998801542,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-19.472232338700213,646.7942732181997,259.2524998801542],[-0.0,0.010175471840055616,0.010161635443137657],[-0.8478753782941025,-0.0,0.0]],[[0.0,-0.0029756007327777566,-0.018476897189424277],[0.11795124269385918,-0.016903571210009252,-0.05509430370785643],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.01640865628273952,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_342","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,0.24064006086304235,1.5976425992034098,0,0,-0.000546997295698352,-0.0008300523589159319,0.000854778080612973,0.0027243083494775215,-0.003742362297577068,0.0028873039281751816,-3.3037640286538233e-09,-1.6388155686544345e-08,-1.8124155039422876e-08,0.009129345037675731,0.00315849457288038,-0.004520106032966272,-2.5600047521875988e-09,-1.269877511628412e-08,-1.4043957930377076e-08,1.23456e-61,1.23456e-61,1.23456e-61,-0.4743627008232023,-0.16411607278754084,0.23486563249870204,1.23456e-61,1.23456e-61,1.23456e-61,-0.13398846440355616,-0.6646430543470777,-0.7350487750584749,-0.000546997295698352,-0.0008300523589159319,0.000854778080612973,0.0002530994346037765,0.003099310808802894,-0.0028485834926411037,-4.953295637280444,-21.108847396371537,-22.686440918193753,0.009452798390478197,0.0033646259916888157,-0.004765454151297022,-25.946737834845642,-128.70749106396195,-142.34149146469719,1.23456e-61,1.23456e-61,1.23456e-61,-160.0326449166614,-797.4433911791559,-882.6032431147742,1.23456e-61,1.23456e-61,1.23456e-61,-0.13398846440355616,-0.6646430543470777,-0.7350487750584749,-0.000546997295698352,-0.0008300523589159319,0.000854778080612973,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.24064006086304235,1.5976425992034098,0,0,-0.000546997295698352,-0.0008300523589159319,0.000854778080612973,0.0027243083494775215,-0.003742362297577068,0.0028873039281751816,-3.3037640286538233e-09,-1.6388155686544345e-08,-1.8124155039422876e-08,0.009129345037675731,0.00315849457288038,-0.004520106032966272,-2.5600047521875988e-09,-1.269877511628412e-08,-1.4043957930377076e-08,1.23456e-61,1.23456e-61,1.23456e-61,-0.4743627008232023,-0.16411607278754084,0.23486563249870204,1.23456e-61,1.23456e-61,1.23456e-61,-0.13398846440355616,-0.6646430543470777,-0.7350487750584749,-0.000546997295698352,-0.0008300523589159319,0.000854778080612973,0.0002530994346037765,0.003099310808802894,-0.0028485834926411037,-4.953295637280444,-21.108847396371537,-22.686440918193753,0.009452798390478197,0.0033646259916888157,-0.004765454151297022,-25.946737834845642,-128.70749106396195,-142.34149146469719,1.23456e-61,1.23456e-61,1.23456e-61,-160.0326449166614,-797.4433911791559,-882.6032431147742,1.23456e-61,1.23456e-61,1.23456e-61,-0.13398846440355616,-0.6646430543470777,-0.7350487750584749,-0.000546997295698352,-0.0008300523589159319,0.000854778080612973,-0.7738459572775991,0.12655663779786247,0.6206012019279505,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.000546997295698352,-0.0008300523589159319,0.000854778080612973],[0.0002530994346037765,0.003099310808802894,-0.0028485834926411037],[-4.953295637280444,-21.108847396371537,-22.686440918193753]],[[0.009452798390478197,0.0033646259916888157,-0.004765454151297022],[-25.946737834845642,-128.70749106396195,-142.34149146469719],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-160.0326449166614,-797.4433911791559,-882.6032431147742],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.13398846440355616,-0.6646430543470777,-0.7350487750584749]]],"normal":[-0.13398846440355616,-0.6646430543470777,-0.7350487750584749]},{"op":"state"}]}}, +{"name":"adv_sing_343","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,-0.5536296892781154,-0.5514377970956867,1.8716373669045687,26.368244358028097,0.0,106.01603530271007,0.0,-0.008134264957018576,0.0,57.81089723555087,0.0,-14.37869149238869,0.0,0.0030318825401218284,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.2505184985605956,-0.001130072819814418,-0.062308809864381275,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.5536296892781154,-0.5514377970956867,1.8716373669045687,-10.935795942160368,0.0,36.0561286360372,0.5658719952414574,2.346354008482956,-0.1407433413566847,-31.52644574770859,-0.0,-20.82619401017015,-0.14251199683808094,1.9082215272321768,-0.5729830428868022,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.8285394927223946,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-0.5536296892781154,-0.5514377970956867,1.8716373669045687,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,-0.5536296892781154,-0.5514377970956867,1.8716373669045687,26.368244358028097,0.0,106.01603530271007,0.0,-0.008134264957018576,0.0,57.81089723555087,0.0,-14.37869149238869,0.0,0.0030318825401218284,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.2505184985605956,-0.001130072819814418,-0.062308809864381275,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.5536296892781154,-0.5514377970956867,1.8716373669045687,-10.935795942160368,0.0,36.0561286360372,0.5658719952414574,2.346354008482956,-0.1407433413566847,-31.52644574770859,-0.0,-20.82619401017015,-0.14251199683808094,1.9082215272321768,-0.5729830428868022,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.8285394927223946,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,-0.5536296892781154,-0.5514377970956867,1.8716373669045687,-0.5384919044905905,-0.6431507102100511,-0.5444112717003604,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.5536296892781154,-0.5514377970956867,1.8716373669045687],[-10.935795942160368,0.0,36.0561286360372],[0.5658719952414574,2.346354008482956,-0.1407433413566847]],[[-31.52644574770859,-0.0,-20.82619401017015],[-0.14251199683808094,1.9082215272321768,-0.5729830428868022],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-0.8285394927223946,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_344","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,0.0,2.0,0,0,462.9587578102925,425.28581118526245,-181.8946535986057,0.0,-0.06536843864259312,-0.07099101020944948,9.313348278868583e-12,0.0,0.0,0.0,-0.03625544669790884,-0.18070068553580776,1.519860765335563e-11,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,3.3967654579046355e-11,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,462.9587578102925,425.28581118526245,-181.8946535986057,-0.0,1.1238302134359195,15.437028842532698,-0.00023857351241537782,0.0,-0.0,0.0,-3.9224898616668726,-14.296592697854113,0.00022131793915671334,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0002053104290441651,0.155218473183087,-0.11842468042251834,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,462.9587578102925,425.28581118526245,-181.8946535986057,0.0,-0.6065712802513766,-0.7950291076270138,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.0,2.0,0,0,462.9587578102925,425.28581118526245,-181.8946535986057,0.0,-0.06536843864259312,-0.07099101020944948,9.313348278868583e-12,0.0,0.0,0.0,-0.03625544669790884,-0.18070068553580776,1.519860765335563e-11,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,3.3967654579046355e-11,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,462.9587578102925,425.28581118526245,-181.8946535986057,-0.0,1.1238302134359195,15.437028842532698,-0.00023857351241537782,0.0,-0.0,0.0,-3.9224898616668726,-14.296592697854113,0.00022131793915671334,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0002053104290441651,0.155218473183087,-0.11842468042251834,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,462.9587578102925,425.28581118526245,-181.8946535986057,-0.617861248067982,-0.06669111074820343,0.7834537471242616,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[462.9587578102925,425.28581118526245,-181.8946535986057],[-0.0,1.1238302134359195,15.437028842532698],[-0.00023857351241537782,0.0,-0.0]],[[0.0,-3.9224898616668726,-14.296592697854113],[0.00022131793915671334,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0002053104290441651,0.155218473183087,-0.11842468042251834],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_345","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,0.41180367719545474,0,0,2.0,0.0,0,0,659.9600666461729,-584.7651783419874,-377.44277325400554,-5.586626143866119,2.429535325438768,1.710244747445694,35838.87665379781,44125.64858907429,54386.124216879114,2.9463664501099984,4.089504461067311,-5.259549281250522,64672.333073842565,79626.9687134832,98141.3613280451,1.23456e-61,1.23456e-61,1.23456e-61,116703.96529405242,143688.60417312154,177100.31523580392,1.23456e-61,1.23456e-61,1.23456e-61,-0.4555456687423228,-0.5608782967551097,-0.6912985461573002,659.9600666461729,-584.7651783419874,-377.44277325400554,-0.00410074345991949,0.0010352653485923224,0.00186231847808449,-0.39459117353223494,-0.030910318718272288,0.1798482941621148,0.009690706294342558,0.002983272355965798,-0.008806342832705998,0.13372872548374337,0.16464988018353904,0.2029356875713649,1.23456e-61,1.23456e-61,1.23456e-61,-0.23722844152341982,-0.6721540036279364,-1.0105371666752572,1.23456e-61,1.23456e-61,1.23456e-61,0.4555456687423228,0.5608782967551097,0.6912985461573002,659.9600666461729,-584.7651783419874,-377.44277325400554,-0.4555456687423228,-0.5608782967551097,-0.6912985461573002,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.41180367719545474,0,0,2.0,0.0,0,0,659.9600666461729,-584.7651783419874,-377.44277325400554,-5.586626143866119,2.429535325438768,1.710244747445694,35838.87665379781,44125.64858907429,54386.124216879114,2.9463664501099984,4.089504461067311,-5.259549281250522,64672.333073842565,79626.9687134832,98141.3613280451,1.23456e-61,1.23456e-61,1.23456e-61,116703.96529405242,143688.60417312154,177100.31523580392,1.23456e-61,1.23456e-61,1.23456e-61,-0.4555456687423228,-0.5608782967551097,-0.6912985461573002,659.9600666461729,-584.7651783419874,-377.44277325400554,-0.00410074345991949,0.0010352653485923224,0.00186231847808449,-0.39459117353223494,-0.030910318718272288,0.1798482941621148,0.009690706294342558,0.002983272355965798,-0.008806342832705998,0.13372872548374337,0.16464988018353904,0.2029356875713649,1.23456e-61,1.23456e-61,1.23456e-61,-0.23722844152341982,-0.6721540036279364,-1.0105371666752572,1.23456e-61,1.23456e-61,1.23456e-61,0.4555456687423228,0.5608782967551097,0.6912985461573002,659.9600666461729,-584.7651783419874,-377.44277325400554,-0.6058343061425109,-0.7236538641014182,0.33059019718060084,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[659.9600666461729,-584.7651783419874,-377.44277325400554],[-0.00410074345991949,0.0010352653485923224,0.00186231847808449],[-0.39459117353223494,-0.030910318718272288,0.1798482941621148]],[[0.009690706294342558,0.002983272355965798,-0.008806342832705998],[0.13372872548374337,0.16464988018353904,0.2029356875713649],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.23722844152341982,-0.6721540036279364,-1.0105371666752572],[1.23456e-61,1.23456e-61,1.23456e-61],[0.4555456687423228,0.5608782967551097,0.6912985461573002]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_346","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.6795214639326959,0.6158114813638265,0,0,0.0,1.136554913951163,0,0,-433.8348965078502,145.87426907125246,-681.5700814805518,0.1017224868513906,0.5379198304475228,0.4090788514853439,0.34005307351363145,-0.37068251360646304,0.08135620129844584,0.6259502963168401,-0.09704290852060554,0.4968336578661175,-0.17311172470640368,-0.221253536017672,-0.2845221686635134,1.23456e-61,1.23456e-61,1.23456e-61,0.18872086810889274,-0.20571932393317072,0.04515055168205875,1.23456e-61,1.23456e-61,1.23456e-61,0.6059858150019032,0.405742213027398,-0.6842181293886538,-433.8348965078502,145.87426907125246,-681.5700814805518,0.013204428541664485,0.01687653528686346,0.021702463774600094,-3.128720692744745e-07,-2.094857711834195e-07,3.532636188460384e-07,-0.021115163099639688,0.023017086215461127,-0.005051730833876051,-0.36787793149371417,-0.47018335849724185,-0.6046340305535721,1.23456e-61,1.23456e-61,1.23456e-61,-2.7060533293042495e-07,-1.8118577023104343e-07,3.055402785289087e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.6059858150019032,0.405742213027398,-0.6842181293886538,-433.8348965078502,145.87426907125246,-681.5700814805518,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.6795214639326959,0.6158114813638265,0,0,0.0,1.136554913951163,0,0,-433.8348965078502,145.87426907125246,-681.5700814805518,0.1017224868513906,0.5379198304475228,0.4090788514853439,0.34005307351363145,-0.37068251360646304,0.08135620129844584,0.6259502963168401,-0.09704290852060554,0.4968336578661175,-0.17311172470640368,-0.221253536017672,-0.2845221686635134,1.23456e-61,1.23456e-61,1.23456e-61,0.18872086810889274,-0.20571932393317072,0.04515055168205875,1.23456e-61,1.23456e-61,1.23456e-61,0.6059858150019032,0.405742213027398,-0.6842181293886538,-433.8348965078502,145.87426907125246,-681.5700814805518,0.013204428541664485,0.01687653528686346,0.021702463774600094,-3.128720692744745e-07,-2.094857711834195e-07,3.532636188460384e-07,-0.021115163099639688,0.023017086215461127,-0.005051730833876051,-0.36787793149371417,-0.47018335849724185,-0.6046340305535721,1.23456e-61,1.23456e-61,1.23456e-61,-2.7060533293042495e-07,-1.8118577023104343e-07,3.055402785289087e-07,1.23456e-61,1.23456e-61,1.23456e-61,0.6059858150019032,0.405742213027398,-0.6842181293886538,-433.8348965078502,145.87426907125246,-681.5700814805518,0.7343678544239087,-0.46332047143818694,0.4960221720196799,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-433.8348965078502,145.87426907125246,-681.5700814805518],[0.013204428541664485,0.01687653528686346,0.021702463774600094],[-3.128720692744745e-07,-2.094857711834195e-07,3.532636188460384e-07]],[[-0.021115163099639688,0.023017086215461127,-0.005051730833876051],[-0.36787793149371417,-0.47018335849724185,-0.6046340305535721],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-2.7060533293042495e-07,-1.8118577023104343e-07,3.055402785289087e-07],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6059858150019032,0.405742213027398,-0.6842181293886538]]],"normal":[0.6059858150019032,0.405742213027398,-0.6842181293886538]},{"op":"state"}]}}, +{"name":"adv_sing_347","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,0.27273818424710616,0.0,0,0,366.54580239932176,852.5970076005714,901.2489546598828,0.539215351827363,-0.07919870965468112,0.10360811081581212,0.19531860478411317,0.18230430638154918,-0.00434546473491113,0.6311943936248985,0.3335954486667103,0.03667394191083602,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.1578723134369818,-0.1922295700190861,-0.9685680797240496,366.54580239932176,852.5970076005714,901.2489546598828,-0.9564127435224237,0.27280754637145577,-0.21003455927992357,0.5790705475187705,-0.705091855163595,-3.552676438474393,-0.6364886911089871,-0.6445285889830097,0.024173325420790842,0.10374671167966998,-0.026887292319299205,3.535178568139772,1.23456e-61,1.23456e-61,1.23456e-61,-0.9050172238748176,1.1019732847252381,5.552403556786572,1.23456e-61,1.23456e-61,1.23456e-61,0.1578723134369818,-0.1922295700190861,-0.9685680797240496,366.54580239932176,852.5970076005714,901.2489546598828,-0.7260416273522302,0.43201009123778183,0.5350054545707441,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,0.27273818424710616,0.0,0,0,366.54580239932176,852.5970076005714,901.2489546598828,0.539215351827363,-0.07919870965468112,0.10360811081581212,0.19531860478411317,0.18230430638154918,-0.00434546473491113,0.6311943936248985,0.3335954486667103,0.03667394191083602,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.1578723134369818,-0.1922295700190861,-0.9685680797240496,366.54580239932176,852.5970076005714,901.2489546598828,-0.9564127435224237,0.27280754637145577,-0.21003455927992357,0.5790705475187705,-0.705091855163595,-3.552676438474393,-0.6364886911089871,-0.6445285889830097,0.024173325420790842,0.10374671167966998,-0.026887292319299205,3.535178568139772,1.23456e-61,1.23456e-61,1.23456e-61,-0.9050172238748176,1.1019732847252381,5.552403556786572,1.23456e-61,1.23456e-61,1.23456e-61,0.1578723134369818,-0.1922295700190861,-0.9685680797240496,366.54580239932176,852.5970076005714,901.2489546598828,0.7309456367072285,0.6822419064984524,-0.016262139958245173,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[366.54580239932176,852.5970076005714,901.2489546598828],[-0.9564127435224237,0.27280754637145577,-0.21003455927992357],[0.5790705475187705,-0.705091855163595,-3.552676438474393]],[[-0.6364886911089871,-0.6445285889830097,0.024173325420790842],[0.10374671167966998,-0.026887292319299205,3.535178568139772],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.9050172238748176,1.1019732847252381,5.552403556786572],[1.23456e-61,1.23456e-61,1.23456e-61],[0.1578723134369818,-0.1922295700190861,-0.9685680797240496]]],"normal":[-0.1578723134369818,0.1922295700190861,0.9685680797240496]},{"op":"state"}]}}, +{"name":"adv_sing_348","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,1.2947180866784598,2.0,0,0,-0.25314173466015655,-1.3529255393894326,-0.5144566662817436,0.0,-4.062496938705596,2.4763655864830945,0.0,0.0,0.0,0.0,-0.1263201092211424,0.8160451903734043,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.25314173466015655,-1.3529255393894326,-0.5144566662817436,0.0,-0.010801538199908414,-0.007559817347867863,0.0,0.2994881296091578,-0.4279114591710085,0.0,-0.011375933946577061,0.016254041523667613,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.3698396561883688,0.5284303826846221,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.25314173466015655,-1.3529255393894326,-0.5144566662817436,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,1.2947180866784598,2.0,0,0,-0.25314173466015655,-1.3529255393894326,-0.5144566662817436,0.0,-4.062496938705596,2.4763655864830945,0.0,0.0,0.0,0.0,-0.1263201092211424,0.8160451903734043,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.25314173466015655,-1.3529255393894326,-0.5144566662817436,0.0,-0.010801538199908414,-0.007559817347867863,0.0,0.2994881296091578,-0.4279114591710085,0.0,-0.011375933946577061,0.016254041523667613,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.3698396561883688,0.5284303826846221,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-0.25314173466015655,-1.3529255393894326,-0.5144566662817436,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.25314173466015655,-1.3529255393894326,-0.5144566662817436],[0.0,-0.010801538199908414,-0.007559817347867863],[0.0,0.2994881296091578,-0.4279114591710085]],[[0.0,-0.011375933946577061,0.016254041523667613],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-0.3698396561883688,0.5284303826846221],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_349","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,2.0,0.0,0,0,-0.49807556086395044,-0.2510323538797532,-0.5193125427893297,10.626319225699955,14.946465037880557,8.719330330663244,-986169.6991346931,2499289.786824649,-3082368.9853879507,-2.2074473154534338,1.7110646895064008,2.093637779450927,-63618.88738351718,161231.98269515767,-198847.02836607065,1.23456e-61,1.23456e-61,1.23456e-61,-4104.046551700381,10401.23279523882,-12827.884899771427,1.23456e-61,1.23456e-61,1.23456e-61,-0.2411758371781202,0.6112216865079658,-0.7538184565953469,-0.49807556086395044,-0.2510323538797532,-0.5193125427893297,9.486273295480698,16.485174763983043,10.33171362380562,-0.06035159150340541,0.15295148126678845,-0.1886347492040434,-19.263613925726137,4.7888908629897236,10.046175042723156,0.08060906862223695,-0.20429082551388306,0.25195145752319054,1.23456e-61,1.23456e-61,1.23456e-61,-0.19222970577835213,0.03847449983890951,0.11511010796715909,1.23456e-61,1.23456e-61,1.23456e-61,0.2411758371781202,-0.6112216865079658,0.7538184565953469,-0.49807556086395044,-0.2510323538797532,-0.5193125427893297,-0.2411758371781202,0.6112216865079658,-0.7538184565953469,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,2.0,0.0,0,0,-0.49807556086395044,-0.2510323538797532,-0.5193125427893297,10.626319225699955,14.946465037880557,8.719330330663244,-986169.6991346931,2499289.786824649,-3082368.9853879507,-2.2074473154534338,1.7110646895064008,2.093637779450927,-63618.88738351718,161231.98269515767,-198847.02836607065,1.23456e-61,1.23456e-61,1.23456e-61,-4104.046551700381,10401.23279523882,-12827.884899771427,1.23456e-61,1.23456e-61,1.23456e-61,-0.2411758371781202,0.6112216865079658,-0.7538184565953469,-0.49807556086395044,-0.2510323538797532,-0.5193125427893297,9.486273295480698,16.485174763983043,10.33171362380562,-0.06035159150340541,0.15295148126678845,-0.1886347492040434,-19.263613925726137,4.7888908629897236,10.046175042723156,0.08060906862223695,-0.20429082551388306,0.25195145752319054,1.23456e-61,1.23456e-61,1.23456e-61,-0.19222970577835213,0.03847449983890951,0.11511010796715909,1.23456e-61,1.23456e-61,1.23456e-61,0.2411758371781202,-0.6112216865079658,0.7538184565953469,-0.49807556086395044,-0.2510323538797532,-0.5193125427893297,-0.42761077601866465,0.9768814559403229,0.9288980812083909,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.49807556086395044,-0.2510323538797532,-0.5193125427893297],[9.486273295480698,16.485174763983043,10.33171362380562],[-0.06035159150340541,0.15295148126678845,-0.1886347492040434]],[[-19.263613925726137,4.7888908629897236,10.046175042723156],[0.08060906862223695,-0.20429082551388306,0.25195145752319054],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.19222970577835213,0.03847449983890951,0.11511010796715909],[1.23456e-61,1.23456e-61,1.23456e-61],[0.2411758371781202,-0.6112216865079658,0.7538184565953469]]],"normal":[-0.2411758371781202,0.6112216865079658,-0.7538184565953469]},{"op":"state"}]}}, +{"name":"adv_sing_350","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.8466277017085602,0.0,0,0,0.0,0.0,0,0,-0.6043469307471176,-0.029242225066591132,-0.2595202331583022,-12.302671149252419,0.0,7.771146525257743,0.015581594264985534,-0.00021174645689831686,0.03261389814389778,33.66082853076742,0.0,11.660370024182892,-0.0,0.0003235036923791225,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.11731662937467677,-0.001269015733380149,-0.24555591269688773,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.6043469307471176,-0.029242225066591132,-0.2595202331583022,-0.0989625111736724,0.0,0.04728026345543657,0.0,79.1921107672848,0.0,0.048924400706964896,0.0,0.10240386152229687,-0.0,59.03321646391093,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.02697342843410019,44.005906784912675,-0.05645819244044322,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.6043469307471176,-0.029242225066591132,-0.2595202331583022,0,-1,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.8466277017085602,0.0,0,0,0.0,0.0,0,0,-0.6043469307471176,-0.029242225066591132,-0.2595202331583022,-12.302671149252419,0.0,7.771146525257743,0.015581594264985534,-0.00021174645689831686,0.03261389814389778,33.66082853076742,0.0,11.660370024182892,-0.0,0.0003235036923791225,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.11731662937467677,-0.001269015733380149,-0.24555591269688773,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.6043469307471176,-0.029242225066591132,-0.2595202331583022,-0.0989625111736724,0.0,0.04728026345543657,0.0,79.1921107672848,0.0,0.048924400706964896,0.0,0.10240386152229687,-0.0,59.03321646391093,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.02697342843410019,44.005906784912675,-0.05645819244044322,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.6043469307471176,-0.029242225066591132,-0.2595202331583022,0.43108716303376426,0.0,0.9023102891286905,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.6043469307471176,-0.029242225066591132,-0.2595202331583022],[-0.0989625111736724,0.0,0.04728026345543657],[0.0,79.1921107672848,0.0]],[[0.048924400706964896,0.0,0.10240386152229687],[-0.0,59.03321646391093,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.02697342843410019,44.005906784912675,-0.05645819244044322],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_351","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,2.0,0.2472416304709255,0,0,-0.141498751991048,0.08957579120290915,-0.7076300029037466,0.18843627762671594,0.0,0.9199358595164022,0.017803205872255985,8817.902163499944,-0.049499958254829064,-0.17098585844547737,-0.0,-1.3046137199489958,-0.7266831807153874,-12323.808824904447,-0.2613596198117949,1.23456e-61,1.23456e-61,1.23456e-61,-0.32116987896128796,17312.531220674937,0.8929793721066323,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.141498751991048,0.08957579120290915,-0.7076300029037466,-0.05157677996995859,-0.0,-0.05208250966953567,-0.26082913096327,-4.217633084940925e-12,0.7252082117662524,-0.05142516856188949,0.0,0.03079020560236026,0.0,-1.8793403613212625e-12,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.25043419442964904,-2.995294630041189e-12,-0.69630617422493,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.141498751991048,0.08957579120290915,-0.7076300029037466,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,2.0,0.2472416304709255,0,0,-0.141498751991048,0.08957579120290915,-0.7076300029037466,0.18843627762671594,0.0,0.9199358595164022,0.017803205872255985,8817.902163499944,-0.049499958254829064,-0.17098585844547737,-0.0,-1.3046137199489958,-0.7266831807153874,-12323.808824904447,-0.2613596198117949,1.23456e-61,1.23456e-61,1.23456e-61,-0.32116987896128796,17312.531220674937,0.8929793721066323,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.141498751991048,0.08957579120290915,-0.7076300029037466,-0.05157677996995859,-0.0,-0.05208250966953567,-0.26082913096327,-4.217633084940925e-12,0.7252082117662524,-0.05142516856188949,0.0,0.03079020560236026,0.0,-1.8793403613212625e-12,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.25043419442964904,-2.995294630041189e-12,-0.69630617422493,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.141498751991048,0.08957579120290915,-0.7076300029037466,-1.2794261035780912,0.0,0.6025519442197356,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,0.0,0,0,2.0,0.2472416304709255,0,0,-0.141498751991048,0.08957579120290915,-0.7076300029037466,0.18843627762671594,0.0,0.9199358595164022,0.017803205872255985,8817.902163499944,-0.049499958254829064,-0.17098585844547737,-0.0,-1.3046137199489958,-0.7266831807153874,-12323.808824904447,-0.2613596198117949,1.23456e-61,1.23456e-61,1.23456e-61,-0.32116987896128796,17312.531220674937,0.8929793721066323,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.141498751991048,0.08957579120290915,-0.7076300029037466,-0.05157677996995859,-0.0,-0.05208250966953567,-0.26082913096327,-4.217633084940925e-12,0.7252082117662524,-0.05142516856188949,0.0,0.03079020560236026,0.0,-1.8793403613212625e-12,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.25043419442964904,-2.995294630041189e-12,-0.69630617422493,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.141498751991048,0.08957579120290915,-0.7076300029037466,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.141498751991048,0.08957579120290915,-0.7076300029037466],[-0.05157677996995859,-0.0,-0.05208250966953567],[-0.26082913096327,-4.217633084940925e-12,0.7252082117662524]],[[-0.05142516856188949,0.0,0.03079020560236026],[0.0,-1.8793403613212625e-12,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.25043419442964904,-2.995294630041189e-12,-0.69630617422493],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_353","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,1.3458686629448857,0.0,0,0,-0.00041196953922901527,-0.0005745028979434133,0.0007633999577166282,0.3875629872612072,-0.12293985102918448,0.0,0.055161484847826917,0.17389438550981,1653.1927606590875,-0.07861734482043484,-0.24783805051072574,0.0,0.11010475556201077,-0.03492661242513154,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,676.0438618757221,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00041196953922901527,-0.0005745028979434133,0.0007633999577166282,0.1918395448780706,0.7551957099369443,-0.0,-0.16342022357454014,-0.5151757505579537,5705.346028606203,-0.11014844676971916,0.01543463200331988,0.0,0.3873089258663228,-0.12285925956130443,-383.5686668625718,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-104.28191566217323,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-0.00041196953922901527,-0.0005745028979434133,0.0007633999577166282,-0.9652843055384012,-0.21390145402644734,0.14990789654523953,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,1.3458686629448857,0.0,0,0,-0.00041196953922901527,-0.0005745028979434133,0.0007633999577166282,0.3875629872612072,-0.12293985102918448,0.0,0.055161484847826917,0.17389438550981,1653.1927606590875,-0.07861734482043484,-0.24783805051072574,0.0,0.11010475556201077,-0.03492661242513154,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,676.0438618757221,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.00041196953922901527,-0.0005745028979434133,0.0007633999577166282,0.1918395448780706,0.7551957099369443,-0.0,-0.16342022357454014,-0.5151757505579537,5705.346028606203,-0.11014844676971916,0.01543463200331988,0.0,0.3873089258663228,-0.12285925956130443,-383.5686668625718,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-104.28191566217323,1.23456e-61,1.23456e-61,1.23456e-61,0,0,-1,-0.00041196953922901527,-0.0005745028979434133,0.0007633999577166282,0.004347946865449795,-0.5978024629607904,-0.8016316552108381,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.00041196953922901527,-0.0005745028979434133,0.0007633999577166282],[0.1918395448780706,0.7551957099369443,-0.0],[-0.16342022357454014,-0.5151757505579537,5705.346028606203]],[[-0.11014844676971916,0.01543463200331988,0.0],[0.3873089258663228,-0.12285925956130443,-383.5686668625718],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,-104.28191566217323],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,-1]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_354","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.9729007138469823,2.0,0,0,2.0,2.0,0,0,0.8018052272184413,-1.9863497539110555,1.1098207755017322,-3.538044469915217,-0.0,0.40451782918599055,-0.5528977692402851,-0.0,0.2528138093962479,1.394711478883163,0.0,-2.5978511041963817,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.7727367464404963,0.0,-0.3533357003710085,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.8018052272184413,-1.9863497539110555,1.1098207755017322,30.092342608737194,0.0,-17.388038045127452,0.0,791.1878859556944,0.0,29.83535195630847,0.0,45.75589376584252,-0.23008601807184562,-1129.6783511257422,-0.5031926318784048,1.23456e-61,1.23456e-61,1.23456e-61,-0.267568628954683,-658.0341643169545,0.12234638684455713,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.8018052272184413,-1.9863497539110555,1.1098207755017322,-0.7906741475323079,-0.48969746843142986,-0.3674653478029006,0,0,0,0,0,0,0],[1,1,1,1,1,1.9729007138469823,2.0,0,0,2.0,2.0,0,0,0.8018052272184413,-1.9863497539110555,1.1098207755017322,-3.538044469915217,-0.0,0.40451782918599055,-0.5528977692402851,-0.0,0.2528138093962479,1.394711478883163,0.0,-2.5978511041963817,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.7727367464404963,0.0,-0.3533357003710085,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.8018052272184413,-1.9863497539110555,1.1098207755017322,30.092342608737194,0.0,-17.388038045127452,0.0,791.1878859556944,0.0,29.83535195630847,0.0,45.75589376584252,-0.23008601807184562,-1129.6783511257422,-0.5031926318784048,1.23456e-61,1.23456e-61,1.23456e-61,-0.267568628954683,-658.0341643169545,0.12234638684455713,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.8018052272184413,-1.9863497539110555,1.1098207755017322,0.909436816401992,0.0,-0.4158421298673445,0,0,0,0,0,0,0],[1,1,1,1,1,1.9729007138469823,2.0,0,0,2.0,2.0,0,0,0.8018052272184413,-1.9863497539110555,1.1098207755017322,-3.538044469915217,-0.0,0.40451782918599055,-0.5528977692402851,-0.0,0.2528138093962479,1.394711478883163,0.0,-2.5978511041963817,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.7727367464404963,0.0,-0.3533357003710085,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,0.8018052272184413,-1.9863497539110555,1.1098207755017322,30.092342608737194,0.0,-17.388038045127452,0.0,791.1878859556944,0.0,29.83535195630847,0.0,45.75589376584252,-0.23008601807184562,-1129.6783511257422,-0.5031926318784048,1.23456e-61,1.23456e-61,1.23456e-61,-0.267568628954683,-658.0341643169545,0.12234638684455713,1.23456e-61,1.23456e-61,1.23456e-61,0,1,0,0.8018052272184413,-1.9863497539110555,1.1098207755017322,0.4158421298673445,0.0,0.909436816401992,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.8018052272184413,-1.9863497539110555,1.1098207755017322],[30.092342608737194,0.0,-17.388038045127452],[0.0,791.1878859556944,0.0]],[[29.83535195630847,0.0,45.75589376584252],[-0.23008601807184562,-1129.6783511257422,-0.5031926318784048],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.267568628954683,-658.0341643169545,0.12234638684455713],[1.23456e-61,1.23456e-61,1.23456e-61],[0,1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_355","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.076826741655563,2.0,0,0,2.0,1.6854721195494196,0,0,0.474320632513366,-0.19749345416374764,-0.04905827452119382,33.1297289104983,2.3569679525997085,4.744546236082739,-0.5236370286834261,0.33878091575778496,3.488101121352135,-6.26838919733137,-13.635200740244946,0.38329883592401526,2.115919068441858,-1.3689501704614282,-14.09476272882994,1.23456e-61,1.23456e-61,1.23456e-61,-8.250774085730725,5.8490178976596345,56.968396579094566,1.23456e-61,1.23456e-61,1.23456e-61,0.1477773415272417,-0.09560848516905981,-0.9843885792179928,0.474320632513366,-0.19749345416374764,-0.04905827452119382,-70.42017822211189,67.16593888162102,-17.09501791694508,360.22595202441073,-233.0577694503148,-2399.5716085161143,-35.58983819410202,-37.74106874981532,-1.677188558190582,-328.0166229021269,212.2190865110527,2185.0157408535147,1.23456e-61,1.23456e-61,1.23456e-61,298.6340798508263,-193.30280211992488,-1989.6574244247872,1.23456e-61,1.23456e-61,1.23456e-61,0.1477773415272417,-0.09560848516905981,-0.9843885792179928,0.474320632513366,-0.19749345416374764,-0.04905827452119382,-0.6857096968798263,-0.7271574731869758,-0.032314405352867455,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.474320632513366,-0.19749345416374764,-0.04905827452119382],[-70.42017822211189,67.16593888162102,-17.09501791694508],[360.22595202441073,-233.0577694503148,-2399.5716085161143]],[[-35.58983819410202,-37.74106874981532,-1.677188558190582],[-328.0166229021269,212.2190865110527,2185.0157408535147],[1.23456e-61,1.23456e-61,1.23456e-61]],[[298.6340798508263,-193.30280211992488,-1989.6574244247872],[1.23456e-61,1.23456e-61,1.23456e-61],[0.1477773415272417,-0.09560848516905981,-0.9843885792179928]]],"normal":[0.1477773415272417,-0.09560848516905981,-0.9843885792179928]},{"op":"state"}]}}, +{"name":"adv_sing_356","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,1.5770742113552503,0,0,2.0,2.0,0,0,-0.000499839733481737,0.0003454049442230425,-0.00041364891253976556,-0.05429755203250278,0.0,0.37473013612331746,-0.2755526144242513,-5.802289239560977e-05,-0.33703595840959216,-0.2867260442082349,0.0,0.31759658564531795,0.15563642283264972,-1.0247140284248475e-05,-0.12724465191650694,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-1.949919114788792e-06,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.000499839733481737,0.0003454049442230425,-0.00041364891253976556,-0.8865004540822964,0.0,0.7247817679851174,0.0,0.0,0.0,0.49522912952368753,0.0,0.6057283276012873,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.37274766412364835,0.0,0.45591788880444745,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.000499839733481737,0.0003454049442230425,-0.00041364891253976556,0.6329569456919056,0.0,0.774186996080646,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.000499839733481737,0.0003454049442230425,-0.00041364891253976556],[-0.8865004540822964,0.0,0.7247817679851174],[0.0,0.0,0.0]],[[0.49522912952368753,0.0,0.6057283276012873],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.37274766412364835,0.0,0.45591788880444745],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,1,0]},{"op":"state"}]}}, +{"name":"adv_sing_357","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,0.3434797087717223,0.0,0,0,-1.2218845107537386,1.4084601676012545,-0.23922271359321146,0.0007821482728072606,0.0015092594665558376,-0.008063893796697974,0.0,0.0,0.0,0.006142127924010853,-0.005143718189963249,-0.0008605178870319248,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.6453634111756923,0.737079220036893,0.20054997109319128,-1.2218845107537386,1.4084601676012545,-0.23922271359321146,0.3523480754701509,-0.17055996811967283,-0.5069875955663651,0.33492952984046764,-0.3925168179350379,0.3648204272221398,0.23311154448521898,-0.27319239873785756,0.2539156618707768,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.6453634111756923,0.737079220036893,0.20054997109319128,-1.2218845107537386,1.4084601676012545,-0.23922271359321146,0.5300067343704548,-0.62113530854781,0.577307361807541,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.3434797087717223,0.0,0,0,-1.2218845107537386,1.4084601676012545,-0.23922271359321146,0.0007821482728072606,0.0015092594665558376,-0.008063893796697974,0.0,0.0,0.0,0.006142127924010853,-0.005143718189963249,-0.0008605178870319248,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.6453634111756923,0.737079220036893,0.20054997109319128,-1.2218845107537386,1.4084601676012545,-0.23922271359321146,0.3523480754701509,-0.17055996811967283,-0.5069875955663651,0.33492952984046764,-0.3925168179350379,0.3648204272221398,0.23311154448521898,-0.27319239873785756,0.2539156618707768,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.6453634111756923,0.737079220036893,0.20054997109319128,-1.2218845107537386,1.4084601676012545,-0.23922271359321146,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-1.2218845107537386,1.4084601676012545,-0.23922271359321146],[0.3523480754701509,-0.17055996811967283,-0.5069875955663651],[0.33492952984046764,-0.3925168179350379,0.3648204272221398]],[[0.23311154448521898,-0.27319239873785756,0.2539156618707768],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6453634111756923,0.737079220036893,0.20054997109319128]]],"normal":[0.6453634111756923,0.737079220036893,0.20054997109319128]},{"op":"state"}]}}, +{"name":"adv_sing_358","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,1.7632226454755269,0,0,0.0,0.0,0,0,0.39715653785760274,0.4497214152510274,0.8679580957825297,0.01864937259358692,0.03280136593594391,0.03602707962653834,0.04793138780139184,-0.18419641166985265,-0.33013407231521563,0.02674128738464412,0.02852110295757432,0.023974040097509697,-0.001976951469830549,0.0042327010772577845,-0.002830356316118791,1.23456e-61,1.23456e-61,1.23456e-61,-0.02930377242621069,0.10837407838380397,0.18111766275617397,1.23456e-61,1.23456e-61,1.23456e-61,0.36193692893999607,-0.774915749021905,0.5181768437389925,0.39715653785760274,0.4497214152510274,0.8679580957825297,5.036639102047008,2.069365962945617,-0.42333310769874605,-0.013225003340481906,0.049098915914956145,0.08266316956118688,1.0079253103886188,-3.7420058648940633,-6.300058963511028,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.36193692893999607,-0.774915749021905,0.5181768437389925,0.39715653785760274,0.4497214152510274,0.8679580957825297,0.36193692893999607,-0.774915749021905,0.5181768437389925,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.7632226454755269,0,0,0.0,0.0,0,0,0.39715653785760274,0.4497214152510274,0.8679580957825297,0.01864937259358692,0.03280136593594391,0.03602707962653834,0.04793138780139184,-0.18419641166985265,-0.33013407231521563,0.02674128738464412,0.02852110295757432,0.023974040097509697,-0.001976951469830549,0.0042327010772577845,-0.002830356316118791,1.23456e-61,1.23456e-61,1.23456e-61,-0.02930377242621069,0.10837407838380397,0.18111766275617397,1.23456e-61,1.23456e-61,1.23456e-61,0.36193692893999607,-0.774915749021905,0.5181768437389925,0.39715653785760274,0.4497214152510274,0.8679580957825297,5.036639102047008,2.069365962945617,-0.42333310769874605,-0.013225003340481906,0.049098915914956145,0.08266316956118688,1.0079253103886188,-3.7420058648940633,-6.300058963511028,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.36193692893999607,-0.774915749021905,0.5181768437389925,0.39715653785760274,0.4497214152510274,0.8679580957825297,-0.13626926512807527,0.5059108884937668,0.8517539904719565,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.39715653785760274,0.4497214152510274,0.8679580957825297],[5.036639102047008,2.069365962945617,-0.42333310769874605],[-0.013225003340481906,0.049098915914956145,0.08266316956118688]],[[1.0079253103886188,-3.7420058648940633,-6.300058963511028],[0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0.36193692893999607,-0.774915749021905,0.5181768437389925]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_359","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,0.09654094071997421,0.2493172288547476,0,0,-42.65069874300909,-467.4183292306415,644.8884507436945,-0.038875301499155135,0.07159082882719837,-0.08318961452030009,0.007467274616760583,-0.1319104502556783,0.311523888625491,0.0001315786159638628,0.03863355417952387,-0.08356864858177503,0.005928734382379313,0.006979789808142449,0.003236072222878904,1.23456e-61,1.23456e-61,1.23456e-61,0.005174110447198439,0.006091384945983314,0.0028241769687052183,1.23456e-61,1.23456e-61,1.23456e-61,0.6104008942514046,0.7186137320031504,0.33317420739545567,-42.65069874300909,-467.4183292306415,644.8884507436945,-0.06908723705224047,0.048411731676412335,0.0221553047669237,0.0,0.0,0.0,0.00013917554862297694,0.024399615527248196,-0.05288179955629888,-0.7253635139477338,0.5082864115486937,0.23261387202627445,1.23456e-61,1.23456e-61,1.23456e-61,-0.0019453983633507766,-0.34105827196473765,0.7391827610937365,1.23456e-61,1.23456e-61,1.23456e-61,0.6104008942514046,0.7186137320031504,0.33317420739545567,-42.65069874300909,-467.4183292306415,644.8884507436945,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-42.65069874300909,-467.4183292306415,644.8884507436945],[-0.06908723705224047,0.048411731676412335,0.0221553047669237],[0.0,0.0,0.0]],[[0.00013917554862297694,0.024399615527248196,-0.05288179955629888],[-0.7253635139477338,0.5082864115486937,0.23261387202627445],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0019453983633507766,-0.34105827196473765,0.7391827610937365],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6104008942514046,0.7186137320031504,0.33317420739545567]]],"normal":[0.6104008942514046,0.7186137320031504,0.33317420739545567]},{"op":"state"}]}}, +{"name":"adv_sing_360","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,2.0,0.0,0,0,170.49593683401577,570.6036086584434,124.9667168984785,1.1389553168949762,-0.6911395293031837,-0.6927787083542738,1.4501809017138826e-12,1.4497009662806093e-12,9.378833344121184e-13,-0.7836727129775723,1.2774381217377464,-0.7628199069567269,-8.019930124074567e-13,-8.017275938907481e-13,-5.186772765818202e-13,1.23456e-61,1.23456e-61,1.23456e-61,-0.3975871283289793,0.08303240315915483,0.4864156216933481,1.23456e-61,1.23456e-61,1.23456e-61,0.6431426882362602,0.6429298410222537,0.4159431476672458,170.49593683401577,570.6036086584434,124.9667168984785,0.011735095666497618,-0.020172299946178744,0.013035513757583455,-4.472797253116384,-4.4713169868371345,-2.892716347970368,-0.010008316685931454,0.002090144591655756,0.012244364155645084,0.44232504927702637,0.44217866239252007,0.286067270379617,1.23456e-61,1.23456e-61,1.23456e-61,0.3394356418051431,-0.12375127372297857,-0.49707726614874703,1.23456e-61,1.23456e-61,1.23456e-61,0.6431426882362602,0.6429298410222537,0.4159431476672458,170.49593683401577,570.6036086584434,124.9667168984785,-0.6274103118217501,0.13102885441731354,0.7675856564122473,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[170.49593683401577,570.6036086584434,124.9667168984785],[0.011735095666497618,-0.020172299946178744,0.013035513757583455],[-4.472797253116384,-4.4713169868371345,-2.892716347970368]],[[-0.010008316685931454,0.002090144591655756,0.012244364155645084],[0.44232504927702637,0.44217866239252007,0.286067270379617],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.3394356418051431,-0.12375127372297857,-0.49707726614874703],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6431426882362602,0.6429298410222537,0.4159431476672458]]],"normal":[-0.6431426882362602,-0.6429298410222537,-0.4159431476672458]},{"op":"state"}]}}, +{"name":"adv_sing_361","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.006896493209002763,2.0,0,0,0.0,0.0,0,0,-0.028358347216904445,-0.649600765096745,1.6033820490990096,-0.4498411552736497,0.5284470643176373,0.11069976028321132,0.011766071704581096,0.008095792382166662,0.009165923831672298,-0.6505481367706367,-0.4498983048641771,-0.4958988783591175,-0.16530475593104352,0.19445348533552984,0.04044051805327202,1.23456e-61,1.23456e-61,1.23456e-61,-0.21866973406415563,-0.1513490261317619,-0.16609518576281046,1.23456e-61,1.23456e-61,1.23456e-61,0.32352279062405503,0.44978818347267097,-0.8324803865288231,-0.028358347216904445,-0.649600765096745,1.6033820490990096,-0.0903341926026559,0.03782687435540023,-0.014668320328523297,4.793341003581382e-10,6.66409973345981e-10,-1.2334099751454072e-09,0.0019012089956275263,0.04517276314156067,0.025145648899902343,0.32677768543706776,-0.38387930005669624,-0.0804155237521481,1.23456e-61,1.23456e-61,1.23456e-61,0.09710195005749928,0.0671526066147534,0.07401872908652356,1.23456e-61,1.23456e-61,1.23456e-61,0.32352279062405503,0.44978818347267097,-0.8324803865288231,-0.028358347216904445,-0.649600765096745,1.6033820490990096,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.028358347216904445,-0.649600765096745,1.6033820490990096],[-0.0903341926026559,0.03782687435540023,-0.014668320328523297],[4.793341003581382e-10,6.66409973345981e-10,-1.2334099751454072e-09]],[[0.0019012089956275263,0.04517276314156067,0.025145648899902343],[0.32677768543706776,-0.38387930005669624,-0.0804155237521481],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.09710195005749928,0.0671526066147534,0.07401872908652356],[1.23456e-61,1.23456e-61,1.23456e-61],[0.32352279062405503,0.44978818347267097,-0.8324803865288231]]],"normal":[-0.32352279062405503,-0.44978818347267097,0.8324803865288231]},{"op":"state"}]}}, +{"name":"adv_sing_362","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,1.21209982349481,1.2854630617960767,0,0,1.4664905187814914,0.4667488833226128,1.9007434459816066,-1.3508838181769711,-0.3161875954217038,-0.463187292326275,22506.88438305784,-27798.021974584117,-46665.34799880401,-0.019956554998836876,0.7800962198475797,-0.47431733205219645,4966.983386991402,-6134.648552258383,-10298.464114133303,1.23456e-61,1.23456e-61,1.23456e-61,-2388.5398173572853,2950.0506023310636,4952.360351889999,1.23456e-61,1.23456e-61,1.23456e-61,-0.38279752548513,0.47278762632380616,0.7936862824048065,1.4664905187814914,0.4667488833226128,1.9007434459816066,0.005547568891655277,0.008433173412810522,-0.0023479105502359487,0.9979638180153209,-1.232570519045413,-2.069162259320444,0.00824955918477602,-0.0054372026284387155,0.0072176539947993385,-0.832233490379322,1.0278794147505543,1.7255396419682425,1.23456e-61,1.23456e-61,1.23456e-61,0.01453187197750263,-0.6260812159661202,0.38500245250074694,1.23456e-61,1.23456e-61,1.23456e-61,0.38279752548513,-0.47278762632380616,-0.7936862824048065,1.4664905187814914,0.4667488833226128,1.9007434459816066,0.6949959225574108,0.6520346656740573,0.30303706437974504,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.4664905187814914,0.4667488833226128,1.9007434459816066],[0.005547568891655277,0.008433173412810522,-0.0023479105502359487],[0.9979638180153209,-1.232570519045413,-2.069162259320444]],[[0.00824955918477602,-0.0054372026284387155,0.0072176539947993385],[-0.832233490379322,1.0278794147505543,1.7255396419682425],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.01453187197750263,-0.6260812159661202,0.38500245250074694],[1.23456e-61,1.23456e-61,1.23456e-61],[0.38279752548513,-0.47278762632380616,-0.7936862824048065]]],"normal":[0.38279752548513,-0.47278762632380616,-0.7936862824048065]},{"op":"state"}]}}, +{"name":"adv_sing_363","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.6955079449334343,2.0,0,0,2.0,0.230991319622881,0,0,0.734745675529564,-0.9704077511687956,-0.3998405804388092,0.2544118518525404,-0.38838620733723217,-0.1395973123553729,-0.01760159175143269,0.01715188947168068,-0.07979817566436913,-0.3691230269089986,-0.5133247951327387,-0.02891466257561099,0.02072070888778859,-0.020191316423941803,0.09393893410710558,1.23456e-61,1.23456e-61,1.23456e-61,0.23079894665681736,-0.4462817112050758,-0.2679079266971902,1.23456e-61,1.23456e-61,1.23456e-61,-0.21080503183918037,0.20541918351705019,-0.9557008933732722,0.734745675529564,-0.9704077511687956,-0.3998405804388092,0.0055825585205537525,-0.012256372848005258,-0.003865775951037243,2.6670115326204004e-05,-2.5988721743577212e-05,0.00012091102769817295,0.0007489080894301954,0.012628053624892215,0.0025490934331966,-1.7813438803798548e-05,1.7358324053188616e-05,-8.075860063828056e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.05801675296411839,-0.10684885807753046,-0.035675513195575236,1.23456e-61,1.23456e-61,1.23456e-61,0.21080503183918037,-0.20541918351705019,0.9557008933732722,0.734745675529564,-0.9704077511687956,-0.3998405804388092,0.39842133711011224,-0.43715111782813504,-0.8063245862039693,0,0,0,0,0,0,0],[1,1,1,1,1,1.6955079449334343,2.0,0,0,2.0,0.230991319622881,0,0,0.734745675529564,-0.9704077511687956,-0.3998405804388092,0.2544118518525404,-0.38838620733723217,-0.1395973123553729,-0.01760159175143269,0.01715188947168068,-0.07979817566436913,-0.3691230269089986,-0.5133247951327387,-0.02891466257561099,0.02072070888778859,-0.020191316423941803,0.09393893410710558,1.23456e-61,1.23456e-61,1.23456e-61,0.23079894665681736,-0.4462817112050758,-0.2679079266971902,1.23456e-61,1.23456e-61,1.23456e-61,-0.21080503183918037,0.20541918351705019,-0.9557008933732722,0.734745675529564,-0.9704077511687956,-0.3998405804388092,0.0055825585205537525,-0.012256372848005258,-0.003865775951037243,2.6670115326204004e-05,-2.5988721743577212e-05,0.00012091102769817295,0.0007489080894301954,0.012628053624892215,0.0025490934331966,-1.7813438803798548e-05,1.7358324053188616e-05,-8.075860063828056e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.05801675296411839,-0.10684885807753046,-0.035675513195575236,1.23456e-61,1.23456e-61,1.23456e-61,0.21080503183918037,-0.20541918351705019,0.9557008933732722,0.734745675529564,-0.9704077511687956,-0.3998405804388092,0.45773171197146467,-0.8431208574444373,-0.2821859308998747,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.734745675529564,-0.9704077511687956,-0.3998405804388092],[0.0055825585205537525,-0.012256372848005258,-0.003865775951037243],[2.6670115326204004e-05,-2.5988721743577212e-05,0.00012091102769817295]],[[0.0007489080894301954,0.012628053624892215,0.0025490934331966],[-1.7813438803798548e-05,1.7358324053188616e-05,-8.075860063828056e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.05801675296411839,-0.10684885807753046,-0.035675513195575236],[1.23456e-61,1.23456e-61,1.23456e-61],[0.21080503183918037,-0.20541918351705019,0.9557008933732722]]],"normal":[-0.21080503183918037,0.20541918351705019,-0.9557008933732722]},{"op":"state"}]}}, +{"name":"adv_sing_364","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.0,2.0,0,0,1.2409405227898869,0.3849705593824426,0,0,0.3304575549205704,0.054077073585104385,0.8432089481177625,0.09469253387106356,0.026145563739722415,0.02269875666792478,-0.00012408609748173376,0.0003451486197533267,0.00012009123632446817,0.012826583022615683,0.02416743677543756,-0.05620524045967357,-0.49338221767462814,-0.2898032225287741,0.31925977543247364,1.23456e-61,1.23456e-61,1.23456e-61,0.0002779172070738418,-0.0007730337432955083,-0.0002689698658486215,1.23456e-61,1.23456e-61,1.23456e-61,-0.3215196256351043,0.8943149737455345,0.311168536433211,0.3304575549205704,0.054077073585104385,0.8432089481177625,0.6456641121372602,0.8243560026443433,-1.702100859272246,0.3253169330614119,-0.9281328822598593,-0.3358507957889642,3.908004152265349,1.6688330483033202,-0.7583104463806312,0.7172307952522012,-1.9949956042603338,-0.6941400743503734,1.23456e-61,1.23456e-61,1.23456e-61,0.8786418525439826,-2.44396454411586,-0.8503546207016521,1.23456e-61,1.23456e-61,1.23456e-61,-0.3215196256351043,0.8943149737455345,0.311168536433211,0.3304575549205704,0.054077073585104385,0.8432089481177625,-0.7535699794123584,-0.44064929599902725,0.4878119351389629,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,1.2409405227898869,0.3849705593824426,0,0,0.3304575549205704,0.054077073585104385,0.8432089481177625,0.09469253387106356,0.026145563739722415,0.02269875666792478,-0.00012408609748173376,0.0003451486197533267,0.00012009123632446817,0.012826583022615683,0.02416743677543756,-0.05620524045967357,-0.49338221767462814,-0.2898032225287741,0.31925977543247364,1.23456e-61,1.23456e-61,1.23456e-61,0.0002779172070738418,-0.0007730337432955083,-0.0002689698658486215,1.23456e-61,1.23456e-61,1.23456e-61,-0.3215196256351043,0.8943149737455345,0.311168536433211,0.3304575549205704,0.054077073585104385,0.8432089481177625,0.6456641121372602,0.8243560026443433,-1.702100859272246,0.3253169330614119,-0.9281328822598593,-0.3358507957889642,3.908004152265349,1.6688330483033202,-0.7583104463806312,0.7172307952522012,-1.9949956042603338,-0.6941400743503734,1.23456e-61,1.23456e-61,1.23456e-61,0.8786418525439826,-2.44396454411586,-0.8503546207016521,1.23456e-61,1.23456e-61,1.23456e-61,-0.3215196256351043,0.8943149737455345,0.311168536433211,0.3304575549205704,0.054077073585104385,0.8432089481177625,0.7535699794123584,0.44064929599902725,-0.4878119351389629,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.3304575549205704,0.054077073585104385,0.8432089481177625],[0.6456641121372602,0.8243560026443433,-1.702100859272246],[0.3253169330614119,-0.9281328822598593,-0.3358507957889642]],[[3.908004152265349,1.6688330483033202,-0.7583104463806312],[0.7172307952522012,-1.9949956042603338,-0.6941400743503734],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.8786418525439826,-2.44396454411586,-0.8503546207016521],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.3215196256351043,0.8943149737455345,0.311168536433211]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_365","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,2.0,1.0826517352816736,0,0,-629.7726986650547,175.3074470140461,127.8428136698635,-0.20980497261512876,0.2960257371053869,1.226735518014251,-3.3992124052900423,1.3205264171391737,-0.9000159002429867,-0.39247751348230747,-0.9068852830228198,0.15171782969969094,-0.7410784542182456,0.2342150944667043,-0.5170809978531827,1.23456e-61,1.23456e-61,1.23456e-61,-0.18526803533575437,0.07197294718376458,-0.049053768263925476,1.23456e-61,1.23456e-61,1.23456e-61,-0.9049788754768842,0.35156629522777916,-0.2396129691824056,-629.7726986650547,175.3074470140461,127.8428136698635,-9.497339162698186,13.400334563733109,55.53120658813915,0.38001679342516304,0.8781788975704423,-0.14692176094940218,-38.90838497338677,-89.90436523477752,15.040596015059124,-0.010518162611389974,0.005674615167535377,0.006710369349140973,1.23456e-61,1.23456e-61,1.23456e-61,0.01787252339694391,-0.006943119897383583,0.004732141836644597,1.23456e-61,1.23456e-61,1.23456e-61,0.9049788754768842,-0.35156629522777916,0.2396129691824056,-629.7726986650547,175.3074470140461,127.8428136698635,-0.3925760987746785,-0.9071130809162087,0.15175593926287617,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,2.0,1.0826517352816736,0,0,-629.7726986650547,175.3074470140461,127.8428136698635,-0.20980497261512876,0.2960257371053869,1.226735518014251,-3.3992124052900423,1.3205264171391737,-0.9000159002429867,-0.39247751348230747,-0.9068852830228198,0.15171782969969094,-0.7410784542182456,0.2342150944667043,-0.5170809978531827,1.23456e-61,1.23456e-61,1.23456e-61,-0.18526803533575437,0.07197294718376458,-0.049053768263925476,1.23456e-61,1.23456e-61,1.23456e-61,-0.9049788754768842,0.35156629522777916,-0.2396129691824056,-629.7726986650547,175.3074470140461,127.8428136698635,-9.497339162698186,13.400334563733109,55.53120658813915,0.38001679342516304,0.8781788975704423,-0.14692176094940218,-38.90838497338677,-89.90436523477752,15.040596015059124,-0.010518162611389974,0.005674615167535377,0.006710369349140973,1.23456e-61,1.23456e-61,1.23456e-61,0.01787252339694391,-0.006943119897383583,0.004732141836644597,1.23456e-61,1.23456e-61,1.23456e-61,0.9049788754768842,-0.35156629522777916,0.2396129691824056,-629.7726986650547,175.3074470140461,127.8428136698635,-0.3925760987746785,-0.9071130809162087,0.15175593926287617,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-629.7726986650547,175.3074470140461,127.8428136698635],[-9.497339162698186,13.400334563733109,55.53120658813915],[0.38001679342516304,0.8781788975704423,-0.14692176094940218]],[[-38.90838497338677,-89.90436523477752,15.040596015059124],[-0.010518162611389974,0.005674615167535377,0.006710369349140973],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.01787252339694391,-0.006943119897383583,0.004732141836644597],[1.23456e-61,1.23456e-61,1.23456e-61],[0.9049788754768842,-0.35156629522777916,0.2396129691824056]]],"normal":[-0.9049788754768842,0.35156629522777916,-0.2396129691824056]},{"op":"state"}]}}, +{"name":"adv_sing_366","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,0.0,0,0,2.0,0.6158520308545257,0,0,0.40952427194227603,0.4895323695008764,0.07623232586075135,-0.005408014781874372,-0.005039686556620445,-0.004480038098490976,-0.0,0.0,-0.0,0.004120135610511963,0.0037610161480597427,-0.015199536185539002,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.4843277039952675,-0.4526613094865664,-0.7142033134728943,1.23456e-61,1.23456e-61,1.23456e-61,-0.6803796123378225,0.732853347084892,-0.003091080960626773,0.40952427194227603,0.4895323695008764,0.07623232586075135,0.012542307165085864,0.013907088995280287,0.5364876082894241,-0.45198391165218244,-0.42243222397865987,-0.6665082433700402,-0.49334935330815916,-0.4590280213829669,-0.2379038707523078,3.9757658172820214e-11,-4.282393583795603e-11,1.806258417927028e-13,1.23456e-61,1.23456e-61,1.23456e-61,-0.4837287008224749,-0.45210147042184845,-0.7133200064613798,1.23456e-61,1.23456e-61,1.23456e-61,-0.6803796123378225,0.732853347084892,-0.003091080960626773,0.40952427194227603,0.4895323695008764,0.07623232586075135,0.538563262588041,0.49713165555787164,-0.6803012047856554,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.40952427194227603,0.4895323695008764,0.07623232586075135],[0.012542307165085864,0.013907088995280287,0.5364876082894241],[-0.45198391165218244,-0.42243222397865987,-0.6665082433700402]],[[-0.49334935330815916,-0.4590280213829669,-0.2379038707523078],[3.9757658172820214e-11,-4.282393583795603e-11,1.806258417927028e-13],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.4837287008224749,-0.45210147042184845,-0.7133200064613798],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6803796123378225,0.732853347084892,-0.003091080960626773]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_367","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,2.0,0.0,0,0,-0.9886951364970937,0.6069560661108473,0.5779318479719449,0.017665962910270328,-0.024164358398663557,0.14477330066448757,-0.3295720455879079,0.3688254342681417,0.32424294790702907,-0.2092756106939307,0.24172064352997702,-0.07158218330581329,0.012831024845913709,-0.015533613548182132,0.030711350647398133,1.23456e-61,1.23456e-61,1.23456e-61,0.3531475694732743,-0.3952089001947137,-0.3474372614581303,1.23456e-61,1.23456e-61,1.23456e-61,0.7532858066203569,0.6574519435324259,0.017816719388092782,-0.9886951364970937,0.6069560661108473,0.5779318479719449,0.0425654834659005,-0.020298827987024093,-1.0506126424041209,0.43429295970193266,1.1651414526983999,0.40787634001062123,-0.3479734733908929,0.34451761015531657,1.9992292313809343,-1.5260833804722467,-1.3319333454395914,-0.036094931185142114,1.23456e-61,1.23456e-61,1.23456e-61,1.9373652340021617,1.690891461424826,0.045822571490264974,1.23456e-61,1.23456e-61,1.23456e-61,-0.7532858066203569,-0.6574519435324259,-0.017816719388092782,-0.9886951364970937,0.6069560661108473,0.5779318479719449,0.7532858066203569,0.6574519435324259,0.017816719388092782,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,2.0,0.0,0,0,-0.9886951364970937,0.6069560661108473,0.5779318479719449,0.017665962910270328,-0.024164358398663557,0.14477330066448757,-0.3295720455879079,0.3688254342681417,0.32424294790702907,-0.2092756106939307,0.24172064352997702,-0.07158218330581329,0.012831024845913709,-0.015533613548182132,0.030711350647398133,1.23456e-61,1.23456e-61,1.23456e-61,0.3531475694732743,-0.3952089001947137,-0.3474372614581303,1.23456e-61,1.23456e-61,1.23456e-61,0.7532858066203569,0.6574519435324259,0.017816719388092782,-0.9886951364970937,0.6069560661108473,0.5779318479719449,0.0425654834659005,-0.020298827987024093,-1.0506126424041209,0.43429295970193266,1.1651414526983999,0.40787634001062123,-0.3479734733908929,0.34451761015531657,1.9992292313809343,-1.5260833804722467,-1.3319333454395914,-0.036094931185142114,1.23456e-61,1.23456e-61,1.23456e-61,1.9373652340021617,1.690891461424826,0.045822571490264974,1.23456e-61,1.23456e-61,1.23456e-61,-0.7532858066203569,-0.6574519435324259,-0.017816719388092782,-0.9886951364970937,0.6069560661108473,0.5779318479719449,-0.557250870478271,0.623621745387465,0.5482402630517945,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.9886951364970937,0.6069560661108473,0.5779318479719449],[0.0425654834659005,-0.020298827987024093,-1.0506126424041209],[0.43429295970193266,1.1651414526983999,0.40787634001062123]],[[-0.3479734733908929,0.34451761015531657,1.9992292313809343],[-1.5260833804722467,-1.3319333454395914,-0.036094931185142114],[1.23456e-61,1.23456e-61,1.23456e-61]],[[1.9373652340021617,1.690891461424826,0.045822571490264974],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.7532858066203569,-0.6574519435324259,-0.017816719388092782]]],"normal":[-0.7532858066203569,-0.6574519435324259,-0.017816719388092782]},{"op":"state"}]}}, +{"name":"adv_sing_368","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,0.39268887489658444,0.9338164467518297,0,0,0.6906321855815585,-1.9531955725221306,1.8364573396393675,10.032029676668785,5.253581607177306,-8.777040361654917,0.0,0.0,0.0,5.560854078750013,7.080537580548295,10.594099071706749,0.6950479911053664,0.36398330745261465,-0.6080987066263022,1.23456e-61,1.23456e-61,1.23456e-61,-0.13183508486304113,-0.16786329214690765,-0.2511617694668718,1.23456e-61,1.23456e-61,1.23456e-61,-0.5913960792592957,0.778574639010743,-0.20993382034828037,0.6906321855815585,-1.9531955725221306,1.8364573396393675,-0.8692681026687845,0.8916586824509469,5.7556451959429324,-1.340686638477176e-05,1.7650178149409614e-05,-4.759170339071594e-06,5.770483284318596,4.500873218586002,0.43644493042803223,-1.4457015315824303e-05,1.903270223703257e-05,-5.131952277880935e-06,1.23456e-61,1.23456e-61,1.23456e-61,0.2736833009684179,0.3484913476041503,0.5214088739241656,1.23456e-61,1.23456e-61,1.23456e-61,-0.5913960792592957,0.778574639010743,-0.20993382034828037,0.6906321855815585,-1.9531955725221306,1.8364573396393675,-0.7001924401712112,-0.3666773567988041,0.6125995941380695,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.6906321855815585,-1.9531955725221306,1.8364573396393675],[-0.8692681026687845,0.8916586824509469,5.7556451959429324],[-1.340686638477176e-05,1.7650178149409614e-05,-4.759170339071594e-06]],[[5.770483284318596,4.500873218586002,0.43644493042803223],[-1.4457015315824303e-05,1.903270223703257e-05,-5.131952277880935e-06],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.2736833009684179,0.3484913476041503,0.5214088739241656],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.5913960792592957,0.778574639010743,-0.20993382034828037]]],"normal":[-0.5913960792592957,0.778574639010743,-0.20993382034828037]},{"op":"state"}]}}, +{"name":"adv_sing_369","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,503.40114981377025,923.2501684176214,289.29420541131833,36.175113025784384,-5.186165106528978,-39.81109357525826,0.015316452775669707,0.022506243535702387,-0.034517692154254945,8.612867448434079,12.18066324652364,-19.070477356811026,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.10458255165961021,0.15367529360161827,-0.23569088585754783,1.23456e-61,1.23456e-61,1.23456e-61,-0.6994200151403859,-0.4156891805406878,-0.5813898413306118,503.40114981377025,923.2501684176214,289.29420541131833,12.884434112002669,12.3730649240773,-24.34679678675241,0.10130617617038432,0.14886093444451245,-0.22830713178764367,-28.38312153808201,70.26029380351953,-16.090271956638187,0.16311032646251766,-0.19648722710991712,-0.05573714963056357,1.23456e-61,1.23456e-61,1.23456e-61,-0.2569944911910579,-0.3776318636432428,0.5791717483282904,1.23456e-61,1.23456e-61,1.23456e-61,-0.6994200151403859,-0.4156891805406878,-0.5813898413306118,503.40114981377025,923.2501684176214,289.29420541131833,-0.34840764902573906,-0.5119558368717619,0.7851836289641367,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,2.0,0,0,0.0,2.0,0,0,503.40114981377025,923.2501684176214,289.29420541131833,36.175113025784384,-5.186165106528978,-39.81109357525826,0.015316452775669707,0.022506243535702387,-0.034517692154254945,8.612867448434079,12.18066324652364,-19.070477356811026,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.10458255165961021,0.15367529360161827,-0.23569088585754783,1.23456e-61,1.23456e-61,1.23456e-61,-0.6994200151403859,-0.4156891805406878,-0.5813898413306118,503.40114981377025,923.2501684176214,289.29420541131833,12.884434112002669,12.3730649240773,-24.34679678675241,0.10130617617038432,0.14886093444451245,-0.22830713178764367,-28.38312153808201,70.26029380351953,-16.090271956638187,0.16311032646251766,-0.19648722710991712,-0.05573714963056357,1.23456e-61,1.23456e-61,1.23456e-61,-0.2569944911910579,-0.3776318636432428,0.5791717483282904,1.23456e-61,1.23456e-61,1.23456e-61,-0.6994200151403859,-0.4156891805406878,-0.5813898413306118,503.40114981377025,923.2501684176214,289.29420541131833,-0.11592912463681455,0.4587667687359562,0.8809616847312439,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[503.40114981377025,923.2501684176214,289.29420541131833],[12.884434112002669,12.3730649240773,-24.34679678675241],[0.10130617617038432,0.14886093444451245,-0.22830713178764367]],[[-28.38312153808201,70.26029380351953,-16.090271956638187],[0.16311032646251766,-0.19648722710991712,-0.05573714963056357],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.2569944911910579,-0.3776318636432428,0.5791717483282904],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6994200151403859,-0.4156891805406878,-0.5813898413306118]]],"normal":[0.6994200151403859,0.4156891805406878,0.5813898413306118]},{"op":"state"}]}}, +{"name":"adv_sing_370","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.02884915037521285,0.0,0,0,2.0,0.005851455333905298,0,0,0.9125468193836188,0.09502312848796546,-0.25931965250113187,-11.76121692691396,-17.796351380297697,21.07447860293409,280.0296701943724,-1778.6907426873126,-1345.7374813851568,15.870549994138027,-2.5642326445437664,6.691648164796146,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,94.54627639443463,-599.8473117054546,-453.77702801144966,1.23456e-61,1.23456e-61,1.23456e-61,0.12457251550937169,-0.7912589404401048,-0.5986576463666609,0.9125468193836188,0.09502312848796546,-0.25931965250113187,-0.05100526594406108,-0.07717803698602616,0.09139440182548565,0.5047749950972309,-0.289790846959456,0.03699016673311087,0.11521949857426622,-0.0186162168066781,0.04858107289715868,0.23519098861391036,0.46407838903645093,-0.379966986541457,1.23456e-61,1.23456e-61,1.23456e-61,-0.015745873484542056,-0.14574108144374173,-0.13185854710948666,1.23456e-61,1.23456e-61,1.23456e-61,0.12457251550937169,-0.7912589404401048,-0.5986576463666609,0.9125468193836188,0.09502312848796546,-0.25931965250113187,0.12457251550937169,-0.7912589404401048,-0.5986576463666609,0,0,0,0,0,0,0],[1,1,1,1,1,0.02884915037521285,0.0,0,0,2.0,0.005851455333905298,0,0,0.9125468193836188,0.09502312848796546,-0.25931965250113187,-11.76121692691396,-17.796351380297697,21.07447860293409,280.0296701943724,-1778.6907426873126,-1345.7374813851568,15.870549994138027,-2.5642326445437664,6.691648164796146,0.0,-0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,94.54627639443463,-599.8473117054546,-453.77702801144966,1.23456e-61,1.23456e-61,1.23456e-61,0.12457251550937169,-0.7912589404401048,-0.5986576463666609,0.9125468193836188,0.09502312848796546,-0.25931965250113187,-0.05100526594406108,-0.07717803698602616,0.09139440182548565,0.5047749950972309,-0.289790846959456,0.03699016673311087,0.11521949857426622,-0.0186162168066781,0.04858107289715868,0.23519098861391036,0.46407838903645093,-0.379966986541457,1.23456e-61,1.23456e-61,1.23456e-61,-0.015745873484542056,-0.14574108144374173,-0.13185854710948666,1.23456e-61,1.23456e-61,1.23456e-61,0.12457251550937169,-0.7912589404401048,-0.5986576463666609,0.9125468193836188,0.09502312848796546,-0.25931965250113187,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.9125468193836188,0.09502312848796546,-0.25931965250113187],[-0.05100526594406108,-0.07717803698602616,0.09139440182548565],[0.5047749950972309,-0.289790846959456,0.03699016673311087]],[[0.11521949857426622,-0.0186162168066781,0.04858107289715868],[0.23519098861391036,0.46407838903645093,-0.379966986541457],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.015745873484542056,-0.14574108144374173,-0.13185854710948666],[1.23456e-61,1.23456e-61,1.23456e-61],[0.12457251550937169,-0.7912589404401048,-0.5986576463666609]]],"normal":[0.12457251550937169,-0.7912589404401048,-0.5986576463666609]},{"op":"state"}]}}, +{"name":"adv_sing_371","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.3193856237197552,0,0,0.0,1.8079669359192927,0,0,400.3419439314173,499.6122727241252,-830.3305558592652,-1.2430460699347041,-0.6718889665312131,-1.5445370323252143,0.7381947238315949,-0.6220927843497374,-0.3234838413618086,0.5809976557303238,1.8447236630455845,-2.2217489221582967,1.4495188587724193,-1.2215411377376653,-0.6351927390218747,1.23456e-61,1.23456e-61,1.23456e-61,-4.049371802115872,3.4124938826036066,1.7744726470701002,1.23456e-61,1.23456e-61,1.23456e-61,-0.7250551772805465,0.6110198020658658,0.317725969007989,400.3419439314173,499.6122727241252,-830.3305558592652,-10.630633953614252,-1.1054683387229371,-22.13332817044295,-38.266432782932014,33.455572003407966,16.708393838218704,16.597508994533975,24.476072340656433,-9.194259630747892,-192.22998256823755,161.99639638532204,84.23697864341946,1.23456e-61,1.23456e-61,1.23456e-61,618.1392197385926,-520.349187230249,-270.9028746005555,1.23456e-61,1.23456e-61,1.23456e-61,0.7250551772805465,-0.6110198020658658,-0.317725969007989,400.3419439314173,499.6122727241252,-830.3305558592652,-0.7378645439701599,0.0742908046052938,0.6708478151584056,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.3193856237197552,0,0,0.0,1.8079669359192927,0,0,400.3419439314173,499.6122727241252,-830.3305558592652,-1.2430460699347041,-0.6718889665312131,-1.5445370323252143,0.7381947238315949,-0.6220927843497374,-0.3234838413618086,0.5809976557303238,1.8447236630455845,-2.2217489221582967,1.4495188587724193,-1.2215411377376653,-0.6351927390218747,1.23456e-61,1.23456e-61,1.23456e-61,-4.049371802115872,3.4124938826036066,1.7744726470701002,1.23456e-61,1.23456e-61,1.23456e-61,-0.7250551772805465,0.6110198020658658,0.317725969007989,400.3419439314173,499.6122727241252,-830.3305558592652,-10.630633953614252,-1.1054683387229371,-22.13332817044295,-38.266432782932014,33.455572003407966,16.708393838218704,16.597508994533975,24.476072340656433,-9.194259630747892,-192.22998256823755,161.99639638532204,84.23697864341946,1.23456e-61,1.23456e-61,1.23456e-61,618.1392197385926,-520.349187230249,-270.9028746005555,1.23456e-61,1.23456e-61,1.23456e-61,0.7250551772805465,-0.6110198020658658,-0.317725969007989,400.3419439314173,499.6122727241252,-830.3305558592652,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.3193856237197552,0,0,0.0,1.8079669359192927,0,0,400.3419439314173,499.6122727241252,-830.3305558592652,-1.2430460699347041,-0.6718889665312131,-1.5445370323252143,0.7381947238315949,-0.6220927843497374,-0.3234838413618086,0.5809976557303238,1.8447236630455845,-2.2217489221582967,1.4495188587724193,-1.2215411377376653,-0.6351927390218747,1.23456e-61,1.23456e-61,1.23456e-61,-4.049371802115872,3.4124938826036066,1.7744726470701002,1.23456e-61,1.23456e-61,1.23456e-61,-0.7250551772805465,0.6110198020658658,0.317725969007989,400.3419439314173,499.6122727241252,-830.3305558592652,-10.630633953614252,-1.1054683387229371,-22.13332817044295,-38.266432782932014,33.455572003407966,16.708393838218704,16.597508994533975,24.476072340656433,-9.194259630747892,-192.22998256823755,161.99639638532204,84.23697864341946,1.23456e-61,1.23456e-61,1.23456e-61,618.1392197385926,-520.349187230249,-270.9028746005555,1.23456e-61,1.23456e-61,1.23456e-61,0.7250551772805465,-0.6110198020658658,-0.317725969007989,400.3419439314173,499.6122727241252,-830.3305558592652,0.5157124794541277,0.736365424027268,-0.4379573048054087,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[400.3419439314173,499.6122727241252,-830.3305558592652],[-10.630633953614252,-1.1054683387229371,-22.13332817044295],[-38.266432782932014,33.455572003407966,16.708393838218704]],[[16.597508994533975,24.476072340656433,-9.194259630747892],[-192.22998256823755,161.99639638532204,84.23697864341946],[1.23456e-61,1.23456e-61,1.23456e-61]],[[618.1392197385926,-520.349187230249,-270.9028746005555],[1.23456e-61,1.23456e-61,1.23456e-61],[0.7250551772805465,-0.6110198020658658,-0.317725969007989]]],"normal":[0.7250551772805465,-0.6110198020658658,-0.317725969007989]},{"op":"state"}]}}, +{"name":"adv_sing_372","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.4210074011630487,0,0,2.0,1.12358878422137,0,0,0.8744582303036537,-1.0332720735901346,-1.076485086809297,0.0,13.481197874851912,-5.645238616732251,1.5539010033215446,0.0,0.0,0.0,-5.315646233587807,-12.694109775148828,-45.36499955124485,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1324.3978735895014,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.8744582303036537,-1.0332720735901346,-1.076485086809297,0.0,-0.0024474969162115805,-0.00750795027546121,0.0004308998275605001,-0.0,-0.0,-0.0,-0.0002916568989341549,0.006651028149210452,-0.0003255485102896748,0.5604896353166575,-0.2347044945813117,1.23456e-61,1.23456e-61,1.23456e-61,0.000245954687779374,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,0.8744582303036537,-1.0332720735901346,-1.076485086809297,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.4210074011630487,0,0,2.0,1.12358878422137,0,0,0.8744582303036537,-1.0332720735901346,-1.076485086809297,0.0,13.481197874851912,-5.645238616732251,1.5539010033215446,0.0,0.0,0.0,-5.315646233587807,-12.694109775148828,-45.36499955124485,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1324.3978735895014,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.8744582303036537,-1.0332720735901346,-1.076485086809297,0.0,-0.0024474969162115805,-0.00750795027546121,0.0004308998275605001,-0.0,-0.0,-0.0,-0.0002916568989341549,0.006651028149210452,-0.0003255485102896748,0.5604896353166575,-0.2347044945813117,1.23456e-61,1.23456e-61,1.23456e-61,0.000245954687779374,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,-1,0,0,0.8744582303036537,-1.0332720735901346,-1.076485086809297,-0.0,0.38625140756635656,0.9223935440759591,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.8744582303036537,-1.0332720735901346,-1.076485086809297],[0.0,-0.0024474969162115805,-0.00750795027546121],[0.0004308998275605001,-0.0,-0.0]],[[-0.0,-0.0002916568989341549,0.006651028149210452],[-0.0003255485102896748,0.5604896353166575,-0.2347044945813117],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.000245954687779374,-0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[-1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_373","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,0.4566687340933442,2.0,0,0,-0.0004683296062716969,0.0006068885902697374,-0.0004280413564658743,10.65070836443745,19.728032138223835,-45.597872940944995,73.70832858637151,64.52182209842617,45.13224760381627,21.65227562240045,-32.974145054581314,11.778692687927867,223.94870434041013,196.03725573145982,137.12573014054274,1.23456e-61,1.23456e-61,1.23456e-61,702.3483356849371,614.8123995660401,430.0539653821676,1.23456e-61,1.23456e-61,1.23456e-61,0.6833961216039192,0.5982222609920279,0.4184493606522865,-0.0004683296062716969,0.0006068885902697374,-0.0004280413564658743,-2.640824570872229,2.2079840208789676,1.156326480250022,0.6649181989867272,-0.36000007462252215,-0.5711758574749422,-6.698461112834778,8.281713904467633,-0.8999972446050046,7.13274446126293e-05,6.243767536579774e-05,4.3674411738050076e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.3324552740791127,0.180346449587616,0.2859465407733674,1.23456e-61,1.23456e-61,1.23456e-61,-0.6833961216039192,-0.5982222609920279,-0.4184493606522865,-0.0004683296062716969,0.0006068885902697374,-0.0004280413564658743,0.6833961216039192,0.5982222609920279,0.4184493606522865,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.4566687340933442,2.0,0,0,-0.0004683296062716969,0.0006068885902697374,-0.0004280413564658743,10.65070836443745,19.728032138223835,-45.597872940944995,73.70832858637151,64.52182209842617,45.13224760381627,21.65227562240045,-32.974145054581314,11.778692687927867,223.94870434041013,196.03725573145982,137.12573014054274,1.23456e-61,1.23456e-61,1.23456e-61,702.3483356849371,614.8123995660401,430.0539653821676,1.23456e-61,1.23456e-61,1.23456e-61,0.6833961216039192,0.5982222609920279,0.4184493606522865,-0.0004683296062716969,0.0006068885902697374,-0.0004280413564658743,-2.640824570872229,2.2079840208789676,1.156326480250022,0.6649181989867272,-0.36000007462252215,-0.5711758574749422,-6.698461112834778,8.281713904467633,-0.8999972446050046,7.13274446126293e-05,6.243767536579774e-05,4.3674411738050076e-05,1.23456e-61,1.23456e-61,1.23456e-61,-0.3324552740791127,0.180346449587616,0.2859465407733674,1.23456e-61,1.23456e-61,1.23456e-61,-0.6833961216039192,-0.5982222609920279,-0.4184493606522865,-0.0004683296062716969,0.0006068885902697374,-0.0004280413564658743,-0.7016570173115878,0.3799262426333458,0.6027714991735378,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.0004683296062716969,0.0006068885902697374,-0.0004280413564658743],[-2.640824570872229,2.2079840208789676,1.156326480250022],[0.6649181989867272,-0.36000007462252215,-0.5711758574749422]],[[-6.698461112834778,8.281713904467633,-0.8999972446050046],[7.13274446126293e-05,6.243767536579774e-05,4.3674411738050076e-05],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.3324552740791127,0.180346449587616,0.2859465407733674],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6833961216039192,-0.5982222609920279,-0.4184493606522865]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_374","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.3494815782448404,0,0,0.0,0.06810179272602057,0,0,0.2265879598032261,0.41740522069600816,-0.005405675544290611,0.007804403215155475,-0.006122496569192835,-0.005730097105561906,-0.14886776256785617,-0.31450827715117424,0.013398190650155545,-0.013271903553227249,-0.004412402835721259,-0.009319698796168155,0.27264937952262663,-0.2390371724894828,-0.029043515447191123,1.23456e-61,1.23456e-61,1.23456e-61,-0.00921912166418781,-0.04316602218988553,0.0335655882375345,1.23456e-61,1.23456e-61,1.23456e-61,-0.16625349051663585,-0.7784366149179425,0.6053067102272448,0.2265879598032261,0.41740522069600816,-0.005405675544290611,-0.4438296127165291,2.0133428139374567,2.4672971853911694,0.481256259918208,0.46085693419965323,0.7248530991996462,-2.84129067489614,-0.5827971276083709,-1.5298774981786587,0.5772121754956939,-0.2819051326800135,-0.20399862777647437,1.23456e-61,1.23456e-61,1.23456e-61,-0.3097917416467953,-0.296660395285384,-0.46659861436426925,1.23456e-61,1.23456e-61,1.23456e-61,-0.16625349051663585,-0.7784366149179425,0.6053067102272448,0.2265879598032261,0.41740522069600816,-0.005405675544290611,0.4887906967814441,0.4680720039369925,0.7362012319130677,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.2265879598032261,0.41740522069600816,-0.005405675544290611],[-0.4438296127165291,2.0133428139374567,2.4672971853911694],[0.481256259918208,0.46085693419965323,0.7248530991996462]],[[-2.84129067489614,-0.5827971276083709,-1.5298774981786587],[0.5772121754956939,-0.2819051326800135,-0.20399862777647437],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.3097917416467953,-0.296660395285384,-0.46659861436426925],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.16625349051663585,-0.7784366149179425,0.6053067102272448]]],"normal":[0.16625349051663585,0.7784366149179425,-0.6053067102272448]},{"op":"state"}]}}, +{"name":"adv_sing_375","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,1.001778901206093,0,0,0.2442474411514277,0.0,0,0,-0.260412446718159,0.15943230250994844,0.7429655475043879,-17.08460891776772,-39.020359853400585,0.0,0.3328194221976882,-0.14572109764870317,13700220.054779142,-43.565491629211884,19.074641791918364,0.0,0.0,0.0,8712178.034389919,1.23456e-61,1.23456e-61,1.23456e-61,0.8194426943901303,-0.35878341503703887,5540206.347008912,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.260412446718159,0.15943230250994844,0.7429655475043879,1.1308549269704602,-3.005805393630844,0.0,-0.23508778933779506,0.10293044342154546,25.78539193820295,2.9090969868624,-0.5658911698268159,-0.0,0.17929689673923585,0.4095048042971017,12.476360710022503,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,21.95787433633832,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.260412446718159,0.15943230250994844,0.7429655475043879,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.001778901206093,0,0,0.2442474411514277,0.0,0,0,-0.260412446718159,0.15943230250994844,0.7429655475043879,-17.08460891776772,-39.020359853400585,0.0,0.3328194221976882,-0.14572109764870317,13700220.054779142,-43.565491629211884,19.074641791918364,0.0,0.0,0.0,8712178.034389919,1.23456e-61,1.23456e-61,1.23456e-61,0.8194426943901303,-0.35878341503703887,5540206.347008912,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.260412446718159,0.15943230250994844,0.7429655475043879,1.1308549269704602,-3.005805393630844,0.0,-0.23508778933779506,0.10293044342154546,25.78539193820295,2.9090969868624,-0.5658911698268159,-0.0,0.17929689673923585,0.4095048042971017,12.476360710022503,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,21.95787433633832,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.260412446718159,0.15943230250994844,0.7429655475043879,0,0,1,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.001778901206093,0,0,0.2442474411514277,0.0,0,0,-0.260412446718159,0.15943230250994844,0.7429655475043879,-17.08460891776772,-39.020359853400585,0.0,0.3328194221976882,-0.14572109764870317,13700220.054779142,-43.565491629211884,19.074641791918364,0.0,0.0,0.0,8712178.034389919,1.23456e-61,1.23456e-61,1.23456e-61,0.8194426943901303,-0.35878341503703887,5540206.347008912,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.260412446718159,0.15943230250994844,0.7429655475043879,1.1308549269704602,-3.005805393630844,0.0,-0.23508778933779506,0.10293044342154546,25.78539193820295,2.9090969868624,-0.5658911698268159,-0.0,0.17929689673923585,0.4095048042971017,12.476360710022503,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,21.95787433633832,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-0.260412446718159,0.15943230250994844,0.7429655475043879,0.9160434918330781,-0.4010789461817479,-0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.260412446718159,0.15943230250994844,0.7429655475043879],[1.1308549269704602,-3.005805393630844,0.0],[-0.23508778933779506,0.10293044342154546,25.78539193820295]],[[2.9090969868624,-0.5658911698268159,-0.0],[0.17929689673923585,0.4095048042971017,12.476360710022503],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,21.95787433633832],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_376","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.5986420900124103,0,0,0.0,2.0,0,0,0.48458632012106784,0.056949408983091754,0.3105383866066951,-0.012141826121592564,0.17593558528858266,0.2125305740457704,6.974440010792641e-08,2.0441164658197757e-07,-1.6523014846125278e-07,0.5545815233208163,-0.331419725310055,-0.17591884033343397,0.0010957719453885606,-0.5067854232118562,-0.6265105812227669,1.23456e-61,1.23456e-61,1.23456e-61,0.37201036717530583,-0.07619620155378966,0.0622858764026953,1.23456e-61,1.23456e-61,1.23456e-61,0.2564732070331927,0.7516891746532803,-0.6076058580882671,0.48458632012106784,0.056949408983091754,0.3105383866066951,-25.430177299508106,27.473512621488943,23.25419136724878,-1.3333265180300535,-0.9271687220989214,0.7476739633979986,11.915151282943478,-31.642414193506188,-34.116430694979215,0.47275846071345673,1.29617138158183,-1.2293985434888988,1.23456e-61,1.23456e-61,1.23456e-61,-0.583026527440748,-1.708773927235936,1.381237196632439,1.23456e-61,1.23456e-61,1.23456e-61,0.2564732070331927,0.7516891746532803,-0.6076058580882671,0.48458632012106784,0.056949408983091754,0.3105383866066951,0.0013574585450197019,-0.628912290229559,-0.7774750725936553,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.5986420900124103,0,0,0.0,2.0,0,0,0.48458632012106784,0.056949408983091754,0.3105383866066951,-0.012141826121592564,0.17593558528858266,0.2125305740457704,6.974440010792641e-08,2.0441164658197757e-07,-1.6523014846125278e-07,0.5545815233208163,-0.331419725310055,-0.17591884033343397,0.0010957719453885606,-0.5067854232118562,-0.6265105812227669,1.23456e-61,1.23456e-61,1.23456e-61,0.37201036717530583,-0.07619620155378966,0.0622858764026953,1.23456e-61,1.23456e-61,1.23456e-61,0.2564732070331927,0.7516891746532803,-0.6076058580882671,0.48458632012106784,0.056949408983091754,0.3105383866066951,-25.430177299508106,27.473512621488943,23.25419136724878,-1.3333265180300535,-0.9271687220989214,0.7476739633979986,11.915151282943478,-31.642414193506188,-34.116430694979215,0.47275846071345673,1.29617138158183,-1.2293985434888988,1.23456e-61,1.23456e-61,1.23456e-61,-0.583026527440748,-1.708773927235936,1.381237196632439,1.23456e-61,1.23456e-61,1.23456e-61,0.2564732070331927,0.7516891746532803,-0.6076058580882671,0.48458632012106784,0.056949408983091754,0.3105383866066951,-0.967907845943632,0.8274890157219521,0.6151555336825584,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.5986420900124103,0,0,0.0,2.0,0,0,0.48458632012106784,0.056949408983091754,0.3105383866066951,-0.012141826121592564,0.17593558528858266,0.2125305740457704,6.974440010792641e-08,2.0441164658197757e-07,-1.6523014846125278e-07,0.5545815233208163,-0.331419725310055,-0.17591884033343397,0.0010957719453885606,-0.5067854232118562,-0.6265105812227669,1.23456e-61,1.23456e-61,1.23456e-61,0.37201036717530583,-0.07619620155378966,0.0622858764026953,1.23456e-61,1.23456e-61,1.23456e-61,0.2564732070331927,0.7516891746532803,-0.6076058580882671,0.48458632012106784,0.056949408983091754,0.3105383866066951,-25.430177299508106,27.473512621488943,23.25419136724878,-1.3333265180300535,-0.9271687220989214,0.7476739633979986,11.915151282943478,-31.642414193506188,-34.116430694979215,0.47275846071345673,1.29617138158183,-1.2293985434888988,1.23456e-61,1.23456e-61,1.23456e-61,-0.583026527440748,-1.708773927235936,1.381237196632439,1.23456e-61,1.23456e-61,1.23456e-61,0.2564732070331927,0.7516891746532803,-0.6076058580882671,0.48458632012106784,0.056949408983091754,0.3105383866066951,0.9665503873986123,-0.1985767254923931,0.16231953891109693,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.48458632012106784,0.056949408983091754,0.3105383866066951],[-25.430177299508106,27.473512621488943,23.25419136724878],[-1.3333265180300535,-0.9271687220989214,0.7476739633979986]],[[11.915151282943478,-31.642414193506188,-34.116430694979215],[0.47275846071345673,1.29617138158183,-1.2293985434888988],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.583026527440748,-1.708773927235936,1.381237196632439],[1.23456e-61,1.23456e-61,1.23456e-61],[0.2564732070331927,0.7516891746532803,-0.6076058580882671]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_377","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.747104099932314,2.0,0,0,1.1142616854286351,0.0,0,0,-438.9058919118303,-137.42731748309868,-132.88609558728325,0.0,0.03070096286354411,0.031741436201060125,0.0,-0.3905177452597809,0.3777167081801763,0.0,0.0195263390623516,-0.018886272398544,0.0,0.37395717969467823,0.3866308041856881,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-438.9058919118303,-137.42731748309868,-132.88609558728325,0.0,-0.6271179791070272,-0.006432497490460876,0.19374610242940854,0.0,0.0,-0.0,0.14234541807554912,0.7845645899060216,-0.07612160720855199,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.02990769368444096,0.001250288474437952,-0.0012093044492156523,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-438.9058919118303,-137.42731748309868,-132.88609558728325,0.0,0.7187894719413449,-0.6952278008151591,0,0,0,0,0,0,0],[1,1,1,1,1,0.747104099932314,2.0,0,0,1.1142616854286351,0.0,0,0,-438.9058919118303,-137.42731748309868,-132.88609558728325,0.0,0.03070096286354411,0.031741436201060125,0.0,-0.3905177452597809,0.3777167081801763,0.0,0.0195263390623516,-0.018886272398544,0.0,0.37395717969467823,0.3866308041856881,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-438.9058919118303,-137.42731748309868,-132.88609558728325,0.0,-0.6271179791070272,-0.006432497490460876,0.19374610242940854,0.0,0.0,-0.0,0.14234541807554912,0.7845645899060216,-0.07612160720855199,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.02990769368444096,0.001250288474437952,-0.0012093044492156523,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,-438.9058919118303,-137.42731748309868,-132.88609558728325,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-438.9058919118303,-137.42731748309868,-132.88609558728325],[0.0,-0.6271179791070272,-0.006432497490460876],[0.19374610242940854,0.0,0.0]],[[-0.0,0.14234541807554912,0.7845645899060216],[-0.07612160720855199,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.02990769368444096,0.001250288474437952,-0.0012093044492156523],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_378","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,2.0,0,0,1.9590810467494082,0.7318662043367876,0,0,383.80050162416745,833.4792965586693,567.3892500229101,-74.08588563415171,-40.41662496907318,32.2492536222833,21204523.728029706,-20189014.106620535,23410900.562896885,-69.2631436971976,-50.363951157271565,19.30269284937735,23040448.749608204,-21937014.64511943,25437858.438173298,1.23456e-61,1.23456e-61,1.23456e-61,25036977.832899984,-23837927.92715727,27642131.127465446,1.23456e-61,1.23456e-61,1.23456e-61,0.5656453761243322,-0.5385559605864347,0.6245020302496905,383.80050162416745,833.4792965586693,567.3892500229101,-0.006616109832370397,-0.018231089926600143,-0.009729496333130262,1.4982293769900066,-1.426477428017217,1.6541234618071505,-0.035611180201532644,-0.04111204556335402,-0.0031990893126789596,4.183196867341006,-3.9828586996489515,4.6184677659494895,1.23456e-61,1.23456e-61,1.23456e-61,12.01862090734023,-11.182508259396,12.545723105711266,1.23456e-61,1.23456e-61,1.23456e-61,0.5656453761243322,-0.5385559605864347,0.6245020302496905,383.80050162416745,833.4792965586693,567.3892500229101,0.7783170381100841,0.23706841371813023,0.581395868066428,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[383.80050162416745,833.4792965586693,567.3892500229101],[-0.006616109832370397,-0.018231089926600143,-0.009729496333130262],[1.4982293769900066,-1.426477428017217,1.6541234618071505]],[[-0.035611180201532644,-0.04111204556335402,-0.0031990893126789596],[4.183196867341006,-3.9828586996489515,4.6184677659494895],[1.23456e-61,1.23456e-61,1.23456e-61]],[[12.01862090734023,-11.182508259396,12.545723105711266],[1.23456e-61,1.23456e-61,1.23456e-61],[0.5656453761243322,-0.5385559605864347,0.6245020302496905]]],"normal":[-0.5656453761243322,0.5385559605864347,-0.6245020302496905]},{"op":"state"}]}}, +{"name":"adv_sing_379","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,2.0,2.0,0,0,1.767940523515101,1.1904222683738293,1.9599176735910202,0.0,10.823057714901935,1.1973139606593786,632.1362665505699,-0.029676435665126507,0.2682586076248158,0.0,0.8877936603246585,-8.025164944478055,-262.2393767501051,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,108.7890291338572,-0.0036717779941245073,0.033190847557503685,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,1.767940523515101,1.1904222683738293,1.9599176735910202,0.0,-19.13522516080673,11.095054447093098,-483026.89985076356,0.0,-0.0,-0.0,19.700857937486468,18.752237530352446,-1555611.726724625,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-5009923.557199055,0.08409848435988547,-0.7602039063016988,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,1.767940523515101,1.1904222683738293,1.9599176735910202,0.0,-0.9939365177442158,-0.10995543958578073,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,2.0,2.0,0,0,1.767940523515101,1.1904222683738293,1.9599176735910202,0.0,10.823057714901935,1.1973139606593786,632.1362665505699,-0.029676435665126507,0.2682586076248158,0.0,0.8877936603246585,-8.025164944478055,-262.2393767501051,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,108.7890291338572,-0.0036717779941245073,0.033190847557503685,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,1.767940523515101,1.1904222683738293,1.9599176735910202,0.0,-19.13522516080673,11.095054447093098,-483026.89985076356,0.0,-0.0,-0.0,19.700857937486468,18.752237530352446,-1555611.726724625,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-5009923.557199055,0.08409848435988547,-0.7602039063016988,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,1.767940523515101,1.1904222683738293,1.9599176735910202,0.5704655830909228,0.8117674337364432,-0.12491057614822965,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.767940523515101,1.1904222683738293,1.9599176735910202],[0.0,-19.13522516080673,11.095054447093098],[-483026.89985076356,0.0,-0.0]],[[-0.0,19.700857937486468,18.752237530352446],[-1555611.726724625,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-5009923.557199055,0.08409848435988547,-0.7602039063016988],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[-1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_380","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.3690204669172423,2.0,0,0,0.40887052988530215,2.0,0,0,0.2901005404167978,-0.9056711411121303,-0.3114128236038618,0.062476953937966685,0.20226004429078787,0.24913355176774682,-0.44954868479552484,-0.4943264168918749,0.5140572778687474,-0.21257320006016758,-0.16559350472570106,0.1877461919392415,0.0031852709382931346,0.17709765580608544,0.15980790039010165,1.23456e-61,1.23456e-61,1.23456e-61,0.09173754288514768,-0.29102521779957147,0.21326429468717734,1.23456e-61,1.23456e-61,1.23456e-61,-0.7379183563975111,0.602500057619797,-0.30408909855458033,0.2901005404167978,-0.9056711411121303,-0.3114128236038618,24.381788316505464,45.24139033282548,30.471895131472998,355820.3947332384,-290522.39515449747,146630.18224671765,11.10840845530814,-14.427989985972822,-55.54281093173794,-917968.9149474514,749508.8302845849,-378286.2120550417,1.23456e-61,1.23456e-61,1.23456e-61,2356159.1227941364,-1923770.157823159,970949.8805957098,1.23456e-61,1.23456e-61,1.23456e-61,-0.7379183563975111,0.602500057619797,-0.30408909855458033,0.2901005404167978,-0.9056711411121303,-0.3114128236038618,-0.7379183563975111,0.602500057619797,-0.30408909855458033,0,0,0,0,0,0,0],[1,1,1,1,1,1.3690204669172423,2.0,0,0,0.40887052988530215,2.0,0,0,0.2901005404167978,-0.9056711411121303,-0.3114128236038618,0.062476953937966685,0.20226004429078787,0.24913355176774682,-0.44954868479552484,-0.4943264168918749,0.5140572778687474,-0.21257320006016758,-0.16559350472570106,0.1877461919392415,0.0031852709382931346,0.17709765580608544,0.15980790039010165,1.23456e-61,1.23456e-61,1.23456e-61,0.09173754288514768,-0.29102521779957147,0.21326429468717734,1.23456e-61,1.23456e-61,1.23456e-61,-0.7379183563975111,0.602500057619797,-0.30408909855458033,0.2901005404167978,-0.9056711411121303,-0.3114128236038618,24.381788316505464,45.24139033282548,30.471895131472998,355820.3947332384,-290522.39515449747,146630.18224671765,11.10840845530814,-14.427989985972822,-55.54281093173794,-917968.9149474514,749508.8302845849,-378286.2120550417,1.23456e-61,1.23456e-61,1.23456e-61,2356159.1227941364,-1923770.157823159,970949.8805957098,1.23456e-61,1.23456e-61,1.23456e-61,-0.7379183563975111,0.602500057619797,-0.30408909855458033,0.2901005404167978,-0.9056711411121303,-0.3114128236038618,-0.4561628925825039,0.11445552419620764,1.3337223655662878,0,0,0,0,0,0,0],[1,1,1,1,1,1.3690204669172423,2.0,0,0,0.40887052988530215,2.0,0,0,0.2901005404167978,-0.9056711411121303,-0.3114128236038618,0.062476953937966685,0.20226004429078787,0.24913355176774682,-0.44954868479552484,-0.4943264168918749,0.5140572778687474,-0.21257320006016758,-0.16559350472570106,0.1877461919392415,0.0031852709382931346,0.17709765580608544,0.15980790039010165,1.23456e-61,1.23456e-61,1.23456e-61,0.09173754288514768,-0.29102521779957147,0.21326429468717734,1.23456e-61,1.23456e-61,1.23456e-61,-0.7379183563975111,0.602500057619797,-0.30408909855458033,0.2901005404167978,-0.9056711411121303,-0.3114128236038618,24.381788316505464,45.24139033282548,30.471895131472998,355820.3947332384,-290522.39515449747,146630.18224671765,11.10840845530814,-14.427989985972822,-55.54281093173794,-917968.9149474514,749508.8302845849,-378286.2120550417,1.23456e-61,1.23456e-61,1.23456e-61,2356159.1227941364,-1923770.157823159,970949.8805957098,1.23456e-61,1.23456e-61,1.23456e-61,-0.7379183563975111,0.602500057619797,-0.30408909855458033,0.2901005404167978,-0.9056711411121303,-0.3114128236038618,0.1911047933487065,0.6186739514424733,0.7620508511678894,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.2901005404167978,-0.9056711411121303,-0.3114128236038618],[24.381788316505464,45.24139033282548,30.471895131472998],[355820.3947332384,-290522.39515449747,146630.18224671765]],[[11.10840845530814,-14.427989985972822,-55.54281093173794],[-917968.9149474514,749508.8302845849,-378286.2120550417],[1.23456e-61,1.23456e-61,1.23456e-61]],[[2356159.1227941364,-1923770.157823159,970949.8805957098],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.7379183563975111,0.602500057619797,-0.30408909855458033]]],"normal":[0.7379183563975111,-0.602500057619797,0.30408909855458033]},{"op":"state"}]}}, +{"name":"adv_sing_381","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.43621215728246376,2.0,0,0,2.0,1.4112821592189686,0,0,-53.82342518994032,134.08830374564374,-145.74269328894496,4.531457065610886,3.451801244859957,-1.811851903292694,40.294664032367535,20.650773469192178,140.11956779844778,17.386206945972233,-15.329054195104627,-2.7406203718631827,-69.4384752228682,-35.58680178402053,-241.46346347486454,1.23456e-61,1.23456e-61,1.23456e-61,457.77211697733964,233.8599076872266,1588.3705423030349,1.23456e-61,1.23456e-61,1.23456e-61,0.27364137790496285,0.14023956378873859,0.9515530784179186,-53.82342518994032,134.08830374564374,-145.74269328894496,-0.018558475106733564,-0.0008257987424263955,0.005458630183901763,-0.0338029527582286,-0.017323810404257366,-0.11754546773214643,0.01443541611810479,0.012360667803228568,-0.005972953003842605,-0.1643386262413101,-0.6974285000931022,0.14457446182939865,1.23456e-61,1.23456e-61,1.23456e-61,5.565528877122591e-05,2.8523001453836222e-05,0.0001935341861160017,1.23456e-61,1.23456e-61,1.23456e-61,-0.27364137790496285,-0.14023956378873859,-0.9515530784179186,-53.82342518994032,134.08830374564374,-145.74269328894496,0.222879544757171,0.9531404648299834,-0.20456774631529578,0,0,0,0,0,0,0],[1,1,1,1,1,0.43621215728246376,2.0,0,0,2.0,1.4112821592189686,0,0,-53.82342518994032,134.08830374564374,-145.74269328894496,4.531457065610886,3.451801244859957,-1.811851903292694,40.294664032367535,20.650773469192178,140.11956779844778,17.386206945972233,-15.329054195104627,-2.7406203718631827,-69.4384752228682,-35.58680178402053,-241.46346347486454,1.23456e-61,1.23456e-61,1.23456e-61,457.77211697733964,233.8599076872266,1588.3705423030349,1.23456e-61,1.23456e-61,1.23456e-61,0.27364137790496285,0.14023956378873859,0.9515530784179186,-53.82342518994032,134.08830374564374,-145.74269328894496,-0.018558475106733564,-0.0008257987424263955,0.005458630183901763,-0.0338029527582286,-0.017323810404257366,-0.11754546773214643,0.01443541611810479,0.012360667803228568,-0.005972953003842605,-0.1643386262413101,-0.6974285000931022,0.14457446182939865,1.23456e-61,1.23456e-61,1.23456e-61,5.565528877122591e-05,2.8523001453836222e-05,0.0001935341861160017,1.23456e-61,1.23456e-61,1.23456e-61,-0.27364137790496285,-0.14023956378873859,-0.9515530784179186,-53.82342518994032,134.08830374564374,-145.74269328894496,0.27364137790496285,0.14023956378873859,0.9515530784179186,0,0,0,0,0,0,0],[1,1,1,1,1,0.43621215728246376,2.0,0,0,2.0,1.4112821592189686,0,0,-53.82342518994032,134.08830374564374,-145.74269328894496,4.531457065610886,3.451801244859957,-1.811851903292694,40.294664032367535,20.650773469192178,140.11956779844778,17.386206945972233,-15.329054195104627,-2.7406203718631827,-69.4384752228682,-35.58680178402053,-241.46346347486454,1.23456e-61,1.23456e-61,1.23456e-61,457.77211697733964,233.8599076872266,1588.3705423030349,1.23456e-61,1.23456e-61,1.23456e-61,0.27364137790496285,0.14023956378873859,0.9515530784179186,-53.82342518994032,134.08830374564374,-145.74269328894496,-0.018558475106733564,-0.0008257987424263955,0.005458630183901763,-0.0338029527582286,-0.017323810404257366,-0.11754546773214643,0.01443541611810479,0.012360667803228568,-0.005972953003842605,-0.1643386262413101,-0.6974285000931022,0.14457446182939865,1.23456e-61,1.23456e-61,1.23456e-61,5.565528877122591e-05,2.8523001453836222e-05,0.0001935341861160017,1.23456e-61,1.23456e-61,1.23456e-61,-0.27364137790496285,-0.14023956378873859,-0.9515530784179186,-53.82342518994032,134.08830374564374,-145.74269328894496,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-53.82342518994032,134.08830374564374,-145.74269328894496],[-0.018558475106733564,-0.0008257987424263955,0.005458630183901763],[-0.0338029527582286,-0.017323810404257366,-0.11754546773214643]],[[0.01443541611810479,0.012360667803228568,-0.005972953003842605],[-0.1643386262413101,-0.6974285000931022,0.14457446182939865],[1.23456e-61,1.23456e-61,1.23456e-61]],[[5.565528877122591e-05,2.8523001453836222e-05,0.0001935341861160017],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.27364137790496285,-0.14023956378873859,-0.9515530784179186]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_382","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.1356562387752813,0.0,0,0,0.0,2.0,0,0,0.5493216608153861,-0.9448912823914566,0.7490556538561837,-2.508752905184232,-10.045075887139669,-1.7645280439001745,0.05749001283468817,0.0021752014135049923,-0.09412052166622834,8.523107314511114,-3.774437234837062,5.118792152499674,0.003908664894544499,0.00014788887642064574,-0.006399121530044743,1.23456e-61,1.23456e-61,1.23456e-61,-0.38113357364557365,-0.12661974440213208,-0.36827311635896454,1.23456e-61,1.23456e-61,1.23456e-61,0.5211632468795544,0.019718816806303583,-0.8532291827907202,0.5493216608153861,-0.9448912823914566,0.7490556538561837,0.0021226734594639793,0.17857642439737487,0.005423601635002807,282.4387921206472,10.605277229041482,-463.1157593868013,0.1737801390151028,-0.3527652386183221,0.09799443111271652,-734.9952953199426,-28.534575146929292,1203.6509022140697,1.23456e-61,1.23456e-61,1.23456e-61,2311.208388421163,87.4472539753013,-3783.824850119163,1.23456e-61,1.23456e-61,1.23456e-61,0.5211632468795544,0.019718816806303583,-0.8532291827907202,0.5493216608153861,-0.9448912823914566,0.7490556538561837,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1.1356562387752813,0.0,0,0,0.0,2.0,0,0,0.5493216608153861,-0.9448912823914566,0.7490556538561837,-2.508752905184232,-10.045075887139669,-1.7645280439001745,0.05749001283468817,0.0021752014135049923,-0.09412052166622834,8.523107314511114,-3.774437234837062,5.118792152499674,0.003908664894544499,0.00014788887642064574,-0.006399121530044743,1.23456e-61,1.23456e-61,1.23456e-61,-0.38113357364557365,-0.12661974440213208,-0.36827311635896454,1.23456e-61,1.23456e-61,1.23456e-61,0.5211632468795544,0.019718816806303583,-0.8532291827907202,0.5493216608153861,-0.9448912823914566,0.7490556538561837,0.0021226734594639793,0.17857642439737487,0.005423601635002807,282.4387921206472,10.605277229041482,-463.1157593868013,0.1737801390151028,-0.3527652386183221,0.09799443111271652,-734.9952953199426,-28.534575146929292,1203.6509022140697,1.23456e-61,1.23456e-61,1.23456e-61,2311.208388421163,87.4472539753013,-3783.824850119163,1.23456e-61,1.23456e-61,1.23456e-61,0.5211632468795544,0.019718816806303583,-0.8532291827907202,0.5493216608153861,-0.9448912823914566,0.7490556538561837,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.5493216608153861,-0.9448912823914566,0.7490556538561837],[0.0021226734594639793,0.17857642439737487,0.005423601635002807],[282.4387921206472,10.605277229041482,-463.1157593868013]],[[0.1737801390151028,-0.3527652386183221,0.09799443111271652],[-734.9952953199426,-28.534575146929292,1203.6509022140697],[1.23456e-61,1.23456e-61,1.23456e-61]],[[2311.208388421163,87.4472539753013,-3783.824850119163],[1.23456e-61,1.23456e-61,1.23456e-61],[0.5211632468795544,0.019718816806303583,-0.8532291827907202]]],"normal":[0.5211632468795544,0.019718816806303583,-0.8532291827907202]},{"op":"state"}]}}, +{"name":"adv_sing_383","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,1.609283639435127,0,0,0.0,2.0,0,0,-6.027103260462652e-05,-0.0009305509797822073,0.00011544783902211653,0.00697494892848095,-0.008156157703095012,-0.0,-0.7572318254973568,-0.44525349991450963,-0.00011517282103267369,-0.004020339788398327,-0.012166184842820942,0.0,-0.11020382070633798,0.18742096434113695,-7.118765752383357e-05,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.00016417918564386473,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-6.027103260462652e-05,-0.0009305509797822073,0.00011544783902211653,0.008857483176583253,0.03425857311894219,0.0,0.3307843476497993,0.19450171473085442,-0.4672155955522951,0.014691581885951231,0.034336472317692206,0.0,0.3207109668538214,-0.5454253609109645,-0.39129257080118096,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,-0.3277920284778753,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,-6.027103260462652e-05,-0.0009305509797822073,0.00011544783902211653,0.506870434715087,-0.8620222516917638,-0.0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":1.0,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-6.027103260462652e-05,-0.0009305509797822073,0.00011544783902211653],[0.008857483176583253,0.03425857311894219,0.0],[0.3307843476497993,0.19450171473085442,-0.4672155955522951]],[[0.014691581885951231,0.034336472317692206,0.0],[0.3207109668538214,-0.5454253609109645,-0.39129257080118096],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,-0.3277920284778753],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,-1]},{"op":"state"}]}}, +{"name":"adv_sing_384","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,1.0738670809848125,0.0,0,0,1.1794312975760723,0.9996823825600665,0,0,-0.00037608637943288727,-0.0002827595383328356,0.0001692221478947853,-5.857471782525998,-3.300302520203391,4.153887566745205,-11.078409991969306,14.55638392150779,-4.056682592210283,1.435153729645083,2.1272578915292044,3.7138624499669026,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-3.9281094042355647,4.284492978688884,-2.135028181702389,1.23456e-61,1.23456e-61,1.23456e-61,0.5912576422774207,-0.7768780216434057,0.21650621223413852,-0.00037608637943288727,-0.0002827595383328356,0.0001692221478947853,-2.4659410480061896,-3.170380475333584,-4.641864134632514,0.0,0.0,0.0,-2.160311212627791,-3.7877950763162582,-7.6919466371451835,0.4600754937066988,0.259222471355934,-0.32626736312646254,1.23456e-61,1.23456e-61,1.23456e-61,0.07897544750428465,0.11706142726750743,0.2043711017829636,1.23456e-61,1.23456e-61,1.23456e-61,0.5912576422774207,-0.7768780216434057,0.21650621223413852,-0.00037608637943288727,-0.0002827595383328356,0.0001692221478947853,0.5912576422774207,-0.7768780216434057,0.21650621223413852,0,0,0,0,0,0,0],[1,1,1,1,1,1.0738670809848125,0.0,0,0,1.1794312975760723,0.9996823825600665,0,0,-0.00037608637943288727,-0.0002827595383328356,0.0001692221478947853,-5.857471782525998,-3.300302520203391,4.153887566745205,-11.078409991969306,14.55638392150779,-4.056682592210283,1.435153729645083,2.1272578915292044,3.7138624499669026,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-3.9281094042355647,4.284492978688884,-2.135028181702389,1.23456e-61,1.23456e-61,1.23456e-61,0.5912576422774207,-0.7768780216434057,0.21650621223413852,-0.00037608637943288727,-0.0002827595383328356,0.0001692221478947853,-2.4659410480061896,-3.170380475333584,-4.641864134632514,0.0,0.0,0.0,-2.160311212627791,-3.7877950763162582,-7.6919466371451835,0.4600754937066988,0.259222471355934,-0.32626736312646254,1.23456e-61,1.23456e-61,1.23456e-61,0.07897544750428465,0.11706142726750743,0.2043711017829636,1.23456e-61,1.23456e-61,1.23456e-61,0.5912576422774207,-0.7768780216434057,0.21650621223413852,-0.00037608637943288727,-0.0002827595383328356,0.0001692221478947853,0.5912576422774207,-0.7768780216434057,0.21650621223413852,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.00037608637943288727,-0.0002827595383328356,0.0001692221478947853],[-2.4659410480061896,-3.170380475333584,-4.641864134632514],[0.0,0.0,0.0]],[[-2.160311212627791,-3.7877950763162582,-7.6919466371451835],[0.4600754937066988,0.259222471355934,-0.32626736312646254],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.07897544750428465,0.11706142726750743,0.2043711017829636],[1.23456e-61,1.23456e-61,1.23456e-61],[0.5912576422774207,-0.7768780216434057,0.21650621223413852]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_385","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.2360702275843325,0,0,1.6531362926396744,1.709609668499758,0,0,312.41728848842996,460.94335894581604,473.36664494947223,0.07429091807344196,0.04852966448469262,0.09299534994018452,6.507376106222488e-06,1.0696793021259995e-05,-1.0780654325288818e-05,0.5634249850368193,-0.33836988859812134,0.004354617159584601,-0.10048718375778738,0.6745672298813833,0.6086245768892142,1.23456e-61,1.23456e-61,1.23456e-61,0.5107154699753864,-0.10630083884965742,0.2021401000063203,1.23456e-61,1.23456e-61,1.23456e-61,0.39385165285040374,0.6474114209555836,-0.6524870324866827,312.41728848842996,460.94335894581604,473.36664494947223,0.3813524789645352,-2.5596841718827323,-2.3095822410663653,-0.0005445220265077177,-0.0008950826443703575,0.0009020999623292333,2.373419787481973,-0.49547069734518884,0.9410178094383173,0.04898792982533695,-0.3382398529414904,-0.301648762600485,1.23456e-61,1.23456e-61,1.23456e-61,-0.36111487921864077,0.07101253701300675,-0.13832879197708434,1.23456e-61,1.23456e-61,1.23456e-61,0.39385165285040374,0.6474114209555836,-0.6524870324866827,312.41728848842996,460.94335894581604,473.36664494947223,0.44660184453485463,0.8533089557288349,-0.26909221194793176,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[312.41728848842996,460.94335894581604,473.36664494947223],[0.3813524789645352,-2.5596841718827323,-2.3095822410663653],[-0.0005445220265077177,-0.0008950826443703575,0.0009020999623292333]],[[2.373419787481973,-0.49547069734518884,0.9410178094383173],[0.04898792982533695,-0.3382398529414904,-0.301648762600485],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.36111487921864077,0.07101253701300675,-0.13832879197708434],[1.23456e-61,1.23456e-61,1.23456e-61],[0.39385165285040374,0.6474114209555836,-0.6524870324866827]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_386","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.35110208962625467,0.23017774867590712,0,0,1.6017099905359706,0.0,0,0,-0.0006539252757743714,0.0003502518133367605,0.0009479869249903798,-49.22784604293015,0.0,0.3001753947292303,0.0,-3259622.5793330283,0.0,0.33901301162066616,0.0,55.59709634983991,-0.0,9338493.442261936,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.005350850372584439,-26753851.91036849,0.8775230847216804,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.0006539252757743714,0.0003502518133367605,0.0009479869249903798,-21.38792469677657,0.0,-3.1324641304581538,0.0,-0.4091512382984813,0.0,14.964467274333957,-0.0,-15.504955212452566,-0.0,0.09930237587834556,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.0007656043164696943,0.04592593000844257,-0.12555676475405272,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.0006539252757743714,0.0003502518133367605,0.0009479869249903798,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.0006539252757743714,0.0003502518133367605,0.0009479869249903798],[-21.38792469677657,0.0,-3.1324641304581538],[0.0,-0.4091512382984813,0.0]],[[14.964467274333957,-0.0,-15.504955212452566],[-0.0,0.09930237587834556,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0007656043164696943,0.04592593000844257,-0.12555676475405272],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_387","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.7210640617129949,2.0,0,0,0.0,0.0,0,0,0.0001793421479272297,0.000990976730503606,0.0008620566529336098,-0.32209066656506485,0.3901427559004512,-0.0,0.12928073185512462,0.32361838662734904,0.9140275578605049,0.8258599079027398,0.24844878496896738,0.0,-0.15734840427633606,0.06285834705833625,-0.8023183058031488,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,5.040845258961589,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.0001793421479272297,0.000990976730503606,0.0008620566529336098,0.5973651546778567,-0.22012850957208094,0.0,0.0,0.0,4.053016887497253e-13,-1.090378104231212,1.2714670153443959,-0.0,0.0,-0.0,-9.312400239492502e-13,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,2.805552781295639e-12,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.0001793421479272297,0.000990976730503606,0.0008620566529336098,-0.3709784555813308,-0.9286414730640079,0.0,0,0,0,0,0,0,0],[1,1,1,1,1,0.7210640617129949,2.0,0,0,0.0,0.0,0,0,0.0001793421479272297,0.000990976730503606,0.0008620566529336098,-0.32209066656506485,0.3901427559004512,-0.0,0.12928073185512462,0.32361838662734904,0.9140275578605049,0.8258599079027398,0.24844878496896738,0.0,-0.15734840427633606,0.06285834705833625,-0.8023183058031488,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,5.040845258961589,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.0001793421479272297,0.000990976730503606,0.0008620566529336098,0.5973651546778567,-0.22012850957208094,0.0,0.0,0.0,4.053016887497253e-13,-1.090378104231212,1.2714670153443959,-0.0,0.0,-0.0,-9.312400239492502e-13,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,2.805552781295639e-12,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.0001793421479272297,0.000990976730503606,0.0008620566529336098,0.3709784555813308,0.9286414730640079,-0.0,0,0,0,0,0,0,0],[1,1,1,1,1,0.7210640617129949,2.0,0,0,0.0,0.0,0,0,0.0001793421479272297,0.000990976730503606,0.0008620566529336098,-0.32209066656506485,0.3901427559004512,-0.0,0.12928073185512462,0.32361838662734904,0.9140275578605049,0.8258599079027398,0.24844878496896738,0.0,-0.15734840427633606,0.06285834705833625,-0.8023183058031488,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,5.040845258961589,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.0001793421479272297,0.000990976730503606,0.0008620566529336098,0.5973651546778567,-0.22012850957208094,0.0,0.0,0.0,4.053016887497253e-13,-1.090378104231212,1.2714670153443959,-0.0,0.0,-0.0,-9.312400239492502e-13,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.0,2.805552781295639e-12,1.23456e-61,1.23456e-61,1.23456e-61,0,0,1,0.0001793421479272297,0.000990976730503606,0.0008620566529336098,-0.800908245596741,0.5443143350580417,0.24953534175637787,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.0001793421479272297,0.000990976730503606,0.0008620566529336098],[0.5973651546778567,-0.22012850957208094,0.0],[0.0,0.0,4.053016887497253e-13]],[[-1.090378104231212,1.2714670153443959,-0.0],[0.0,-0.0,-9.312400239492502e-13],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.0,2.805552781295639e-12],[1.23456e-61,1.23456e-61,1.23456e-61],[0,0,1]]],"normal":[0,0,1]},{"op":"state"}]}}, +{"name":"adv_sing_388","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,0.0,2.0,0,0,-0.4939390854804615,1.13470766500861,0.7896472288648559,15.148758287086043,11.462689366422529,4.045868595804472,41.08118792794554,-78.96729339276189,69.9104682971876,-6.531271207031141,5.19532344463531,9.735429880154264,-0.0001197470035087215,0.0002299156784978668,-0.00020303022005872134,1.23456e-61,1.23456e-61,1.23456e-61,17.775602734635786,-34.31329608976126,30.659509087710784,1.23456e-61,1.23456e-61,1.23456e-61,-0.363668997492871,0.6982488234131277,-0.6165982815940318,-0.4939390854804615,1.13470766500861,0.7896472288648559,-0.37200720580016144,0.046609076135551084,0.27219054151693367,0.43702656131924705,-0.4354275601354466,-0.40269199072339557,0.24552403400089623,-0.18966012334151267,-0.35958490948745686,-0.545427469105865,-0.2199039789094726,-0.24856246278666516,1.23456e-61,1.23456e-61,1.23456e-61,-0.2767359803387135,0.12787985723483358,0.6738625665234943,1.23456e-61,1.23456e-61,1.23456e-61,-0.363668997492871,0.6982488234131277,-0.6165982815940318,-0.4939390854804615,1.13470766500861,0.7896472288648559,-0.1575663578041367,0.987222142666357,-0.02377570014922519,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.0,2.0,0,0,-0.4939390854804615,1.13470766500861,0.7896472288648559,15.148758287086043,11.462689366422529,4.045868595804472,41.08118792794554,-78.96729339276189,69.9104682971876,-6.531271207031141,5.19532344463531,9.735429880154264,-0.0001197470035087215,0.0002299156784978668,-0.00020303022005872134,1.23456e-61,1.23456e-61,1.23456e-61,17.775602734635786,-34.31329608976126,30.659509087710784,1.23456e-61,1.23456e-61,1.23456e-61,-0.363668997492871,0.6982488234131277,-0.6165982815940318,-0.4939390854804615,1.13470766500861,0.7896472288648559,-0.37200720580016144,0.046609076135551084,0.27219054151693367,0.43702656131924705,-0.4354275601354466,-0.40269199072339557,0.24552403400089623,-0.18966012334151267,-0.35958490948745686,-0.545427469105865,-0.2199039789094726,-0.24856246278666516,1.23456e-61,1.23456e-61,1.23456e-61,-0.2767359803387135,0.12787985723483358,0.6738625665234943,1.23456e-61,1.23456e-61,1.23456e-61,-0.363668997492871,0.6982488234131277,-0.6165982815940318,-0.4939390854804615,1.13470766500861,0.7896472288648559,0.27060190482358104,0.9953240012701157,0.9675250599346236,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.4939390854804615,1.13470766500861,0.7896472288648559],[-0.37200720580016144,0.046609076135551084,0.27219054151693367],[0.43702656131924705,-0.4354275601354466,-0.40269199072339557]],[[0.24552403400089623,-0.18966012334151267,-0.35958490948745686],[-0.545427469105865,-0.2199039789094726,-0.24856246278666516],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.2767359803387135,0.12787985723483358,0.6738625665234943],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.363668997492871,0.6982488234131277,-0.6165982815940318]]],"normal":[-0.363668997492871,0.6982488234131277,-0.6165982815940318]},{"op":"state"}]}}, +{"name":"adv_sing_389","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[5,1,1,1,1,1.5464949737869562,0.0,0,0,1.5202587486006198,1.0773176777429123,0,0,-0.7648780529137862,0.7968479897354288,1.995327822418643,-15.103100341705384,6.271317323418447,-23.117408616321985,6.611244517664507e-11,-1.804688265330067e-11,-4.808846179977162e-11,-6.313140089444229,-19.802876362163246,-1.2476369570707455,0.3071177935763577,-0.12752567988791497,0.4700867617689296,1.23456e-61,1.23456e-61,1.23456e-61,3.0663308103916097e-10,-8.370241361287053e-11,-2.2303687550353953e-10,1.23456e-61,1.23456e-61,1.23456e-61,0.7896848006150992,-0.21556227260567687,-0.5743960500443636,-0.7648780529137862,0.7968479897354288,1.995327822418643,2.9810368329979084,4.348780541377127,2.4663234721412266,0.0,-0.0,-0.0,1.8458834531210904,-1.1221516586964244,2.958863780943836,0.0,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.7896848006150992,-0.21556227260567687,-0.5743960500443636,-0.7648780529137862,0.7968479897354288,1.995327822418643,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.7648780529137862,0.7968479897354288,1.995327822418643],[2.9810368329979084,4.348780541377127,2.4663234721412266],[0.0,-0.0,-0.0]],[[1.8458834531210904,-1.1221516586964244,2.958863780943836],[0.0,0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0.7896848006150992,-0.21556227260567687,-0.5743960500443636]]],"normal":[-0.7896848006150992,0.21556227260567687,0.5743960500443636]},{"op":"state"}]}}, +{"name":"adv_sing_390","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.027183732796848714,0.0,0,0,0.9159344496832844,0.0,0,0,1.8389642980161023,0.05064833711901695,-0.756704435760033,-45.43126708442733,47.04853092444769,-14.062828118550943,-0.0,0.0,0.0,-14.9259472652178,17.79424700937163,1.8630938232204421,-0.36763519324076466,0.22429682419859445,-0.5477584894098448,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.733510981696821,-0.6394062666221937,0.23048051096444952,1.8389642980161023,0.05064833711901695,-0.756704435760033,-8.06932366276142,8.563897408536675,-1.9226261253905008,1.0024040832538145e-05,8.738021222769949e-06,-3.149708880523377e-06,-10.66392591138721,10.807403604159495,-3.9560185361163853,0.00814128936323366,-0.004966922760362654,0.012129958950430057,1.23456e-61,1.23456e-61,1.23456e-61,0.326224413256488,-0.5316712881153054,-0.43665915047147796,1.23456e-61,1.23456e-61,1.23456e-61,-0.733510981696821,-0.6394062666221937,0.23048051096444952,1.8389642980161023,0.05064833711901695,-0.756704435760033,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,0.027183732796848714,0.0,0,0,0.9159344496832844,0.0,0,0,1.8389642980161023,0.05064833711901695,-0.756704435760033,-45.43126708442733,47.04853092444769,-14.062828118550943,-0.0,0.0,0.0,-14.9259472652178,17.79424700937163,1.8630938232204421,-0.36763519324076466,0.22429682419859445,-0.5477584894098448,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.733510981696821,-0.6394062666221937,0.23048051096444952,1.8389642980161023,0.05064833711901695,-0.756704435760033,-8.06932366276142,8.563897408536675,-1.9226261253905008,1.0024040832538145e-05,8.738021222769949e-06,-3.149708880523377e-06,-10.66392591138721,10.807403604159495,-3.9560185361163853,0.00814128936323366,-0.004966922760362654,0.012129958950430057,1.23456e-61,1.23456e-61,1.23456e-61,0.326224413256488,-0.5316712881153054,-0.43665915047147796,1.23456e-61,1.23456e-61,1.23456e-61,-0.733510981696821,-0.6394062666221937,0.23048051096444952,1.8389642980161023,0.05064833711901695,-0.756704435760033,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.8389642980161023,0.05064833711901695,-0.756704435760033],[-8.06932366276142,8.563897408536675,-1.9226261253905008],[1.0024040832538145e-05,8.738021222769949e-06,-3.149708880523377e-06]],[[-10.66392591138721,10.807403604159495,-3.9560185361163853],[0.00814128936323366,-0.004966922760362654,0.012129958950430057],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.326224413256488,-0.5316712881153054,-0.43665915047147796],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.733510981696821,-0.6394062666221937,0.23048051096444952]]],"normal":[0.733510981696821,0.6394062666221937,-0.23048051096444952]},{"op":"state"}]}}, +{"name":"adv_sing_391","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0,0,1,1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,0.0,0,0,0.0,2.0,0,0,-62.14971496941257,113.7735116652625,837.714527369054,5.903672812683958,0.0,13.2872711542277,-0.18762257192428702,-2.114049274051952e-10,0.414776048555376,25.314139164088246,0.0,-10.745328069149096,0.0,-6.67030746360797e-12,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.2167832214778446,-7.562677169324698e-10,0.47924131449370644,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-62.14971496941257,113.7735116652625,837.714527369054,0.7256672644795632,0.0,0.06357619864216374,0.0,0.04606226574704124,-0.0,0.7317090155478062,0.0,0.5931240654471983,0.7561535394038364,-0.02333900319487358,0.34204354934843717,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.011825494495819967,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-62.14971496941257,113.7735116652625,837.714527369054,0.41214195446654156,0.0,-0.911119646022683,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.0,2.0,0,0,-62.14971496941257,113.7735116652625,837.714527369054,5.903672812683958,0.0,13.2872711542277,-0.18762257192428702,-2.114049274051952e-10,0.414776048555376,25.314139164088246,0.0,-10.745328069149096,0.0,-6.67030746360797e-12,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-0.2167832214778446,-7.562677169324698e-10,0.47924131449370644,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-62.14971496941257,113.7735116652625,837.714527369054,0.7256672644795632,0.0,0.06357619864216374,0.0,0.04606226574704124,-0.0,0.7317090155478062,0.0,0.5931240654471983,0.7561535394038364,-0.02333900319487358,0.34204354934843717,1.23456e-61,1.23456e-61,1.23456e-61,0.0,0.011825494495819967,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-62.14971496941257,113.7735116652625,837.714527369054,-0.41214195446654156,-0.0,0.911119646022683,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-62.14971496941257,113.7735116652625,837.714527369054],[0.7256672644795632,0.0,0.06357619864216374],[0.0,0.04606226574704124,-0.0]],[[0.7317090155478062,0.0,0.5931240654471983],[0.7561535394038364,-0.02333900319487358,0.34204354934843717],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,0.011825494495819967,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_392","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[0,0,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.541058483073305,1.8731568090557336,0,0,0.14672751223098235,2.0,0,0,0.017851583876114407,-0.9751119813690068,-0.5340138595684611,-0.0,-0.009301953488668913,2.393436625884248,-12.696100650475664,-0.24387020250132752,0.3108821080847107,0.0,1.9392856320070813,1.2047451431491116,-10.89321708393934,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-14.461669361059402,-0.49078248418832815,0.6256422134831666,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.017851583876114407,-0.9751119813690068,-0.5340138595684611,0.0,-0.032475341695369975,-0.01109825149026935,-0.0032676266164808373,0.0,-0.0,0.0,0.0031243500098455156,-0.0184171617227342,-0.0010036010807089337,0.12602712595013105,0.09886146525275154,1.23456e-61,1.23456e-61,1.23456e-61,-0.0007371237172752543,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.017851583876114407,-0.9751119813690068,-0.5340138595684611,0.0,-0.7868029056146558,-0.6172043322242116,0,0,0,0,0,0,0],[1,1,1,1,1,0.541058483073305,1.8731568090557336,0,0,0.14672751223098235,2.0,0,0,0.017851583876114407,-0.9751119813690068,-0.5340138595684611,-0.0,-0.009301953488668913,2.393436625884248,-12.696100650475664,-0.24387020250132752,0.3108821080847107,0.0,1.9392856320070813,1.2047451431491116,-10.89321708393934,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,-14.461669361059402,-0.49078248418832815,0.6256422134831666,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.017851583876114407,-0.9751119813690068,-0.5340138595684611,0.0,-0.032475341695369975,-0.01109825149026935,-0.0032676266164808373,0.0,-0.0,0.0,0.0031243500098455156,-0.0184171617227342,-0.0010036010807089337,0.12602712595013105,0.09886146525275154,1.23456e-61,1.23456e-61,1.23456e-61,-0.0007371237172752543,0.0,-0.0,1.23456e-61,1.23456e-61,1.23456e-61,1,0,0,0.017851583876114407,-0.9751119813690068,-0.5340138595684611,0.0,1.4040072378388673,-0.16959857339044426,0,0,0,0,0,0,0]],"ops":[{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[0.017851583876114407,-0.9751119813690068,-0.5340138595684611],[0.0,-0.032475341695369975,-0.01109825149026935],[-0.0032676266164808373,0.0,-0.0]],[[0.0,0.0031243500098455156,-0.0184171617227342],[-0.0010036010807089337,0.12602712595013105,0.09886146525275154],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0007371237172752543,0.0,-0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[1,0,0]]],"normal":[1,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_393","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,0.3002656109606201,0.0,0,0,0.38689641440504174,2.0,0,0,1.9379664070408937,0.9794102831465303,1.215562087584328,0.21797984575691606,0.13359464093615822,0.22720214005413714,829.9665799098531,45.92837721216319,-823.1414136719377,0.18824479171270134,0.17404504501441834,0.1995271686370938,777.621676803579,43.780170127323665,-771.362251737104,1.23456e-61,1.23456e-61,1.23456e-61,748.8824295682351,41.179616845862256,-742.513019978709,1.23456e-61,1.23456e-61,1.23456e-61,0.7092331636556897,0.03980366232091775,-0.7038494072149126,1.9379664070408937,0.9794102831465303,1.215562087584328,0.013807072654802447,0.011752483569264852,0.01457730247697688,8.247337319956521e-05,4.628579803547074e-06,-8.18473216034059e-05,-0.0070603980931670165,0.01599702884864076,-0.0062097489847307815,-0.17913174435665435,-0.1527695971272202,-0.18988178573035897,1.23456e-61,1.23456e-61,1.23456e-61,0.0016569330900865925,9.299058276719153e-05,-0.0016443553869378703,1.23456e-61,1.23456e-61,1.23456e-61,0.7092331636556897,0.03980366232091775,-0.7038494072149126,1.9379664070408937,0.9794102831465303,1.215562087584328,-0.038765462222888174,0.9382959895626756,0.3436537136555419,0,0,0,0,0,0,0],[1,1,1,1,1,0.3002656109606201,0.0,0,0,0.38689641440504174,2.0,0,0,1.9379664070408937,0.9794102831465303,1.215562087584328,0.21797984575691606,0.13359464093615822,0.22720214005413714,829.9665799098531,45.92837721216319,-823.1414136719377,0.18824479171270134,0.17404504501441834,0.1995271686370938,777.621676803579,43.780170127323665,-771.362251737104,1.23456e-61,1.23456e-61,1.23456e-61,748.8824295682351,41.179616845862256,-742.513019978709,1.23456e-61,1.23456e-61,1.23456e-61,0.7092331636556897,0.03980366232091775,-0.7038494072149126,1.9379664070408937,0.9794102831465303,1.215562087584328,0.013807072654802447,0.011752483569264852,0.01457730247697688,8.247337319956521e-05,4.628579803547074e-06,-8.18473216034059e-05,-0.0070603980931670165,0.01599702884864076,-0.0062097489847307815,-0.17913174435665435,-0.1527695971272202,-0.18988178573035897,1.23456e-61,1.23456e-61,1.23456e-61,0.0016569330900865925,9.299058276719153e-05,-0.0016443553869378703,1.23456e-61,1.23456e-61,1.23456e-61,0.7092331636556897,0.03980366232091775,-0.7038494072149126,1.9379664070408937,0.9794102831465303,1.215562087584328,0.3804969079505064,-0.8621071974955098,0.33465397512436923,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[1.9379664070408937,0.9794102831465303,1.215562087584328],[0.013807072654802447,0.011752483569264852,0.01457730247697688],[8.247337319956521e-05,4.628579803547074e-06,-8.18473216034059e-05]],[[-0.0070603980931670165,0.01599702884864076,-0.0062097489847307815],[-0.17913174435665435,-0.1527695971272202,-0.18988178573035897],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0016569330900865925,9.299058276719153e-05,-0.0016443553869378703],[1.23456e-61,1.23456e-61,1.23456e-61],[0.7092331636556897,0.03980366232091775,-0.7038494072149126]]],"normal":[0.7092331636556897,0.03980366232091775,-0.7038494072149126]},{"op":"state"}]}}, +{"name":"adv_sing_394","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.8525535490467475,1.9454479462969114,0,0,1.3169717101221612,2.0,0,0,-0.5307948090051615,0.722990530348276,0.47712829095172693,-1.8756399127495016,-4.481946131109174,-4.817162226271933,9445.282710450698,-6343.106907522318,2224.0301906437435,-2.7725760903397507,-0.5928907157299186,10.083943963301717,-28915.53148850952,19418.614894025963,-6808.585510923938,1.23456e-61,1.23456e-61,1.23456e-61,88765.6440298623,-59611.8879708763,20901.04210642932,1.23456e-61,1.23456e-61,1.23456e-61,-0.8147491594351954,0.5471557791905192,-0.19184462592957408,-0.5307948090051615,0.722990530348276,0.47712829095172693,-0.3005499463212227,-0.6083829210995074,-0.4587431869955179,-1.6394954370446957,1.1010252578319386,-0.38604321979432565,-1.029914037413691,-1.6709107890001877,-0.39160283002927954,-4.962597283185608,3.7098966225049606,-1.442952873907812,1.23456e-61,1.23456e-61,1.23456e-61,-17.51766303217032,11.764222711943132,-4.124790400393593,1.23456e-61,1.23456e-61,1.23456e-61,-0.8147491594351954,0.5471557791905192,-0.19184462592957408,-0.5307948090051615,0.722990530348276,0.47712829095172693,0.5440293499975806,0.6069688107099469,-0.579327997913585,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":0},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.5307948090051615,0.722990530348276,0.47712829095172693],[-0.3005499463212227,-0.6083829210995074,-0.4587431869955179],[-1.6394954370446957,1.1010252578319386,-0.38604321979432565]],[[-1.029914037413691,-1.6709107890001877,-0.39160283002927954],[-4.962597283185608,3.7098966225049606,-1.442952873907812],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-17.51766303217032,11.764222711943132,-4.124790400393593],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.8147491594351954,0.5471557791905192,-0.19184462592957408]]],"normal":[0.8147491594351954,-0.5471557791905192,0.19184462592957408]},{"op":"state"}]}}, +{"name":"adv_sing_395","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0.5,0.5,2.0,2.0],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,0.0,1.097267786472482,0,0,1.0005403036379321,0.0,0,0,-0.00026526221371208394,-0.0004557307654250573,0.0007361400263254084,0.16083536618208868,0.5432501268024005,0.060374057957309865,-1233.5011627334632,523.0270719860075,-1420.2111781826422,0.21032616511797392,-0.040317710909114124,-0.19752331753312494,-255.13681452940185,109.1592821322041,-293.95516886607703,1.23456e-61,1.23456e-61,1.23456e-61,-52.349149227858284,22.21853830107377,-60.46685095476378,1.23456e-61,1.23456e-61,1.23456e-61,0.6317691765885576,-0.26788169527937816,0.7273974875175625,-0.00026526221371208394,-0.0004557307654250573,0.0007361400263254084,0.06921763941050037,0.2337949188622218,0.025982778990950008,0.2659013823680635,-0.11274705339459118,0.30614978480968075,0.16178221735946993,-0.03101225501865608,-0.15193430771099414,-0.03853783827368139,-0.13016842020408384,-0.01446625662449472,1.23456e-61,1.23456e-61,1.23456e-61,0.22208895078272528,-0.09416978042478998,0.2557056450222707,1.23456e-61,1.23456e-61,1.23456e-61,-0.6317691765885576,0.26788169527937816,-0.7273974875175625,-0.00026526221371208394,-0.0004557307654250573,0.0007361400263254084,0.721930755575479,-0.1383878961676705,-0.677985821642683,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.097267786472482,0,0,1.0005403036379321,0.0,0,0,-0.00026526221371208394,-0.0004557307654250573,0.0007361400263254084,0.16083536618208868,0.5432501268024005,0.060374057957309865,-1233.5011627334632,523.0270719860075,-1420.2111781826422,0.21032616511797392,-0.040317710909114124,-0.19752331753312494,-255.13681452940185,109.1592821322041,-293.95516886607703,1.23456e-61,1.23456e-61,1.23456e-61,-52.349149227858284,22.21853830107377,-60.46685095476378,1.23456e-61,1.23456e-61,1.23456e-61,0.6317691765885576,-0.26788169527937816,0.7273974875175625,-0.00026526221371208394,-0.0004557307654250573,0.0007361400263254084,0.06921763941050037,0.2337949188622218,0.025982778990950008,0.2659013823680635,-0.11274705339459118,0.30614978480968075,0.16178221735946993,-0.03101225501865608,-0.15193430771099414,-0.03853783827368139,-0.13016842020408384,-0.01446625662449472,1.23456e-61,1.23456e-61,1.23456e-61,0.22208895078272528,-0.09416978042478998,0.2557056450222707,1.23456e-61,1.23456e-61,1.23456e-61,-0.6317691765885576,0.26788169527937816,-0.7273974875175625,-0.00026526221371208394,-0.0004557307654250573,0.0007361400263254084,0.8712685649611928,0.001062549997197329,0.4908054183665532,0,0,0,0,0,0,0],[1,1,1,1,1,0.0,1.097267786472482,0,0,1.0005403036379321,0.0,0,0,-0.00026526221371208394,-0.0004557307654250573,0.0007361400263254084,0.16083536618208868,0.5432501268024005,0.060374057957309865,-1233.5011627334632,523.0270719860075,-1420.2111781826422,0.21032616511797392,-0.040317710909114124,-0.19752331753312494,-255.13681452940185,109.1592821322041,-293.95516886607703,1.23456e-61,1.23456e-61,1.23456e-61,-52.349149227858284,22.21853830107377,-60.46685095476378,1.23456e-61,1.23456e-61,1.23456e-61,0.6317691765885576,-0.26788169527937816,0.7273974875175625,-0.00026526221371208394,-0.0004557307654250573,0.0007361400263254084,0.06921763941050037,0.2337949188622218,0.025982778990950008,0.2659013823680635,-0.11274705339459118,0.30614978480968075,0.16178221735946993,-0.03101225501865608,-0.15193430771099414,-0.03853783827368139,-0.13016842020408384,-0.01446625662449472,1.23456e-61,1.23456e-61,1.23456e-61,0.22208895078272528,-0.09416978042478998,0.2557056450222707,1.23456e-61,1.23456e-61,1.23456e-61,-0.6317691765885576,0.26788169527937816,-0.7273974875175625,-0.00026526221371208394,-0.0004557307654250573,0.0007361400263254084,-0.8954775836052088,-0.4446024234244029,-0.0211797626456036,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[-0.00026526221371208394,-0.0004557307654250573,0.0007361400263254084],[0.06921763941050037,0.2337949188622218,0.025982778990950008],[0.2659013823680635,-0.11274705339459118,0.30614978480968075]],[[0.16178221735946993,-0.03101225501865608,-0.15193430771099414],[-0.03853783827368139,-0.13016842020408384,-0.01446625662449472],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.22208895078272528,-0.09416978042478998,0.2557056450222707],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.6317691765885576,0.26788169527937816,-0.7273974875175625]]],"normal":[-0.6317691765885576,0.26788169527937816,-0.7273974875175625]},{"op":"state"}]}}, +{"name":"adv_sing_396","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":null,"dom1":[-0.1,0,2.0,2.1],"dom2":[0,0,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,2.0,2.0,0,0,0.5734945393467716,-0.6702577618596366,0.5091938501239506,0.11846940078965451,-0.1511084818462233,0.12044299010965911,-348.0929339787642,-348.70779861769074,-95.26944358262028,-0.1183187771763729,0.1363173509956742,-0.06665222842148107,279.50204575742873,279.839620846331,76.1663287983327,1.23456e-61,1.23456e-61,1.23456e-61,-224.33160535645607,-224.60254706429427,-61.13198480223829,1.23456e-61,1.23456e-61,1.23456e-61,-0.6939297437708629,-0.6947678535396503,-0.18910087360457012,0.5734945393467716,-0.6702577618596366,0.5091938501239506,-6.573496813675205,7.534344689695987,-3.559346477178084,-0.14084331475745732,0.04433370550796404,0.3539578143156531,-2.099513944787971,0.6608707917616334,5.276355276799089,0.4674174543326257,-0.5357398527365044,0.2530921846633122,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.6939297437708629,0.6947678535396503,0.18910087360457012,0.5734945393467716,-0.6702577618596366,0.5091938501239506,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,2.0,2.0,0,0,0.5734945393467716,-0.6702577618596366,0.5091938501239506,0.11846940078965451,-0.1511084818462233,0.12044299010965911,-348.0929339787642,-348.70779861769074,-95.26944358262028,-0.1183187771763729,0.1363173509956742,-0.06665222842148107,279.50204575742873,279.839620846331,76.1663287983327,1.23456e-61,1.23456e-61,1.23456e-61,-224.33160535645607,-224.60254706429427,-61.13198480223829,1.23456e-61,1.23456e-61,1.23456e-61,-0.6939297437708629,-0.6947678535396503,-0.18910087360457012,0.5734945393467716,-0.6702577618596366,0.5091938501239506,-6.573496813675205,7.534344689695987,-3.559346477178084,-0.14084331475745732,0.04433370550796404,0.3539578143156531,-2.099513944787971,0.6608707917616334,5.276355276799089,0.4674174543326257,-0.5357398527365044,0.2530921846633122,1.23456e-61,1.23456e-61,1.23456e-61,-0.0,0.0,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.6939297437708629,0.6947678535396503,0.18910087360457012,0.5734945393467716,-0.6702577618596366,0.5091938501239506,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.3,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[0.5734945393467716,-0.6702577618596366,0.5091938501239506],[-6.573496813675205,7.534344689695987,-3.559346477178084],[-0.14084331475745732,0.04433370550796404,0.3539578143156531]],[[-2.099513944787971,0.6608707917616334,5.276355276799089],[0.4674174543326257,-0.5357398527365044,0.2530921846633122],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0,0.0,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0.6939297437708629,0.6947678535396503,0.18910087360457012]]],"normal":[0,0,0]},{"op":"state"}]}}, +{"name":"adv_sing_397","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,2.0,2.0],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,1.0554292220288102,0,0,2.0,0.0,0,0,2.1922610571653456e-05,-0.0004749947952933309,0.000891612244023466,-1.8059407233012466,0.0,3.0057026122443085,-0.4972578661210778,16214.084111014692,-0.29877148416203364,1.7343361932203136,0.0,1.0420553072924037,-0.11861388945826754,-24005.038784609966,0.1974140528496749,1.23456e-61,1.23456e-61,1.23456e-61,0.4773195705301633,35539.589106927786,0.28679179601385585,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,2.1922610571653456e-05,-0.0004749947952933309,0.000891612244023466,1.143676944763766,0.0,-1.2519516868516465,0.0,8395.602441211879,0.0,-0.6236787618363022,0.0,0.22787346693340874,0.0,-5280.680955921441,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,3321.613261746705,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,2.1922610571653456e-05,-0.0004749947952933309,0.000891612244023466,0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,1.0554292220288102,0,0,2.0,0.0,0,0,2.1922610571653456e-05,-0.0004749947952933309,0.000891612244023466,-1.8059407233012466,0.0,3.0057026122443085,-0.4972578661210778,16214.084111014692,-0.29877148416203364,1.7343361932203136,0.0,1.0420553072924037,-0.11861388945826754,-24005.038784609966,0.1974140528496749,1.23456e-61,1.23456e-61,1.23456e-61,0.4773195705301633,35539.589106927786,0.28679179601385585,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,2.1922610571653456e-05,-0.0004749947952933309,0.000891612244023466,1.143676944763766,0.0,-1.2519516868516465,0.0,8395.602441211879,0.0,-0.6236787618363022,0.0,0.22787346693340874,0.0,-5280.680955921441,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0.0,3321.613261746705,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,2.1922610571653456e-05,-0.0004749947952933309,0.000891612244023466,0,-1,0,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":1.0,"ang":0.01,"approx":0.001,"tol":0.0,"sop":0},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[2.1922610571653456e-05,-0.0004749947952933309,0.000891612244023466],[1.143676944763766,0.0,-1.2519516868516465],[0.0,8395.602441211879,0.0]],[[-0.6236787618363022,0.0,0.22787346693340874],[0.0,-5280.680955921441,0.0],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,3321.613261746705,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,-1,0]},{"op":"state"}]}}, +{"name":"adv_sing_398","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[0,0,1,1],"dom2":[0.5,0.5,2.0,2.0],"fillet":false,"trees":null,"points":[[1,1,1,1,1,2.0,0.0,0,0,0.0,2.0,0,0,1.0581323648940466,1.7571786691376454,-1.9887225201970877,-0.1526032239109975,-0.05210502230150997,0.017676990458710747,0.21642534695970156,0.3978638970125014,-0.28100216521883625,-0.032803867155132824,-0.08513898450119553,0.06221076192734787,1.3516735808855223e-09,-6.938354648941265e-09,-8.78279467101891e-09,1.23456e-61,1.23456e-61,1.23456e-61,1.4601307901421568e-09,-7.495082687943085e-09,-9.487519105204198e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.11989195677463203,0.6154244097254319,0.7790242066937674,1.0581323648940466,1.7571786691376454,-1.9887225201970877,0.7317704286998211,-0.20444707717414864,0.27413154631351677,-0.29554301349172335,-0.2729844736805531,0.5853348951698201,-0.6316522711792214,-1.16119315096187,0.8201241722983516,0.006943530495509807,-0.03564224216176801,-0.045117107781354006,1.23456e-61,1.23456e-61,1.23456e-61,-0.0012430794713039696,0.006380923878881244,0.008077180697035585,1.23456e-61,1.23456e-61,1.23456e-61,-0.11989195677463203,0.6154244097254319,0.7790242066937674,1.0581323648940466,1.7571786691376454,-1.9887225201970877,0.042884216500530925,0.6848163322712622,-0.72745277168327,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.0,2.0,0,0,1.0581323648940466,1.7571786691376454,-1.9887225201970877,-0.1526032239109975,-0.05210502230150997,0.017676990458710747,0.21642534695970156,0.3978638970125014,-0.28100216521883625,-0.032803867155132824,-0.08513898450119553,0.06221076192734787,1.3516735808855223e-09,-6.938354648941265e-09,-8.78279467101891e-09,1.23456e-61,1.23456e-61,1.23456e-61,1.4601307901421568e-09,-7.495082687943085e-09,-9.487519105204198e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.11989195677463203,0.6154244097254319,0.7790242066937674,1.0581323648940466,1.7571786691376454,-1.9887225201970877,0.7317704286998211,-0.20444707717414864,0.27413154631351677,-0.29554301349172335,-0.2729844736805531,0.5853348951698201,-0.6316522711792214,-1.16119315096187,0.8201241722983516,0.006943530495509807,-0.03564224216176801,-0.045117107781354006,1.23456e-61,1.23456e-61,1.23456e-61,-0.0012430794713039696,0.006380923878881244,0.008077180697035585,1.23456e-61,1.23456e-61,1.23456e-61,-0.11989195677463203,0.6154244097254319,0.7790242066937674,1.0581323648940466,1.7571786691376454,-1.9887225201970877,-0.11989195677463203,0.6154244097254319,0.7790242066937674,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,0.0,0,0,0.0,2.0,0,0,1.0581323648940466,1.7571786691376454,-1.9887225201970877,-0.1526032239109975,-0.05210502230150997,0.017676990458710747,0.21642534695970156,0.3978638970125014,-0.28100216521883625,-0.032803867155132824,-0.08513898450119553,0.06221076192734787,1.3516735808855223e-09,-6.938354648941265e-09,-8.78279467101891e-09,1.23456e-61,1.23456e-61,1.23456e-61,1.4601307901421568e-09,-7.495082687943085e-09,-9.487519105204198e-09,1.23456e-61,1.23456e-61,1.23456e-61,-0.11989195677463203,0.6154244097254319,0.7790242066937674,1.0581323648940466,1.7571786691376454,-1.9887225201970877,0.7317704286998211,-0.20444707717414864,0.27413154631351677,-0.29554301349172335,-0.2729844736805531,0.5853348951698201,-0.6316522711792214,-1.16119315096187,0.8201241722983516,0.006943530495509807,-0.03564224216176801,-0.045117107781354006,1.23456e-61,1.23456e-61,1.23456e-61,-0.0012430794713039696,0.006380923878881244,0.008077180697035585,1.23456e-61,1.23456e-61,1.23456e-61,-0.11989195677463203,0.6154244097254319,0.7790242066937674,1.0581323648940466,1.7571786691376454,-1.9887225201970877,0.40604500016518147,0.7464497393382131,-0.5272003836140216,0,0,0,0,0,0,0]],"ops":[{"op":"set","dir":-1.0,"ang":0.3490658503988659,"approx":0.001,"tol":0.0,"sop":0},{"op":"push","i":2},{"op":"sing","i":0,"prev":1},{"op":"dupin","eval":[[[1.0581323648940466,1.7571786691376454,-1.9887225201970877],[0.7317704286998211,-0.20444707717414864,0.27413154631351677],[-0.29554301349172335,-0.2729844736805531,0.5853348951698201]],[[-0.6316522711792214,-1.16119315096187,0.8201241722983516],[0.006943530495509807,-0.03564224216176801,-0.045117107781354006],[1.23456e-61,1.23456e-61,1.23456e-61]],[[-0.0012430794713039696,0.006380923878881244,0.008077180697035585],[1.23456e-61,1.23456e-61,1.23456e-61],[-0.11989195677463203,0.6154244097254319,0.7790242066937674]]],"normal":[0.11989195677463203,-0.6154244097254319,-0.7790242066937674]},{"op":"state"}]}}, +{"name":"adv_sing_399","inputs":{"a":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"b":{"kind":"plane","o":[0,0,0],"x":[1.0,0,0],"y":[0,1.0,0],"scale":[1,1],"domain":[0,0,2.0,2.0]},"dom1":[-0.1,0,2.0,2.1],"dom2":[-0.1,0,2.0,2.1],"fillet":false,"trees":null,"points":[[5,1,1,1,1,2.0,2.0,0,0,0.3710342679323617,0.0,0,0,-0.6022495963790664,-0.044692997055386874,-0.4463800643153475,0.020214419825795353,0.0,0.0023869675694815264,0.7682189009200255,5.5463518379757336e-11,-0.636875537189073,0.00428971346549992,0.0,-0.013060780729268414,-0.11131518488937328,-4.4440881644448587e-10,-0.13427180665291688,1.23456e-61,1.23456e-61,1.23456e-61,0.6986491721254527,-5.0752390057988e-10,-0.5792002335157594,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.6022495963790664,-0.044692997055386874,-0.4463800643153475,11.063063829806456,0.0,-32.95950406802521,-0.67589301961356,-0.0032627751723180234,0.5603347293762343,-5.649772479617212,0.0,7.285850706533863,-0.19664182435746635,0.0009283155447552687,-0.23719542887381193,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0002538665321642312,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.6022495963790664,-0.044692997055386874,-0.4463800643153475,0.7698485747230599,0.0,-0.6382265835867956,0,0,0,0,0,0,0],[1,1,1,1,1,2.0,2.0,0,0,0.3710342679323617,0.0,0,0,-0.6022495963790664,-0.044692997055386874,-0.4463800643153475,0.020214419825795353,0.0,0.0023869675694815264,0.7682189009200255,5.5463518379757336e-11,-0.636875537189073,0.00428971346549992,0.0,-0.013060780729268414,-0.11131518488937328,-4.4440881644448587e-10,-0.13427180665291688,1.23456e-61,1.23456e-61,1.23456e-61,0.6986491721254527,-5.0752390057988e-10,-0.5792002335157594,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.6022495963790664,-0.044692997055386874,-0.4463800643153475,11.063063829806456,0.0,-32.95950406802521,-0.67589301961356,-0.0032627751723180234,0.5603347293762343,-5.649772479617212,0.0,7.285850706533863,-0.19664182435746635,0.0009283155447552687,-0.23719542887381193,1.23456e-61,1.23456e-61,1.23456e-61,0.0,-0.0002538665321642312,0.0,1.23456e-61,1.23456e-61,1.23456e-61,0,-1,0,-0.6022495963790664,-0.044692997055386874,-0.4463800643153475,0,0,0,0,0,0,0,0,0,0]],"ops":[{"op":"push","i":1},{"op":"sing","i":0,"prev":null},{"op":"sing","i":0,"prev":null},{"op":"dupin","eval":[[[-0.6022495963790664,-0.044692997055386874,-0.4463800643153475],[11.063063829806456,0.0,-32.95950406802521],[-0.67589301961356,-0.0032627751723180234,0.5603347293762343]],[[-5.649772479617212,0.0,7.285850706533863],[-0.19664182435746635,0.0009283155447552687,-0.23719542887381193],[1.23456e-61,1.23456e-61,1.23456e-61]],[[0.0,-0.0002538665321642312,0.0],[1.23456e-61,1.23456e-61,1.23456e-61],[0,-1,0]]],"normal":[0,-1,0]},{"op":"state"}]}} +]} diff --git a/plan/findings.md b/plan/findings.md index 159dbd36ba..4d5ddf1e3d 100644 --- a/plan/findings.md +++ b/plan/findings.md @@ -2894,3 +2894,25 @@ with `CreateCanonical`, `MakeNurb` and `MakeNurbWithSweepParams` co-ported (unit - **`SmSpaceBend` / `SmSpaceUnbend` type queries** are compared through the static `GetClassType` / `GetClassTypeString` (an instance needs the unported bend units); the `IsKindOf` chains are unit-tested only. + +## intersect.adv_surface_intersector (`SmAdvSurfaceIntersector`, 2026-10-14) + +- **Lazy polar-box build not compared.** The shim's tree reader rejects patch/head nodes + without polar-box vectors, so the lazy-build path of `AdvSurfaceIntersector::polar_box` + (`cache.clone().polar_box(id)`) never runs against the C++. It only matters through + `BranchIsGaussSeparate`, which upstream `SolveBranch` never reaches (WR-61). Once + `surface.surface_cache_p3` can build real trees, add a direct `OP_GAUSS` case on a real + cache. +- **`FindInteriorCurves` after `LocalSurfaceIntersect` not compared.** `IsPointOnCurve`, + `ComputePointValues`, `TraceCurve` and `FlushCurve` sit behind unported units + (`surface.surface_p11`, `intersect.surface_intersector_p2`, `_p4`). The port propagates + `Unported` from `ComputePointValues` where upstream `continue`s on failure; other errors + still `continue`. When those units land, re-run the 16 deferred cases and re-check that + branch. +- **Review fixtures.** `fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json` + holds 398 reviewer singular-point programs: saddle/saddle, bowl/bowl and saddle/cylinder + Dupin intersections; curvatures at `EFF_ZERO_SQRT` and at a 1000x ratio; principal frames + swapped or rotated by tiny angles; opposite normals; trace direction -1; start points on + domain corners; the point itself or another point as the last curve node; zero previous + derivatives; 1e-3 and 1e3 scales. The reviewer's generator made 400; the 398 kept are the + ones it accepted as defined in the C++. All 398 pass bit-identical. diff --git a/plan/modules.toml b/plan/modules.toml index c8fb3962e8..ec88830966 100644 --- a/plan/modules.toml +++ b/plan/modules.toml @@ -2198,7 +2198,7 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin status = "partial" claimed_by = "" claimed_at = "" -notes = "PARTIAL: difftest 1533 cases (27 inline edge cases from the ComputeSingularityPoint docs + 6 LocalSolve/SolveIt cases on leaves >4x apart in size (DropPointsToTangentPlane) + 1500 generated programs: singular points with shape-tensor geometry, Dupin indicatrices, SolveIt/LocalSolve/SolveBranch/FindBestSubdivisionNode/BranchIsGaussSeparate/FindInteriorCurves over hand-built surface cache trees), 1517 pass bit-identical, 16 deferred (surface.surface_p11 16: LocalSurfaceIntersect in FindInteriorCurves); wired the surface.surface_p7 stubs (DropPointsToTangentPlane, non-planar EvaluateNormal); wired UNPORTED(intersect.adv_surface_intersector) in surface.surface_p2 (GlobalSurfaceIntersect, PointBasedSurfaceIntersect now stop at intersect.surface_intersector_p5 / _p4); base SolveBranch exposed as geom::global_solver::solve_branch; 11 fns; largest: SmAdvSurfaceIntersector::ComputeSingularityPoint, SmAdvSurfaceIntersector::FindInteriorCurves, SmAdvSurfaceIntersector::LocalSolve, SmAdvSurfaceIntersector::MakeDupin; cycle back-edges (call into later units; stub or co-port): intersect.surface_intersector_p2(2), blend.fillet_intersector(1), intersect.surface_intersector_p4(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit" +notes = "PARTIAL: difftest 1931 cases (398 review fixtures: adversarial singular-point programs; 27 inline edge cases from the ComputeSingularityPoint docs + 6 LocalSolve/SolveIt cases on leaves >4x apart in size (DropPointsToTangentPlane) + 1500 generated programs: singular points with shape-tensor geometry, Dupin indicatrices, SolveIt/LocalSolve/SolveBranch/FindBestSubdivisionNode/BranchIsGaussSeparate/FindInteriorCurves over hand-built surface cache trees), 1915 pass bit-identical, 16 deferred (surface.surface_p11 16: LocalSurfaceIntersect in FindInteriorCurves); wired the surface.surface_p7 stubs (DropPointsToTangentPlane, non-planar EvaluateNormal; CreateParallelProjectionCurves now stops at intersect.surface_intersector_p5 DoIntersection); wired UNPORTED(intersect.adv_surface_intersector) in surface.surface_p2 (GlobalSurfaceIntersect, PointBasedSurfaceIntersect now stop at intersect.surface_intersector_p5 / _p4); base SolveBranch exposed as geom::global_solver::solve_branch; 11 fns; largest: SmAdvSurfaceIntersector::ComputeSingularityPoint, SmAdvSurfaceIntersector::FindInteriorCurves, SmAdvSurfaceIntersector::LocalSolve, SmAdvSurfaceIntersector::MakeDupin; cycle back-edges (call into later units; stub or co-port): intersect.surface_intersector_p2(2), blend.fillet_intersector(1), intersect.surface_intersector_p4(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit" [[unit]] id = "intersect.curve_class_p2" diff --git a/reports/difftest/intersect.adv_surface_intersector.json b/reports/difftest/intersect.adv_surface_intersector.json index 0e855fdd8b..0655a91709 100644 --- a/reports/difftest/intersect.adv_surface_intersector.json +++ b/reports/difftest/intersect.adv_surface_intersector.json @@ -1,6 +1,3190 @@ { "abs_floors": [], "cases": [ + { + "max_rel_err": 0.0, + "name": "adv_sing_000", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#0", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_001", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#1", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_002", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#2", + "values_compared": 157 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_003", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#3", + "values_compared": 265 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_004", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#4", + "values_compared": 161 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_005", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#5", + "values_compared": 243 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_006", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#6", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_007", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#7", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_008", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#8", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_009", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#9", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_010", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#10", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_011", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#11", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_012", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#12", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_013", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#13", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_014", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#14", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_015", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#15", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_016", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#16", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_017", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#17", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_018", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#18", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_019", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#19", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_020", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#20", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_021", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#21", + "values_compared": 255 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_022", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#22", + "values_compared": 243 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_023", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#23", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_024", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#24", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_025", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#25", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_026", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#26", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_027", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#27", + "values_compared": 181 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_028", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#28", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_029", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#29", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_030", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#30", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_031", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#31", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_032", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#32", + "values_compared": 265 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_033", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#33", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_034", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#34", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_035", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#35", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_036", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#36", + "values_compared": 255 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_037", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#37", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_038", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#38", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_039", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#39", + "values_compared": 255 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_040", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#40", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_041", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#41", + "values_compared": 241 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_042", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#42", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_043", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#43", + "values_compared": 157 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_044", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#44", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_045", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#45", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_046", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#46", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_047", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#47", + "values_compared": 163 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_048", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#48", + "values_compared": 241 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_049", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#49", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_050", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#50", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_051", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#51", + "values_compared": 251 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_052", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#52", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_053", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#53", + "values_compared": 181 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_054", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#54", + "values_compared": 161 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_055", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#55", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_056", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#56", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_057", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#57", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_058", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#58", + "values_compared": 161 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_059", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#59", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_060", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#60", + "values_compared": 267 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_061", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#61", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_062", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#62", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_063", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#63", + "values_compared": 181 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_064", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#64", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_065", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#65", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_066", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#66", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_067", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#67", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_068", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#68", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_069", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#69", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_070", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#70", + "values_compared": 169 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_071", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#71", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_072", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#72", + "values_compared": 267 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_073", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#73", + "values_compared": 265 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_074", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#74", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_075", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#75", + "values_compared": 267 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_076", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#76", + "values_compared": 239 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_077", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#77", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_078", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#78", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_079", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#79", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_080", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#80", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_081", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#81", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_082", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#82", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_083", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#83", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_084", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#84", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_085", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#85", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_086", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#86", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_087", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#87", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_088", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#88", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_089", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#89", + "values_compared": 267 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_090", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#90", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_091", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#91", + "values_compared": 169 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_092", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#92", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_093", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#93", + "values_compared": 255 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_094", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#94", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_095", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#95", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_096", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#96", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_097", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#97", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_098", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#98", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_099", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#99", + "values_compared": 267 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_100", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#100", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_101", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#101", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_102", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#102", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_103", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#103", + "values_compared": 241 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_104", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#104", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_105", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#105", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_106", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#106", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_107", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#107", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_108", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#108", + "values_compared": 243 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_109", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#109", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_110", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#110", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_111", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#111", + "values_compared": 161 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_112", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#112", + "values_compared": 243 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_113", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#113", + "values_compared": 157 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_114", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#114", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_115", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#115", + "values_compared": 161 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_116", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#116", + "values_compared": 181 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_118", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#117", + "values_compared": 169 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_119", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#118", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_120", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#119", + "values_compared": 255 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_121", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#120", + "values_compared": 161 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_122", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#121", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_123", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#122", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_124", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#123", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_125", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#124", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_126", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#125", + "values_compared": 181 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_127", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#126", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_128", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#127", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_129", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#128", + "values_compared": 157 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_130", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#129", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_131", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#130", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_132", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#131", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_133", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#132", + "values_compared": 241 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_134", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#133", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_135", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#134", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_136", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#135", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_137", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#136", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_138", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#137", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_139", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#138", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_140", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#139", + "values_compared": 161 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_141", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#140", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_142", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#141", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_143", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#142", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_144", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#143", + "values_compared": 163 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_145", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#144", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_146", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#145", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_147", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#146", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_148", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#147", + "values_compared": 241 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_149", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#148", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_150", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#149", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_151", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#150", + "values_compared": 251 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_152", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#151", + "values_compared": 243 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_153", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#152", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_154", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#153", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_155", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#154", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_156", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#155", + "values_compared": 163 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_157", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#156", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_158", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#157", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_159", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#158", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_160", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#159", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_161", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#160", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_162", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#161", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_163", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#162", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_164", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#163", + "values_compared": 255 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_165", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#164", + "values_compared": 161 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_166", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#165", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_167", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#166", + "values_compared": 265 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_168", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#167", + "values_compared": 241 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_169", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#168", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_170", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#169", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_171", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#170", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_172", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#171", + "values_compared": 161 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_173", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#172", + "values_compared": 255 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_174", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#173", + "values_compared": 243 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_175", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#174", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_176", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#175", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_177", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#176", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_178", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#177", + "values_compared": 245 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_179", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#178", + "values_compared": 163 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_180", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#179", + "values_compared": 241 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_181", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#180", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_182", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#181", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_183", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#182", + "values_compared": 255 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_184", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#183", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_185", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#184", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_186", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#185", + "values_compared": 243 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_187", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#186", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_188", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#187", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_189", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#188", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_190", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#189", + "values_compared": 267 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_191", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#190", + "values_compared": 181 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_192", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#191", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_193", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#192", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_194", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#193", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_195", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#194", + "values_compared": 265 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_196", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#195", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_197", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#196", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_198", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#197", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_199", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#198", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_200", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#199", + "values_compared": 169 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_201", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#200", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_202", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#201", + "values_compared": 157 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_203", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#202", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_204", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#203", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_205", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#204", + "values_compared": 251 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_206", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#205", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_207", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#206", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_208", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#207", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_209", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#208", + "values_compared": 243 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_210", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#209", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_211", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#210", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_212", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#211", + "values_compared": 181 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_213", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#212", + "values_compared": 161 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_214", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#213", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_215", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#214", + "values_compared": 243 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_216", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#215", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_217", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#216", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_218", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#217", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_219", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#218", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_220", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#219", + "values_compared": 265 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_221", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#220", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_222", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#221", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_223", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#222", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_224", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#223", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_225", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#224", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_226", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#225", + "values_compared": 241 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_227", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#226", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_228", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#227", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_229", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#228", + "values_compared": 245 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_230", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#229", + "values_compared": 267 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_231", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#230", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_232", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#231", + "values_compared": 263 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_233", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#232", + "values_compared": 239 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_234", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#233", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_235", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#234", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_236", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#235", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_237", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#236", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_238", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#237", + "values_compared": 251 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_239", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#238", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_240", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#239", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_241", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#240", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_242", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#241", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_243", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#242", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_244", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#243", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_245", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#244", + "values_compared": 169 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_246", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#245", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_247", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#246", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_248", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#247", + "values_compared": 267 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_249", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#248", + "values_compared": 255 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_250", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#249", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_251", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#250", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_252", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#251", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_253", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#252", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_254", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#253", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_255", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#254", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_256", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#255", + "values_compared": 265 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_257", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#256", + "values_compared": 267 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_258", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#257", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_259", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#258", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_260", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#259", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_261", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#260", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_262", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#261", + "values_compared": 161 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_263", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#262", + "values_compared": 161 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_264", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#263", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_265", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#264", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_266", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#265", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_267", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#266", + "values_compared": 169 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_268", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#267", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_269", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#268", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_270", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#269", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_271", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#270", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_272", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#271", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_273", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#272", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_274", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#273", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_275", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#274", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_276", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#275", + "values_compared": 169 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_277", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#276", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_278", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#277", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_279", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#278", + "values_compared": 169 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_280", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#279", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_281", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#280", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_282", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#281", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_283", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#282", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_284", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#283", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_285", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#284", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_286", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#285", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_287", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#286", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_288", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#287", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_289", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#288", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_290", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#289", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_291", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#290", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_292", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#291", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_293", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#292", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_294", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#293", + "values_compared": 181 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_295", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#294", + "values_compared": 181 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_296", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#295", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_297", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#296", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_298", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#297", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_299", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#298", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_300", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#299", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_301", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#300", + "values_compared": 263 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_302", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#301", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_303", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#302", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_304", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#303", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_305", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#304", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_306", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#305", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_307", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#306", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_308", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#307", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_309", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#308", + "values_compared": 241 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_310", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#309", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_311", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#310", + "values_compared": 241 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_312", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#311", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_313", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#312", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_314", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#313", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_315", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#314", + "values_compared": 245 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_316", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#315", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_317", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#316", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_318", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#317", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_319", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#318", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_320", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#319", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_321", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#320", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_322", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#321", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_323", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#322", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_324", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#323", + "values_compared": 181 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_325", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#324", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_326", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#325", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_327", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#326", + "values_compared": 163 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_328", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#327", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_329", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#328", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_330", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#329", + "values_compared": 255 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_331", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#330", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_332", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#331", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_333", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#332", + "values_compared": 267 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_334", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#333", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_335", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#334", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_336", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#335", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_337", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#336", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_338", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#337", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_339", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#338", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_340", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#339", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_341", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#340", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_342", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#341", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_343", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#342", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_344", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#343", + "values_compared": 255 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_345", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#344", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_346", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#345", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_347", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#346", + "values_compared": 265 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_348", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#347", + "values_compared": 241 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_349", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#348", + "values_compared": 263 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_350", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#349", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_351", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#350", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_353", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#351", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_354", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#352", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_355", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#353", + "values_compared": 169 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_356", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#354", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_357", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#355", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_358", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#356", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_359", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#357", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_360", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#358", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_361", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#359", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_362", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#360", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_363", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#361", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_364", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#362", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_365", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#363", + "values_compared": 181 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_366", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#364", + "values_compared": 251 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_367", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#365", + "values_compared": 265 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_368", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#366", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_369", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#367", + "values_compared": 243 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_370", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#368", + "values_compared": 249 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_371", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#369", + "values_compared": 267 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_372", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#370", + "values_compared": 169 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_373", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#371", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_374", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#372", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_375", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#373", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_376", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#374", + "values_compared": 265 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_377", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#375", + "values_compared": 253 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_378", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#376", + "values_compared": 165 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_379", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#377", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_380", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#378", + "values_compared": 183 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_381", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#379", + "values_compared": 267 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_382", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#380", + "values_compared": 163 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_383", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#381", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_384", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#382", + "values_compared": 241 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_385", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#383", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_386", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#384", + "values_compared": 263 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_387", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#385", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_388", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#386", + "values_compared": 163 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_389", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#387", + "values_compared": 159 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_390", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#388", + "values_compared": 185 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_391", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#389", + "values_compared": 255 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_392", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#390", + "values_compared": 163 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_393", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#391", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_394", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#392", + "values_compared": 247 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_395", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#393", + "values_compared": 167 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_396", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#394", + "values_compared": 241 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_397", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#395", + "values_compared": 171 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_398", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#396", + "values_compared": 173 + }, + { + "max_rel_err": 0.0, + "name": "adv_sing_399", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.adv_surface_intersector/review_adversarial_singular.json#397", + "values_compared": 265 + }, { "max_rel_err": 0.0, "name": "gen0000", @@ -12333,8 +15517,8 @@ "cases_both_errored": 0, "cases_deferred": 16, "cases_failed": 0, - "cases_passed": 1517, - "cases_total": 1533, + "cases_passed": 1915, + "cases_total": 1931, "deferred_by_unit": { "surface.surface_p11": 16 }, From ab35d8bd8c6c249c39791eb87df7d62323465232 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 12:13:21 -0400 Subject: [PATCH 27/54] claim: intersect.surface_intersector_p3 Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm From 2060bdf42438745da8c24b8a5d87fba2a212b4da Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 12:13:22 -0400 Subject: [PATCH 28/54] claim: surface.surf_of_extrusion_p2 Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm From 5f4ace26db52a4896cbc17658189042c65df8315 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 12:13:50 -0400 Subject: [PATCH 29/54] claim: surface.surface_point_solve_p1 Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm From ad106a7e56d80fc77f586ef88517a2eca5cc4476 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 12:23:41 -0400 Subject: [PATCH 30/54] port: intersect.curve_class_p1 (partial) Verify the WIP after merging origin/main: retag the non-B-spline SmCrvOnSurf stub to surface.surface_p1 (curve.crv_on_surf is partial; its own dispatch defers to surface_p1), drop a dummy constant, set status partial. difftest: 2013 cases, 1853 pass, 160 deferred, 0 failed, max_rel_err 0. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm --- .../solidcore/src/intersect/curve_class/p1.rs | 16 +-- plan/modules.toml | 4 +- .../difftest/intersect.curve_class_p1.json | 99 +++++++++---------- 3 files changed, 59 insertions(+), 60 deletions(-) diff --git a/crates/solidcore/src/intersect/curve_class/p1.rs b/crates/solidcore/src/intersect/curve_class/p1.rs index 8cbb82e2bf..fca059f0d0 100644 --- a/crates/solidcore/src/intersect/curve_class/p1.rs +++ b/crates/solidcore/src/intersect/curve_class/p1.rs @@ -122,7 +122,8 @@ //! solves (`surface.surface_p4`, `surface.surface_p5`), `SmSurface::GetFace` and //! `ApproximateSize` and the surface cache (`surface.surface_p1`), `SmTol::MapTo2d` //! (its `Evaluate1stDerivatives`, `surface.surface_p1`), and an `SmCrvOnSurf` over a -//! surface that is not a B-spline (`curve.crv_on_surf` holds only B-spline surfaces). +//! surface that is not a B-spline (its `SmSurface` dispatch, `surface.surface_p1`, as +//! in `curve.crv_on_surf`). //! - **Recursion.** None. use std::borrow::Cow; @@ -155,7 +156,6 @@ const OP_TOUCH: &str = "intersect::curve_class::p1::get_winding_count"; const OP_XSECT: &str = "intersect::curve_class::p1::set_xsect_curve_through_point"; const OP_APPLY: &str = "intersect::curve_class::p1::apply_point_solution"; const OP_GAPS: &str = "intersect::curve_class::p1::get_cci_surface_gaps"; -const OP_CULL: &str = "intersect::curve_class::p1::cull_or_refine_cci_in_3d"; const OP_PAIR: &str = "intersect::curve_class::p1::xsect_tol_2d_or_3d_for_classify_pair"; /// The most intervals [`CurveClassification::set_size`] stores (far above anything a @@ -1760,8 +1760,8 @@ pub fn get_curve_curve_angle( /// # Errors /// /// Those of the 3D intersection and distance computations; -/// [`SolidError::Unported`] for a surface that is not a B-spline surface (unit -/// `curve.crv_on_surf` holds only B-spline surfaces). +/// [`SolidError::Unported`] for a surface that is not a B-spline surface (the +/// `SmSurface` dispatch of `SmCrvOnSurf`, unit `surface.surface_p1`). pub fn cull_or_refine_cci_in_3d( k: &Kernel, surface: &Surface, @@ -1774,14 +1774,14 @@ pub fn cull_or_refine_cci_in_3d( ) -> Result<()> { // project UVCurve into 3d space let SurfaceKind::BSpline(bs) = surface.kind() else { - // UNPORTED(curve.crv_on_surf): SmCrvOnSurf over a surface that is not an SmBSplineSurface + // UNPORTED(surface.surface_p1): SmSurface dispatch for a non-B-spline surface + // (SmCrvOnSurf over it; curve.crv_on_surf holds only B-spline surfaces) return Err(SolidError::unported( - "SmCrvOnSurf::SmCrvOnSurf", - "curve.crv_on_surf", + "SmSurface (non-B-spline) in SmCrvOnSurf", + "surface.surface_p1", )); }; let curve_1 = Curve::from(CrvOnSurf::new(k, uv_curve_1.clone(), bs.clone(), None, 0)?); - let _ = OP_CULL; // for every solution let mut i = 0; diff --git a/plan/modules.toml b/plan/modules.toml index 6b80dc955f..afbe9f8e8c 100644 --- a/plan/modules.toml +++ b/plan/modules.toml @@ -1985,10 +1985,10 @@ soft_depends_on = ["curve.crv_on_surf", "curve.curve_p3", "curve.curve_p6", "geo est_lines = 2087 layer = 31 tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"] -status = "todo" +status = "partial" claimed_by = "" claimed_at = "" -notes = "71 fns; largest: sm_ApplyPointSolution, sm_SetXSectEdgeThroughPoint, sm_MakeConsistentClassifications, sm_SetXSectCurveThroughPoint; cycle back-edges (call into later units; stub or co-port): topology.edge(14), topology.face_p2(4), topology.edgeuse_p1(3), boolean.topology_intersector_p1(2), topology.vertex(2), query.face_p2(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit" +notes = "partial (PR #47): difftest 2013 cases, 1853 pass, 160 deferred (surface.surface_p1 79, surface.surface_p4 54, topology.face_p2 10, topology.edge 9, intersect.curve_class_p4 6, topology.vertex 2), max_rel_err 0; 71 fns; largest: sm_ApplyPointSolution, sm_SetXSectEdgeThroughPoint, sm_MakeConsistentClassifications, sm_SetXSectCurveThroughPoint; cycle back-edges (call into later units; stub or co-port): topology.edge(14), topology.face_p2(4), topology.edgeuse_p1(3), boolean.topology_intersector_p1(2), topology.vertex(2), query.face_p2(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit" [[unit]] id = "intersect.surface_drop_lib_p1" diff --git a/reports/difftest/intersect.curve_class_p1.json b/reports/difftest/intersect.curve_class_p1.json index 4a425293e4..a65d9dc90e 100644 --- a/reports/difftest/intersect.curve_class_p1.json +++ b/reports/difftest/intersect.curve_class_p1.json @@ -815,8 +815,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0097", @@ -915,8 +915,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0108", @@ -979,8 +979,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0115", @@ -991,8 +991,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0116", @@ -1267,8 +1267,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0149", @@ -1803,8 +1803,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0213", @@ -2919,8 +2919,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0346", @@ -3947,8 +3947,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0471", @@ -4967,8 +4967,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0592", @@ -5363,8 +5363,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0639", @@ -5419,8 +5419,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0645", @@ -6063,8 +6063,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0723", @@ -6631,8 +6631,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0792", @@ -7043,8 +7043,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0841", @@ -7439,8 +7439,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0887", @@ -8091,8 +8091,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0965", @@ -8199,8 +8199,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen0978", @@ -9127,8 +9127,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen1089", @@ -10287,8 +10287,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen1230", @@ -13015,8 +13015,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen1562", @@ -13943,8 +13943,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen1673", @@ -14427,8 +14427,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen1731", @@ -16379,8 +16379,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen1969", @@ -16563,8 +16563,8 @@ }, { "deferred": { - "symbol": "SmCrvOnSurf::SmCrvOnSurf", - "unit": "curve.crv_on_surf" + "symbol": "SmSurface (non-B-spline) in SmCrvOnSurf", + "unit": "surface.surface_p1" }, "max_rel_err": 0.0, "name": "gen1990", @@ -16752,9 +16752,8 @@ "cases_passed": 1853, "cases_total": 2013, "deferred_by_unit": { - "curve.crv_on_surf": 24, "intersect.curve_class_p4": 6, - "surface.surface_p1": 55, + "surface.surface_p1": 79, "surface.surface_p4": 54, "topology.edge": 9, "topology.face_p2": 10, From ee06b5f0935f48909d5392f751fe319394626778 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 12:27:55 -0400 Subject: [PATCH 31/54] intersect.surface_intersector_p3: port FindBoundaryStartPoints, ComputeNextPoint, TestPoint, sm_UpdateTsectPoint, SplitSpan (WIP) Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm --- .../src/intersect/surface_intersector.rs | 1 + .../src/intersect/surface_intersector/p3.rs | 1499 +++++++++++++++++ 2 files changed, 1500 insertions(+) create mode 100644 crates/solidcore/src/intersect/surface_intersector/p3.rs diff --git a/crates/solidcore/src/intersect/surface_intersector.rs b/crates/solidcore/src/intersect/surface_intersector.rs index 6207641cf8..529548c9cd 100644 --- a/crates/solidcore/src/intersect/surface_intersector.rs +++ b/crates/solidcore/src/intersect/surface_intersector.rs @@ -8,5 +8,6 @@ pub mod p1; pub mod p2; +pub mod p3; pub use p1::{IntersectionPointType, SrfIndex, SurfaceIntersector, TsectId, TsectPnt}; diff --git a/crates/solidcore/src/intersect/surface_intersector/p3.rs b/crates/solidcore/src/intersect/surface_intersector/p3.rs new file mode 100644 index 0000000000..1163ed38a4 --- /dev/null +++ b/crates/solidcore/src/intersect/surface_intersector/p3.rs @@ -0,0 +1,1499 @@ +//! `SmSurfaceIntersector`, part 3: the start points on the natural boundaries +//! ([`SurfaceIntersector::find_boundary_start_points`]), the tracing step +//! ([`SurfaceIntersector::compute_next_point`]), the end-of-trace test with its +//! snapping to through, start and end points ([`SurfaceIntersector::test_point`], +//! [`SurfaceIntersector::update_tsect_point`]) and the fillet-law span split +//! ([`SurfaceIntersector::split_span`]). +//! +//! Upstream: `source/SMLib/src/SmSurfaceIntersector.cpp`. +//! +//! | Rust | Upstream | +//! |-------------------------------------------------------|--------------------------------------------| +//! | [`SurfaceIntersector::find_boundary_start_points`] | `FindBoundaryStartPoints` | +//! | [`SurfaceIntersector::compute_next_point`], [`NextPoint`] | `ComputeNextPoint` | +//! | [`SurfaceIntersector::update_tsect_point`] | `sm_UpdateTsectPoint` (static) | +//! | [`SurfaceIntersector::test_point`] | `TestPoint` | +//! | [`SurfaceIntersector::split_span`] | `SplitSpan` | +//! | [`TsectPnt::zeroed`] | a point fresh from `m_vTSPntMgr` (zero-filled) | +//! +//! Deviations: +//! - **Points.** Points are arena ids ([`TsectId`]), as in part 1: `rNextTSP`, the +//! previous point and the snap targets of `TestPoint` / `sm_UpdateTsectPoint` are +//! points of the arena (`TraceCurve` takes `rNextTSP` from `m_vTSPntMgr` too). A next +//! point that is also the previous point (the last curve point) is rejected with +//! [`SolidError::InvalidInput`]: upstream would evaluate a point onto itself +//! through two aliases. Every other alias (a snap target that is the next point) +//! behaves as upstream: the arena is re-read after each write. +//! - **Null previous point.** `TestPoint` dereferences the last curve point +//! whenever there are through points, a start point (`m_pStartPoint`) or an end +//! point; with an empty curve list that is a null dereference upstream and +//! [`SolidError::InvalidInput`] here. +//! - **Outputs.** Out-params become return values. `TestPoint`'s `rbDone` is +//! `None` when upstream leaves it unchanged (a through point was hit); +//! `ComputeNextPoint`'s deviation and angle are `None` when upstream leaves them +//! unset. `SplitSpan` returns the new point's id. `FindBoundaryStartPoints`' +//! output arrays are a [`TsectCurves`] (part 2). +//! - **Surface caches.** `smsurf_GetSurfaceCache` (`surface.surface_p1`) cannot +//! hand out caches yet, so [`SurfaceIntersector::find_boundary_start_points`] +//! takes the caches of the surfaces as an argument, as the surface tracer does. +//! Their `process_boundary_curves` flags are set for the call and restored on every +//! exit (`SmTemporaryChangeValue`). The temporary removal of the other surface's +//! owner (point validation) has no counterpart: Rust surfaces have no owner. +//! - **Points of `FindBoundaryStartPoints`.** Upstream takes a point from the block +//! manager for every solution and leaks those it does not keep; here a solution's +//! point is a local [`TsectPnt::zeroed`] value that gets its arena slot when it +//! becomes a start point. +//! - **Dead code.** The face edge branch of `FindBoundaryStartPoints` +//! (`static constexpr bGWCAddEdgeThroughPoints = FALSE`: target curves beyond the +//! four natural boundaries, `ApproximateCurve` of non-B-spline targets, through +//! points, `RefinePoint` of edge crossings) and the parts of `TestPoint` behind +//! `static bStopAtSingularity = FALSE` (stop at singular points, the final through +//! and end point snapping of a boundary point) are unreachable upstream and not +//! ported. The cycle back-edges of the plan (`topology.edge`, `topology.edgeuse_p1`, +//! `topology.edgeuse_p3`, `topology.face_p4`) are all in the face edge branch. +//! - **Previous UVs.** `ComputeNextPoint` hands `RefinePoint` the address of the +//! previous point's first UV position, which the callee may read as the array +//! `m_vUVCurvePV` (`[uv0, duv0, uv1, duv1]`); that array is passed. +//! - **Unported callees.** `SmSurface::GlobalCurveIntersect` (`surface.surface_p8`), +//! `SmSurface::DropAndTrimCurve` (`intersect.surface_drop_lib_p1`) and +//! `SmSurface::IsSingularity` of a surface that is not a plane (`surface.surface_p5`) +//! return [`SolidError::Unported`], which always propagates (also where upstream +//! ignores the status). +//! - **Not ported here.** The `SM_DEBUG_CODE` blocks (graphics, dumps), the +//! `SM_ASSERT`s (no-ops in release builds) and the user pointers +//! (`m_apUserPointer`, not modelled by [`TsectPnt`]). + +use crate::curve::curve::Curve; +use crate::error::{Result, SolidError, SM_ERR_NULL_POINTER}; +use crate::geom::extent1d::{Extent1d, ExtentPointType}; +use crate::geom::extent2d::Extent2d; +use crate::geom::extent3d::Extent3d; +use crate::geom::geom_utility::p1::line_closest_point; +use crate::geom::solution_array::{Solution, SolutionEnd, SolutionType}; +use crate::geom::tol::{is_zero, ZONE_TOL_3D}; +use crate::geom::vector2d::{Point2, Vec2}; +use crate::geom::vector3d::{Point3, Vec3}; +use crate::kernel::Kernel; +use crate::math::{max2, EFF_ZERO, EFF_ZERO_SQRT}; +use crate::nurbs::b_spline_curve::p2::BoundingBoxRequest; +use crate::nurbs::b_spline_curve::BSplineCurve; +use crate::nurbs::b_spline_curve_n_lib::TrimMode; +use crate::surface::surface::p2::TsectCurveType; +use crate::surface::surface::{Surface, SurfaceKind}; +use crate::surface::surface_cache::SurfaceCache; + +use super::p1::{ + compute_curve_type, is_point_on_tsect_curve, IntersectionPointType, SrfIndex, + SurfaceIntersector, TsectId, TsectPnt, MAX_USER_DOUBLES, +}; +use super::p2::{LawPointOptions, TsectCurves}; + +const OP_FBSP: &str = + "intersect::surface_intersector::p3::SurfaceIntersector::find_boundary_start_points"; +const OP_NEXT: &str = "intersect::surface_intersector::p3::SurfaceIntersector::compute_next_point"; +const OP_UPDATE: &str = + "intersect::surface_intersector::p3::SurfaceIntersector::update_tsect_point"; +const OP_TEST: &str = "intersect::surface_intersector::p3::SurfaceIntersector::test_point"; + +/// The outputs of [`SurfaceIntersector::compute_next_point`]. +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct NextPoint { + /// `rbFoundGoodPoint`: the next point passed the direction, angle and deviation + /// tests. + pub found_good_point: bool, + /// `rdDeviationFound`: the largest curve/surface distance of the span test + /// points; `None` when upstream leaves it unset. + pub deviation_found: Option, + /// `rdAngleFoundRad`: the angle between the two curve tangents; `None` when + /// upstream leaves it unset. + pub angle_found_rad: Option, + /// `rbClipped`: the step was shortened to keep the next point in both domains. + pub clipped: bool, + /// `rbBoundaryHit`: the step leaves a domain (or the next point could not be + /// evaluated); the trace ends. + pub boundary_hit: bool, +} + +impl TsectPnt { + /// A point as `m_vTSPntMgr.GetNewElement()` hands it out: zero-filled memory, + /// never constructed (type `SM_IP_UNDEFINED`, parameter types `SM_EP_START`, + /// every vector and value zero). + #[must_use] + pub const fn zeroed() -> Self { + Self { + point_type: IntersectionPointType::Undefined, + uv_param_type: [[ExtentPointType::Start; 2]; 2], + uv_curve_pv: [[Vec2::new(0.0, 0.0); 2]; 2], + surface_pv: [[[Vec3::ZERO; 3]; 3]; 2], + curve_pv: [Vec3::ZERO; 2], + curve_parameter: 0.0, + tangent_plane_angle_rad: 0.0, + deviation: 0.0, + user_doubles: [0.0; MAX_USER_DOUBLES], + } + } +} + +/// The last output 3D curve (the one being added). +fn last_curve(out: &mut TsectCurves) -> Result<&mut Curve> { + out.curves_3d + .last_mut() + .ok_or_else(|| SolidError::invalid_input(OP_FBSP, "no output curve")) +} + +/// `rSol.m_vStart[i]` / `m_vEnd[i]`. +fn par(e: &SolutionEnd, i: usize) -> f64 { + e.parameters.get(i).copied().unwrap_or(0.0) +} + +/// Removes `id` from a point list (`SmTList::Remove`). +fn unlink(list: &mut Vec, id: TsectId) { + if let Some(pos) = list.iter().position(|&x| x == id) { + list.remove(pos); + } +} + +/// A status upstream ignores (`Unported` propagates). +fn ignored(r: Result) -> Result> { + match r { + Ok(v) => Ok(Some(v)), + Err(e) if e.is_unported() => Err(e), + Err(_) => Ok(None), + } +} + +/// `a[srf]`. +const fn at(a: &[T; 2], s: SrfIndex) -> &T { + match s { + SrfIndex::First => &a[0], + SrfIndex::Second => &a[1], + } +} + +/// `a[srf]`, mutable. +fn at_mut(a: &mut [T; 2], s: SrfIndex) -> &mut T { + match s { + SrfIndex::First => &mut a[0], + SrfIndex::Second => &mut a[1], + } +} + +/// `SrfIndex` of `m_cpSurface[i]`. +const fn srf(i: usize) -> SrfIndex { + if i == 0 { + SrfIndex::First + } else { + SrfIndex::Second + } +} + +/// A boundary start point waiting for classification: the point, the boundary curve +/// point and the index of the other surface (`sDegeneratePoints`, `s3DPoints`, +/// `sSurfIndex`). +struct DegeneratePoint { + point: TsectPnt, + curve_point: Point3, + surf_index: SrfIndex, +} + +/// The working lists of [`SurfaceIntersector::find_boundary_start_points`]. +#[derive(Default)] +struct BoundaryWork { + /// `sEdgeCrossings`. + edge_crossings: Vec, + /// `sDegeneratePoints`, `s3DPoints`, `sSurfIndex`. + degenerate: Vec, +} + +impl SurfaceIntersector<'_> { + // ---- boundary start points --------------------------------------------------------- + + /// Finds intersection start points on the natural boundaries + /// (`FindBoundaryStartPoints`): for each surface whose edges are used + /// (`use_surface_edges`), each non-degenerate boundary iso curve of its domain + /// (minimum u, minimum v, maximum u, maximum v, within `this_approx_tol_3d / 3` of + /// the surface) whose box, expanded by `this_approx_tol_3d`, meets + /// `intersection_box` is intersected with the other surface. + /// + /// A point solution (or a range shorter than a hundredth of the boundary, refined + /// by a local curve solve) off the surface singularities is evaluated; a + /// degenerate one (touching, [`SurfaceIntersector::classify_boundary_start_point_intersection`]) + /// becomes a degenerate output curve of type touching unless it is on an output + /// curve or a start point; else, unless it is on an output curve, it becomes a + /// start point (crossings on the other surface's boundary last). A longer range + /// whose end deviations differ by less than a factor of 100 and whose middle is on + /// no output curve becomes an output curve: the boundary curve trimmed to it and + /// dropped onto both surfaces, kept when within `this_approx_tol_3d` of both, with + /// its type; start points and crossings on it are then dropped. + /// + /// `caches` are the surface caches (`smsurf_GetSurfaceCache`): `caches[0]` of the + /// first surface, `caches[1]` (or `caches[0]` when only one is given, as for a + /// self intersection) of the second. + /// + /// # Errors + /// + /// `SM_ERR_NULL_POINTER` without a cache; those of the iso curves, the bounding + /// boxes, the evaluations, the trims and the curve solves; + /// [`SolidError::Unported`] from unported callees. + pub fn find_boundary_start_points( + &mut self, + k: &Kernel, + caches: &mut [SurfaceCache], + intersection_box: &Extent3d, + out: &mut TsectCurves, + ) -> Result<()> { + if caches.is_empty() { + return Err(SolidError::Upstream { + operation: OP_FBSP, + code: SM_ERR_NULL_POINTER, + entity: None, + }); + } + + // Turn on boundary curve processing to force LocalSolve to look for drop + // points on boundary curves (restored on every exit, last change first). + let saved: Vec = caches + .iter() + .take(2) + .map(|c| c.process_boundary_curves) + .collect(); + for c in caches.iter_mut().take(2) { + c.process_boundary_curves = true; + } + let r = self.find_boundary_start_points_body(k, caches, intersection_box, out); + for (c, s) in caches.iter_mut().zip(saved).rev() { + c.process_boundary_curves = s; + } + r + } + + #[allow(clippy::too_many_lines)] + fn find_boundary_start_points_body( + &mut self, + k: &Kernel, + caches: &mut [SurfaceCache], + intersection_box: &Extent3d, + out: &mut TsectCurves, + ) -> Result<()> { + let mut work = BoundaryWork::default(); + // sIntervals keeps its values from surface to surface (SetMinMax failures) + let mut intervals = [Extent1d::new(); 4]; + + // for both surfaces - gather and intersect surf NaturalBoundaryCurves with + // the other surface + for l_srf in 0..2_usize { + let this = srf(l_srf); + let other = srf(1 - l_srf); + + // skip surfaces marked as not using Surface edges + if !*at(&self.use_surface_edges, this) { + continue; + } + + let domain = *at(&self.uv_domains, this); + let other_domain = *at(&self.uv_domains, other); + + // Get thisSurface->3DBoundaryCurves: [0] min u, [1] min v, [2] max u, + // [3] max v + let cache_index = l_srf.min(caches.len() - 1); + let cache = caches.get_mut(cache_index).ok_or(SolidError::Upstream { + operation: OP_FBSP, + code: SM_ERR_NULL_POINTER, + entity: None, + })?; + let iso = cache.iso_boundary_curves(k, &domain, self.this_approx_tol_3d / 3.0)?; + + // add the intervals of the iso curves (statuses ignored) + for (ii, ivl) in intervals.iter_mut().enumerate() { + if ii % 2 == 1 { + let _ = ivl.set_min_max(domain.min().x, domain.max().x); + } else { + let _ = ivl.set_min_max(domain.min().y, domain.max().y); + } + } + + // for every TargetCurve - intersect ThisSurface->BoundaryCurves with + // OtherSurface + for (l_crv, tgt) in iso.curves.iter().enumerate() { + let norm_param = if l_crv < 2 { 0.0 } else { 1.0 }; + let l_coord = l_crv % 2; + let l_side = usize::from(l_crv >= 2); + let bsc_ivl = intervals.get(l_crv).copied().unwrap_or_default(); + + // skip degenerate TargetCurves + if tgt.is_degenerate(EFF_ZERO, Some(&bsc_ivl))? { + continue; + } + + // BoundaryCurve BBox + Tol + let boxes = tgt.calculate_bounding_box( + &bsc_ivl, + BoundingBoxRequest { + normal: true, + pseudo: false, + polar: false, + }, + )?; + let mut bbox = boxes.normal.unwrap_or_default(); + bbox.expand_absolute(self.this_approx_tol_3d); + + // when the intersection box meets the boundary curve box, intersect + // OtherSurface with ThisSurface->BoundaryCurve + let tgt_curve = Curve::from(tgt.clone()); + let solutions = if bbox.are_disjoint(intersection_box, 0.0) { + Vec::new() + } else { + surface_global_curve_intersect( + self.surface(other), + &other_domain, + &tgt_curve, + &bsc_ivl, + self.this_approx_tol_3d, + )? + }; + + // for every intersection solution + for sol in &solutions { + let mut sol = *sol; + let iso_uv = domain.evaluate(norm_param, norm_param); + // the uv point on this surface of curve parameter t + let this_uv = |t: f64| { + if l_coord == 0 { + Point2::new(iso_uv.x, t) + } else { + Point2::new(t, iso_uv.y) + } + }; + + // a point for this solution (from the block manager upstream) + let mut tsp = TsectPnt::zeroed(); + tsp.point_type = IntersectionPointType::Unknown; + + // For single intersection points + if sol.solution_type == SolutionType::SingleValue { + let mut uvs = [Point2::new(0.0, 0.0); 2]; + *at_mut(&mut uvs, other) = + Point2::new(par(&sol.start, 1), par(&sol.start, 2)); + *at_mut(&mut uvs, this) = this_uv(par(&sol.start, 0)); + + // skip start points which are on surface singularities + if surface_is_singularity(self.surface(this), *at(&uvs, this))? + || surface_is_singularity(self.surface(other), *at(&uvs, other))? + { + continue; + } + + // Compute xsect point values for the mated UVPoints (a start + // point: no previous point) + if ignored(self.compute_point_values(uvs, &mut tsp, None, None))?.is_none() + { + continue; + } + + self.use_boundary_point( + k, + tgt, + &sol, + uvs, + tsp, + other, + &other_domain, + out, + &mut work, + )?; + } + // For interval intersections + else if sol.solution_type == SolutionType::RangeOfValues { + let size = par(&sol.end, 0) - par(&sol.start, 0); + let ivl_size = bsc_ivl.max() - bsc_ivl.min(); + + if size > ivl_size / 100.0 { + // Large intersection: a coincident boundary curve + if sol.end.solution_value < EFF_ZERO { + sol.end.solution_value = EFF_ZERO; + } + if sol.start.solution_value < EFF_ZERO { + sol.start.solution_value = EFF_ZERO; + } + let size_ratio = sol.start.solution_value / sol.end.solution_value; + + // Skip curves whose deviation changes too much + if size_ratio > 100.00 || size_ratio < 0.01 { + continue; + } + + // skip curves that are already found + let test_param = (par(&sol.start, 0) + par(&sol.end, 0)) / 2.0; + let test_pnt = tgt.evaluate_point(test_param)?; + if self.is_point_on_curve(k, test_pnt, &out.curves_3d, None)? { + continue; + } + + self.add_boundary_curve(k, tgt, &sol, l_side, out, &mut work)?; + } else { + // Small intersection - just use as start points + let mut t = par(&sol.start, 0); + let mut uv = Point2::new(par(&sol.start, 1), par(&sol.start, 2)); + let mut uv_ivl2 = + Extent1d::from_min_max(par(&sol.start, 0), par(&sol.end, 0)); + uv_ivl2.expand_absolute(ivl_size * EFF_ZERO_SQRT); + uv_ivl2 = uv_ivl2 + .intersect(&tgt.natural_interval()) + .unwrap_or_default(); + + // use the better end unless the start is on a boundary + if sol.start.solution_value > sol.end.solution_value + && !other_domain.is_point_on_boundary(uv, EFF_ZERO).0 + { + sol.start = sol.end; + } + + // refine the point + let found = self.surface(other).local_curve_solve( + &other_domain, + &tgt_curve, + &uv_ivl2, + crate::geom::global_solver::SolverOperation::Normalize, + self.this_approx_tol_3d, + &[], + uv, + t, + )?; + if let Some(s) = found { + if s.distance < sol.start.solution_value { + sol.start.solution_value = s.distance; + if let Some(p) = sol.start.parameters.get_mut(0) { + *p = s.t; + } + if let Some(p) = sol.start.parameters.get_mut(1) { + *p = s.uv.x; + } + if let Some(p) = sol.start.parameters.get_mut(2) { + *p = s.uv.y; + } + } + } + t = par(&sol.start, 0); + uv = Point2::new(par(&sol.start, 1), par(&sol.start, 2)); + + let mut uvs = [Point2::new(0.0, 0.0); 2]; + *at_mut(&mut uvs, this) = this_uv(t); + *at_mut(&mut uvs, other) = uv; + + // skip start points on surface singularities + if surface_is_singularity(self.surface(SrfIndex::First), uvs[0])? + || surface_is_singularity(self.surface(SrfIndex::Second), uvs[1])? + { + continue; + } + + if ignored(self.compute_point_values(uvs, &mut tsp, None, None))? + .is_some() + { + self.use_boundary_point( + k, + tgt, + &sol, + uvs, + tsp, + other, + &other_domain, + out, + &mut work, + )?; + } + } + } + } + } + } + + // Add the surface-edge crossings last (statuses ignored) + for p in core::mem::take(&mut work.edge_crossings) { + let id = self.alloc_point(p); + ignored(self.add_start_point(id))?; + } + + // make degenerate curves of the touching points + for d in &work.degenerate { + let tsp = &d.point; + let degenerate_point = (d.curve_point + tsp.srf_pos(d.surf_index)) / 2.0; + + // skip points that are on a curve or a start point already + let starts = self.start_points().to_vec(); + if self.is_point_on_curve(k, degenerate_point, &out.curves_3d, None)? + || self.is_point_on_start_point(tsp, &starts, None)? + { + continue; + } + + // 3D curve, then the UV curves + let c3 = BSplineCurve::create_degenerate_curve(3, degenerate_point)?; + out.curves_3d.push(Curve::from(c3)); + let c0 = + BSplineCurve::create_degenerate_curve(2, Vec3::from(tsp.uv_pos(SrfIndex::First)))?; + out.uv_curves[0].push(Curve::from(c0)); + let c1 = + BSplineCurve::create_degenerate_curve(2, Vec3::from(tsp.uv_pos(SrfIndex::Second)))?; + out.uv_curves[1].push(Curve::from(c1)); + + // deviation and type + let dist = tsp + .srf_pos(SrfIndex::First) + .distance(tsp.srf_pos(SrfIndex::Second)); + out.deviations.push(dist); + out.curve_types.push(TsectCurveType::Touching); + } + Ok(()) + } + + /// The tail of a boundary point solution (single value or small range): the + /// degenerate classification and the start point lists. + #[allow(clippy::too_many_arguments)] + fn use_boundary_point( + &mut self, + k: &Kernel, + tgt: &BSplineCurve, + sol: &Solution<()>, + uvs: [Point2; 2], + mut tsp: TsectPnt, + other: SrfIndex, + other_domain: &Extent2d, + out: &TsectCurves, + work: &mut BoundaryWork, + ) -> Result<()> { + // boundary curve point (status ignored: an uninitialised point) + let pt = ignored(tgt.evaluate(par(&sol.start, 0), 1, true, true))? + .and_then(|v| v.first().copied()) + .unwrap_or(Vec3::UNDEF); + + // Set bIsDegenerate = TRUE: a degenerate point xsect curve (status ignored) + let is_degenerate = + ignored(self.classify_boundary_start_point_intersection(&tsp))?.unwrap_or(false); + + // when a degenerate point not on an output curve yet: classify it at the end + if is_degenerate && !self.is_point_on_curve(k, tsp.crv_pos(), &out.curves_3d, None)? { + work.degenerate.push(DegeneratePoint { + point: tsp, + curve_point: pt, + surf_index: other, + }); + return Ok(()); + } + + // when the point is not on an output curve already + if !self.is_point_on_curve(k, tsp.crv_pos(), &out.curves_3d, None)? { + tsp.deviation = sol.start.solution_value; + if other_domain + .is_point_on_boundary(*at(&uvs, other), EFF_ZERO * 100.0) + .0 + { + // a crossing on the other surface's edge: added last + work.edge_crossings.push(tsp); + } else { + // add the point to the list of start points (status ignored) + let id = self.alloc_point(tsp); + ignored(self.add_start_point(id))?; + } + } + Ok(()) + } + + /// A long range solution of a boundary curve: the curve trimmed to it, dropped + /// onto both surfaces, becomes an output curve when close to both. + fn add_boundary_curve( + &mut self, + k: &Kernel, + tgt: &BSplineCurve, + sol: &Solution<()>, + l_side: usize, + out: &mut TsectCurves, + work: &mut BoundaryWork, + ) -> Result<()> { + let tol = self.this_approx_tol_3d; + + // copy and trim the boundary curve (may snap the interval to knots) + let mut result = Curve::from(tgt.clone()); + let mut trim_ivl = Extent1d::from_min_max(par(&sol.start, 0), par(&sol.end, 0)); + result.trim(k, &mut trim_ivl, TrimMode::Notify)?; + out.curves_3d.push(result); + + // Get UVCurves on surface 1 + let drop1 = { + let c = last_curve(out)?; + let ivl = c.natural_interval(); + surface_drop_and_trim_curve( + k, + self.surface(SrfIndex::First), + &self.uv_domains[0], + c, + &ivl, + tol, + )? + }; + match drop1.uv_curves.len() { + 2 => out.uv_curves[0].extend(drop1.uv_curves.get(l_side).cloned()), + 1 => out.uv_curves[0].extend(drop1.uv_curves.first().cloned()), + _ => { + out.curves_3d.pop(); + return Ok(()); + } + } + + // Trim the 3D curve to the UV curve's interval + let uv_ivl = out.uv_curves[0] + .last() + .map(Curve::natural_interval) + .unwrap_or_default(); + if !trim_ivl.is_contained_by(&uv_ivl, 0.0) { + trim_ivl = uv_ivl; + last_curve(out)?.trim(k, &mut trim_ivl, TrimMode::Notify)?; + } + + // Get UVCurves on surface 2 + let drop2 = { + let c = last_curve(out)?; + let ivl = c.natural_interval(); + surface_drop_and_trim_curve( + k, + self.surface(SrfIndex::Second), + &self.uv_domains[1], + c, + &ivl, + tol, + )? + }; + match drop2.uv_curves.len() { + 2 => out.uv_curves[1].extend(drop2.uv_curves.get(l_side).cloned()), + 1 => out.uv_curves[1].extend(drop2.uv_curves.first().cloned()), + _ => { + out.curves_3d.pop(); + out.uv_curves[0].pop(); + return Ok(()); + } + } + + // Trim the 3D curve and the first UV curve to the second UV curve's interval + let uv_ivl2 = out.uv_curves[1] + .last() + .map(Curve::natural_interval) + .unwrap_or_default(); + if !trim_ivl.is_contained_by(&uv_ivl2, 0.0) { + trim_ivl = uv_ivl2; + last_curve(out)?.trim(k, &mut trim_ivl, TrimMode::Notify)?; + if let Some(c) = out.uv_curves[0].last_mut() { + c.trim(k, &mut trim_ivl, TrimMode::Notify)?; + } + } + + if drop1.dist_to_surf > tol || drop2.dist_to_surf > tol { + // don't use this curve + out.uv_curves[0].pop(); + out.uv_curves[1].pop(); + out.curves_3d.pop(); + return Ok(()); + } + + // set the curve deviation and type + out.deviations + .push(max2(drop1.dist_to_surf, drop2.dist_to_surf)); + let curve_type = match (out.uv_curves[0].last(), out.uv_curves[1].last()) { + (Some(c0), Some(c1)) => compute_curve_type( + self.surface(SrfIndex::First), + self.surface(SrfIndex::Second), + c0, + c1, + )?, + _ => return Err(SolidError::invalid_input(OP_FBSP, "no uv curve")), + }; + if matches!( + curve_type, + TsectCurveType::Coincident | TsectCurveType::RegionBoundary + ) { + self.check_for_interior_curves = false; + } + out.curve_types.push(curve_type); + + // remove start points on the new curve + for id in self.start_points().to_vec() { + let p = self.point(id)?.crv_pos(); + if self.is_point_on_curve(k, p, &out.curves_3d, None)? { + unlink(&mut self.start_points, id); + } + } + + // remove edge crossings on the new curve + let mut kept = Vec::with_capacity(work.edge_crossings.len()); + for p in core::mem::take(&mut work.edge_crossings) { + if !self.is_point_on_curve(k, p.crv_pos(), &out.curves_3d, None)? { + kept.push(p); + } + } + work.edge_crossings = kept; + Ok(()) + } + + // ---- tracing step -------------------------------------------------------------------- + + /// Steps from the point `prev` by `step_size` along its UV tangents to the next + /// intersection point, evaluated into `next` (`ComputeNextPoint`). + /// + /// The step is clipped to both domains (`clipped`); a zero step is a boundary + /// hit. The guesses are refined ([`SurfaceIntersector::refine_point`] with + /// boundary testing, then without when the step collapses below a hundredth), + /// the step scaled by the refinement's UV step on the first surface. A failed + /// evaluation is a boundary hit; a tangent or coincident next point, or one behind + /// `prev` on the first surface's UV tangent line (a singular one becomes a + /// crossing), is not good. Else the curve parameter advances by the 3D distance + /// and [`SurfaceIntersector::test_span_accuracy`] decides. + /// + /// # Errors + /// + /// `SM_ERR` when `prev` is outside a domain (by `SM_EFF_ZERO`); `InvalidInput` + /// when `next` is `prev` or an id is unknown; those of the span test; + /// [`SolidError::Unported`] from unported callees. + pub fn compute_next_point( + &mut self, + prev: TsectId, + step_size: f64, + next: TsectId, + ) -> Result { + if prev == next { + return Err(SolidError::invalid_input( + OP_NEXT, + "the next point is the previous point", + )); + } + let prev_tsp = self.point(prev)?.clone(); + self.point(next)?; + let s0 = SrfIndex::First; + let s1 = SrfIndex::Second; + + // init output + let mut res = NextPoint { + found_good_point: false, + deviation_found: None, + angle_found_rad: None, + clipped: false, + boundary_hit: false, + }; + + // check state - both surfaces contain rPrevTSP + if !self.uv_domains[0].contains_point(prev_tsp.uv_pos(s0), EFF_ZERO) + || !self.uv_domains[1].contains_point(prev_tsp.uv_pos(s1), EFF_ZERO) + { + return Err(SolidError::sm_err(OP_NEXT)); + } + + // if needed: clip stepsize to keep nextTSP in both surfaces + let unclipped_step_size = step_size; + let mut step_size = + self.uv_domains[0].clip_line(prev_tsp.uv_pos(s0), prev_tsp.uv_deriv(s0), step_size); + step_size = + self.uv_domains[1].clip_line(prev_tsp.uv_pos(s1), prev_tsp.uv_deriv(s1), step_size); + + // remember clipping when it happens + res.clipped = step_size < unclipped_step_size - EFF_ZERO * (1.0 + unclipped_step_size); + + // when StepSize is clipped to zero - return a boundary hit with no next point + if is_zero(step_size) { + res.boundary_hit = true; + return Ok(res); + } + + // Set NextStep UVs for Surface0 and Surface1 + let guess_uv0 = prev_tsp.uv_pos(s0) + prev_tsp.uv_deriv(s0) * step_size; + let guess_uv1 = prev_tsp.uv_pos(s1) + prev_tsp.uv_deriv(s1) * step_size; + + // this safety step should no longer fire since StepSize has already been clipped + let guess_uv0 = self.uv_domains[0].clamp_point(guess_uv0); + let guess_uv1 = self.uv_domains[1].clamp_point(guess_uv1); + + // the previous point's m_vUVCurvePV, as RefinePoint may read it + let previous_uv = [ + prev_tsp.uv_pos(s0), + prev_tsp.uv_deriv(s0), + prev_tsp.uv_pos(s1), + prev_tsp.uv_deriv(s1), + ]; + + // Find surf/surf xSectPoint near the guess points (a failure is no answer) + let refine = |do_boundary_testing: bool| -> Result> { + match self.refine_point( + guess_uv0, + guess_uv1, + prev_tsp.point_type, + Some(prev_tsp.crv_deriv()), + Some(&previous_uv), + do_boundary_testing, + ) { + Ok(r) => Ok(r), + Err(e) if e.is_unported() => Err(e), + Err(_) => Ok(None), + } + }; + let Some(mut next_uvs) = refine(true)? else { + return Ok(res); + }; + + // compute actual step to guess step + let guess_step = guess_uv0 - prev_tsp.uv_pos(s0); + let actual_step = next_uvs[0] - prev_tsp.uv_pos(s0); + let mut guess_step_size = guess_step.length(); + let mut actual_step_size = actual_step.length(); + if guess_step_size > EFF_ZERO * actual_step_size { + step_size *= actual_step_size / guess_step_size; + } + + // Step size may go to zero again so test it again. + if is_zero(step_size) || actual_step_size < guess_step_size / 100.0 { + // Before bailing out try local intersection again without boundary + // testing. + let Some(uvs) = refine(false)? else { + return Ok(res); + }; + next_uvs = uvs; + + // update StepSize for this refined point + let guess_step = guess_uv0 - prev_tsp.uv_pos(s0); + let actual_step = next_uvs[0] - prev_tsp.uv_pos(s0); + guess_step_size = guess_step.length(); + actual_step_size = actual_step.length(); + if guess_step_size > EFF_ZERO * actual_step_size { + step_size *= actual_step_size / guess_step_size; + } + + // if this 2nd refined point also ends up with a zero stepSize - quit + if is_zero(step_size) { + res.boundary_hit = true; + return Ok(res); + } + } + + // set NextTSP values given its surface UV values (a next point: with the + // previous point) + let mut next_tsp = self.point(next)?.clone(); + let r = + self.compute_point_values(next_uvs, &mut next_tsp, Some(&prev_tsp), Some(step_size)); + *self.point_mut(next)? = next_tsp.clone(); + if ignored(r)?.is_none() { + res.boundary_hit = true; // causes termination of current tracing + return Ok(res); + } + + // end iteration for tangent and coincident points + if matches!( + next_tsp.point_type, + IntersectionPointType::TangentPoint | IntersectionPointType::Coincidence + ) { + return Ok(res); + } + + // Also make sure that the point is going in the same direction + let line_param = line_closest_point( + Vec3::from(prev_tsp.uv_pos(s0)), + Vec3::from(prev_tsp.uv_deriv(s0)), + Vec3::from(next_tsp.uv_pos(s0)), + ); + // when next point lies behind TsectPnt + if line_param < 0.0 { + // mark NextTSP as SM_IP_CROSSING and quit + if next_tsp.point_type == IntersectionPointType::Singularity { + self.point_mut(next)?.point_type = IntersectionPointType::Crossing; + } + return Ok(res); + } + + // let NextTSP param = TsectPnt.Param + 3DCurve ArcLength + let dist_moved = next_tsp.crv_pos().distance(prev_tsp.crv_pos()); + self.point_mut(next)?.curve_parameter = prev_tsp.curve_parameter + dist_moved; + + // the angle and deviation tests of the span + let acc = self.test_span_accuracy(prev, next)?; + res.found_good_point = acc.found_good_point; + res.deviation_found = acc.deviation_found; + res.angle_found_rad = Some(acc.angle_found_rad); + Ok(res) + } + + // ---- end-of-trace tests ---------------------------------------------------------------- + + /// Trims the traced span from `prev` to `next` to the point `new` + /// (`sm_UpdateTsectPoint`): `next` takes `new`'s user values and is evaluated at + /// `new`'s UV points (as a next point of `prev`); its curve parameter is scaled + /// with the chord length; `new` takes that parameter when its own is negative. + /// + /// # Errors + /// + /// `InvalidInput` when `next` is `prev` or an id is unknown; those of + /// [`SurfaceIntersector::compute_point_values`] (`next` keeps what was computed). + pub fn update_tsect_point(&mut self, prev: TsectId, next: TsectId, new: TsectId) -> Result<()> { + if prev == next { + return Err(SolidError::invalid_input( + OP_UPDATE, + "the next point is the previous point", + )); + } + let prev_tsp = self.point(prev)?.clone(); + let new_tsp = self.point(new)?.clone(); + let mut next_tsp = self.point(next)?.clone(); + + // get pPrev1/rNextTSP 3DCurve arcLength distance + let dist = prev_tsp.crv_pos().distance(next_tsp.crv_pos()); + + // get parameter Step between pPrev1 and rNextTSP + let step = next_tsp.curve_parameter - prev_tsp.curve_parameter; + + // get NewTSP UV values + let uvs = [ + new_tsp.uv_pos(SrfIndex::First), + new_tsp.uv_pos(SrfIndex::Second), + ]; + + // copy rNextTSP user values from pNewTSP + next_tsp.user_doubles = new_tsp.user_doubles; + + // ComputePointValues with pNewTSP UV values and store results in rNextTSP + let r = self.compute_point_values(uvs, &mut next_tsp, Some(&prev_tsp), None); + *self.point_mut(next)? = next_tsp.clone(); + r?; + + // set parameter step size based on current curve parameterization + let new_dist = prev_tsp.crv_pos().distance(next_tsp.crv_pos()); + let new_step = new_dist / dist * step; + let next_param = prev_tsp.curve_parameter + new_step; + self.point_mut(next)?.curve_parameter = next_param; + + // set pNewTSP parameter value so that it knows if/where it was used + let p = self.point_mut(new)?; + if p.curve_parameter < 0.0 { + p.curve_parameter = next_param; + } + Ok(()) + } + + /// Tests the next traced point `next` against the targets of the trace and the + /// domain boundaries (`TestPoint`), snapping it + /// ([`SurfaceIntersector::update_tsect_point`]) to the first target on the span + /// from the last curve point to `next` ([`is_point_on_tsect_curve`]): + /// + /// 1. the first through point: it is removed (the last one sets + /// `last_through_parameter` when extension clipping), `clipped_by_through_point` + /// is set, and the done flag is left unchanged (`None`); + /// 2. a start point, newest first (skipped when the last curve point is the start + /// of the trace, or is at the start point without crossing a seam): a crossing + /// start point with a non-parallel tangent plane is removed; the trace is done + /// unless the start point is a crossing on a domain boundary the curve runs + /// along; + /// 3. the start of the trace (a closed curve, at least two spans on); + /// 4. the end point (unless the span starts the curve at it, a seam). + /// + /// Without an end point, extension clipping ends the trace past + /// `last_through_parameter + extension_distance`. Else the trace is done when + /// `next` is on a domain boundary with its UV tangent pointing across it; the + /// start points at `next` are then removed. + /// + /// # Errors + /// + /// `InvalidInput` when `next` is the last curve point or an id is unknown, or + /// when the curve list is empty and the last curve point is needed (upstream + /// dereferences null); those of the snapping; [`SolidError::Unported`] from + /// unported callees. + #[allow(clippy::too_many_lines)] + pub fn test_point(&mut self, next: TsectId) -> Result> { + self.point(next)?; + let prev1 = self.curve_points.last().copied(); + if prev1 == Some(next) { + return Err(SolidError::invalid_input( + OP_TEST, + "the next point is the last curve point", + )); + } + let need_prev = + || prev1.ok_or_else(|| SolidError::invalid_input(OP_TEST, "no curve point")); + let tol = self.this_approx_tol_3d; + + // If we are given through points check the first one: they are in order + if let Some(&through) = self.through_points.first() { + let p1 = need_prev()?; + + // if through point is on hermite curve from pPrev1 point to rNextTSP point + if is_point_on_tsect_curve( + self.point(through)?, + self.point(p1)?, + self.point(next)?, + tol, + )? { + // modify the rNextTSP to correspond to the through point + self.update_tsect_point(p1, next, through)?; + + // remove the through point from the list - we're done with it + unlink(&mut self.through_points, through); + + // mark the last throughParameter distance when extension clipping + if self.doing_extension_clipping && self.through_points.is_empty() { + self.last_through_parameter = self.point(through)?.curve_parameter; + } + + // remember that a through point was hit + self.clipped_by_through_point = true; + return Ok(None); + } + } + + // Check against Start Points, the better ones (at the end) first. + let starts = self.start_points.clone(); + for &start in starts.iter().rev() { + // Skip pPrev1 if it's the same as m_pStartPoint. + if prev1 == self.start_point { + continue; + } + let p1 = need_prev()?; + + // Also skip it if it's at the same place as pStartTSP, unless a seam + { + let prev_tsp = self.point(p1)?; + let start_tsp = self.point(start)?; + let dist = prev_tsp.crv_pos().distance(start_tsp.crv_pos()); + if dist < tol { + let dom1_size = self.uv_domains[0].size().length(); + let dom2_size = self.uv_domains[1].size().length(); + let dist1 = prev_tsp + .uv_pos(SrfIndex::First) + .distance(start_tsp.uv_pos(SrfIndex::First)); + let dist2 = prev_tsp + .uv_pos(SrfIndex::Second) + .distance(start_tsp.uv_pos(SrfIndex::Second)); + if dist1 < dom1_size / 2.0 && dist2 < dom2_size / 2.0 { + continue; + } + } + } + + // if StartTsp is on xsect curve segment + if is_point_on_tsect_curve(self.point(start)?, self.point(p1)?, self.point(next)?, tol)? + { + // Modify the rNextTSP to correspond to that start point + self.update_tsect_point(p1, next, start)?; + + // Remove the start point we just crossed (not singular or tangent ones) + let next_type = self.point(next)?.point_type; + let start_tsp = self.point(start)?.clone(); + if next_type == IntersectionPointType::Crossing + && start_tsp.tangent_plane_angle_rad > self.stepping_parallel_tol_radians + { + unlink(&mut self.start_points, start); + } + + // a crossing start point on a boundary the curve runs along is a + // through point + let done = if start_tsp.point_type == IntersectionPointType::Crossing { + let along = |on: ExtentPointType, across: ExtentPointType, d: f64| { + (on == ExtentPointType::Start || on == ExtentPointType::End) + && across == ExtentPointType::Inside + && is_zero(d) + }; + let u0 = along( + start_tsp.u_param_type(SrfIndex::First), + start_tsp.v_param_type(SrfIndex::First), + start_tsp.uv_deriv(SrfIndex::First).x, + ); + let u1 = along( + start_tsp.u_param_type(SrfIndex::Second), + start_tsp.v_param_type(SrfIndex::Second), + start_tsp.uv_deriv(SrfIndex::Second).x, + ); + let v0 = along( + start_tsp.v_param_type(SrfIndex::First), + start_tsp.u_param_type(SrfIndex::First), + start_tsp.uv_deriv(SrfIndex::First).y, + ); + let v1 = along( + start_tsp.v_param_type(SrfIndex::Second), + start_tsp.u_param_type(SrfIndex::Second), + start_tsp.uv_deriv(SrfIndex::Second).y, + ); + !(u0 || u1 || v0 || v1) + } else { + true + }; + return Ok(Some(done)); + } + } + + // If we have a start point check for a closed curve situation + if let Some(sp) = self.start_point { + // Don't check if we are only starting the curve + if prev1 != Some(sp) { + let p1 = need_prev()?; + // the node before pPrev1 (circular list: itself when alone) + let n = self.curve_points.len(); + let prev2 = self.curve_points.get(n.saturating_sub(2)).copied(); + if prev2 != Some(sp) + && is_point_on_tsect_curve( + self.point(sp)?, + self.point(p1)?, + self.point(next)?, + tol, + )? + { + // Have found loop around + self.update_tsect_point(p1, next, sp)?; + self.curve_is_closed = true; + return Ok(Some(true)); + } + } + } + + // If we are given an ending point - check it + if let Some(ep) = self.end_point { + let p1 = need_prev()?; + if is_point_on_tsect_curve(self.point(ep)?, self.point(p1)?, self.point(next)?, tol)? { + let mut on_seam = false; + if self.curve_points.first() == Some(&p1) { + // a single span: the end point at its start is a seam + let dist1 = self + .point(p1)? + .crv_pos() + .distance(self.point(ep)?.crv_pos()); + if dist1 < tol { + on_seam = true; + } + } + if !on_seam { + self.update_tsect_point(p1, next, ep)?; + return Ok(Some(true)); + } + } + } else if self.doing_extension_clipping + && self.last_through_parameter != 0.0 + && self.point(next)?.curve_parameter + > self.last_through_parameter + self.extension_distance + { + return Ok(Some(true)); + } + + // Check whether the point is inside of the domain of the surfaces. + let next_tsp = self.point(next)?.clone(); + let mut on_boundary = false; + for s in [SrfIndex::First, SrfIndex::Second] { + // let tol scale to surface domain size + let domain = at(&self.uv_domains, s); + let size = domain.max_dimension(); + let tol = EFF_ZERO * (1.0 + size) * 100.0; + let ang_tol = EFF_ZERO_SQRT * (1.0 + size) * 10.0; + + // check NextTSP to see if its crossing a boundary + let (on, bi_norm) = domain.is_point_on_boundary(next_tsp.uv_pos(s), tol); + let d = next_tsp.uv_deriv(s); + if on + && ((bi_norm.x != 0.0 && d.x.abs() > ang_tol) + || (bi_norm.y != 0.0 && d.y.abs() > ang_tol)) + { + on_boundary = true; + } + + // done when point is on and heading out of any boundary + if on_boundary { + break; + } + } + + // mark points not crossing boundaries as not done and return + if !on_boundary { + return Ok(Some(false)); + } + + // else this point is crossing a boundary: remove the start points at it + for id in self.start_points.clone() { + let tsp = self.point(id)?; + let mut same = true; + for s in [SrfIndex::First, SrfIndex::Second] { + let size = at(&self.uv_domains, s).max_dimension(); + let tol = EFF_ZERO * (1.0 + size) * 100.0; + let dist = tsp.uv_pos(s).distance_squared(next_tsp.uv_pos(s)); + if dist > tol { + same = false; + break; + } + } + if same { + unlink(&mut self.start_points, id); + } + } + Ok(Some(true)) + } + + // ---- fillet law spans ------------------------------------------------------------------ + + /// Splits the fillet-law span from `curr` to `next` (`SplitSpan`): a new crossing + /// point at the mean law parameter (`user_doubles[1]`), UV points and curve + /// parameter, evaluated by [`SurfaceIntersector::compute_law_point_values`]; its + /// curve parameter becomes `curr`'s plus the chord when the chord exceeds + /// `SM_ZONE_TOL_3D` times the law parameter step. Returns the new point's id. + /// + /// # Errors + /// + /// Those of [`SurfaceIntersector::compute_law_point_values`] (the basic + /// intersector's `ComputePointValuesDelta` always fails); `InvalidInput` for an + /// unknown id. + pub fn split_span( + &mut self, + curr: TsectId, + next: TsectId, + delta_step: f64, + law: &LawPointOptions<'_, L>, + ) -> Result { + let curr_tsp = self.point(curr)?.clone(); + let next_tsp = self.point(next)?.clone(); + + let mut new_tsp = TsectPnt::zeroed(); + new_tsp.point_type = IntersectionPointType::Crossing; + + // the law parameters of the span ends and their mean + let curr_param = curr_tsp.user_doubles[1]; + let next_param = next_tsp.user_doubles[1]; + let mid_param = (curr_param + next_param) / 2.0; + new_tsp.user_doubles[1] = mid_param; + + let uv0 = (curr_tsp.uv_pos(SrfIndex::First) + next_tsp.uv_pos(SrfIndex::First)) / 2.0; + let uv1 = (curr_tsp.uv_pos(SrfIndex::Second) + next_tsp.uv_pos(SrfIndex::Second)) / 2.0; + + new_tsp.curve_parameter = (curr_tsp.curve_parameter + next_tsp.curve_parameter) / 2.0; + + self.compute_law_point_values(mid_param, uv0, uv1, delta_step, law, false, &mut new_tsp)?; + + let dist = curr_tsp.crv_pos().distance(new_tsp.crv_pos()); + if dist > ZONE_TOL_3D * (next_param - curr_param) { + new_tsp.curve_parameter = curr_tsp.curve_parameter + dist; + } + Ok(self.alloc_point(new_tsp)) + } +} + +// ---- callees ---------------------------------------------------------------------------------- + +/// `surface.IsSingularity(uv, eSingDir)` (default tolerance): the plane override +/// (never singular); other kinds run `SmSurface::IsSingularity`. +fn surface_is_singularity(surface: &Surface, _uv: Point2) -> Result { + match surface.kind() { + SurfaceKind::Plane(p) => Ok(p.is_singularity().0), + SurfaceKind::BSpline(_) | SurfaceKind::CurveBounded(_) => { + // UNPORTED(surface.surface_p5): SmSurface::IsSingularity + Err(SolidError::unported( + "SmSurface::IsSingularity", + "surface.surface_p5", + )) + } + } +} + +/// `surface.GlobalCurveIntersect(domain, curve, interval, tol, solutions)`: the +/// solutions, `[t, u, v]` each. +fn surface_global_curve_intersect( + _surface: &Surface, + _domain: &Extent2d, + _curve: &Curve, + _interval: &Extent1d, + _tol: f64, +) -> Result>> { + // UNPORTED(surface.surface_p8): SmSurface::GlobalCurveIntersect + Err(SolidError::unported( + "SmSurface::GlobalCurveIntersect", + "surface.surface_p8", + )) +} + +/// The outputs of `SmSurface::DropAndTrimCurve` used here. +struct DropAndTrim { + /// `rdDistToSurf`. + dist_to_surf: f64, + /// `rUVCurves`. + uv_curves: Vec, +} + +/// `surface.DropAndTrimCurve(ctx, domain, curve, interval, tol, dist, deviation, +/// uv_curves, TRUE, TRUE)`. +fn surface_drop_and_trim_curve( + _k: &Kernel, + _surface: &Surface, + _domain: &Extent2d, + _curve: &Curve, + _interval: &Extent1d, + _tol: f64, +) -> Result { + // UNPORTED(intersect.surface_drop_lib_p1): SmSurface::DropAndTrimCurve + Err(SolidError::unported( + "SmSurface::DropAndTrimCurve", + "intersect.surface_drop_lib_p1", + )) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::geom::vector3d::Vec3; + use crate::surface::plane::Plane; + + fn plane(o: [f64; 3], x: [f64; 3], y: [f64; 3]) -> Surface { + Surface::from(Plane::new( + Vec3::from_array(o), + Vec3::from_array(x), + Vec3::from_array(y), + Point2::new(1.0, 1.0), + &Extent2d::from_bounds(0.0, 0.0, 1.0, 1.0), + )) + } + + fn two_planes() -> (Surface, Surface) { + // z = 0 and y = 0.5: they meet along x + ( + plane([0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0]), + plane([0.0, 0.5, -0.5], [1.0, 0.0, 0.0], [0.0, 0.0, 1.0]), + ) + } + + fn intersector<'s>(a: &'s Surface, b: &'s Surface) -> SurfaceIntersector<'s> { + let d = Extent2d::from_bounds(0.0, 0.0, 1.0, 1.0); + SurfaceIntersector::new(a, &d, b, &d, false).expect("intersector") + } + + /// The crossing point of the two planes at `x`. + fn crossing(si: &SurfaceIntersector<'_>, x: f64, param: f64) -> TsectPnt { + let mut p = TsectPnt::new(); + si.compute_point_values( + [Point2::new(x, 0.5), Point2::new(x, 0.5)], + &mut p, + None, + None, + ) + .expect("cpv"); + p.curve_parameter = param; + p + } + + #[test] + fn zeroed_point() { + let p = TsectPnt::zeroed(); + assert_eq!(p.point_type, IntersectionPointType::Undefined); + assert_eq!(p.uv_param_type, [[ExtentPointType::Start; 2]; 2]); + assert_eq!(p.crv_pos(), Vec3::ZERO); + } + + #[test] + fn next_point_from_a_tangent_point_type_is_not_refined() { + let (a, b) = two_planes(); + let mut si = intersector(&a, &b); + let mut prev = crossing(&si, 0.2, 0.0); + prev.point_type = IntersectionPointType::Unknown; + let p = si.alloc_point(prev); + let n = si.alloc_point(TsectPnt::new()); + // an unknown type is not refined: no good point + let r = si.compute_next_point(p, 0.1, n).expect("next"); + assert!(!r.found_good_point); + assert!(!r.boundary_hit); + assert!(si.compute_next_point(p, 0.1, p).is_err()); + } + + #[test] + fn next_point_outside_the_domain_is_sm_err() { + let (a, b) = two_planes(); + let mut si = intersector(&a, &b); + let mut prev = crossing(&si, 0.2, 0.0); + prev.uv_curve_pv[0][0] = Point2::new(2.0, 0.5); + let p = si.alloc_point(prev); + let n = si.alloc_point(TsectPnt::new()); + assert!(si.compute_next_point(p, 0.1, n).is_err()); + } + + #[test] + fn next_point_clipped_to_zero_is_a_boundary_hit() { + let (a, b) = two_planes(); + let mut si = intersector(&a, &b); + let mut prev = crossing(&si, 1.0, 0.0); + // heading out of both domains + prev.uv_curve_pv[0][1] = Vec2::new(1.0, 0.0); + prev.uv_curve_pv[1][1] = Vec2::new(1.0, 0.0); + let p = si.alloc_point(prev); + let n = si.alloc_point(TsectPnt::new()); + let r = si.compute_next_point(p, 0.1, n).expect("next"); + assert!(r.boundary_hit); + assert!(r.clipped); + } + + #[test] + fn test_point_snaps_to_end_point() { + let (a, b) = two_planes(); + let mut si = intersector(&a, &b); + let p0 = si.alloc_point(crossing(&si, 0.2, 0.0)); + let end = si.alloc_point(crossing(&si, 0.5, -1.0)); + let next = si.alloc_point(crossing(&si, 0.6, 0.4)); + si.add_point_to_curve(p0).expect("curve"); + si.end_point = Some(end); + let done = si.test_point(next).expect("test"); + assert_eq!(done, Some(true)); + let n = si.point(next).expect("next"); + assert!((n.crv_pos().x - 0.5).abs() < 1e-12); + // the end point learns its parameter + assert!(si.point(end).expect("end").curve_parameter >= 0.0); + } + + #[test] + fn test_point_through_point_leaves_done_unset() { + let (a, b) = two_planes(); + let mut si = intersector(&a, &b); + let p0 = si.alloc_point(crossing(&si, 0.2, 0.0)); + let th = si.alloc_point(crossing(&si, 0.4, -1.0)); + let next = si.alloc_point(crossing(&si, 0.6, 0.4)); + si.add_point_to_curve(p0).expect("curve"); + si.add_through_point(th).expect("through"); + assert_eq!(si.test_point(next).expect("test"), None); + assert!(si.through_points().is_empty()); + assert!(si.clipped_by_through_point); + } + + #[test] + fn test_point_needs_a_previous_point() { + let (a, b) = two_planes(); + let mut si = intersector(&a, &b); + let next = si.alloc_point(crossing(&si, 0.6, 0.4)); + let end = si.alloc_point(crossing(&si, 0.5, 0.0)); + // nothing to test against: inside the domain, not done + assert_eq!(si.test_point(next).expect("test"), Some(false)); + si.end_point = Some(end); + assert!(si.test_point(next).is_err()); + } + + #[test] + fn test_point_on_boundary_is_done() { + let (a, b) = two_planes(); + let mut si = intersector(&a, &b); + let p0 = si.alloc_point(crossing(&si, 0.8, 0.0)); + let s = si.alloc_point(crossing(&si, 1.0, 0.0)); + si.add_point_to_curve(p0).expect("curve"); + let next = si.alloc_point(crossing(&si, 1.0, 0.2)); + si.add_start_point(s).expect("start"); + assert_eq!(si.test_point(next).expect("test"), Some(true)); + assert!(si.start_points().is_empty()); + } + + #[test] + fn update_rejects_alias() { + let (a, b) = two_planes(); + let mut si = intersector(&a, &b); + let p0 = si.alloc_point(crossing(&si, 0.2, 0.0)); + assert!(si.update_tsect_point(p0, p0, p0).is_err()); + } + + #[test] + fn find_boundary_start_points_needs_a_cache() { + let (a, b) = two_planes(); + let mut si = intersector(&a, &b); + let k = Kernel::default(); + let mut out = TsectCurves::default(); + let mut caches: Vec> = Vec::new(); + assert!(si + .find_boundary_start_points(&k, &mut caches, &Extent3d::new(), &mut out) + .is_err()); + } +} From 945b82a37e28268981e60817a182ec3bcd805619 Mon Sep 17 00:00:00 2001 From: lillith <35337584+0xlillith@users.noreply.github.com> Date: Wed, 14 Oct 2026 18:48:09 +0200 Subject: [PATCH 32/54] docs: keep surface.surface_p9 validation notes valid TOML Co-Authored-By: OpenAI Codex --- plan/modules.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plan/modules.toml b/plan/modules.toml index 2fd387fbb6..0844235ab2 100644 --- a/plan/modules.toml +++ b/plan/modules.toml @@ -1596,7 +1596,7 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin status = "partial" claimed_by = "" claimed_at = "" -notes = "3 fns; largest: SmCSIGlobalSolver::LocalSolve, SmSurface::FindTessellationSplits, SmSurface::CreateIsoBoundaries; cycle back-edges (call into later units; stub or co-port): surface.surface_p5(4), surface.surface_p1(3), surface.surface_p7(2), surface.surface_p4(1), surface.surface_p6(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; Review validation: 744 cases, 692 bit-identical, 0 failed, 52 deferred (intersect.curve_class_p4 50, surface.surface_p1 2); --perturb detected 692/692; max_rel_err=0. CSI body remains unverified behind sm_GetSurfaceToEvaluate; surface_p7 IsClosed and tangent-plane drop are wired; tessellation recursion/allocation bounded +notes = "3 fns; largest: SmCSIGlobalSolver::LocalSolve, SmSurface::FindTessellationSplits, SmSurface::CreateIsoBoundaries; cycle back-edges (call into later units; stub or co-port): surface.surface_p5(4), surface.surface_p1(3), surface.surface_p7(2), surface.surface_p4(1), surface.surface_p6(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; Review validation: 744 cases, 692 bit-identical, 0 failed, 52 deferred (intersect.curve_class_p4 50, surface.surface_p1 2); --perturb detected 692/692; max_rel_err=0. CSI body remains unverified behind sm_GetSurfaceToEvaluate; surface_p7 IsClosed and tangent-plane drop are wired; tessellation recursion/allocation bounded" [[unit]] id = "surface.trim_srf_cache" From c010d337d36aead7c8f0659443d59a3b064b390c Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 13:00:10 -0400 Subject: [PATCH 33/54] intersect.surface_intersector_p3: C++ shim, ffi binding, difftest runner and fixtures Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm --- .../units/intersect_surface_intersector_p3.rs | 2007 +++ .../units/intersect_surface_intersector_p3.rs | 614 + .../src/intersect/surface_intersector/p3.rs | 28 + .../planar_section.json | 12475 ++++++++++++++++ .../shim/intersect_surface_intersector_p3.cpp | 716 + 5 files changed, 15840 insertions(+) create mode 100644 crates/difftest/src/units/intersect_surface_intersector_p3.rs create mode 100644 crates/solidcore-ffi/src/units/intersect_surface_intersector_p3.rs create mode 100644 fixtures/intersect.surface_intersector_p3/planar_section.json create mode 100644 harness/cpp/shim/intersect_surface_intersector_p3.cpp diff --git a/crates/difftest/src/units/intersect_surface_intersector_p3.rs b/crates/difftest/src/units/intersect_surface_intersector_p3.rs new file mode 100644 index 0000000000..88d1ffcfbc --- /dev/null +++ b/crates/difftest/src/units/intersect_surface_intersector_p3.rs @@ -0,0 +1,2007 @@ +//! Runner for unit `intersect.surface_intersector_p3`: `SmSurfaceIntersector`, part 3 +//! (`FindBoundaryStartPoints`, `ComputeNextPoint`, `TestPoint` with +//! `sm_UpdateTsectPoint`, `SplitSpan`). +//! +//! C++: `solidcore_ffi::units::intersect_surface_intersector_p3` (a real +//! `SmSurfaceIntersector` on `SmPlane` / `SmBSplineSurface` / `SmCurveBoundedSurface` +//! objects). Rust: `solidcore::intersect::surface_intersector::p3`. +//! +//! A case is two surfaces (B may be A itself), their domains, the fillet flag, some +//! curves, a point arena and a program of operations; both sides produce the record +//! documented in the ffi module (statuses `0` = `SM_SUCCESS`, else the `SmStatus`; +//! `1007` for a Rust `InvalidInput`, `-1` for a Rust error upstream cannot produce, +//! [`ffi::REJECTED`] for an op the shim does not run), reported as the values `rec`. +//! A case whose Rust side reaches an unported unit is deferred as a whole. +//! +//! Generated programs: traces along the line where two planes cross (any angle down to +//! nearly tangent, the line inside or on a domain boundary, any scale) with through, +//! start and end points on, off, before and beyond the traced span, then `TestPoint` +//! and `ComputeNextPoint`; random points and programs on planes, B-spline and +//! curve-bounded surfaces; `FindBoundaryStartPoints` of B-spline bumps and planes with +//! intersection boxes that miss or meet the boundaries; `SplitSpan`. +//! +//! Deferred cases: `ComputeNextPoint` refining a crossing, tangent-curve or singular +//! point (`SmSurface::LocalSurfaceIntersect`), `ComputePointValues` on a B-spline or +//! curve-bounded surface (`SmSurface::IsSingularity`), `FindBoundaryStartPoints` with a +//! curve-bounded surface (`smsurf_GetSurfaceCache`, see `Run::caches`) or with +//! a boundary box meeting the intersection box (`SmSurface::GlobalCurveIntersect`) or +//! on a plane (`SmPlane::CreateIsoParametricCurve`), and `SplitSpan` with a valid plane +//! (`SmFilletLaw::Evaluate`). + +use serde::{Deserialize, Serialize}; +use serde_json::{json, Value}; + +use solidcore::curve::curve::{Curve, CurveKind}; +use solidcore::curve::line::Line; +use solidcore::geom::extent1d::{Extent1d, ExtentPointType}; +use solidcore::geom::extent2d::Extent2d; +use solidcore::geom::extent3d::Extent3d; +use solidcore::geom::vector2d::{Point2, Vec2}; +use solidcore::geom::vector3d::Vec3; +use solidcore::intersect::surface_intersector::p1::{ + IntersectionPointType, SurfaceIntersector, TsectId, TsectPnt, +}; +use solidcore::intersect::surface_intersector::p2::{LawPointOptions, TsectCurves}; +use solidcore::kernel::Kernel; +use solidcore::math::UNDEF_DOUBLE; +use solidcore::nurbs::b_spline_curve::BSplineCurve; +use solidcore::nurbs::b_spline_surface::BSplineSurface; +use solidcore::nurbs::math::CPoint; +use solidcore::nurbs::srf_basic::Surface as NurbSurface; +use solidcore::surface::curve_bounded_surface::CurveBoundedSurface; +use solidcore::surface::plane::Plane; +use solidcore::surface::surface::{Surface, SurfaceKind}; +use solidcore::surface::surface_cache::{SurfaceCache, SurfaceCacheOptions}; +use solidcore::SolidError; +use solidcore_ffi::units::intersect_surface_intersector_p3::{self as ffi}; + +use crate::case::CaseContext; +use crate::runner::default_cases; +use crate::{Case, CaseSource, HarnessError, Output, Rng, UnitDiff}; + +/// Generated cases per run, whatever `--seeds` says (it can only raise this). +pub const MIN_GENERATED: usize = 1500; + +/// `intersect.surface_intersector_p3` runner. +pub struct Runner; + +const NOW: f64 = -f64::MAX; + +/// No start or end point in the state record. +const NO_POINT: f64 = -3.0; + +// ---- inputs --------------------------------------------------------------------------- + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct SplitIn { + curr: usize, + next: usize, + delta: f64, + normals: [[f64; 3]; 2], + average: bool, + orient: bool, + curve: usize, + interval: [f64; 2], + orientations: [f64; 2], +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", tag = "op")] +enum OpIn { + State, + Point { + i: usize, + }, + AddCurve { + i: usize, + }, + AddStart { + i: usize, + }, + AddThrough { + i: usize, + }, + Cpv { + uvs: [[f64; 2]; 2], + i: usize, + prev: Option, + step: Option, + }, + Members { + trace_dir: f64, + approx_tol: f64, + start_tol: f64, + step_tol: f64, + ang_tol: f64, + }, + Ends { + start: Option, + end: Option, + }, + Ext { + clip: bool, + last_through: f64, + distance: f64, + }, + Test { + i: usize, + done: bool, + }, + Next { + prev: usize, + step: f64, + next: usize, + dev: f64, + ang: f64, + }, + Split(SplitIn), + Fbsp { + bbox: [[f64; 3]; 2], + use_edges: [bool; 2], + }, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct Inputs { + a: SurfaceIn, + /// `None`: B is A itself. + b: Option, + dom1: [f64; 4], + dom2: [f64; 4], + fillet: bool, + curves: Vec, + /// [`ffi::POINT_LEN`] values each. + points: Vec>, + ops: Vec, +} + +fn harness(msg: impl Into) -> HarnessError { + HarnessError::new(msg) +} + + + +// ---- inputs --------------------------------------------------------------------------- + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", tag = "kind")] +enum SurfaceIn { + Plane { + o: [f64; 3], + x: [f64; 3], + y: [f64; 3], + scale: [f64; 2], + domain: [f64; 4], + }, + BSpline { + p: usize, + q: usize, + /// Rows (u index) of `[x, y, z, w]`; `w` = `null` for a non-rational point. + net: Vec; 4]>>, + u: Vec, + v: Vec, + }, + /// An `SmCurveBoundedSurface` (implicit outer, no boundary curves) over a plane or + /// B-spline basis. + CurveBounded { + basis: Box, + }, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", tag = "kind")] +enum CurveIn { + Segment { + a: [f64; 3], + b: [f64; 3], + }, + BSpline { + dim: u32, + p: usize, + /// `[x, y, z, w]`; `w` = `null` for a non-rational point. + cpts: Vec<[Option; 4]>, + knots: Vec, + }, +} + + +fn weight(w: Option) -> f64 { + w.unwrap_or(NOW) +} + +fn cpt4(c: &[Option; 4]) -> [f64; 4] { + [ + c[0].unwrap_or(f64::NAN), + c[1].unwrap_or(f64::NAN), + c[2].unwrap_or(f64::NAN), + weight(c[3]), + ] +} + +fn ffi_surface(s: &SurfaceIn) -> ffi::SurfaceIn { + match s { + SurfaceIn::Plane { + o, + x, + y, + scale, + domain, + } => ffi::SurfaceIn::Plane { + o: *o, + x: *x, + y: *y, + scale: *scale, + domain: *domain, + }, + SurfaceIn::BSpline { p, q, net, u, v } => ffi::SurfaceIn::BSpline { + p: *p, + q: *q, + net: net.iter().map(|r| r.iter().map(cpt4).collect()).collect(), + u: u.clone(), + v: v.clone(), + }, + SurfaceIn::CurveBounded { basis } => { + ffi::SurfaceIn::CurveBounded(Box::new(ffi_surface(basis))) + } + } +} + +fn ffi_curve(c: &CurveIn) -> ffi::CurveIn { + match c { + CurveIn::Segment { a, b } => ffi::CurveIn::Segment(*a, *b), + CurveIn::BSpline { + dim, + p, + cpts, + knots, + } => ffi::CurveIn::BSpline { + dim: *dim, + p: *p, + cpts: cpts.iter().map(cpt4).collect(), + knots: knots.clone(), + }, + } +} + +// ---- C++ side ----------------------------------------------------------------------------- + +fn cpp(i: &Inputs) -> Result { + match ffi::run(&ffi_program(i)) { + Ok(rec) => Ok(Output::new().values("rec", rec)), + Err(e) => Err(harness(format!("C++: {e}"))), + } +} + +// ---- Rust side ---------------------------------------------------------------------------- + +/// A failed Rust operation: the whole case is deferred, or the harness failed. +enum Fail { + Deferred(Box), + Harness(HarnessError), +} + +impl From for Fail { + fn from(e: HarnessError) -> Self { + Fail::Harness(e) + } +} + +/// The `SmStatus` of a Rust error; `1007` for `InvalidInput`, `-1` for one upstream +/// cannot return. +fn status(e: &SolidError) -> f64 { + match e { + SolidError::InvalidInput { .. } => 1007.0, + SolidError::Upstream { code, .. } => f64::from(*code), + _ => -1.0, + } +} + +/// Pushes the op status of `r`; `Ok(Some(v))` on success, a deferral for `Unported`. +fn st(o: &mut Vec, r: solidcore::Result) -> Result, Fail> { + match r { + Ok(v) => { + o.push(0.0); + Ok(Some(v)) + } + Err(e) => { + if let Some(d) = Output::unported(&e) { + return Err(Fail::Deferred(Box::new(d))); + } + o.push(status(&e)); + Ok(None) + } + } +} + +fn b(x: bool) -> f64 { + if x { + 1.0 + } else { + 0.0 + } +} + +fn v3(p: [f64; 3]) -> Vec3 { + Vec3::from_array(p) +} + +fn p2(p: [f64; 2]) -> Point2 { + Point2::new(p[0], p[1]) +} + +fn ext(d: [f64; 4]) -> Extent2d { + Extent2d::from_bounds(d[0], d[1], d[2], d[3]) +} + +fn rust_surface(s: &SurfaceIn) -> Result { + match s { + SurfaceIn::Plane { + o, + x, + y, + scale, + domain, + } => Ok(Surface::from(Plane::new( + v3(*o), + v3(*x), + v3(*y), + p2(*scale), + &ext(*domain), + ))), + SurfaceIn::BSpline { p, q, net, u, v } => { + let net = net + .iter() + .map(|r| { + r.iter() + .map(|c| { + let [x, y, z, w] = cpt4(c); + CPoint::new(x, y, z, w) + }) + .collect() + }) + .collect(); + let sur = NurbSurface::new(net, *p, *q, u.clone(), v.clone()) + .map_err(|e| harness(format!("surface: {e}")))?; + Ok(Surface::from(BSplineSurface::from_nurb(sur, false))) + } + SurfaceIn::CurveBounded { basis } => Ok(Surface::from(CurveBoundedSurface::new( + rust_surface(basis)?, + Vec::new(), + Vec::new(), + true, + ))), + } +} + +fn rust_curve(c: &CurveIn) -> Result { + match c { + CurveIn::Segment { a, b } => Line::create_line_segment(3, v3(*a), v3(*b), None) + .map(Curve::from) + .map_err(|e| Fail::Harness(harness(format!("segment: {e}")))), + CurveIn::BSpline { + dim, + p, + cpts, + knots, + } => { + let pw: Vec = cpts + .iter() + .map(|c| { + let [x, y, z, w] = cpt4(c); + CPoint { x, y, z, w } + }) + .collect(); + let n = pw + .len() + .checked_sub(1) + .ok_or_else(|| harness("empty B-spline"))?; + let m = knots.len().checked_sub(1).ok_or_else(|| harness("no knots"))?; + BSplineCurve::from_data(u64::from(*dim), n, m, *p, &pw, knots) + .map(Curve::from) + .map_err(|e| Fail::Harness(harness(format!("B-spline: {e}")))) + } + } +} + +fn ept(code: f64) -> Result { + Ok(match code as i64 { + 0 => ExtentPointType::Start, + 1 => ExtentPointType::Inside, + 2 => ExtentPointType::End, + 3 => ExtentPointType::Both, + 4 => ExtentPointType::Outside, + 5 => ExtentPointType::Unknown, + _ => return Err(harness("extent point type")), + }) +} + +fn rust_point(v: &[f64]) -> Result { + if v.len() != ffi::POINT_LEN { + return Err(harness("point length")); + } + let mut it = v.iter().copied(); + let mut g = || it.next().unwrap_or(f64::NAN); + let mut t = TsectPnt::new(); + t.point_type = + IntersectionPointType::from_code(g() as i32).ok_or_else(|| harness("point type"))?; + for pt in t.uv_param_type.iter_mut().flatten() { + *pt = ept(g())?; + } + for uv in t.uv_curve_pv.iter_mut().flatten() { + *uv = Vec2::new(g(), g()); + } + for vec in t.surface_pv.iter_mut().flatten().flatten() { + *vec = Vec3::new(g(), g(), g()); + } + for vec in &mut t.curve_pv { + *vec = Vec3::new(g(), g(), g()); + } + t.curve_parameter = g(); + t.tangent_plane_angle_rad = g(); + t.deviation = g(); + for u in &mut t.user_doubles { + *u = g(); + } + Ok(t) +} + +fn put_vec(o: &mut Vec, v: Vec3) { + o.extend([v.x, v.y, v.z]); +} + +fn put_uv(o: &mut Vec, v: Vec2) { + o.extend([v.x, v.y]); +} + +fn put_point(o: &mut Vec, t: &TsectPnt) { + o.push(f64::from(t.point_type.code())); + o.extend(t.uv_param_type.iter().flatten().map(|pt| f64::from(pt.code()))); + for uv in t.uv_curve_pv.iter().flatten() { + put_uv(o, *uv); + } + for vec in t.surface_pv.iter().flatten().flatten() { + put_vec(o, *vec); + } + put_vec(o, t.curve_pv[0]); + put_vec(o, t.curve_pv[1]); + o.extend([t.curve_parameter, t.tangent_plane_angle_rad, t.deviation]); + o.extend(t.user_doubles); +} + + +fn put_bspline(o: &mut Vec, c: &Curve) -> Result<(), Fail> { + o.extend([c.type_code() as f64, c.dim() as f64]); + let CurveKind::BSpline(bs) = c.kind() else { + return Err(Fail::Harness(harness("output curve is not a B-spline"))); + }; + o.extend([ + f64::from(bs.knot_type() as i32), + f64::from(bs.form() as i32), + ]); + match bs.gw_nurb() { + None => o.push(0.0), + Some(cur) => { + o.extend([1.0, cur.n() as f64, cur.degree() as f64, cur.m() as f64]); + for p in cur.cpts() { + o.extend([p.x, p.y, p.z, p.w]); + } + o.extend_from_slice(cur.knots()); + } + } + let ivl = c.natural_interval(); + o.extend([ivl.min(), ivl.max()]); + Ok(()) +} + +fn put_curves(o: &mut Vec, cs: &[Curve], from: usize) -> Result<(), Fail> { + let tail = cs.get(from..).unwrap_or(&[]); + o.push(tail.len() as f64); + for c in tail { + put_bspline(o, c)?; + } + Ok(()) +} + +fn put_outs(o: &mut Vec, out: &TsectCurves, first: usize) -> Result<(), Fail> { + put_curves(o, &out.curves_3d, first)?; + put_curves(o, &out.uv_curves[0], 0)?; + put_curves(o, &out.uv_curves[1], 0)?; + o.push(out.curve_types.len() as f64); + o.extend(out.curve_types.iter().map(|t| f64::from(*t as i32))); + o.push(out.deviations.len() as f64); + o.extend_from_slice(&out.deviations); + Ok(()) +} + +fn id(i: usize) -> TsectId { + TsectId(i) +} + +fn pt_of(si: &SurfaceIntersector<'_>, i: usize) -> Result { + si.point(id(i)) + .cloned() + .map_err(|e| Fail::Harness(harness(format!("point: {e}")))) +} + +fn set_pt(si: &mut SurfaceIntersector<'_>, i: usize, p: TsectPnt) -> Result<(), Fail> { + *si.point_mut(id(i)) + .map_err(|e| Fail::Harness(harness(format!("point: {e}"))))? = p; + Ok(()) +} + + +// ---- generation ----------------------------------------------------------------------------- + +fn pick_f(rng: &mut Rng, items: &[f64]) -> f64 { + rng.choose(items).copied().unwrap_or(1.0) +} + +/// A length scale: mostly unit, sometimes tiny or huge. +fn gen_scale(rng: &mut Rng) -> f64 { + match rng.below(10) { + 0 => 1e-3, + 1 => 1e3, + 2 => 1e-6, + 3 => 1e5, + _ => rng.uniform(0.5, 4.0), + } +} + +fn unit_vec(rng: &mut Rng) -> [f64; 3] { + loop { + let v = rng.point3(-1.0, 1.0); + let l = (v[0] * v[0] + v[1] * v[1] + v[2] * v[2]).sqrt(); + if l > 0.2 { + return [v[0] / l, v[1] / l, v[2] / l]; + } + } +} + +fn cross(a: [f64; 3], c: [f64; 3]) -> [f64; 3] { + [ + a[1] * c[2] - a[2] * c[1], + a[2] * c[0] - a[0] * c[2], + a[0] * c[1] - a[1] * c[0], + ] +} + +fn norm(v: [f64; 3]) -> [f64; 3] { + let l = (v[0] * v[0] + v[1] * v[1] + v[2] * v[2]).sqrt(); + if l > 0.0 { + [v[0] / l, v[1] / l, v[2] / l] + } else { + [1.0, 0.0, 0.0] + } +} + +fn plane_in(o: [f64; 3], x: [f64; 3], y: [f64; 3], domain: [f64; 4], scale: [f64; 2]) -> SurfaceIn { + SurfaceIn::Plane { + o, + x, + y, + scale, + domain, + } +} + +/// A random plane; `near` = a normal: the plane is tilted from it by `tilt` radians. +fn gen_plane(rng: &mut Rng, s: f64, near: Option<([f64; 3], f64)>) -> SurfaceIn { + let o = rng.point3(-s, s); + let (x, y) = match near { + None => { + let x = unit_vec(rng); + let mut y = cross(unit_vec(rng), x); + let l = (y[0] * y[0] + y[1] * y[1] + y[2] * y[2]).sqrt(); + if l > 1e-3 { + y = [y[0] / l, y[1] / l, y[2] / l]; + } else { + y = norm(cross(x, [0.0, 0.0, 1.0])); + } + (x, y) + } + Some((n, tilt)) => { + // a basis of the plane with normal n, then x tilted about y + let a = if n[0].abs() < 0.9 { + [1.0, 0.0, 0.0] + } else { + [0.0, 1.0, 0.0] + }; + let x0 = norm(cross(n, a)); + let y0 = cross(n, x0); + let (c, sn) = (tilt.cos(), tilt.sin()); + let x = [ + x0[0] * c + n[0] * sn, + x0[1] * c + n[1] * sn, + x0[2] * c + n[2] * sn, + ]; + (x, y0) + } + }; + let scale = if rng.chance(0.7) { + [1.0, 1.0] + } else { + [rng.uniform(0.5, 2.0), rng.uniform(0.5, 2.0)] + }; + let domain = if rng.chance(0.5) { + [0.0, 0.0, s, s] + } else { + [-s * rng.uniform(0.2, 1.0), -s, s, s * rng.uniform(0.2, 2.0)] + }; + plane_in(o, x, y, domain, scale) +} + +fn clamped_knots(rng: &mut Rng, n: usize, p: usize, lo: f64, hi: f64) -> Vec { + let interior = n - p - 1; + let mut inner: Vec = (0..interior) + .map(|i| lo + (hi - lo) * (i as f64 + 1.0 + rng.uniform(-0.3, 0.3)) / (interior as f64 + 1.0)) + .collect(); + inner.sort_by(f64::total_cmp); + let mut k = vec![lo; p + 1]; + k.extend(inner); + k.extend(vec![hi; p + 1]); + k +} + +fn param_range(rng: &mut Rng) -> (f64, f64) { + if rng.chance(0.7) { + (0.0, 1.0) + } else { + let a = rng.uniform(-5.0, 5.0); + (a, a + rng.uniform(0.5, 10.0)) + } +} + +fn gen_bspline(rng: &mut Rng, s: f64, tube: bool) -> SurfaceIn { + let p = 1 + rng.below(3) as usize; + let q = 1 + rng.below(3) as usize; + let nu = p + 1 + rng.below(3) as usize; + let nv = q + 1 + rng.below(3) as usize; + let rational = rng.chance(0.2); + let o = rng.point3(-s, s); + let mut net = Vec::new(); + for i in 0..nu { + let mut row = Vec::new(); + for j in 0..nv { + let (x, y, z) = if tube { + let a = core::f64::consts::TAU * (i % (nu - 1)) as f64 / (nu - 1) as f64; + (s * a.cos(), s * a.sin(), s * j as f64 / (nv - 1) as f64) + } else { + ( + s * i as f64 / (nu - 1) as f64, + s * j as f64 / (nv - 1) as f64, + s * rng.uniform(-0.3, 0.3), + ) + }; + let w = if rational { + Some(rng.uniform(0.5, 2.0)) + } else { + None + }; + let ww = w.unwrap_or(1.0); + row.push([ + Some((o[0] + x) * ww), + Some((o[1] + y) * ww), + Some((o[2] + z) * ww), + w, + ]); + } + net.push(row); + } + let (ulo, uhi) = param_range(rng); + let (vlo, vhi) = param_range(rng); + let u = clamped_knots(rng, nu, p, ulo, uhi); + let v = clamped_knots(rng, nv, q, vlo, vhi); + SurfaceIn::BSpline { p, q, net, u, v } +} + +/// A bump B-spline over `[x0, x0 + s] x [0, s]` with planar, curved boundaries (its +/// boundary rows have constant x or y and varying heights); `heights` gives the net's +/// z values, `mirror` flips x (so the patch lies at `x <= x0`). +fn bump_bspline( + s: f64, + x0: f64, + deg: usize, + heights: &[Vec], + mirror: bool, + range: [(f64, f64); 2], +) -> SurfaceIn { + let nu = heights.len(); + let nv = heights.first().map_or(0, Vec::len); + let mut net = Vec::new(); + for (i, hrow) in heights.iter().enumerate() { + let mut row = Vec::new(); + for (j, &z) in hrow.iter().enumerate() { + let fx = s * i as f64 / (nu - 1) as f64; + let x = if mirror { x0 - fx } else { x0 + fx }; + let y = s * j as f64 / (nv - 1) as f64; + row.push([Some(x), Some(y), Some(z), None]); + } + net.push(row); + } + let knots = |n: usize, (lo, hi): (f64, f64)| { + let mut k = vec![lo; deg + 1]; + for i in 1..n - deg { + k.push(lo + (hi - lo) * i as f64 / (n - deg) as f64); + } + k.extend(vec![hi; deg + 1]); + k + }; + let [ru, rv] = range; + SurfaceIn::BSpline { + p: deg, + q: deg, + net, + u: knots(nu, ru), + v: knots(nv, rv), + } +} + +fn natural(s: &SurfaceIn) -> [f64; 4] { + match s { + SurfaceIn::Plane { domain, .. } => *domain, + SurfaceIn::BSpline { u, v, .. } => [ + u.first().copied().unwrap_or(0.0), + v.first().copied().unwrap_or(0.0), + u.last().copied().unwrap_or(1.0), + v.last().copied().unwrap_or(1.0), + ], + SurfaceIn::CurveBounded { basis } => natural(basis), + } +} + +/// Wraps `s` in a curve-bounded surface. +fn bounded(s: SurfaceIn) -> SurfaceIn { + SurfaceIn::CurveBounded { basis: Box::new(s) } +} + +fn gen_domain(rng: &mut Rng, nat: [f64; 4]) -> [f64; 4] { + let [a, b0, c, d] = nat; + let (w, h) = (c - a, d - b0); + match rng.below(10) { + 0 => [a + 0.1 * w, b0 + 0.2 * h, c - 0.3 * w, d - 0.1 * h], + 1 => [a - 0.2 * w, b0, c + 0.1 * w, d], + 2 => [a + 1e-13 * w, b0, c, d - 1e-13 * h], + _ => nat, + } +} + +fn lerp_dom(d: [f64; 4], a: f64, c: f64) -> [f64; 2] { + [d[0] + a * (d[2] - d[0]), d[1] + c * (d[3] - d[1])] +} + +/// A UV point of `d`: inside, on a side or corner, just off it, or outside. +fn gen_uv(rng: &mut Rng, d: [f64; 4]) -> [f64; 2] { + let edge = |rng: &mut Rng| pick_f(rng, &[0.0, 1.0, 1e-12, 1.0 - 1e-12, -1e-3, 1.001]); + match rng.below(10) { + 0 => lerp_dom(d, edge(rng), rng.unit()), + 1 => lerp_dom(d, rng.unit(), edge(rng)), + 2 => lerp_dom(d, edge(rng), edge(rng)), + 3 => lerp_dom(d, rng.uniform(-0.3, 1.3), rng.uniform(-0.3, 1.3)), + _ => lerp_dom(d, rng.uniform(0.02, 0.98), rng.uniform(0.02, 0.98)), + } +} + +/// A point: random UVs and tangents in the domains, a random type (mostly crossing), +/// matrices of plausible size, increasing parameters. +fn gen_point(rng: &mut Rng, doms: [[f64; 4]; 2], s: f64, param: f64) -> Vec { + let mut v = Vec::with_capacity(ffi::POINT_LEN); + v.push(if rng.chance(0.6) { + 2.0 + } else { + rng.below(8) as f64 + }); + for _ in 0..4 { + v.push(if rng.chance(0.6) { + 1.0 + } else { + rng.below(6) as f64 + }); + } + for d in doms { + v.extend(gen_uv(rng, d)); + let t = if rng.chance(0.1) { + [0.0, 0.0] + } else { + let a = rng.uniform(-1.0, 1.0); + [a, rng.uniform(-1.0, 1.0)] + }; + v.extend(t); + } + for _ in 0..2 { + for k in 0..9 { + let p = if k == 8 { + unit_vec(rng) + } else if rng.chance(0.1) { + [UNDEF_DOUBLE; 3] + } else { + rng.point3(-s, s) + }; + v.extend(p); + } + } + v.extend(rng.point3(-s, s)); + v.extend(match rng.below(8) { + 0 => [0.0; 3], + _ => unit_vec(rng), + }); + v.push(param); + v.push(rng.uniform(0.0, core::f64::consts::FRAC_PI_2)); + v.push(rng.uniform(0.0, 1e-3) * s); + for _ in 0..4 { + v.push(rng.uniform(-1.0, 1.0)); + } + v +} + +fn gen_curve(rng: &mut Rng, s: f64) -> CurveIn { + if rng.below(3) == 0 { + let a = rng.point3(-s, s); + let d = unit_vec(rng); + CurveIn::Segment { + a, + b: [a[0] + s * d[0], a[1] + s * d[1], a[2] + s * d[2]], + } + } else { + let p = 1 + rng.below(3) as usize; + let n = p + 1 + rng.below(3) as usize; + let cpts = (0..n) + .map(|i| { + let q = rng.point3(-s, s); + [Some(q[0] + i as f64 * s), Some(q[1]), Some(q[2]), None] + }) + .collect(); + let knots = clamped_knots(rng, n, p, 0.0, 1.0); + CurveIn::BSpline { + dim: 3, + p, + cpts, + knots, + } + } +} + + +fn heights(rng: &mut Rng, n: usize, s: f64, flat_row0: Option<&[f64]>) -> Vec> { + (0..n) + .map(|i| { + if i == 0 { + if let Some(r) = flat_row0 { + return r.to_vec(); + } + } + (0..n).map(|_| s * rng.uniform(-0.3, 0.3)).collect() + }) + .collect() +} + +fn ffi_op(o: &OpIn) -> ffi::Op { + match o { + OpIn::State => ffi::Op::State, + OpIn::Point { i } => ffi::Op::Point(*i), + OpIn::AddCurve { i } => ffi::Op::AddCurve(*i), + OpIn::AddStart { i } => ffi::Op::AddStart(*i), + OpIn::AddThrough { i } => ffi::Op::AddThrough(*i), + OpIn::Cpv { uvs, i, prev, step } => ffi::Op::Cpv { + uvs: *uvs, + i: *i, + prev: *prev, + step: *step, + }, + OpIn::Members { + trace_dir, + approx_tol, + start_tol, + step_tol, + ang_tol, + } => ffi::Op::Members { + trace_dir: *trace_dir, + approx_tol: *approx_tol, + start_tol: *start_tol, + step_tol: *step_tol, + ang_tol: *ang_tol, + }, + OpIn::Ends { start, end } => ffi::Op::Ends { + start: *start, + end: *end, + }, + OpIn::Ext { + clip, + last_through, + distance, + } => ffi::Op::Ext { + clip: *clip, + last_through: *last_through, + distance: *distance, + }, + OpIn::Test { i, done } => ffi::Op::Test { i: *i, done: *done }, + OpIn::Next { + prev, + step, + next, + dev, + ang, + } => ffi::Op::Next { + prev: *prev, + step: *step, + next: *next, + dev: *dev, + ang: *ang, + }, + OpIn::Split(s) => ffi::Op::Split(ffi::SplitOp { + curr: s.curr, + next: s.next, + delta: s.delta, + normals: s.normals, + average: s.average, + orient: s.orient, + curve: s.curve, + interval: s.interval, + orientations: s.orientations, + }), + OpIn::Fbsp { bbox, use_edges } => ffi::Op::Fbsp { + bbox: *bbox, + use_edges: *use_edges, + }, + } +} + +fn ffi_program(i: &Inputs) -> ffi::Program { + ffi::Program { + a: ffi_surface(&i.a), + b: i.b.as_ref().map(ffi_surface), + dom1: i.dom1, + dom2: i.dom2, + fillet: i.fillet, + curves: i.curves.iter().map(ffi_curve).collect(), + points: i.points.clone(), + ops: i.ops.iter().map(ffi_op).collect(), + } +} + + +// ---- Rust side: state and ops ------------------------------------------------------------- + +/// A list entry: a program point's index, or `-1` and the point. +fn put_ref(o: &mut Vec, si: &SurfaceIntersector<'_>, nprog: usize, id: TsectId) -> Result<(), Fail> { + if id.index() < nprog { + o.push(id.index() as f64); + } else { + o.push(-1.0); + let p = pt_of(si, id.index())?; + put_point(o, &p); + } + Ok(()) +} + +fn put_list(o: &mut Vec, si: &SurfaceIntersector<'_>, nprog: usize, l: &[TsectId]) -> Result<(), Fail> { + o.push(l.len() as f64); + for &id in l { + put_ref(o, si, nprog, id)?; + } + Ok(()) +} + +fn end_index(p: Option, nprog: usize) -> f64 { + match p { + None => NO_POINT, + Some(id) if id.index() < nprog => id.index() as f64, + Some(_) => -1.0, + } +} + +fn put_state(o: &mut Vec, si: &SurfaceIntersector<'_>, nprog: usize) -> Result<(), Fail> { + o.extend([ + si.this_approx_tol_3d, + si.curve_trace_direction, + si.start_parallel_tol_radians, + si.stepping_parallel_tol_radians, + si.this_ang_tol_rad, + si.last_through_parameter, + si.extension_distance, + b(si.doing_extension_clipping), + b(si.curve_is_closed), + b(si.clipped_by_through_point), + b(si.check_for_interior_curves), + end_index(si.start_point, nprog), + end_index(si.end_point, nprog), + ]); + put_list(o, si, nprog, si.curve_points())?; + put_list(o, si, nprog, si.start_points())?; + put_list(o, si, nprog, si.through_points())?; + o.push(nprog as f64); + for i in 0..nprog { + let p = pt_of(si, i)?; + put_point(o, &p); + } + Ok(()) +} + +/// The shim's rejection of `TestPoint`: the next point is the last curve point, or +/// the curve list is empty while a through, start or end point needs it. +fn test_rejected(si: &SurfaceIntersector<'_>, i: usize) -> bool { + let last = si.curve_points().last().copied(); + last == Some(id(i)) + || (si.curve_points().is_empty() + && (!si.through_points().is_empty() + || si.start_point.is_some() + || si.end_point.is_some())) +} + +/// The run's state besides the intersector: program curves, the surface caches and +/// the `FindBoundaryStartPoints` outputs. +struct Run<'a> { + curves: Vec, + surfaces: [&'a Surface; 2], + same: bool, + caches: Option>>, + outs: TsectCurves, + nprog: usize, +} + +impl Run<'_> { + /// The surface caches (made on first use, kept as upstream keeps them on the + /// surfaces): `smsurf_GetSurfaceCache` (`surface.surface_p1`, not ported) stood in + /// for by a fresh cache of a plane or B-spline surface. For a curve-bounded + /// surface upstream builds (and here fails to build) a trimmed-surface cache, which + /// has no stand-in: the case is deferred. + fn caches(&mut self) -> Result<&mut Vec>, Fail> { + let surfaces = self.surfaces; + if surfaces + .iter() + .any(|s| matches!(s.kind(), SurfaceKind::CurveBounded(_))) + { + return Err(Fail::Deferred(Box::new(Output::deferred( + "surface.surface_p1", + "smsurf_GetSurfaceCache", + )))); + } + let same = self.same; + Ok(self.caches.get_or_insert_with(|| { + let make = |s: &Surface| { + SurfaceCache::new(s.clone(), s.natural_uv_domain(), SurfaceCacheOptions::default()) + }; + if same { + vec![make(surfaces[0])] + } else { + vec![make(surfaces[0]), make(surfaces[1])] + } + })) + } +} + +#[allow(clippy::too_many_lines)] +fn run_op(run: &mut Run<'_>, si: &mut SurfaceIntersector<'_>, op: &OpIn, o: &mut Vec) -> Result<(), Fail> { + let nprog = run.nprog; + match op { + OpIn::State => { + o.push(0.0); + put_state(o, si, nprog)?; + } + OpIn::Point { i } => { + let p = pt_of(si, *i)?; + o.push(0.0); + put_point(o, &p); + } + OpIn::AddCurve { i } | OpIn::AddStart { i } | OpIn::AddThrough { i } => { + pt_of(si, *i)?; + if si.is_linked(id(*i)) { + o.push(ffi::REJECTED); + } else { + let r = match op { + OpIn::AddCurve { .. } => si.add_point_to_curve(id(*i)), + OpIn::AddStart { .. } => si.add_start_point(id(*i)), + _ => si.add_through_point(id(*i)), + }; + st(o, r)?; + } + } + OpIn::Cpv { uvs, i, prev, step } => { + let mut p = pt_of(si, *i)?; + let prev_p = match prev { + Some(j) => Some(pt_of(si, *j)?), + None => None, + }; + let r = si.compute_point_values([p2(uvs[0]), p2(uvs[1])], &mut p, prev_p.as_ref(), *step); + st(o, r)?; + put_point(o, &p); + set_pt(si, *i, p)?; + } + OpIn::Members { + trace_dir, + approx_tol, + start_tol, + step_tol, + ang_tol, + } => { + si.curve_trace_direction = *trace_dir; + si.this_approx_tol_3d = *approx_tol; + si.start_parallel_tol_radians = *start_tol; + si.stepping_parallel_tol_radians = *step_tol; + si.this_ang_tol_rad = *ang_tol; + o.push(0.0); + } + OpIn::Ends { start, end } => { + si.start_point = start.map(id); + si.end_point = end.map(id); + o.push(0.0); + } + OpIn::Ext { + clip, + last_through, + distance, + } => { + si.doing_extension_clipping = *clip; + si.last_through_parameter = *last_through; + si.extension_distance = *distance; + o.push(0.0); + } + OpIn::Test { i, done } => { + pt_of(si, *i)?; + if test_rejected(si, *i) { + o.push(ffi::REJECTED); + } else { + let r = si.test_point(id(*i)); + if let Some(d) = st(o, r)? { + o.push(b(d.unwrap_or(*done))); + } + let p = pt_of(si, *i)?; + put_point(o, &p); + } + } + OpIn::Next { + prev, + step, + next, + dev, + ang, + } => { + pt_of(si, *prev)?; + pt_of(si, *next)?; + if prev == next { + o.push(ffi::REJECTED); + } else { + let r = si.compute_next_point(id(*prev), *step, id(*next)); + if let Some(n) = st(o, r)? { + o.extend([ + b(n.found_good_point), + n.deviation_found.unwrap_or(*dev), + n.angle_found_rad.unwrap_or(*ang), + b(n.clipped), + b(n.boundary_hit), + ]); + } + let p = pt_of(si, *next)?; + put_point(o, &p); + } + } + OpIn::Split(s) => { + let curve = run + .curves + .get(s.curve) + .ok_or_else(|| harness("curve index"))?; + let opts = LawPointOptions { + law: &(), + law_orient: s.orient, + point_curve: curve, + point_curve_interval: Extent1d::from_min_max(s.interval[0], s.interval[1]), + normals: [v3(s.normals[0]), v3(s.normals[1])], + average_normals: s.average, + surface_orientations: s.orientations, + }; + pt_of(si, s.curr)?; + pt_of(si, s.next)?; + let r = si.split_span(id(s.curr), id(s.next), s.delta, &opts); + if let Some(new_id) = st(o, r)? { + let p = pt_of(si, new_id.index())?; + put_point(o, &p); + } + } + OpIn::Fbsp { bbox, use_edges } => { + si.set_use_surface_edges(use_edges[0], use_edges[1]); + let bx = Extent3d::from_bounds( + bbox[0][0], bbox[0][1], bbox[0][2], bbox[1][0], bbox[1][1], bbox[1][2], + ); + let mut outs = core::mem::take(&mut run.outs); + let k = Kernel::default(); + let caches = match run.caches() { + Ok(c) => c, + Err(e) => { + run.outs = outs; + return Err(e); + } + }; + let r = si.find_boundary_start_points(&k, caches, &bx, &mut outs); + run.outs = outs; + st(o, r)?; + put_outs(o, &run.outs, run.curves.len())?; + } + } + Ok(()) +} + +fn op_code(op: &OpIn) -> f64 { + f64::from(match op { + OpIn::State => 1, + OpIn::Point { .. } => 2, + OpIn::AddCurve { .. } => 3, + OpIn::AddStart { .. } => 4, + OpIn::AddThrough { .. } => 5, + OpIn::Cpv { .. } => 6, + OpIn::Members { .. } => 7, + OpIn::Ends { .. } => 8, + OpIn::Ext { .. } => 9, + OpIn::Test { .. } => 10, + OpIn::Next { .. } => 11, + OpIn::Split(_) => 12, + OpIn::Fbsp { .. } => 13, + }) +} + +fn rust_run(i: &Inputs) -> Result, Fail> { + let a = rust_surface(&i.a)?; + let b_srf = match &i.b { + Some(s) => Some(rust_surface(s)?), + None => None, + }; + let b_ref = b_srf.as_ref().unwrap_or(&a); + let curves = i + .curves + .iter() + .map(rust_curve) + .collect::, _>>()?; + let mut o = Vec::new(); + let mut si = match SurfaceIntersector::new(&a, &ext(i.dom1), b_ref, &ext(i.dom2), i.fillet) { + Ok(si) => si, + Err(e) => { + if let Some(d) = Output::unported(&e) { + return Err(Fail::Deferred(Box::new(d))); + } + return Err(Fail::Harness(harness(format!("constructor: {e}")))); + } + }; + for p in &i.points { + si.alloc_point(rust_point(p)?); + } + let mut run = Run { + outs: TsectCurves { + curves_3d: curves.clone(), + ..TsectCurves::default() + }, + curves, + surfaces: [&a, b_ref], + same: i.b.is_none(), + caches: None, + nprog: i.points.len(), + }; + for op in &i.ops { + o.push(op_code(op)); + run_op(&mut run, &mut si, op, &mut o)?; + } + put_state(&mut o, &si, run.nprog)?; + Ok(o) +} + +fn rust(i: &Inputs) -> Result { + // reject what the C++ side rejects + ffi::encode(&ffi_program(i)).map_err(|e| harness(format!("rejected input: {e}")))?; + match rust_run(i) { + Ok(rec) => Ok(Output::new().values("rec", rec)), + Err(Fail::Deferred(d)) => Ok(*d), + Err(Fail::Harness(h)) => Err(h), + } +} + +// ---- generation: traces along the crossing line of two planes ------------------------------ + +/// An orthonormal frame. +fn frame(rng: &mut Rng) -> [[f64; 3]; 3] { + let ex = unit_vec(rng); + let ey = loop { + let c = cross(unit_vec(rng), ex); + if c[0] * c[0] + c[1] * c[1] + c[2] * c[2] > 1e-2 { + break norm(c); + } + }; + [ex, ey, cross(ex, ey)] +} + +/// `f * v` (a vector in the frame). +fn mapv(f: &[[f64; 3]; 3], v: [f64; 3]) -> [f64; 3] { + let [a, b, c] = *f; + [ + a[0] * v[0] + b[0] * v[1] + c[0] * v[2], + a[1] * v[0] + b[1] * v[1] + c[1] * v[2], + a[2] * v[0] + b[2] * v[1] + c[2] * v[2], + ] +} + +fn add3(a: [f64; 3], c: [f64; 3]) -> [f64; 3] { + [a[0] + c[0], a[1] + c[1], a[2] + c[2]] +} + +fn scale3(a: [f64; 3], s: f64) -> [f64; 3] { + [a[0] * s, a[1] * s, a[2] * s] +} + +/// A default-like point with parameter `param` (UVs and tangents zero, type unknown). +fn blank_point(param: f64) -> Vec { + let mut v = vec![1.0, 5.0, 5.0, 5.0, 5.0]; + v.extend([0.0; 8]); + v.extend([0.0; 54]); + v.extend([0.0; 6]); + v.extend([param, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]); + v +} + +fn gen_members(rng: &mut Rng, s: f64) -> OpIn { + OpIn::Members { + trace_dir: if rng.chance(0.7) { 1.0 } else { -1.0 }, + approx_tol: s * pick_f(rng, &[1e-3, 1e-3, 1e-6, 0.05, 1e-10]), + start_tol: pick_f(rng, &[1e-10, 1e-3, 0.06, 0.3, 0.0]), + step_tol: pick_f(rng, &[1e-12, 1e-12, 0.1, 2.0]), + ang_tol: pick_f(rng, &[20f64.to_radians(), 1e-3, 1.0, 0.0]), + } +} + +/// Two planes crossing along a line (in A's uv: `v = c`; in B's: `v = h`) at angle +/// `theta`, under a random rigid motion; a trace of points along the line, target +/// points on and off it, then `TestPoint` / `ComputeNextPoint` / `SplitSpan`. +#[allow(clippy::too_many_lines)] +fn gen_trace_case(rng: &mut Rng) -> Inputs { + let s = gen_scale(rng); + let theta = pick_f( + rng, + &[core::f64::consts::FRAC_PI_2, 0.7, 0.1, 1e-3, 1e-6, 2.5], + ); + let line_v = |rng: &mut Rng| { + s * match rng.below(8) { + 0 => 0.0, + 1 => 1.0, + _ => rng.uniform(0.1, 0.9), + } + }; + let c = line_v(rng); + let h = line_v(rng); + let f = frame(rng); + let t = rng.point3(-s, s); + let w = mapv(&f, [0.0, theta.cos(), theta.sin()]); + let dom = [0.0, 0.0, s, s]; + let a = plane_in(t, f[0], f[1], dom, [1.0, 1.0]); + let ob = add3(add3(t, mapv(&f, [0.0, c, 0.0])), scale3(w, -h)); + let b_plane = plane_in(ob, f[0], w, dom, [1.0, 1.0]); + let (a, b_srf) = match rng.below(12) { + 0 => (bounded(a), b_plane), + 1 => (a, bounded(b_plane)), + _ => (a, b_plane), + }; + let dom1 = if rng.chance(0.8) { dom } else { gen_domain(rng, dom) }; + let dom2 = if rng.chance(0.8) { dom } else { gen_domain(rng, dom) }; + + // the trace points along the line + let mid = rng.uniform(0.05, 0.5); + let x0 = s * pick_f(rng, &[0.0, 0.1, 0.3, mid]); + let step = s * pick_f(rng, &[0.1, 0.2, 0.05, 1e-4, 0.3]); + let n_line = 3 + rng.below(4) as usize; + let xs: Vec = (0..n_line).map(|i| x0 + i as f64 * step).collect(); + let uv_at = |x: f64, da: f64, db: f64| [[x, c + da], [x, h + db]]; + + let mut points: Vec> = xs.iter().map(|&x| blank_point(x - x0)).collect(); + let mut ops = Vec::new(); + if rng.chance(0.5) { + ops.push(gen_members(rng, s)); + } + for (i, &x) in xs.iter().enumerate() { + let prev = (i > 0 && rng.chance(0.8)).then(|| i - 1); + ops.push(OpIn::Cpv { + uvs: uv_at(x, 0.0, 0.0), + i, + prev, + step: None, + }); + } + // the curve so far: all but the last one (or two) points + let k = if n_line > 3 && rng.chance(0.3) { + n_line - 2 + } else { + n_line - 1 + }; + for i in 0..k { + ops.push(OpIn::AddCurve { i }); + } + let next = n_line - 1; + + // target points: along the last span, behind, beyond, off the line + let n_targets = rng.below(4) as usize; + let mut targets = Vec::new(); + for _ in 0..n_targets { + let frac = pick_f(rng, &[0.3, 0.5, 0.9, 1.5, -0.5, 0.0, 1.0]); + let xa = xs.get(k - 1).copied().unwrap_or(x0); + let xb = xs.get(next).copied().unwrap_or(x0); + let x = xa + frac * (xb - xa); + let off = if rng.chance(0.75) { + 0.0 + } else { + s * pick_f(rng, &[1e-3, 0.05, 1e-7]) + }; + let ti = points.len(); + let param = if rng.chance(0.4) { -1.0 } else { x - x0 }; + points.push(blank_point(param)); + ops.push(OpIn::Cpv { + uvs: uv_at(x, off, 0.0), + i: ti, + prev: None, + step: None, + }); + targets.push(ti); + } + let mut start_point = None; + let mut end_point = None; + for &ti in &targets { + match rng.below(5) { + 0 | 1 => ops.push(OpIn::AddThrough { i: ti }), + 2 => ops.push(OpIn::AddStart { i: ti }), + 3 => end_point = Some(ti), + _ => start_point = Some(ti), + } + } + if rng.chance(0.3) { + start_point = Some(0); + } + if start_point.is_some() || end_point.is_some() || rng.chance(0.1) { + ops.push(OpIn::Ends { + start: start_point, + end: end_point, + }); + } + if rng.chance(0.25) { + ops.push(OpIn::Ext { + clip: rng.chance(0.7), + last_through: pick_f(rng, &[0.0, step, 0.5 * step]), + distance: pick_f(rng, &[0.0, step, 1e-3 * s]), + }); + } + + // spare points for ComputeNextPoint / SplitSpan + let spare = points.len(); + points.push(blank_point(0.0)); + points.push(blank_point(0.0)); + + // the tests + ops.push(OpIn::Test { + i: next, + done: rng.chance(0.5), + }); + if rng.chance(0.3) { + ops.push(OpIn::Test { + i: rng.below(points.len() as u64) as usize, + done: rng.chance(0.5), + }); + } + // (a crossing previous point is refined by LocalSurfaceIntersect: deferred) + let n_next = if rng.chance(0.45) { + 1 + rng.below(3) as usize + } else { + 0 + }; + for _ in 0..n_next { + let prev = match rng.below(5) { + 0 | 1 => spare + 1, + 2 => rng.below(points.len() as u64) as usize, + _ => k - 1, + }; + ops.push(OpIn::Next { + prev, + step: s * pick_f(rng, &[0.1, 1e-3, 2.0, 0.0, -0.1]), + next: spare, + dev: -7.0, + ang: -8.0, + }); + } + let mut curves = Vec::new(); + if rng.chance(0.15) { + curves.push(CurveIn::Segment { + a: t, + b: add3(t, scale3(f[0], s)), + }); + let zero = rng.chance(0.85); + ops.push(OpIn::Split(SplitIn { + curr: 0, + next: 1, + delta: pick_f(rng, &[1e-3, 1e-6, 0.1]), + normals: if zero { + [[0.0; 3], [0.0; 3]] + } else { + [unit_vec(rng), unit_vec(rng)] + }, + average: zero || rng.chance(0.5), + orient: rng.chance(0.5), + curve: 0, + interval: [0.0, 1.0], + orientations: [1.0, -1.0], + })); + } + ops.push(OpIn::State); + Inputs { + a, + b: Some(b_srf), + dom1, + dom2, + fillet: rng.chance(0.05), + curves, + points, + ops, + } +} + +// ---- generation: random programs ---------------------------------------------------------- + +fn gen_points(rng: &mut Rng, doms: [[f64; 4]; 2], s: f64) -> Vec> { + let n = 3 + rng.below(6) as usize; + let step = pick_f(rng, &[1.0, 0.25, 3.0, 1e-9]); + (0..n) + .map(|i| { + let t = i as f64 * step; + let param = if rng.chance(0.1) { + -1.0 + } else { + t * (1.0 + rng.uniform(-0.01, 0.01)) + }; + gen_point(rng, doms, s, param) + }) + .collect() +} + +fn gen_random_ops(rng: &mut Rng, np: usize, nc: usize, s: f64, doms: [[f64; 4]; 2]) -> Vec { + let mut ops = Vec::new(); + if rng.chance(0.4) { + ops.push(gen_members(rng, s)); + } + let pick = |rng: &mut Rng| rng.below(np as u64) as usize; + let n_ops = 6 + rng.below(16) as usize; + while ops.len() < n_ops { + let op = match rng.below(20) { + 0..=2 => OpIn::AddCurve { i: pick(rng) }, + 3 => OpIn::AddStart { i: pick(rng) }, + 4 => OpIn::AddThrough { i: pick(rng) }, + 5 => OpIn::Ends { + start: rng.chance(0.5).then(|| pick(rng)), + end: rng.chance(0.5).then(|| pick(rng)), + }, + 6 => OpIn::Ext { + clip: rng.chance(0.5), + last_through: pick_f(rng, &[0.0, 1.0, 0.5]), + distance: pick_f(rng, &[0.0, 0.5]), + }, + 7..=10 => OpIn::Test { + i: pick(rng), + done: rng.chance(0.5), + }, + 11..=14 => OpIn::Next { + prev: pick(rng), + step: s * pick_f(rng, &[0.1, 1e-3, 1.0, 0.0]), + next: pick(rng), + dev: -7.0, + ang: -8.0, + }, + 15 | 16 => OpIn::Cpv { + uvs: [gen_uv(rng, doms[0]), gen_uv(rng, doms[1])], + i: pick(rng), + prev: None, + step: None, + }, + 17 if nc > 0 => OpIn::Split(SplitIn { + curr: pick(rng), + next: pick(rng), + delta: 1e-3, + normals: [[0.0; 3], [0.0; 3]], + average: true, + orient: rng.chance(0.5), + curve: 0, + interval: [0.0, 1.0], + orientations: [1.0, 1.0], + }), + 18 => OpIn::Point { i: pick(rng) }, + _ => OpIn::State, + }; + ops.push(op); + } + ops +} + +fn gen_random_case(rng: &mut Rng) -> Inputs { + let s = gen_scale(rng); + let (a, b) = match rng.below(10) { + 0..=4 => (gen_plane(rng, s, None), Some(gen_plane(rng, s, None))), + 5 => (gen_plane(rng, s, None), None), + 6 | 7 => (gen_plane(rng, s, None), Some(gen_bspline(rng, s, false))), + _ => { + let tube = rng.chance(0.3); + (gen_bspline(rng, s, false), Some(gen_bspline(rng, s, tube))) + } + }; + let (a, b) = match rng.below(10) { + 0 => (bounded(a), b), + 1 => (a, b.map(bounded)), + _ => (a, b), + }; + let na = natural(&a); + let nb = natural(b.as_ref().unwrap_or(&a)); + let dom1 = gen_domain(rng, na); + let dom2 = gen_domain(rng, nb); + let doms = [na, nb]; + let nc = usize::from(rng.chance(0.3)); + let curves: Vec = (0..nc).map(|_| gen_curve(rng, s)).collect(); + let points = gen_points(rng, doms, s); + let mut ops = gen_random_ops(rng, points.len(), nc, s, doms); + if rng.chance(0.2) { + ops.push(gen_fbsp(rng, s, s)); + } + Inputs { + a, + b, + dom1, + dom2, + fillet: rng.chance(0.1), + curves, + points, + ops, + } +} + +// ---- generation: boundary start points ------------------------------------------------------ + +/// A `FindBoundaryStartPoints` op: the box around the surfaces (size `size`), far +/// away, tiny, or empty. +fn gen_fbsp(rng: &mut Rng, s: f64, size: f64) -> OpIn { + let bbox = match rng.below(6) { + 0 | 1 => [[-size, -size, -size], [3.0 * size, 3.0 * size, 3.0 * size]], + 2 => { + let c = 50.0 * s; + [[c, c, c], [c + s, c + s, c + s]] + } + 3 => { + let p = rng.point3(-size, size); + [p, add3(p, [1e-6 * s; 3])] + } + 4 => [[-size, -size, -size], [-size, -size, -size]], + _ => [[-size, -size, 2.0 * size], [3.0 * size, 3.0 * size, 3.0 * size]], + }; + OpIn::Fbsp { + bbox, + use_edges: [rng.chance(0.6), rng.chance(0.6)], + } +} + +/// Two bump patches (as in part 2) or a bump and a plane, with boundary start point +/// searches and a few tests. +fn gen_fbsp_case(rng: &mut Rng) -> Inputs { + let s = gen_scale(rng); + let deg = 2 + rng.below(2) as usize; + let n = deg + 1 + rng.below(3) as usize; + let h1 = heights(rng, n, s, None); + let a = bump_bspline(s, 0.0, deg, &h1, false, [param_range(rng), param_range(rng)]); + let b = match rng.below(4) { + 0 => { + let o = [0.0, 0.0, s * rng.uniform(-0.2, 0.2)]; + plane_in(o, [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [-s, -s, 2.0 * s, 2.0 * s], [1.0, 1.0]) + } + 1 => gen_bspline(rng, s, true), + _ => { + let mut h2 = heights(rng, n, s, None); + h2.reverse(); + let gap = s * pick_f(rng, &[0.0, -0.2, 0.5, 5.0]); + bump_bspline(s, 2.0 * s + gap, deg, &h2, true, [param_range(rng), param_range(rng)]) + } + }; + let na = natural(&a); + let nb = natural(&b); + let dom1 = if rng.chance(0.8) { na } else { gen_domain(rng, na) }; + let dom2 = if rng.chance(0.8) { nb } else { gen_domain(rng, nb) }; + let doms = [na, nb]; + let points = gen_points(rng, doms, s); + let mut ops = Vec::new(); + if rng.chance(0.3) { + ops.push(gen_members(rng, s)); + } + let nf = 1 + rng.below(2) as usize; + for _ in 0..nf { + ops.push(gen_fbsp(rng, s, s)); + } + ops.push(OpIn::State); + if rng.chance(0.3) { + ops.push(OpIn::Test { + i: rng.below(points.len() as u64) as usize, + done: false, + }); + } + Inputs { + a, + b: Some(b), + dom1, + dom2, + fillet: false, + curves: Vec::new(), + points, + ops, + } +} + +fn gen_case(rng: &mut Rng) -> Inputs { + match rng.below(20) { + 0..=11 => gen_trace_case(rng), + 12..=16 => gen_random_case(rng), + _ => gen_fbsp_case(rng), + } +} + +// ---- inline edge cases ------------------------------------------------------------------ + +fn plane_json(o: [f64; 3], x: [f64; 3], y: [f64; 3], d: [f64; 4]) -> Value { + json!({"kind": "plane", "o": o, "x": x, "y": y, "scale": [1.0, 1.0], "domain": d}) +} + +#[allow(clippy::too_many_lines)] +fn edge_cases() -> Vec<(String, Value)> { + // z = 0 and y = 0.5 planes over [0, 1]^2: they cross along x at v = 0.5 on both + let xy = plane_json([0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0, 1.0]); + let xz = plane_json([0.0, 0.5, -0.5], [1.0, 0.0, 0.0], [0.0, 0.0, 1.0], [0.0, 0.0, 1.0, 1.0]); + // y = 0 plane: crosses z = 0 along A's v = 0 boundary + let xz0 = plane_json([0.0, 0.0, -0.5], [1.0, 0.0, 0.0], [0.0, 0.0, 1.0], [0.0, 0.0, 1.0, 1.0]); + let d = [0.0, 0.0, 1.0, 1.0]; + let pts: Vec> = (0..10).map(|i| blank_point(0.1 * f64::from(i))).collect(); + let prog = |a: &Value, bb: &Value, ops: Value| { + json!({"a": a, "b": bb, "dom1": d, "dom2": d, "fillet": false, + "curves": [{"kind": "segment", "a": [0.0, 0.0, 0.0], "b": [1.0, 0.0, 0.0]}], + "points": pts, "ops": ops}) + }; + let cpv = |x: f64, v: f64, i: usize, prev: Option| { + json!({"op": "cpv", "uvs": [[x, v], [x, 0.5]], "i": i, "prev": prev, "step": null}) + }; + // a trace 0.1, 0.2, 0.3 with next at 0.4; point i at x = 0.1 * (i + 1) + let trace = |extra: Vec| { + let mut ops = vec![ + cpv(0.1, 0.5, 0, None), + cpv(0.2, 0.5, 1, Some(0)), + cpv(0.3, 0.5, 2, Some(1)), + cpv(0.4, 0.5, 3, Some(2)), + json!({"op": "add_curve", "i": 0}), + json!({"op": "add_curve", "i": 1}), + json!({"op": "add_curve", "i": 2}), + ]; + ops.extend(extra); + ops.push(json!({"op": "state"})); + Value::Array(ops) + }; + let mut v = Vec::new(); + v.push(( + "edge_end_point".into(), + prog(&xy, &xz, trace(vec![ + cpv(0.35, 0.5, 5, None), + json!({"op": "ends", "start": 0, "end": 5}), + json!({"op": "test", "i": 3, "done": false}), + ])), + )); + v.push(( + "edge_through_points_extension".into(), + prog(&xy, &xz, trace(vec![ + cpv(0.33, 0.5, 5, None), + cpv(0.37, 0.5, 6, None), + json!({"op": "add_through", "i": 5}), + json!({"op": "add_through", "i": 6}), + json!({"op": "ext", "clip": true, "last_through": 0.0, "distance": 0.05}), + json!({"op": "test", "i": 3, "done": true}), + cpv(0.45, 0.5, 7, Some(3)), + json!({"op": "add_curve", "i": 3}), + json!({"op": "test", "i": 7, "done": true}), + ])), + )); + v.push(( + "edge_extension_clip_past_last_through".into(), + prog(&xy, &xz, trace(vec![ + json!({"op": "ext", "clip": true, "last_through": 0.1, "distance": 0.05}), + json!({"op": "test", "i": 3, "done": false}), + ])), + )); + v.push(( + "edge_start_points".into(), + prog(&xy, &xz, trace(vec![ + cpv(0.35, 0.5, 5, None), + cpv(0.8, 0.5, 6, None), + cpv(0.3, 0.5, 7, None), + json!({"op": "add_start", "i": 6}), + json!({"op": "add_start", "i": 5}), + json!({"op": "add_start", "i": 7}), + json!({"op": "test", "i": 3, "done": false}), + ])), + )); + v.push(( + "edge_closed_curve".into(), + prog(&xy, &xz, trace(vec![ + cpv(0.35, 0.5, 5, None), + json!({"op": "ends", "start": 5, "end": null}), + json!({"op": "test", "i": 3, "done": false}), + ])), + )); + v.push(( + "edge_end_point_single_span_seam".into(), + prog(&xy, &xz, json!([ + cpv(0.1, 0.5, 0, None), cpv(0.2, 0.5, 1, Some(0)), cpv(0.1, 0.5, 2, None), + {"op": "add_curve", "i": 0}, + {"op": "ends", "start": null, "end": 2}, + {"op": "test", "i": 1, "done": false}, {"op": "state"}])), + )); + v.push(( + "edge_boundary_exit".into(), + prog(&xy, &xz, json!([ + cpv(0.9, 0.5, 0, None), cpv(1.0, 0.5, 1, Some(0)), cpv(1.0, 0.5, 2, None), + {"op": "add_curve", "i": 0}, {"op": "add_start", "i": 2}, + {"op": "test", "i": 1, "done": false}, {"op": "state"}])), + )); + // the crossing along A's v = 0 boundary: a start point there is a through point + v.push(( + "edge_start_on_boundary_along".into(), + prog(&xy, &xz0, json!([ + {"op": "cpv", "uvs": [[0.1, 0.0], [0.1, 0.5]], "i": 0, "prev": null, "step": null}, + {"op": "cpv", "uvs": [[0.2, 0.0], [0.2, 0.5]], "i": 1, "prev": 0, "step": null}, + {"op": "cpv", "uvs": [[0.3, 0.0], [0.3, 0.5]], "i": 2, "prev": 1, "step": null}, + {"op": "cpv", "uvs": [[0.25, 0.0], [0.25, 0.5]], "i": 3, "prev": null, "step": null}, + {"op": "add_curve", "i": 0}, {"op": "add_curve", "i": 1}, + {"op": "add_start", "i": 3}, + {"op": "test", "i": 2, "done": false}, {"op": "state"}])), + )); + v.push(( + "edge_rejected_tests".into(), + prog(&xy, &xz, json!([ + cpv(0.1, 0.5, 0, None), + {"op": "ends", "start": null, "end": 0}, + {"op": "test", "i": 1, "done": false}, + {"op": "ends", "start": null, "end": null}, + {"op": "test", "i": 1, "done": true}, + {"op": "add_curve", "i": 0}, + {"op": "test", "i": 0, "done": true}, + {"op": "next", "prev": 0, "step": 0.1, "next": 0, "dev": -7.0, "ang": -8.0}])), + )); + v.push(( + "edge_next_points".into(), + prog(&xy, &xz, json!([ + {"op": "cpv", "uvs": [[1.5, 0.5], [1.5, 0.5]], "i": 0, "prev": null, "step": null}, + {"op": "next", "prev": 0, "step": 0.1, "next": 5, "dev": -7.0, "ang": -8.0}, + {"op": "next", "prev": 1, "step": 0.1, "next": 5, "dev": -7.0, "ang": -8.0}, + {"op": "next", "prev": 1, "step": 0.0, "next": 5, "dev": -7.0, "ang": -8.0}, + {"op": "next", "prev": 1, "step": -0.1, "next": 6, "dev": -7.0, "ang": -8.0}, + {"op": "state"}])), + )); + // a tangent-point previous point (not refined: the next point is the domain + // corner) on the line where z = 0 meets y = 0 (both planes' corner is the origin): + // a good step back to the corner + let xz_origin = + plane_json([0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 0.0, 1.0], [0.0, 0.0, 1.0, 1.0]); + let tangent_prev = |x: f64, dx: f64| { + // evaluation matrix (row major [i][j]): pos, Sv, Svv, Su, Suv, -, -, -, normal + let mat = |n: [f64; 3], sv: [f64; 3]| { + let z = [0.0; 3]; + [[x, 0.0, 0.0], sv, z, [1.0, 0.0, 0.0], z, z, z, z, n].concat() + }; + [ + // SM_IP_TANGENT_POINT, SM_EP_INSIDE x 4 + vec![3.0, 1.0, 1.0, 1.0, 1.0], + // uv pos, uv tangent on both surfaces + vec![x, 0.0, dx, 0.0, x, 0.0, dx, 0.0], + mat([0.0, 0.0, 1.0], [0.0, 1.0, 0.0]), + mat([0.0, -1.0, 0.0], [0.0, 0.0, 1.0]), + vec![x, 0.0, 0.0, dx, 0.0, 0.0], + vec![0.0; 7], + ] + .concat() + }; + let tpts: Vec> = [ + tangent_prev(0.5, -1.0), + tangent_prev(0.05, -1.0), + tangent_prev(0.5, 1.0), + ] + .into_iter() + .chain(pts.iter().skip(3).cloned()) + .collect(); + for (name, members) in [ + ("edge_next_good_from_tangent_point", json!({"op": "state"})), + ( + "edge_next_tangent_point_tight_angle", + json!({"op": "members", "trace_dir": -1.0, "approx_tol": 1e-9, "start_tol": 1e-10, + "step_tol": 1e-12, "ang_tol": 0.0}), + ), + ] { + v.push(( + name.into(), + json!({"a": xy, "b": xz_origin, "dom1": d, "dom2": d, "fillet": false, + "curves": [], "points": tpts, "ops": [ + members, + {"op": "next", "prev": 0, "step": 0.1, "next": 5, "dev": -7.0, "ang": -8.0}, + {"op": "next", "prev": 1, "step": 0.1, "next": 6, "dev": -7.0, "ang": -8.0}, + {"op": "next", "prev": 2, "step": 0.1, "next": 7, "dev": -7.0, "ang": -8.0}, + {"op": "add_curve", "i": 0}, + {"op": "test", "i": 5, "done": false}, + {"op": "state"}]}), + )); + } + v.push(( + "edge_split_zero_normals".into(), + prog(&xy, &xz, json!([ + cpv(0.1, 0.5, 0, None), cpv(0.2, 0.5, 1, Some(0)), + {"op": "split", "curr": 0, "next": 1, "delta": 1e-3, + "normals": [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0]], "average": true, "orient": false, + "curve": 0, "interval": [0.0, 1.0], "orientations": [1.0, -1.0]}])), + )); + // boundary start points of two bumps (part 2's patches) and of a plane + let h = [ + [0.0, 0.4, 0.4, 0.0], + [0.4, 0.1, 0.3, 0.4], + [0.4, 0.2, 0.1, 0.4], + [0.0, 0.4, 0.4, 0.0], + ]; + let bump = |x0: f64, mirror: bool| { + let hs: Vec> = h.iter().map(|r| r.to_vec()).collect(); + serde_json::to_value(bump_bspline(1.0, x0, 2, &hs, mirror, [(0.0, 1.0), (0.0, 1.0)])) + .unwrap_or(Value::Null) + }; + for (name, bbox, use_edges) in [ + ("edge_fbsp_far_box", [[50.0, 50.0, 50.0], [51.0, 51.0, 51.0]], [true, true]), + ("edge_fbsp_no_edges", [[-1.0, -1.0, -1.0], [3.0, 2.0, 1.0]], [false, false]), + ("edge_fbsp_meeting", [[-1.0, -1.0, -1.0], [3.0, 2.0, 1.0]], [true, true]), + ] { + v.push(( + name.into(), + json!({"a": bump(0.0, false), "b": bump(2.0, true), "dom1": d, "dom2": d, + "fillet": false, "curves": [], "points": pts, + "ops": [{"op": "fbsp", "bbox": bbox, "use_edges": use_edges}, {"op": "state"}]}), + )); + } + v.push(( + "edge_fbsp_plane_edges".into(), + json!({"a": xy, "b": bump(0.0, false), "dom1": d, "dom2": d, + "fillet": false, "curves": [], "points": pts, + "ops": [{"op": "fbsp", "bbox": [[-1.0, -1.0, -1.0], [3.0, 2.0, 1.0]], + "use_edges": [true, false]}]}), + )); + v +} + +impl UnitDiff for Runner { + fn id(&self) -> &'static str { + "intersect.surface_intersector_p3" + } + + fn generate(&self, rng: &mut Rng) -> Option { + for _ in 0..64 { + let i = gen_case(rng); + if ffi::encode(&ffi_program(&i)).is_ok() { + return serde_json::to_value(i).ok(); + } + } + None + } + + fn cases(&self, ctx: &CaseContext) -> Result, HarnessError> { + let ctx = CaseContext { + seeds: ctx.seeds.max(MIN_GENERATED), + ..ctx.clone() + }; + let mut v = default_cases(self, &ctx)?; + for (name, inputs) in edge_cases() { + v.push(Case { + unit: self.id().into(), + name, + source: CaseSource::Inline, + inputs, + }); + } + Ok(v) + } + + fn run_cpp(&self, case: &Case) -> Result { + cpp(&case.parse()?) + } + + fn run_rust(&self, case: &Case) -> Result { + rust(&case.parse()?) + } +} diff --git a/crates/solidcore-ffi/src/units/intersect_surface_intersector_p3.rs b/crates/solidcore-ffi/src/units/intersect_surface_intersector_p3.rs new file mode 100644 index 0000000000..ddd8c7a983 --- /dev/null +++ b/crates/solidcore-ffi/src/units/intersect_surface_intersector_p3.rs @@ -0,0 +1,614 @@ +//! FFI wrappers for unit `intersect.surface_intersector_p3`. +//! +//! Shim: `harness/cpp/shim/intersect_surface_intersector_p3.cpp` +//! (`sc_intersect_surface_intersector_p3_run`). Upstream: +//! `source/SMLib/src/SmSurfaceIntersector.cpp` (`FindBoundaryStartPoints`, +//! `ComputeNextPoint`, `TestPoint` with `sm_UpdateTsectPoint`, `SplitSpan`). +//! +//! [`run`] builds surfaces A and B (planes, B-splines or curve-bounded surfaces over +//! either; B may be A itself), the intersector +//! `SmSurfaceIntersector(A, dom1, B, dom2, fillet)` (its context set as +//! `DoIntersection` does), the program's curves and its points (a point arena; each op +//! names points by index), then runs the [`Op`]s in order. The `FindBoundaryStartPoints` +//! output arrays persist over the program; the 3D curve array starts with the program's +//! curves. The record is, per op, `op status [values]`, then the state `approx_tol +//! trace_dir start_tol step_tol ang_tol last_through ext_dist ext_clip closed clipped +//! interior start_point end_point` (point indices, `-3` for none), the curve, start and +//! through lists (`count refs`) and `npoints points`. A list ref is a program point's +//! index, or `-1` followed by the point (a point the intersector allocated). +//! +//! A point is 80 values: `type ptype[4] (uv pos, uv tangent) x 2, surface matrix [3][3] +//! x 2 (row major, 3 values each), curve pos, curve tangent, parameter, angle, +//! deviation, user[4]`. Curves are written as `type dim knot_type form has [n p m +//! cpts(x y z w) knots] ivl[2]`; curve outputs are `count curves`. The outputs of +//! `FindBoundaryStartPoints` are `3d curves` (those after the program's), `uv curves 1`, +//! `uv curves 2`, `ntypes types`, `ndevs devs`. +//! +//! | [`Op`] | upstream | values | +//! |---------------|----------------------------------------------------------------|--------| +//! | `State` | the protected members | state | +//! | `Point` | the point | point | +//! | `AddCurve`, `AddStart`, `AddThrough` | `AddPointToCurve`, `AddStartPoint`, `AddThroughPoint` | | +//! | `Cpv` | `ComputePointValues(uvs, p, prev, step)` | point (also on error) | +//! | `Members` | sets the trace direction and the tolerances | | +//! | `Ends` | sets `m_pStartPoint`, `m_pEndPoint` | | +//! | `Ext` | sets `m_bDoingExtensionClipping`, `m_dLastThroughParmeter`, `m_dExtensionDistance` | | +//! | `Test` | `TestPoint(p, done)` (`done` preset) | `done` (status 0 only), point | +//! | `Next` | `ComputeNextPoint(prev, step, next, good, dev, ang, clipped, hit)` (`dev`, `ang` preset) | `good dev ang clipped hit` (status 0 only), next point | +//! | `Split` | `SplitSpan(curr, next, delta, normals, avg, SmFilletLaw(), orient, curve, ivl, orientations, new)` | new point | +//! | `Fbsp` | `SetUseSurfaceEdges(use0, use1)`, `FindBoundaryStartPoints(box, out arrays)` | outputs (also on error) | +//! +//! [`run`] accepts only finite inputs of magnitude at most [`MAX_COORD`], well-formed +//! clamped B-splines, at most [`MAX_POINTS`] points, [`MAX_CURVES`] curves and +//! [`MAX_OPS`] ops, no `Cpv` whose previous point is its point and no `Split` without +//! curves. The shim does not run (status [`REJECTED`]): `Add*` of a point already on a +//! list (it corrupts the intrusive lists); `Test` of the last curve point (it would be +//! evaluated onto itself through two aliases) or with an empty curve list when there is +//! a through, start or end point (a null dereference); `Next` from a point to itself. + +use crate::{call_with_buffer, FfiError}; + +mod sys { + extern "C" { + pub fn sc_intersect_surface_intersector_p3_run( + input: *const f64, + n_in: i64, + out: *mut f64, + cap: i64, + out_len: *mut i64, + ) -> i32; + } +} + +/// Largest input magnitude. +pub const MAX_COORD: f64 = 1e9; +/// Most points per program. +pub const MAX_POINTS: usize = 64; +/// Most curves per program. +pub const MAX_CURVES: usize = 8; +/// Most ops per program. +pub const MAX_OPS: usize = 64; +/// `NL_NOW`: the weight of a non-rational control point. +pub const NOW: f64 = -f64::MAX; +/// The op status of an op the shim does not run. +pub const REJECTED: f64 = -2.0; +/// Values per point. +pub const POINT_LEN: usize = 80; + +/// A surface. +#[derive(Debug, Clone, PartialEq)] +pub enum SurfaceIn { + /// `SmPlane(o, x, y, SmVector2d(scale), SmExtent2d(domain), ctx)`. + Plane { + /// Origin. + o: [f64; 3], + /// X axis. + x: [f64; 3], + /// Y axis. + y: [f64; 3], + /// u and v scales. + scale: [f64; 2], + /// `umin vmin umax vmax`. + domain: [f64; 4], + }, + /// `SmBSplineSurface(gw_SURFACE*, FALSE, ctx)`. + BSpline { + /// u degree. + p: usize, + /// v degree. + q: usize, + /// Rows (u index) of `[x, y, z, w]` (`w` = [`NOW`] when non-rational). + net: Vec>, + /// u knots. + u: Vec, + /// v knots. + v: Vec, + }, + /// `SmCurveBoundedSurface(basis, {}, {}, TRUE)` over a plane or B-spline surface + /// (implicit outer, no boundary curves). + CurveBounded(Box), +} + +/// A curve. +#[derive(Debug, Clone, PartialEq)] +pub enum CurveIn { + /// `SmLine::CreateLineSegment(ctx, 3, a, b, l)`. + Segment([f64; 3], [f64; 3]), + /// `SmBSplineCurve(dim, n, m, p, Pw, U, ctx)`. + BSpline { + /// Image dimension, 2 or 3. + dim: u32, + /// Degree. + p: usize, + /// Control points (`x y z w`, `w` = [`NOW`] when non-rational). + cpts: Vec<[f64; 4]>, + /// Knots (`n + p + 2`). + knots: Vec, + }, +} + +/// An op (see the module docs). +#[derive(Debug, Clone, PartialEq)] +pub enum Op { + /// The state. + State, + /// Point `i`. + Point(usize), + /// `AddPointToCurve`. + AddCurve(usize), + /// `AddStartPoint`. + AddStart(usize), + /// `AddThroughPoint`. + AddThrough(usize), + /// `ComputePointValues`. + Cpv { + /// UV points. + uvs: [[f64; 2]; 2], + /// The point. + i: usize, + /// The previous point (not `i`). + prev: Option, + /// The step size. + step: Option, + }, + /// Sets the trace direction and the tolerances. + Members { + /// `m_dCurveTraceDirection`. + trace_dir: f64, + /// `m_dThisApproxTol3d`. + approx_tol: f64, + /// `m_dStartParallelTolRadians`. + start_tol: f64, + /// `m_dSteppingParallelTolRadians`. + step_tol: f64, + /// `m_dThisAngTolRad`. + ang_tol: f64, + }, + /// Sets `m_pStartPoint` and `m_pEndPoint`. + Ends { + /// The start point. + start: Option, + /// The end point. + end: Option, + }, + /// Sets the extension clipping members. + Ext { + /// `m_bDoingExtensionClipping`. + clip: bool, + /// `m_dLastThroughParmeter`. + last_through: f64, + /// `m_dExtensionDistance`. + distance: f64, + }, + /// `TestPoint`. + Test { + /// The next point. + i: usize, + /// The preset done flag. + done: bool, + }, + /// `ComputeNextPoint`. + Next { + /// The previous point. + prev: usize, + /// The step size. + step: f64, + /// The next point. + next: usize, + /// The preset deviation. + dev: f64, + /// The preset angle. + ang: f64, + }, + /// `SplitSpan`. + Split(SplitOp), + /// `FindBoundaryStartPoints`. + Fbsp { + /// The intersection box `min max`. + bbox: [[f64; 3]; 2], + /// `SetUseSurfaceEdges` flags. + use_edges: [bool; 2], + }, +} + +/// The arguments of [`Op::Split`]. +#[derive(Debug, Clone, PartialEq)] +pub struct SplitOp { + /// `cpCurr`. + pub curr: usize, + /// `cpNext`. + pub next: usize, + /// `dDeltaStep`. + pub delta: f64, + /// `caNormals`. + pub normals: [[f64; 3]; 2], + /// `bAverageNormals`. + pub average: bool, + /// `bLawOrient`. + pub orient: bool, + /// Index of the point curve among the program's curves. + pub curve: usize, + /// `crPointCurveInterval` (`SmExtent1d(a, b)`). + pub interval: [f64; 2], + /// `dSurfaceOrientations`. + pub orientations: [f64; 2], +} + +/// A program (see the module docs). +#[derive(Debug, Clone, PartialEq)] +pub struct Program { + /// Surface A. + pub a: SurfaceIn, + /// Surface B, `None` for A itself. + pub b: Option, + /// Domain of A. + pub dom1: [f64; 4], + /// Domain of B. + pub dom2: [f64; 4], + /// `bFromFilletIntersector`. + pub fillet: bool, + /// Curves. + pub curves: Vec, + /// Points ([`POINT_LEN`] values each). + pub points: Vec>, + /// Ops. + pub ops: Vec, +} + +fn bad(msg: &str) -> FfiError { + FfiError::InvalidArgument(msg.into()) +} + +fn finite(x: f64) -> Result { + if x.is_finite() && x.abs() <= MAX_COORD { + Ok(x) + } else { + Err(bad("value not finite or too large")) + } +} + +/// Clamped, non-decreasing knots with interior multiplicity at most `p`. +fn check_knots(knots: &[f64], ncp: usize, p: usize) -> Result<(), FfiError> { + if knots.len() != ncp + p + 1 { + return Err(bad("knot count")); + } + if knots.windows(2).any(|w| w.first() > w.last()) { + return Err(bad("knots decreasing")); + } + let (Some(&k0), Some(&km)) = (knots.first(), knots.last()) else { + return Err(bad("knot count")); + }; + if km <= k0 + || knots.iter().take(p + 1).any(|&k| k != k0) + || knots.iter().rev().take(p + 1).any(|&k| k != km) + { + return Err(bad("knots not clamped")); + } + let mut run = 0usize; + let mut last = f64::NAN; + for &k in knots.iter().filter(|&&k| k != k0 && k != km) { + run = if k == last { run + 1 } else { 1 }; + last = k; + if run > p { + return Err(bad("interior knot multiplicity")); + } + } + Ok(()) +} + +/// All [`NOW`] or all in `(0, MAX_COORD]`. +fn check_weights<'a>(mut ws: impl Iterator) -> Result<(), FfiError> { + let Some(first) = ws.next() else { + return Err(bad("no control points")); + }; + let rational = first[3] != NOW; + let ok = |w: f64| { + if rational { + w > 0.0 && w <= MAX_COORD + } else { + w == NOW + } + }; + if !ok(first[3]) || ws.any(|c| !ok(c[3])) { + return Err(bad("weights")); + } + Ok(()) +} + +struct Enc { + v: Vec, + npoints: usize, + ncurves: usize, +} + +impl Enc { + fn num(&mut self, x: f64) -> Result<(), FfiError> { + self.v.push(finite(x)?); + Ok(()) + } + fn nums(&mut self, xs: &[f64]) -> Result<(), FfiError> { + xs.iter().try_for_each(|&x| self.num(x)) + } + fn int(&mut self, x: usize) { + self.v.push(x as f64); + } + fn flag(&mut self, b: bool) { + self.v.push(if b { 1.0 } else { 0.0 }); + } + fn cpt(&mut self, c: &[f64; 4]) -> Result<(), FfiError> { + self.nums(&c[..3])?; + self.v.push(c[3]); + Ok(()) + } + fn pt(&mut self, i: usize) -> Result<(), FfiError> { + if i >= self.npoints { + return Err(bad("point index")); + } + self.int(i); + Ok(()) + } + + fn surface(&mut self, s: &SurfaceIn) -> Result<(), FfiError> { + match s { + SurfaceIn::Plane { + o, + x, + y, + scale, + domain, + } => { + self.int(0); + self.nums(o)?; + self.nums(x)?; + self.nums(y)?; + self.nums(scale)?; + self.nums(domain) + } + SurfaceIn::BSpline { p, q, net, u, v } => { + let nu = net.len(); + let nv = net.first().map_or(0, Vec::len); + if !(1..=8).contains(p) || !(1..=8).contains(q) { + return Err(bad("surface degree")); + } + if !(2..=17).contains(&nu) || !(2..=17).contains(&nv) || *p >= nu || *q >= nv { + return Err(bad("surface size")); + } + if net.iter().any(|r| r.len() != nv) { + return Err(bad("ragged net")); + } + check_knots(u, nu, *p)?; + check_knots(v, nv, *q)?; + check_weights(net.iter().flatten())?; + self.int(1); + self.int(*p); + self.int(*q); + self.int(nu); + self.int(nv); + for c in net.iter().flatten() { + self.cpt(c)?; + } + self.nums(u)?; + self.nums(v) + } + SurfaceIn::CurveBounded(basis) => { + if matches!(**basis, SurfaceIn::CurveBounded(_)) { + return Err(bad("nested curve-bounded surface")); + } + self.int(3); + self.surface(basis) + } + } + } + + fn curve(&mut self, c: &CurveIn) -> Result<(), FfiError> { + match c { + CurveIn::Segment(a, b) => { + if a == b { + return Err(bad("zero-length segment")); + } + self.int(0); + self.nums(a)?; + self.nums(b) + } + CurveIn::BSpline { dim, p, cpts, knots } => { + if !(2..=3).contains(dim) || !(1..=8).contains(p) { + return Err(bad("curve dim or degree")); + } + if !(2..=33).contains(&cpts.len()) || *p >= cpts.len() { + return Err(bad("curve size")); + } + check_knots(knots, cpts.len(), *p)?; + check_weights(cpts.iter())?; + self.int(1); + self.int(*dim as usize); + self.int(*p); + self.int(cpts.len()); + for c in cpts { + self.cpt(c)?; + } + self.nums(knots) + } + } + } + + fn point(&mut self, p: &[f64]) -> Result<(), FfiError> { + if p.len() != POINT_LEN { + return Err(bad("point length")); + } + let code = |x: f64, hi: f64| x >= 0.0 && x <= hi && x.fract() == 0.0; + let ok = p + .iter() + .take(5) + .enumerate() + .all(|(k, &t)| code(t, if k == 0 { 7.0 } else { 5.0 })); + if !ok { + return Err(bad("point type codes")); + } + self.nums(p) + } + + fn opt_pt(&mut self, i: Option) -> Result<(), FfiError> { + self.flag(i.is_some()); + self.pt(i.unwrap_or(0)) + } + + fn op(&mut self, op: &Op) -> Result<(), FfiError> { + match op { + Op::State => self.int(1), + Op::Point(i) => { + self.int(2); + self.pt(*i)?; + } + Op::AddCurve(i) | Op::AddStart(i) | Op::AddThrough(i) => { + self.int(match op { + Op::AddCurve(_) => 3, + Op::AddStart(_) => 4, + _ => 5, + }); + self.pt(*i)?; + } + Op::Cpv { uvs, i, prev, step } => { + if *prev == Some(*i) { + return Err(bad("previous point is the point")); + } + self.int(6); + self.nums(&uvs[0])?; + self.nums(&uvs[1])?; + self.pt(*i)?; + self.opt_pt(*prev)?; + self.flag(step.is_some()); + self.num(step.unwrap_or(0.0))?; + } + Op::Members { + trace_dir, + approx_tol, + start_tol, + step_tol, + ang_tol, + } => { + self.int(7); + self.nums(&[*trace_dir, *approx_tol, *start_tol, *step_tol, *ang_tol])?; + } + Op::Ends { start, end } => { + self.int(8); + self.opt_pt(*start)?; + self.opt_pt(*end)?; + } + Op::Ext { + clip, + last_through, + distance, + } => { + self.int(9); + self.flag(*clip); + self.num(*last_through)?; + self.num(*distance)?; + } + Op::Test { i, done } => { + self.int(10); + self.pt(*i)?; + self.flag(*done); + } + Op::Next { + prev, + step, + next, + dev, + ang, + } => { + self.int(11); + self.pt(*prev)?; + self.num(*step)?; + self.pt(*next)?; + self.num(*dev)?; + self.num(*ang)?; + } + Op::Split(s) => { + if s.curve >= self.ncurves { + return Err(bad("curve index")); + } + self.int(12); + self.pt(s.curr)?; + self.pt(s.next)?; + self.num(s.delta)?; + self.nums(&s.normals[0])?; + self.nums(&s.normals[1])?; + self.flag(s.average); + self.flag(s.orient); + self.int(s.curve); + self.nums(&s.interval)?; + self.nums(&s.orientations)?; + } + Op::Fbsp { bbox, use_edges } => { + self.int(13); + self.nums(&bbox[0])?; + self.nums(&bbox[1])?; + self.flag(use_edges[0]); + self.flag(use_edges[1]); + } + } + Ok(()) + } +} + +/// Encodes `prog` for the shim. +/// +/// # Errors +/// +/// [`FfiError::InvalidArgument`] for a rejected program. +pub fn encode(prog: &Program) -> Result, FfiError> { + if prog.ops.len() > MAX_OPS || prog.curves.len() > MAX_CURVES || prog.points.len() > MAX_POINTS + { + return Err(bad("too many ops, curves or points")); + } + let mut e = Enc { + v: Vec::new(), + npoints: prog.points.len(), + ncurves: prog.curves.len(), + }; + e.surface(&prog.a)?; + match &prog.b { + None => e.int(2), + Some(b) => e.surface(b)?, + } + e.nums(&prog.dom1)?; + e.nums(&prog.dom2)?; + e.flag(prog.fillet); + e.int(prog.curves.len()); + for c in &prog.curves { + e.curve(c)?; + } + e.int(prog.points.len()); + for p in &prog.points { + e.point(p)?; + } + e.int(prog.ops.len()); + for op in &prog.ops { + e.op(op)?; + } + Ok(e.v) +} + +/// Runs `prog` (see the module docs) and returns the record. +/// +/// # Errors +/// +/// [`FfiError::InvalidArgument`] for rejected inputs; [`FfiError::Status`] for a shim +/// failure. +pub fn run(prog: &Program) -> Result, FfiError> { + let input = encode(prog)?; + let n_in = i64::try_from(input.len()).map_err(|_| bad("program too long"))?; + call_with_buffer(4096, |buf: &mut [f64], len| { + // SAFETY: `input` is valid for `n_in` reads; `buf` for `buf.len()` writes; `len` + // is a valid i64; nothing is retained. + unsafe { + sys::sc_intersect_surface_intersector_p3_run( + input.as_ptr(), + n_in, + buf.as_mut_ptr(), + buf.len() as i64, + &raw mut *len, + ) + } + }) +} diff --git a/crates/solidcore/src/intersect/surface_intersector/p3.rs b/crates/solidcore/src/intersect/surface_intersector/p3.rs index 1163ed38a4..ebfd71b185 100644 --- a/crates/solidcore/src/intersect/surface_intersector/p3.rs +++ b/crates/solidcore/src/intersect/surface_intersector/p3.rs @@ -1395,6 +1395,34 @@ mod tests { assert!(si.compute_next_point(p, 0.1, p).is_err()); } + #[test] + fn next_point_from_a_tangent_point_back_to_the_corner_is_good() { + // z = 0 and y = 0 meet along x; both planes' corner (0, 0) is the origin + let a = plane([0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0]); + let b = plane([0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 0.0, 1.0]); + let mut si = intersector(&a, &b); + let mut prev = TsectPnt::new(); + si.compute_point_values( + [Point2::new(0.5, 0.0), Point2::new(0.5, 0.0)], + &mut prev, + None, + None, + ) + .expect("cpv"); + prev.point_type = IntersectionPointType::TangentPoint; + prev.uv_curve_pv[0][1] = Vec2::new(-1.0, 0.0); + prev.uv_curve_pv[1][1] = Vec2::new(-1.0, 0.0); + prev.curve_pv[1] = Vec3::new(-1.0, 0.0, 0.0); + let p = si.alloc_point(prev); + let n = si.alloc_point(TsectPnt::new()); + // a tangent point is not refined: the next point is the corner + let r = si.compute_next_point(p, 0.1, n).expect("next"); + assert!(r.found_good_point, "{r:?}"); + let next = si.point(n).expect("next"); + assert!(next.crv_pos().length() < 1e-12); + assert!((next.curve_parameter - 0.5).abs() < 1e-12); + } + #[test] fn next_point_outside_the_domain_is_sm_err() { let (a, b) = two_planes(); diff --git a/fixtures/intersect.surface_intersector_p3/planar_section.json b/fixtures/intersect.surface_intersector_p3/planar_section.json new file mode 100644 index 0000000000..e8a1b5fa06 --- /dev/null +++ b/fixtures/intersect.surface_intersector_p3/planar_section.json @@ -0,0 +1,12475 @@ +{ + "cases": [ + { + "name": "shovel_plane_section_05", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf)", + "inputs": { + "a": { + "kind": "b_spline", + "p": 2, + "q": 2, + "net": [ + [ + [ + 7.47036934, + 0.705567127, + 5.757506574, + 1.0 + ], + [ + 12.741060292, + 1.209543646, + 9.338290118, + 1.714285714 + ], + [ + 12.034674434, + 1.142346777, + 8.831312248, + 1.653061224 + ], + [ + 11.330464815, + 1.075149908, + 8.342058417, + 1.571428571 + ], + [ + 7.225114315, + 0.683168171, + 5.508755778, + 1.071428571 + ], + [ + 9.061423838, + 0.844268357, + 7.887172321, + 1.461538462 + ], + [ + 9.869019894, + 0.916634216, + 8.814897008, + 1.615384615 + ], + [ + 10.904959364, + 1.006086459, + 10.268392134, + 1.833333333 + ], + [ + 5.98970602, + 0.548774432, + 5.93930917, + 1.0 + ] + ], + [ + [ + 7.974018725, + 1.838605157, + 6.339577598, + 1.0 + ], + [ + 14.354808413, + 3.195491094, + 9.65370527, + 1.828750521 + ], + [ + 12.128573508, + 2.978193013, + 8.202974675, + 1.616834127 + ], + [ + 10.422034921, + 2.608923009, + 7.156177691, + 1.423187022 + ], + [ + 6.540693938, + 1.70519632, + 5.173172872, + 1.045437556 + ], + [ + 9.059045576, + 2.551818558, + 8.624447061, + 1.620135193 + ], + [ + 9.111881372, + 2.594125607, + 8.966102567, + 1.658929677 + ], + [ + 8.695395339, + 2.613935111, + 9.374338224, + 1.646855845 + ], + [ + 5.417320869, + 1.567867346, + 6.653500622, + 1.0 + ] + ], + [ + [ + 7.340506412, + 4.009606228, + 5.572999657, + 1.0 + ], + [ + 14.950483683, + 8.315237832, + 10.029972649, + 2.063329306 + ], + [ + 10.744907439, + 6.099263778, + 7.401577546, + 1.542598749 + ], + [ + 9.878341716, + 5.678589015, + 6.932365772, + 1.447728515 + ], + [ + 7.315100148, + 4.598984654, + 5.693044268, + 1.192585267 + ], + [ + 8.57226602, + 5.97074561, + 7.628955727, + 1.536968005 + ], + [ + 9.271661489, + 6.525508826, + 8.480436866, + 1.691734517 + ], + [ + 9.665479771, + 6.748675737, + 9.428046049, + 1.819975686 + ], + [ + 5.386939289, + 3.80273607, + 5.812867538, + 1.0 + ] + ], + [ + [ + 6.369785527, + 6.410765998, + 5.046931717, + 1.0 + ], + [ + 11.486402503, + 11.630512518, + 9.26584573, + 1.804116133 + ], + [ + 10.690786378, + 10.785147342, + 8.50457581, + 1.688725176 + ], + [ + 9.782256013, + 9.926503381, + 7.743307825, + 1.553024829 + ], + [ + 7.249095485, + 7.578921205, + 5.692389532, + 1.184702841 + ], + [ + 8.468824823, + 9.165323643, + 7.226333995, + 1.438611537 + ], + [ + 8.975920959, + 9.800057859, + 7.816617083, + 1.53725251 + ], + [ + 11.66455025, + 13.056212626, + 10.600402541, + 2.066953192 + ], + [ + 5.686543274, + 6.338415051, + 5.130823317, + 1.0 + ] + ], + [ + [ + 8.53256603, + 6.621548481, + 4.976926675, + 1.0 + ], + [ + 15.210590138, + 12.163366052, + 5.278185973, + 1.838956055 + ], + [ + 12.602226911, + 10.733503109, + 4.458275248, + 1.634030042 + ], + [ + 11.059463597, + 9.738018674, + 4.129158753, + 1.489795606 + ], + [ + 6.401637592, + 7.07548052, + 3.353514008, + 1.113510452 + ], + [ + 6.219380513, + 9.345204695, + 4.853971081, + 1.511813939 + ], + [ + 6.384298895, + 10.229693955, + 5.394656579, + 1.663180288 + ], + [ + 5.839938761, + 10.900335249, + 6.167718206, + 1.788374223 + ], + [ + 3.574318404, + 6.09650204, + 5.585722932, + 1.0 + ] + ], + [ + [ + 8.644678704, + 8.943491432, + 4.204420904, + 1.0 + ], + [ + 15.586173264, + 16.390170224, + 5.783140838, + 1.83233098 + ], + [ + 12.922849316, + 14.589998935, + 5.143713293, + 1.644430735 + ], + [ + 11.295992173, + 13.270665307, + 4.757553683, + 1.50181912 + ], + [ + 6.296113826, + 9.727504149, + 3.831012348, + 1.127048223 + ], + [ + 5.45659866, + 12.630968986, + 5.451272604, + 1.497893949 + ], + [ + 5.414159906, + 13.76731165, + 6.03483902, + 1.63923417 + ], + [ + 4.965513149, + 15.31377506, + 7.133728928, + 1.841348119 + ], + [ + 2.803944722, + 8.324995377, + 4.921572862, + 1.0 + ] + ], + [ + [ + 9.281476811, + 11.421794208, + 3.378271054, + 1.0 + ], + [ + 17.05814398, + 20.956859407, + 5.33212102, + 1.833754941 + ], + [ + 13.860050561, + 18.624890994, + 4.872853317, + 1.642195262 + ], + [ + 11.961291017, + 16.930783535, + 4.534558986, + 1.499234845 + ], + [ + 5.982663967, + 12.379577383, + 3.769652856, + 1.124138481 + ], + [ + 4.008061792, + 16.097564779, + 5.520879872, + 1.500885843 + ], + [ + 3.63484774, + 17.55370252, + 6.141316076, + 1.644381031 + ], + [ + 2.468490904, + 19.391608447, + 7.103931708, + 1.82996217 + ], + [ + 1.490663753, + 10.596797358, + 4.334862614, + 1.0 + ] + ], + [ + [ + 9.607128726, + 13.031811609, + 2.85043222, + 1.0 + ], + [ + 16.872737671, + 23.813258269, + 5.316693701, + 1.833333333 + ], + [ + 13.625602069, + 21.18093543, + 4.947765286, + 1.642857143 + ], + [ + 11.745499113, + 19.265490562, + 4.602893002, + 1.5 + ], + [ + 5.810781112, + 14.131612715, + 3.820320007, + 1.125 + ], + [ + 3.749917185, + 18.41881001, + 5.584627018, + 1.5 + ], + [ + 3.345568162, + 20.092346149, + 6.209994735, + 1.642857143 + ], + [ + 2.066104471, + 22.24533132, + 7.134719656, + 1.833333333 + ], + [ + 0.723148806, + 12.091055439, + 3.941247793, + 1.0 + ] + ] + ], + "u": [ + 0.0, + 0.0, + 0.0, + 0.173383008, + 0.339364385, + 0.485613778, + 0.625575023, + 0.776367696, + 1.0, + 1.0, + 1.0 + ], + "v": [ + 0.0, + 0.0, + 0.0, + 0.25, + 0.3, + 0.35, + 0.65, + 0.7, + 0.75, + 1.0, + 1.0, + 1.0 + ] + }, + "b": { + "kind": "plane", + "o": [ + 1.8621205906153844, + 2.1491638136666666, + 3.231611456191901 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "domain": [ + -50.0, + -50.0, + 50.0, + 50.0 + ] + }, + "dom1": [ + 0.0, + 0.0, + 1.0, + 1.0 + ], + "dom2": [ + -50.0, + -50.0, + 50.0, + 50.0 + ], + "fillet": false, + "curves": [], + "points": [ + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.239477113647564, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.4760291365497658, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 3.6732806498674337, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 4.878032415313051, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 7.853396583265231, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "ops": [ + { + "op": "members", + "trace_dir": 1.0, + "approx_tol": 0.001, + "start_tol": 0.001, + "step_tol": 1e-12, + "ang_tol": 0.3490658503988659 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.5833333333333334, + 0.13703998040943816 + ], + [ + 6.266462515570471, + 4.991460212010914 + ] + ], + "i": 0, + "prev": null, + "step": null + }, + { + "op": "add_curve", + "i": 0 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.6666666666666666, + 0.13447206022616798 + ], + [ + 6.470728125214806, + 6.213989997321981 + ] + ], + "i": 1, + "prev": 0, + "step": null + }, + { + "op": "add_curve", + "i": 1 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.75, + 0.12252082082942062 + ], + [ + 6.727657091010291, + 7.423555378720932 + ] + ], + "i": 2, + "prev": 1, + "step": null + }, + { + "op": "add_curve", + "i": 2 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.8333333333333334, + 0.06855718070315789 + ], + [ + 7.133269200607596, + 8.550005556353955 + ] + ], + "i": 3, + "prev": 2, + "step": null + }, + { + "op": "add_curve", + "i": 3 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.9166666666666666, + 0.0016380927777605884 + ], + [ + 7.49088824393547, + 9.700455657920115 + ] + ], + "i": 4, + "prev": 3, + "step": null + }, + { + "op": "add_curve", + "i": 4 + }, + { + "op": "cpv", + "uvs": [ + [ + 1.0, + 0.42219012465381545 + ], + [ + 4.640552382765939, + 10.553905955514953 + ] + ], + "i": 5, + "prev": 4, + "step": null + }, + { + "op": "add_curve", + "i": 5 + }, + { + "op": "next", + "prev": 5, + "step": 0.05, + "next": 6, + "dev": -7.0, + "ang": -8.0 + }, + { + "op": "fbsp", + "bbox": [ + [ + -20.0, + -20.0, + -20.0 + ], + [ + 40.0, + 40.0, + 40.0 + ] + ], + "use_edges": [ + true, + true + ] + }, + { + "op": "state" + } + ] + } + }, + { + "name": "plane_shovel_section_05", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf)", + "inputs": { + "a": { + "kind": "plane", + "o": [ + 1.8621205906153844, + 2.1491638136666666, + 3.231611456191901 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "domain": [ + -50.0, + -50.0, + 50.0, + 50.0 + ] + }, + "b": { + "kind": "b_spline", + "p": 2, + "q": 2, + "net": [ + [ + [ + 7.47036934, + 0.705567127, + 5.757506574, + 1.0 + ], + [ + 12.741060292, + 1.209543646, + 9.338290118, + 1.714285714 + ], + [ + 12.034674434, + 1.142346777, + 8.831312248, + 1.653061224 + ], + [ + 11.330464815, + 1.075149908, + 8.342058417, + 1.571428571 + ], + [ + 7.225114315, + 0.683168171, + 5.508755778, + 1.071428571 + ], + [ + 9.061423838, + 0.844268357, + 7.887172321, + 1.461538462 + ], + [ + 9.869019894, + 0.916634216, + 8.814897008, + 1.615384615 + ], + [ + 10.904959364, + 1.006086459, + 10.268392134, + 1.833333333 + ], + [ + 5.98970602, + 0.548774432, + 5.93930917, + 1.0 + ] + ], + [ + [ + 7.974018725, + 1.838605157, + 6.339577598, + 1.0 + ], + [ + 14.354808413, + 3.195491094, + 9.65370527, + 1.828750521 + ], + [ + 12.128573508, + 2.978193013, + 8.202974675, + 1.616834127 + ], + [ + 10.422034921, + 2.608923009, + 7.156177691, + 1.423187022 + ], + [ + 6.540693938, + 1.70519632, + 5.173172872, + 1.045437556 + ], + [ + 9.059045576, + 2.551818558, + 8.624447061, + 1.620135193 + ], + [ + 9.111881372, + 2.594125607, + 8.966102567, + 1.658929677 + ], + [ + 8.695395339, + 2.613935111, + 9.374338224, + 1.646855845 + ], + [ + 5.417320869, + 1.567867346, + 6.653500622, + 1.0 + ] + ], + [ + [ + 7.340506412, + 4.009606228, + 5.572999657, + 1.0 + ], + [ + 14.950483683, + 8.315237832, + 10.029972649, + 2.063329306 + ], + [ + 10.744907439, + 6.099263778, + 7.401577546, + 1.542598749 + ], + [ + 9.878341716, + 5.678589015, + 6.932365772, + 1.447728515 + ], + [ + 7.315100148, + 4.598984654, + 5.693044268, + 1.192585267 + ], + [ + 8.57226602, + 5.97074561, + 7.628955727, + 1.536968005 + ], + [ + 9.271661489, + 6.525508826, + 8.480436866, + 1.691734517 + ], + [ + 9.665479771, + 6.748675737, + 9.428046049, + 1.819975686 + ], + [ + 5.386939289, + 3.80273607, + 5.812867538, + 1.0 + ] + ], + [ + [ + 6.369785527, + 6.410765998, + 5.046931717, + 1.0 + ], + [ + 11.486402503, + 11.630512518, + 9.26584573, + 1.804116133 + ], + [ + 10.690786378, + 10.785147342, + 8.50457581, + 1.688725176 + ], + [ + 9.782256013, + 9.926503381, + 7.743307825, + 1.553024829 + ], + [ + 7.249095485, + 7.578921205, + 5.692389532, + 1.184702841 + ], + [ + 8.468824823, + 9.165323643, + 7.226333995, + 1.438611537 + ], + [ + 8.975920959, + 9.800057859, + 7.816617083, + 1.53725251 + ], + [ + 11.66455025, + 13.056212626, + 10.600402541, + 2.066953192 + ], + [ + 5.686543274, + 6.338415051, + 5.130823317, + 1.0 + ] + ], + [ + [ + 8.53256603, + 6.621548481, + 4.976926675, + 1.0 + ], + [ + 15.210590138, + 12.163366052, + 5.278185973, + 1.838956055 + ], + [ + 12.602226911, + 10.733503109, + 4.458275248, + 1.634030042 + ], + [ + 11.059463597, + 9.738018674, + 4.129158753, + 1.489795606 + ], + [ + 6.401637592, + 7.07548052, + 3.353514008, + 1.113510452 + ], + [ + 6.219380513, + 9.345204695, + 4.853971081, + 1.511813939 + ], + [ + 6.384298895, + 10.229693955, + 5.394656579, + 1.663180288 + ], + [ + 5.839938761, + 10.900335249, + 6.167718206, + 1.788374223 + ], + [ + 3.574318404, + 6.09650204, + 5.585722932, + 1.0 + ] + ], + [ + [ + 8.644678704, + 8.943491432, + 4.204420904, + 1.0 + ], + [ + 15.586173264, + 16.390170224, + 5.783140838, + 1.83233098 + ], + [ + 12.922849316, + 14.589998935, + 5.143713293, + 1.644430735 + ], + [ + 11.295992173, + 13.270665307, + 4.757553683, + 1.50181912 + ], + [ + 6.296113826, + 9.727504149, + 3.831012348, + 1.127048223 + ], + [ + 5.45659866, + 12.630968986, + 5.451272604, + 1.497893949 + ], + [ + 5.414159906, + 13.76731165, + 6.03483902, + 1.63923417 + ], + [ + 4.965513149, + 15.31377506, + 7.133728928, + 1.841348119 + ], + [ + 2.803944722, + 8.324995377, + 4.921572862, + 1.0 + ] + ], + [ + [ + 9.281476811, + 11.421794208, + 3.378271054, + 1.0 + ], + [ + 17.05814398, + 20.956859407, + 5.33212102, + 1.833754941 + ], + [ + 13.860050561, + 18.624890994, + 4.872853317, + 1.642195262 + ], + [ + 11.961291017, + 16.930783535, + 4.534558986, + 1.499234845 + ], + [ + 5.982663967, + 12.379577383, + 3.769652856, + 1.124138481 + ], + [ + 4.008061792, + 16.097564779, + 5.520879872, + 1.500885843 + ], + [ + 3.63484774, + 17.55370252, + 6.141316076, + 1.644381031 + ], + [ + 2.468490904, + 19.391608447, + 7.103931708, + 1.82996217 + ], + [ + 1.490663753, + 10.596797358, + 4.334862614, + 1.0 + ] + ], + [ + [ + 9.607128726, + 13.031811609, + 2.85043222, + 1.0 + ], + [ + 16.872737671, + 23.813258269, + 5.316693701, + 1.833333333 + ], + [ + 13.625602069, + 21.18093543, + 4.947765286, + 1.642857143 + ], + [ + 11.745499113, + 19.265490562, + 4.602893002, + 1.5 + ], + [ + 5.810781112, + 14.131612715, + 3.820320007, + 1.125 + ], + [ + 3.749917185, + 18.41881001, + 5.584627018, + 1.5 + ], + [ + 3.345568162, + 20.092346149, + 6.209994735, + 1.642857143 + ], + [ + 2.066104471, + 22.24533132, + 7.134719656, + 1.833333333 + ], + [ + 0.723148806, + 12.091055439, + 3.941247793, + 1.0 + ] + ] + ], + "u": [ + 0.0, + 0.0, + 0.0, + 0.173383008, + 0.339364385, + 0.485613778, + 0.625575023, + 0.776367696, + 1.0, + 1.0, + 1.0 + ], + "v": [ + 0.0, + 0.0, + 0.0, + 0.25, + 0.3, + 0.35, + 0.65, + 0.7, + 0.75, + 1.0, + 1.0, + 1.0 + ] + }, + "dom1": [ + -50.0, + -50.0, + 50.0, + 50.0 + ], + "dom2": [ + 0.0, + 0.0, + 1.0, + 1.0 + ], + "fillet": false, + "curves": [], + "points": [ + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.239477113647564, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.4760291365497658, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 3.6732806498674337, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 4.878032415313051, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 7.853396583265231, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "ops": [ + { + "op": "cpv", + "uvs": [ + [ + 6.266462515570471, + 4.991460212010914 + ], + [ + 0.5833333333333334, + 0.13703998040943816 + ] + ], + "i": 0, + "prev": null, + "step": null + }, + { + "op": "cpv", + "uvs": [ + [ + 6.470728125214806, + 6.213989997321981 + ], + [ + 0.6666666666666666, + 0.13447206022616798 + ] + ], + "i": 1, + "prev": 0, + "step": 0.1 + }, + { + "op": "cpv", + "uvs": [ + [ + 6.727657091010291, + 7.423555378720932 + ], + [ + 0.75, + 0.12252082082942062 + ] + ], + "i": 2, + "prev": 1, + "step": 0.1 + }, + { + "op": "cpv", + "uvs": [ + [ + 7.133269200607596, + 8.550005556353955 + ], + [ + 0.8333333333333334, + 0.06855718070315789 + ] + ], + "i": 3, + "prev": 2, + "step": 0.1 + }, + { + "op": "cpv", + "uvs": [ + [ + 7.49088824393547, + 9.700455657920115 + ], + [ + 0.9166666666666666, + 0.0016380927777605884 + ] + ], + "i": 4, + "prev": 3, + "step": 0.1 + }, + { + "op": "cpv", + "uvs": [ + [ + 4.640552382765939, + 10.553905955514953 + ], + [ + 1.0, + 0.42219012465381545 + ] + ], + "i": 5, + "prev": 4, + "step": 0.1 + }, + { + "op": "fbsp", + "bbox": [ + [ + -20.0, + -20.0, + -20.0 + ], + [ + 40.0, + 40.0, + 40.0 + ] + ], + "use_edges": [ + true, + true + ] + }, + { + "op": "state" + } + ] + } + }, + { + "name": "shovel_plane_section_12", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf)", + "inputs": { + "a": { + "kind": "b_spline", + "p": 2, + "q": 2, + "net": [ + [ + [ + 7.47036934, + 0.705567127, + 5.757506574, + 1.0 + ], + [ + 12.741060292, + 1.209543646, + 9.338290118, + 1.714285714 + ], + [ + 12.034674434, + 1.142346777, + 8.831312248, + 1.653061224 + ], + [ + 11.330464815, + 1.075149908, + 8.342058417, + 1.571428571 + ], + [ + 7.225114315, + 0.683168171, + 5.508755778, + 1.071428571 + ], + [ + 9.061423838, + 0.844268357, + 7.887172321, + 1.461538462 + ], + [ + 9.869019894, + 0.916634216, + 8.814897008, + 1.615384615 + ], + [ + 10.904959364, + 1.006086459, + 10.268392134, + 1.833333333 + ], + [ + 5.98970602, + 0.548774432, + 5.93930917, + 1.0 + ] + ], + [ + [ + 7.974018725, + 1.838605157, + 6.339577598, + 1.0 + ], + [ + 14.354808413, + 3.195491094, + 9.65370527, + 1.828750521 + ], + [ + 12.128573508, + 2.978193013, + 8.202974675, + 1.616834127 + ], + [ + 10.422034921, + 2.608923009, + 7.156177691, + 1.423187022 + ], + [ + 6.540693938, + 1.70519632, + 5.173172872, + 1.045437556 + ], + [ + 9.059045576, + 2.551818558, + 8.624447061, + 1.620135193 + ], + [ + 9.111881372, + 2.594125607, + 8.966102567, + 1.658929677 + ], + [ + 8.695395339, + 2.613935111, + 9.374338224, + 1.646855845 + ], + [ + 5.417320869, + 1.567867346, + 6.653500622, + 1.0 + ] + ], + [ + [ + 7.340506412, + 4.009606228, + 5.572999657, + 1.0 + ], + [ + 14.950483683, + 8.315237832, + 10.029972649, + 2.063329306 + ], + [ + 10.744907439, + 6.099263778, + 7.401577546, + 1.542598749 + ], + [ + 9.878341716, + 5.678589015, + 6.932365772, + 1.447728515 + ], + [ + 7.315100148, + 4.598984654, + 5.693044268, + 1.192585267 + ], + [ + 8.57226602, + 5.97074561, + 7.628955727, + 1.536968005 + ], + [ + 9.271661489, + 6.525508826, + 8.480436866, + 1.691734517 + ], + [ + 9.665479771, + 6.748675737, + 9.428046049, + 1.819975686 + ], + [ + 5.386939289, + 3.80273607, + 5.812867538, + 1.0 + ] + ], + [ + [ + 6.369785527, + 6.410765998, + 5.046931717, + 1.0 + ], + [ + 11.486402503, + 11.630512518, + 9.26584573, + 1.804116133 + ], + [ + 10.690786378, + 10.785147342, + 8.50457581, + 1.688725176 + ], + [ + 9.782256013, + 9.926503381, + 7.743307825, + 1.553024829 + ], + [ + 7.249095485, + 7.578921205, + 5.692389532, + 1.184702841 + ], + [ + 8.468824823, + 9.165323643, + 7.226333995, + 1.438611537 + ], + [ + 8.975920959, + 9.800057859, + 7.816617083, + 1.53725251 + ], + [ + 11.66455025, + 13.056212626, + 10.600402541, + 2.066953192 + ], + [ + 5.686543274, + 6.338415051, + 5.130823317, + 1.0 + ] + ], + [ + [ + 8.53256603, + 6.621548481, + 4.976926675, + 1.0 + ], + [ + 15.210590138, + 12.163366052, + 5.278185973, + 1.838956055 + ], + [ + 12.602226911, + 10.733503109, + 4.458275248, + 1.634030042 + ], + [ + 11.059463597, + 9.738018674, + 4.129158753, + 1.489795606 + ], + [ + 6.401637592, + 7.07548052, + 3.353514008, + 1.113510452 + ], + [ + 6.219380513, + 9.345204695, + 4.853971081, + 1.511813939 + ], + [ + 6.384298895, + 10.229693955, + 5.394656579, + 1.663180288 + ], + [ + 5.839938761, + 10.900335249, + 6.167718206, + 1.788374223 + ], + [ + 3.574318404, + 6.09650204, + 5.585722932, + 1.0 + ] + ], + [ + [ + 8.644678704, + 8.943491432, + 4.204420904, + 1.0 + ], + [ + 15.586173264, + 16.390170224, + 5.783140838, + 1.83233098 + ], + [ + 12.922849316, + 14.589998935, + 5.143713293, + 1.644430735 + ], + [ + 11.295992173, + 13.270665307, + 4.757553683, + 1.50181912 + ], + [ + 6.296113826, + 9.727504149, + 3.831012348, + 1.127048223 + ], + [ + 5.45659866, + 12.630968986, + 5.451272604, + 1.497893949 + ], + [ + 5.414159906, + 13.76731165, + 6.03483902, + 1.63923417 + ], + [ + 4.965513149, + 15.31377506, + 7.133728928, + 1.841348119 + ], + [ + 2.803944722, + 8.324995377, + 4.921572862, + 1.0 + ] + ], + [ + [ + 9.281476811, + 11.421794208, + 3.378271054, + 1.0 + ], + [ + 17.05814398, + 20.956859407, + 5.33212102, + 1.833754941 + ], + [ + 13.860050561, + 18.624890994, + 4.872853317, + 1.642195262 + ], + [ + 11.961291017, + 16.930783535, + 4.534558986, + 1.499234845 + ], + [ + 5.982663967, + 12.379577383, + 3.769652856, + 1.124138481 + ], + [ + 4.008061792, + 16.097564779, + 5.520879872, + 1.500885843 + ], + [ + 3.63484774, + 17.55370252, + 6.141316076, + 1.644381031 + ], + [ + 2.468490904, + 19.391608447, + 7.103931708, + 1.82996217 + ], + [ + 1.490663753, + 10.596797358, + 4.334862614, + 1.0 + ] + ], + [ + [ + 9.607128726, + 13.031811609, + 2.85043222, + 1.0 + ], + [ + 16.872737671, + 23.813258269, + 5.316693701, + 1.833333333 + ], + [ + 13.625602069, + 21.18093543, + 4.947765286, + 1.642857143 + ], + [ + 11.745499113, + 19.265490562, + 4.602893002, + 1.5 + ], + [ + 5.810781112, + 14.131612715, + 3.820320007, + 1.125 + ], + [ + 3.749917185, + 18.41881001, + 5.584627018, + 1.5 + ], + [ + 3.345568162, + 20.092346149, + 6.209994735, + 1.642857143 + ], + [ + 2.066104471, + 22.24533132, + 7.134719656, + 1.833333333 + ], + [ + 0.723148806, + 12.091055439, + 3.941247793, + 1.0 + ] + ] + ], + "u": [ + 0.0, + 0.0, + 0.0, + 0.173383008, + 0.339364385, + 0.485613778, + 0.625575023, + 0.776367696, + 1.0, + 1.0, + 1.0 + ], + "v": [ + 0.0, + 0.0, + 0.0, + 0.25, + 0.3, + 0.35, + 0.65, + 0.7, + 0.75, + 1.0, + 1.0, + 1.0 + ] + }, + "b": { + "kind": "plane", + "o": [ + 3.4566810890769233, + 4.389708948, + 3.9361180491523924 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "domain": [ + -50.0, + -50.0, + 50.0, + 50.0 + ] + }, + "dom1": [ + 0.0, + 0.0, + 1.0, + 1.0 + ], + "dom2": [ + -50.0, + -50.0, + 50.0, + 50.0 + ], + "fillet": false, + "curves": [], + "points": [ + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0494821753769286, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.2964408093731987, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 3.529255966226842, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 10.377231403330962, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 11.544511272157488, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 12.843780950408986, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "ops": [ + { + "op": "members", + "trace_dir": 1.0, + "approx_tol": 0.001, + "start_tol": 0.001, + "step_tol": 1e-12, + "ang_tol": 0.3490658503988659 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.5, + 0.12319595364481084 + ], + [ + 4.020074049869658, + 2.158118523693714 + ] + ], + "i": 0, + "prev": null, + "step": null + }, + { + "op": "add_curve", + "i": 0 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.5833333333333334, + 0.04737328571797139 + ], + [ + 4.8774667836632855, + 2.7633379355368737 + ] + ], + "i": 1, + "prev": 0, + "step": null + }, + { + "op": "add_curve", + "i": 1 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.6666666666666666, + 0.02967692683363879 + ], + [ + 5.108366287379765, + 3.98873226149131 + ] + ], + "i": 2, + "prev": 1, + "step": null + }, + { + "op": "add_curve", + "i": 2 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.75, + 0.004214923106971734 + ], + [ + 5.354805555620768, + 5.19666475051415 + ] + ], + "i": 3, + "prev": 2, + "step": null + }, + { + "op": "add_curve", + "i": 3 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.8333333333333334, + 0.8714821664261478 + ], + [ + -1.4831446684160183, + 5.567075766517465 + ] + ], + "i": 4, + "prev": 3, + "step": null + }, + { + "op": "add_curve", + "i": 4 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.9166666666666666, + 0.8930116681984159 + ], + [ + -1.9585170021383826, + 6.633173058746942 + ] + ], + "i": 5, + "prev": 4, + "step": null + }, + { + "op": "add_curve", + "i": 5 + }, + { + "op": "cpv", + "uvs": [ + [ + 1.0, + 0.9926713072495192 + ], + [ + -2.6917538715190226, + 7.705770555576312 + ] + ], + "i": 6, + "prev": 5, + "step": null + }, + { + "op": "add_curve", + "i": 6 + }, + { + "op": "next", + "prev": 6, + "step": 0.05, + "next": 7, + "dev": -7.0, + "ang": -8.0 + }, + { + "op": "fbsp", + "bbox": [ + [ + -20.0, + -20.0, + -20.0 + ], + [ + 40.0, + 40.0, + 40.0 + ] + ], + "use_edges": [ + true, + true + ] + }, + { + "op": "state" + } + ] + } + }, + { + "name": "plane_shovel_section_12", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf)", + "inputs": { + "a": { + "kind": "plane", + "o": [ + 3.4566810890769233, + 4.389708948, + 3.9361180491523924 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "domain": [ + -50.0, + -50.0, + 50.0, + 50.0 + ] + }, + "b": { + "kind": "b_spline", + "p": 2, + "q": 2, + "net": [ + [ + [ + 7.47036934, + 0.705567127, + 5.757506574, + 1.0 + ], + [ + 12.741060292, + 1.209543646, + 9.338290118, + 1.714285714 + ], + [ + 12.034674434, + 1.142346777, + 8.831312248, + 1.653061224 + ], + [ + 11.330464815, + 1.075149908, + 8.342058417, + 1.571428571 + ], + [ + 7.225114315, + 0.683168171, + 5.508755778, + 1.071428571 + ], + [ + 9.061423838, + 0.844268357, + 7.887172321, + 1.461538462 + ], + [ + 9.869019894, + 0.916634216, + 8.814897008, + 1.615384615 + ], + [ + 10.904959364, + 1.006086459, + 10.268392134, + 1.833333333 + ], + [ + 5.98970602, + 0.548774432, + 5.93930917, + 1.0 + ] + ], + [ + [ + 7.974018725, + 1.838605157, + 6.339577598, + 1.0 + ], + [ + 14.354808413, + 3.195491094, + 9.65370527, + 1.828750521 + ], + [ + 12.128573508, + 2.978193013, + 8.202974675, + 1.616834127 + ], + [ + 10.422034921, + 2.608923009, + 7.156177691, + 1.423187022 + ], + [ + 6.540693938, + 1.70519632, + 5.173172872, + 1.045437556 + ], + [ + 9.059045576, + 2.551818558, + 8.624447061, + 1.620135193 + ], + [ + 9.111881372, + 2.594125607, + 8.966102567, + 1.658929677 + ], + [ + 8.695395339, + 2.613935111, + 9.374338224, + 1.646855845 + ], + [ + 5.417320869, + 1.567867346, + 6.653500622, + 1.0 + ] + ], + [ + [ + 7.340506412, + 4.009606228, + 5.572999657, + 1.0 + ], + [ + 14.950483683, + 8.315237832, + 10.029972649, + 2.063329306 + ], + [ + 10.744907439, + 6.099263778, + 7.401577546, + 1.542598749 + ], + [ + 9.878341716, + 5.678589015, + 6.932365772, + 1.447728515 + ], + [ + 7.315100148, + 4.598984654, + 5.693044268, + 1.192585267 + ], + [ + 8.57226602, + 5.97074561, + 7.628955727, + 1.536968005 + ], + [ + 9.271661489, + 6.525508826, + 8.480436866, + 1.691734517 + ], + [ + 9.665479771, + 6.748675737, + 9.428046049, + 1.819975686 + ], + [ + 5.386939289, + 3.80273607, + 5.812867538, + 1.0 + ] + ], + [ + [ + 6.369785527, + 6.410765998, + 5.046931717, + 1.0 + ], + [ + 11.486402503, + 11.630512518, + 9.26584573, + 1.804116133 + ], + [ + 10.690786378, + 10.785147342, + 8.50457581, + 1.688725176 + ], + [ + 9.782256013, + 9.926503381, + 7.743307825, + 1.553024829 + ], + [ + 7.249095485, + 7.578921205, + 5.692389532, + 1.184702841 + ], + [ + 8.468824823, + 9.165323643, + 7.226333995, + 1.438611537 + ], + [ + 8.975920959, + 9.800057859, + 7.816617083, + 1.53725251 + ], + [ + 11.66455025, + 13.056212626, + 10.600402541, + 2.066953192 + ], + [ + 5.686543274, + 6.338415051, + 5.130823317, + 1.0 + ] + ], + [ + [ + 8.53256603, + 6.621548481, + 4.976926675, + 1.0 + ], + [ + 15.210590138, + 12.163366052, + 5.278185973, + 1.838956055 + ], + [ + 12.602226911, + 10.733503109, + 4.458275248, + 1.634030042 + ], + [ + 11.059463597, + 9.738018674, + 4.129158753, + 1.489795606 + ], + [ + 6.401637592, + 7.07548052, + 3.353514008, + 1.113510452 + ], + [ + 6.219380513, + 9.345204695, + 4.853971081, + 1.511813939 + ], + [ + 6.384298895, + 10.229693955, + 5.394656579, + 1.663180288 + ], + [ + 5.839938761, + 10.900335249, + 6.167718206, + 1.788374223 + ], + [ + 3.574318404, + 6.09650204, + 5.585722932, + 1.0 + ] + ], + [ + [ + 8.644678704, + 8.943491432, + 4.204420904, + 1.0 + ], + [ + 15.586173264, + 16.390170224, + 5.783140838, + 1.83233098 + ], + [ + 12.922849316, + 14.589998935, + 5.143713293, + 1.644430735 + ], + [ + 11.295992173, + 13.270665307, + 4.757553683, + 1.50181912 + ], + [ + 6.296113826, + 9.727504149, + 3.831012348, + 1.127048223 + ], + [ + 5.45659866, + 12.630968986, + 5.451272604, + 1.497893949 + ], + [ + 5.414159906, + 13.76731165, + 6.03483902, + 1.63923417 + ], + [ + 4.965513149, + 15.31377506, + 7.133728928, + 1.841348119 + ], + [ + 2.803944722, + 8.324995377, + 4.921572862, + 1.0 + ] + ], + [ + [ + 9.281476811, + 11.421794208, + 3.378271054, + 1.0 + ], + [ + 17.05814398, + 20.956859407, + 5.33212102, + 1.833754941 + ], + [ + 13.860050561, + 18.624890994, + 4.872853317, + 1.642195262 + ], + [ + 11.961291017, + 16.930783535, + 4.534558986, + 1.499234845 + ], + [ + 5.982663967, + 12.379577383, + 3.769652856, + 1.124138481 + ], + [ + 4.008061792, + 16.097564779, + 5.520879872, + 1.500885843 + ], + [ + 3.63484774, + 17.55370252, + 6.141316076, + 1.644381031 + ], + [ + 2.468490904, + 19.391608447, + 7.103931708, + 1.82996217 + ], + [ + 1.490663753, + 10.596797358, + 4.334862614, + 1.0 + ] + ], + [ + [ + 9.607128726, + 13.031811609, + 2.85043222, + 1.0 + ], + [ + 16.872737671, + 23.813258269, + 5.316693701, + 1.833333333 + ], + [ + 13.625602069, + 21.18093543, + 4.947765286, + 1.642857143 + ], + [ + 11.745499113, + 19.265490562, + 4.602893002, + 1.5 + ], + [ + 5.810781112, + 14.131612715, + 3.820320007, + 1.125 + ], + [ + 3.749917185, + 18.41881001, + 5.584627018, + 1.5 + ], + [ + 3.345568162, + 20.092346149, + 6.209994735, + 1.642857143 + ], + [ + 2.066104471, + 22.24533132, + 7.134719656, + 1.833333333 + ], + [ + 0.723148806, + 12.091055439, + 3.941247793, + 1.0 + ] + ] + ], + "u": [ + 0.0, + 0.0, + 0.0, + 0.173383008, + 0.339364385, + 0.485613778, + 0.625575023, + 0.776367696, + 1.0, + 1.0, + 1.0 + ], + "v": [ + 0.0, + 0.0, + 0.0, + 0.25, + 0.3, + 0.35, + 0.65, + 0.7, + 0.75, + 1.0, + 1.0, + 1.0 + ] + }, + "dom1": [ + -50.0, + -50.0, + 50.0, + 50.0 + ], + "dom2": [ + 0.0, + 0.0, + 1.0, + 1.0 + ], + "fillet": false, + "curves": [], + "points": [ + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0494821753769286, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.2964408093731987, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 3.529255966226842, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 10.377231403330962, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 11.544511272157488, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 12.843780950408986, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "ops": [ + { + "op": "cpv", + "uvs": [ + [ + 4.020074049869658, + 2.158118523693714 + ], + [ + 0.5, + 0.12319595364481084 + ] + ], + "i": 0, + "prev": null, + "step": null + }, + { + "op": "cpv", + "uvs": [ + [ + 4.8774667836632855, + 2.7633379355368737 + ], + [ + 0.5833333333333334, + 0.04737328571797139 + ] + ], + "i": 1, + "prev": 0, + "step": 0.1 + }, + { + "op": "cpv", + "uvs": [ + [ + 5.108366287379765, + 3.98873226149131 + ], + [ + 0.6666666666666666, + 0.02967692683363879 + ] + ], + "i": 2, + "prev": 1, + "step": 0.1 + }, + { + "op": "cpv", + "uvs": [ + [ + 5.354805555620768, + 5.19666475051415 + ], + [ + 0.75, + 0.004214923106971734 + ] + ], + "i": 3, + "prev": 2, + "step": 0.1 + }, + { + "op": "cpv", + "uvs": [ + [ + -1.4831446684160183, + 5.567075766517465 + ], + [ + 0.8333333333333334, + 0.8714821664261478 + ] + ], + "i": 4, + "prev": 3, + "step": 0.1 + }, + { + "op": "cpv", + "uvs": [ + [ + -1.9585170021383826, + 6.633173058746942 + ], + [ + 0.9166666666666666, + 0.8930116681984159 + ] + ], + "i": 5, + "prev": 4, + "step": 0.1 + }, + { + "op": "fbsp", + "bbox": [ + [ + -20.0, + -20.0, + -20.0 + ], + [ + 40.0, + 40.0, + 40.0 + ] + ], + "use_edges": [ + true, + true + ] + }, + { + "op": "state" + } + ] + } + }, + { + "name": "shovel_plane_section_20", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf)", + "inputs": { + "a": { + "kind": "b_spline", + "p": 2, + "q": 2, + "net": [ + [ + [ + 7.47036934, + 0.705567127, + 5.757506574, + 1.0 + ], + [ + 12.741060292, + 1.209543646, + 9.338290118, + 1.714285714 + ], + [ + 12.034674434, + 1.142346777, + 8.831312248, + 1.653061224 + ], + [ + 11.330464815, + 1.075149908, + 8.342058417, + 1.571428571 + ], + [ + 7.225114315, + 0.683168171, + 5.508755778, + 1.071428571 + ], + [ + 9.061423838, + 0.844268357, + 7.887172321, + 1.461538462 + ], + [ + 9.869019894, + 0.916634216, + 8.814897008, + 1.615384615 + ], + [ + 10.904959364, + 1.006086459, + 10.268392134, + 1.833333333 + ], + [ + 5.98970602, + 0.548774432, + 5.93930917, + 1.0 + ] + ], + [ + [ + 7.974018725, + 1.838605157, + 6.339577598, + 1.0 + ], + [ + 14.354808413, + 3.195491094, + 9.65370527, + 1.828750521 + ], + [ + 12.128573508, + 2.978193013, + 8.202974675, + 1.616834127 + ], + [ + 10.422034921, + 2.608923009, + 7.156177691, + 1.423187022 + ], + [ + 6.540693938, + 1.70519632, + 5.173172872, + 1.045437556 + ], + [ + 9.059045576, + 2.551818558, + 8.624447061, + 1.620135193 + ], + [ + 9.111881372, + 2.594125607, + 8.966102567, + 1.658929677 + ], + [ + 8.695395339, + 2.613935111, + 9.374338224, + 1.646855845 + ], + [ + 5.417320869, + 1.567867346, + 6.653500622, + 1.0 + ] + ], + [ + [ + 7.340506412, + 4.009606228, + 5.572999657, + 1.0 + ], + [ + 14.950483683, + 8.315237832, + 10.029972649, + 2.063329306 + ], + [ + 10.744907439, + 6.099263778, + 7.401577546, + 1.542598749 + ], + [ + 9.878341716, + 5.678589015, + 6.932365772, + 1.447728515 + ], + [ + 7.315100148, + 4.598984654, + 5.693044268, + 1.192585267 + ], + [ + 8.57226602, + 5.97074561, + 7.628955727, + 1.536968005 + ], + [ + 9.271661489, + 6.525508826, + 8.480436866, + 1.691734517 + ], + [ + 9.665479771, + 6.748675737, + 9.428046049, + 1.819975686 + ], + [ + 5.386939289, + 3.80273607, + 5.812867538, + 1.0 + ] + ], + [ + [ + 6.369785527, + 6.410765998, + 5.046931717, + 1.0 + ], + [ + 11.486402503, + 11.630512518, + 9.26584573, + 1.804116133 + ], + [ + 10.690786378, + 10.785147342, + 8.50457581, + 1.688725176 + ], + [ + 9.782256013, + 9.926503381, + 7.743307825, + 1.553024829 + ], + [ + 7.249095485, + 7.578921205, + 5.692389532, + 1.184702841 + ], + [ + 8.468824823, + 9.165323643, + 7.226333995, + 1.438611537 + ], + [ + 8.975920959, + 9.800057859, + 7.816617083, + 1.53725251 + ], + [ + 11.66455025, + 13.056212626, + 10.600402541, + 2.066953192 + ], + [ + 5.686543274, + 6.338415051, + 5.130823317, + 1.0 + ] + ], + [ + [ + 8.53256603, + 6.621548481, + 4.976926675, + 1.0 + ], + [ + 15.210590138, + 12.163366052, + 5.278185973, + 1.838956055 + ], + [ + 12.602226911, + 10.733503109, + 4.458275248, + 1.634030042 + ], + [ + 11.059463597, + 9.738018674, + 4.129158753, + 1.489795606 + ], + [ + 6.401637592, + 7.07548052, + 3.353514008, + 1.113510452 + ], + [ + 6.219380513, + 9.345204695, + 4.853971081, + 1.511813939 + ], + [ + 6.384298895, + 10.229693955, + 5.394656579, + 1.663180288 + ], + [ + 5.839938761, + 10.900335249, + 6.167718206, + 1.788374223 + ], + [ + 3.574318404, + 6.09650204, + 5.585722932, + 1.0 + ] + ], + [ + [ + 8.644678704, + 8.943491432, + 4.204420904, + 1.0 + ], + [ + 15.586173264, + 16.390170224, + 5.783140838, + 1.83233098 + ], + [ + 12.922849316, + 14.589998935, + 5.143713293, + 1.644430735 + ], + [ + 11.295992173, + 13.270665307, + 4.757553683, + 1.50181912 + ], + [ + 6.296113826, + 9.727504149, + 3.831012348, + 1.127048223 + ], + [ + 5.45659866, + 12.630968986, + 5.451272604, + 1.497893949 + ], + [ + 5.414159906, + 13.76731165, + 6.03483902, + 1.63923417 + ], + [ + 4.965513149, + 15.31377506, + 7.133728928, + 1.841348119 + ], + [ + 2.803944722, + 8.324995377, + 4.921572862, + 1.0 + ] + ], + [ + [ + 9.281476811, + 11.421794208, + 3.378271054, + 1.0 + ], + [ + 17.05814398, + 20.956859407, + 5.33212102, + 1.833754941 + ], + [ + 13.860050561, + 18.624890994, + 4.872853317, + 1.642195262 + ], + [ + 11.961291017, + 16.930783535, + 4.534558986, + 1.499234845 + ], + [ + 5.982663967, + 12.379577383, + 3.769652856, + 1.124138481 + ], + [ + 4.008061792, + 16.097564779, + 5.520879872, + 1.500885843 + ], + [ + 3.63484774, + 17.55370252, + 6.141316076, + 1.644381031 + ], + [ + 2.468490904, + 19.391608447, + 7.103931708, + 1.82996217 + ], + [ + 1.490663753, + 10.596797358, + 4.334862614, + 1.0 + ] + ], + [ + [ + 9.607128726, + 13.031811609, + 2.85043222, + 1.0 + ], + [ + 16.872737671, + 23.813258269, + 5.316693701, + 1.833333333 + ], + [ + 13.625602069, + 21.18093543, + 4.947765286, + 1.642857143 + ], + [ + 11.745499113, + 19.265490562, + 4.602893002, + 1.5 + ], + [ + 5.810781112, + 14.131612715, + 3.820320007, + 1.125 + ], + [ + 3.749917185, + 18.41881001, + 5.584627018, + 1.5 + ], + [ + 3.345568162, + 20.092346149, + 6.209994735, + 1.642857143 + ], + [ + 2.066104471, + 22.24533132, + 7.134719656, + 1.833333333 + ], + [ + 0.723148806, + 12.091055439, + 3.941247793, + 1.0 + ] + ] + ], + "u": [ + 0.0, + 0.0, + 0.0, + 0.173383008, + 0.339364385, + 0.485613778, + 0.625575023, + 0.776367696, + 1.0, + 1.0, + 1.0 + ], + "v": [ + 0.0, + 0.0, + 0.0, + 0.25, + 0.3, + 0.35, + 0.65, + 0.7, + 0.75, + 1.0, + 1.0, + 1.0 + ] + }, + "b": { + "kind": "plane", + "o": [ + 5.279035944461538, + 6.950331958666666, + 4.741268441107239 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "domain": [ + -50.0, + -50.0, + 50.0, + 50.0 + ] + }, + "dom1": [ + 0.0, + 0.0, + 1.0, + 1.0 + ], + "dom2": [ + -50.0, + -50.0, + 50.0, + 50.0 + ], + "fillet": false, + "curves": [], + "points": [ + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0531664726543821, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.0612832307366378, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 7.613939998327714, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 8.842983056938891, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "ops": [ + { + "op": "members", + "trace_dir": 1.0, + "approx_tol": 0.001, + "start_tol": 0.001, + "step_tol": 1e-12, + "ang_tol": 0.3490658503988659 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.4166666666666667, + 0.1989476282090778 + ], + [ + 1.3833952084840186, + -0.7676781158334842 + ] + ], + "i": 0, + "prev": null, + "step": null + }, + { + "op": "add_curve", + "i": 0 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.5, + 0.016243185941024425 + ], + [ + 2.369563112966075, + -0.39803980167660047 + ] + ], + "i": 1, + "prev": 0, + "step": null + }, + { + "op": "add_curve", + "i": 1 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.5833333333333334, + 0.00226579415512807 + ], + [ + 3.1762742998562308, + 0.2065397703174865 + ] + ], + "i": 2, + "prev": 1, + "step": null + }, + { + "op": "add_curve", + "i": 2 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.6666666666666666, + 0.978986257323645 + ], + [ + -2.3409175749312174, + 0.8331105926946138 + ] + ], + "i": 3, + "prev": 2, + "step": null + }, + { + "op": "add_curve", + "i": 3 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.75, + 0.9976943271912726 + ], + [ + -2.826842512682212, + 1.9620143949700815 + ] + ], + "i": 4, + "prev": 3, + "step": null + }, + { + "op": "add_curve", + "i": 4 + }, + { + "op": "next", + "prev": 4, + "step": 0.05, + "next": 5, + "dev": -7.0, + "ang": -8.0 + }, + { + "op": "fbsp", + "bbox": [ + [ + -20.0, + -20.0, + -20.0 + ], + [ + 40.0, + 40.0, + 40.0 + ] + ], + "use_edges": [ + true, + true + ] + }, + { + "op": "state" + } + ] + } + }, + { + "name": "plane_shovel_section_20", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf)", + "inputs": { + "a": { + "kind": "plane", + "o": [ + 5.279035944461538, + 6.950331958666666, + 4.741268441107239 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "domain": [ + -50.0, + -50.0, + 50.0, + 50.0 + ] + }, + "b": { + "kind": "b_spline", + "p": 2, + "q": 2, + "net": [ + [ + [ + 7.47036934, + 0.705567127, + 5.757506574, + 1.0 + ], + [ + 12.741060292, + 1.209543646, + 9.338290118, + 1.714285714 + ], + [ + 12.034674434, + 1.142346777, + 8.831312248, + 1.653061224 + ], + [ + 11.330464815, + 1.075149908, + 8.342058417, + 1.571428571 + ], + [ + 7.225114315, + 0.683168171, + 5.508755778, + 1.071428571 + ], + [ + 9.061423838, + 0.844268357, + 7.887172321, + 1.461538462 + ], + [ + 9.869019894, + 0.916634216, + 8.814897008, + 1.615384615 + ], + [ + 10.904959364, + 1.006086459, + 10.268392134, + 1.833333333 + ], + [ + 5.98970602, + 0.548774432, + 5.93930917, + 1.0 + ] + ], + [ + [ + 7.974018725, + 1.838605157, + 6.339577598, + 1.0 + ], + [ + 14.354808413, + 3.195491094, + 9.65370527, + 1.828750521 + ], + [ + 12.128573508, + 2.978193013, + 8.202974675, + 1.616834127 + ], + [ + 10.422034921, + 2.608923009, + 7.156177691, + 1.423187022 + ], + [ + 6.540693938, + 1.70519632, + 5.173172872, + 1.045437556 + ], + [ + 9.059045576, + 2.551818558, + 8.624447061, + 1.620135193 + ], + [ + 9.111881372, + 2.594125607, + 8.966102567, + 1.658929677 + ], + [ + 8.695395339, + 2.613935111, + 9.374338224, + 1.646855845 + ], + [ + 5.417320869, + 1.567867346, + 6.653500622, + 1.0 + ] + ], + [ + [ + 7.340506412, + 4.009606228, + 5.572999657, + 1.0 + ], + [ + 14.950483683, + 8.315237832, + 10.029972649, + 2.063329306 + ], + [ + 10.744907439, + 6.099263778, + 7.401577546, + 1.542598749 + ], + [ + 9.878341716, + 5.678589015, + 6.932365772, + 1.447728515 + ], + [ + 7.315100148, + 4.598984654, + 5.693044268, + 1.192585267 + ], + [ + 8.57226602, + 5.97074561, + 7.628955727, + 1.536968005 + ], + [ + 9.271661489, + 6.525508826, + 8.480436866, + 1.691734517 + ], + [ + 9.665479771, + 6.748675737, + 9.428046049, + 1.819975686 + ], + [ + 5.386939289, + 3.80273607, + 5.812867538, + 1.0 + ] + ], + [ + [ + 6.369785527, + 6.410765998, + 5.046931717, + 1.0 + ], + [ + 11.486402503, + 11.630512518, + 9.26584573, + 1.804116133 + ], + [ + 10.690786378, + 10.785147342, + 8.50457581, + 1.688725176 + ], + [ + 9.782256013, + 9.926503381, + 7.743307825, + 1.553024829 + ], + [ + 7.249095485, + 7.578921205, + 5.692389532, + 1.184702841 + ], + [ + 8.468824823, + 9.165323643, + 7.226333995, + 1.438611537 + ], + [ + 8.975920959, + 9.800057859, + 7.816617083, + 1.53725251 + ], + [ + 11.66455025, + 13.056212626, + 10.600402541, + 2.066953192 + ], + [ + 5.686543274, + 6.338415051, + 5.130823317, + 1.0 + ] + ], + [ + [ + 8.53256603, + 6.621548481, + 4.976926675, + 1.0 + ], + [ + 15.210590138, + 12.163366052, + 5.278185973, + 1.838956055 + ], + [ + 12.602226911, + 10.733503109, + 4.458275248, + 1.634030042 + ], + [ + 11.059463597, + 9.738018674, + 4.129158753, + 1.489795606 + ], + [ + 6.401637592, + 7.07548052, + 3.353514008, + 1.113510452 + ], + [ + 6.219380513, + 9.345204695, + 4.853971081, + 1.511813939 + ], + [ + 6.384298895, + 10.229693955, + 5.394656579, + 1.663180288 + ], + [ + 5.839938761, + 10.900335249, + 6.167718206, + 1.788374223 + ], + [ + 3.574318404, + 6.09650204, + 5.585722932, + 1.0 + ] + ], + [ + [ + 8.644678704, + 8.943491432, + 4.204420904, + 1.0 + ], + [ + 15.586173264, + 16.390170224, + 5.783140838, + 1.83233098 + ], + [ + 12.922849316, + 14.589998935, + 5.143713293, + 1.644430735 + ], + [ + 11.295992173, + 13.270665307, + 4.757553683, + 1.50181912 + ], + [ + 6.296113826, + 9.727504149, + 3.831012348, + 1.127048223 + ], + [ + 5.45659866, + 12.630968986, + 5.451272604, + 1.497893949 + ], + [ + 5.414159906, + 13.76731165, + 6.03483902, + 1.63923417 + ], + [ + 4.965513149, + 15.31377506, + 7.133728928, + 1.841348119 + ], + [ + 2.803944722, + 8.324995377, + 4.921572862, + 1.0 + ] + ], + [ + [ + 9.281476811, + 11.421794208, + 3.378271054, + 1.0 + ], + [ + 17.05814398, + 20.956859407, + 5.33212102, + 1.833754941 + ], + [ + 13.860050561, + 18.624890994, + 4.872853317, + 1.642195262 + ], + [ + 11.961291017, + 16.930783535, + 4.534558986, + 1.499234845 + ], + [ + 5.982663967, + 12.379577383, + 3.769652856, + 1.124138481 + ], + [ + 4.008061792, + 16.097564779, + 5.520879872, + 1.500885843 + ], + [ + 3.63484774, + 17.55370252, + 6.141316076, + 1.644381031 + ], + [ + 2.468490904, + 19.391608447, + 7.103931708, + 1.82996217 + ], + [ + 1.490663753, + 10.596797358, + 4.334862614, + 1.0 + ] + ], + [ + [ + 9.607128726, + 13.031811609, + 2.85043222, + 1.0 + ], + [ + 16.872737671, + 23.813258269, + 5.316693701, + 1.833333333 + ], + [ + 13.625602069, + 21.18093543, + 4.947765286, + 1.642857143 + ], + [ + 11.745499113, + 19.265490562, + 4.602893002, + 1.5 + ], + [ + 5.810781112, + 14.131612715, + 3.820320007, + 1.125 + ], + [ + 3.749917185, + 18.41881001, + 5.584627018, + 1.5 + ], + [ + 3.345568162, + 20.092346149, + 6.209994735, + 1.642857143 + ], + [ + 2.066104471, + 22.24533132, + 7.134719656, + 1.833333333 + ], + [ + 0.723148806, + 12.091055439, + 3.941247793, + 1.0 + ] + ] + ], + "u": [ + 0.0, + 0.0, + 0.0, + 0.173383008, + 0.339364385, + 0.485613778, + 0.625575023, + 0.776367696, + 1.0, + 1.0, + 1.0 + ], + "v": [ + 0.0, + 0.0, + 0.0, + 0.25, + 0.3, + 0.35, + 0.65, + 0.7, + 0.75, + 1.0, + 1.0, + 1.0 + ] + }, + "dom1": [ + -50.0, + -50.0, + 50.0, + 50.0 + ], + "dom2": [ + 0.0, + 0.0, + 1.0, + 1.0 + ], + "fillet": false, + "curves": [], + "points": [ + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0531664726543821, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.0612832307366378, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 7.613939998327714, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 8.842983056938891, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "ops": [ + { + "op": "cpv", + "uvs": [ + [ + 1.3833952084840186, + -0.7676781158334842 + ], + [ + 0.4166666666666667, + 0.1989476282090778 + ] + ], + "i": 0, + "prev": null, + "step": null + }, + { + "op": "cpv", + "uvs": [ + [ + 2.369563112966075, + -0.39803980167660047 + ], + [ + 0.5, + 0.016243185941024425 + ] + ], + "i": 1, + "prev": 0, + "step": 0.1 + }, + { + "op": "cpv", + "uvs": [ + [ + 3.1762742998562308, + 0.2065397703174865 + ], + [ + 0.5833333333333334, + 0.00226579415512807 + ] + ], + "i": 2, + "prev": 1, + "step": 0.1 + }, + { + "op": "cpv", + "uvs": [ + [ + -2.3409175749312174, + 0.8331105926946138 + ], + [ + 0.6666666666666666, + 0.978986257323645 + ] + ], + "i": 3, + "prev": 2, + "step": 0.1 + }, + { + "op": "cpv", + "uvs": [ + [ + -2.826842512682212, + 1.9620143949700815 + ], + [ + 0.75, + 0.9976943271912726 + ] + ], + "i": 4, + "prev": 3, + "step": 0.1 + }, + { + "op": "fbsp", + "bbox": [ + [ + -20.0, + -20.0, + -20.0 + ], + [ + 40.0, + 40.0, + 40.0 + ] + ], + "use_edges": [ + true, + true + ] + }, + { + "op": "state" + } + ] + } + }, + { + "name": "shovel_plane_section_27", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf)", + "inputs": { + "a": { + "kind": "b_spline", + "p": 2, + "q": 2, + "net": [ + [ + [ + 7.47036934, + 0.705567127, + 5.757506574, + 1.0 + ], + [ + 12.741060292, + 1.209543646, + 9.338290118, + 1.714285714 + ], + [ + 12.034674434, + 1.142346777, + 8.831312248, + 1.653061224 + ], + [ + 11.330464815, + 1.075149908, + 8.342058417, + 1.571428571 + ], + [ + 7.225114315, + 0.683168171, + 5.508755778, + 1.071428571 + ], + [ + 9.061423838, + 0.844268357, + 7.887172321, + 1.461538462 + ], + [ + 9.869019894, + 0.916634216, + 8.814897008, + 1.615384615 + ], + [ + 10.904959364, + 1.006086459, + 10.268392134, + 1.833333333 + ], + [ + 5.98970602, + 0.548774432, + 5.93930917, + 1.0 + ] + ], + [ + [ + 7.974018725, + 1.838605157, + 6.339577598, + 1.0 + ], + [ + 14.354808413, + 3.195491094, + 9.65370527, + 1.828750521 + ], + [ + 12.128573508, + 2.978193013, + 8.202974675, + 1.616834127 + ], + [ + 10.422034921, + 2.608923009, + 7.156177691, + 1.423187022 + ], + [ + 6.540693938, + 1.70519632, + 5.173172872, + 1.045437556 + ], + [ + 9.059045576, + 2.551818558, + 8.624447061, + 1.620135193 + ], + [ + 9.111881372, + 2.594125607, + 8.966102567, + 1.658929677 + ], + [ + 8.695395339, + 2.613935111, + 9.374338224, + 1.646855845 + ], + [ + 5.417320869, + 1.567867346, + 6.653500622, + 1.0 + ] + ], + [ + [ + 7.340506412, + 4.009606228, + 5.572999657, + 1.0 + ], + [ + 14.950483683, + 8.315237832, + 10.029972649, + 2.063329306 + ], + [ + 10.744907439, + 6.099263778, + 7.401577546, + 1.542598749 + ], + [ + 9.878341716, + 5.678589015, + 6.932365772, + 1.447728515 + ], + [ + 7.315100148, + 4.598984654, + 5.693044268, + 1.192585267 + ], + [ + 8.57226602, + 5.97074561, + 7.628955727, + 1.536968005 + ], + [ + 9.271661489, + 6.525508826, + 8.480436866, + 1.691734517 + ], + [ + 9.665479771, + 6.748675737, + 9.428046049, + 1.819975686 + ], + [ + 5.386939289, + 3.80273607, + 5.812867538, + 1.0 + ] + ], + [ + [ + 6.369785527, + 6.410765998, + 5.046931717, + 1.0 + ], + [ + 11.486402503, + 11.630512518, + 9.26584573, + 1.804116133 + ], + [ + 10.690786378, + 10.785147342, + 8.50457581, + 1.688725176 + ], + [ + 9.782256013, + 9.926503381, + 7.743307825, + 1.553024829 + ], + [ + 7.249095485, + 7.578921205, + 5.692389532, + 1.184702841 + ], + [ + 8.468824823, + 9.165323643, + 7.226333995, + 1.438611537 + ], + [ + 8.975920959, + 9.800057859, + 7.816617083, + 1.53725251 + ], + [ + 11.66455025, + 13.056212626, + 10.600402541, + 2.066953192 + ], + [ + 5.686543274, + 6.338415051, + 5.130823317, + 1.0 + ] + ], + [ + [ + 8.53256603, + 6.621548481, + 4.976926675, + 1.0 + ], + [ + 15.210590138, + 12.163366052, + 5.278185973, + 1.838956055 + ], + [ + 12.602226911, + 10.733503109, + 4.458275248, + 1.634030042 + ], + [ + 11.059463597, + 9.738018674, + 4.129158753, + 1.489795606 + ], + [ + 6.401637592, + 7.07548052, + 3.353514008, + 1.113510452 + ], + [ + 6.219380513, + 9.345204695, + 4.853971081, + 1.511813939 + ], + [ + 6.384298895, + 10.229693955, + 5.394656579, + 1.663180288 + ], + [ + 5.839938761, + 10.900335249, + 6.167718206, + 1.788374223 + ], + [ + 3.574318404, + 6.09650204, + 5.585722932, + 1.0 + ] + ], + [ + [ + 8.644678704, + 8.943491432, + 4.204420904, + 1.0 + ], + [ + 15.586173264, + 16.390170224, + 5.783140838, + 1.83233098 + ], + [ + 12.922849316, + 14.589998935, + 5.143713293, + 1.644430735 + ], + [ + 11.295992173, + 13.270665307, + 4.757553683, + 1.50181912 + ], + [ + 6.296113826, + 9.727504149, + 3.831012348, + 1.127048223 + ], + [ + 5.45659866, + 12.630968986, + 5.451272604, + 1.497893949 + ], + [ + 5.414159906, + 13.76731165, + 6.03483902, + 1.63923417 + ], + [ + 4.965513149, + 15.31377506, + 7.133728928, + 1.841348119 + ], + [ + 2.803944722, + 8.324995377, + 4.921572862, + 1.0 + ] + ], + [ + [ + 9.281476811, + 11.421794208, + 3.378271054, + 1.0 + ], + [ + 17.05814398, + 20.956859407, + 5.33212102, + 1.833754941 + ], + [ + 13.860050561, + 18.624890994, + 4.872853317, + 1.642195262 + ], + [ + 11.961291017, + 16.930783535, + 4.534558986, + 1.499234845 + ], + [ + 5.982663967, + 12.379577383, + 3.769652856, + 1.124138481 + ], + [ + 4.008061792, + 16.097564779, + 5.520879872, + 1.500885843 + ], + [ + 3.63484774, + 17.55370252, + 6.141316076, + 1.644381031 + ], + [ + 2.468490904, + 19.391608447, + 7.103931708, + 1.82996217 + ], + [ + 1.490663753, + 10.596797358, + 4.334862614, + 1.0 + ] + ], + [ + [ + 9.607128726, + 13.031811609, + 2.85043222, + 1.0 + ], + [ + 16.872737671, + 23.813258269, + 5.316693701, + 1.833333333 + ], + [ + 13.625602069, + 21.18093543, + 4.947765286, + 1.642857143 + ], + [ + 11.745499113, + 19.265490562, + 4.602893002, + 1.5 + ], + [ + 5.810781112, + 14.131612715, + 3.820320007, + 1.125 + ], + [ + 3.749917185, + 18.41881001, + 5.584627018, + 1.5 + ], + [ + 3.345568162, + 20.092346149, + 6.209994735, + 1.642857143 + ], + [ + 2.066104471, + 22.24533132, + 7.134719656, + 1.833333333 + ], + [ + 0.723148806, + 12.091055439, + 3.941247793, + 1.0 + ] + ] + ], + "u": [ + 0.0, + 0.0, + 0.0, + 0.173383008, + 0.339364385, + 0.485613778, + 0.625575023, + 0.776367696, + 1.0, + 1.0, + 1.0 + ], + "v": [ + 0.0, + 0.0, + 0.0, + 0.25, + 0.3, + 0.35, + 0.65, + 0.7, + 0.75, + 1.0, + 1.0, + 1.0 + ] + }, + "b": { + "kind": "plane", + "o": [ + 6.873596442923077, + 9.190877093, + 5.445775034067729 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "domain": [ + -50.0, + -50.0, + 50.0, + 50.0 + ] + }, + "dom1": [ + 0.0, + 0.0, + 1.0, + 1.0 + ], + "dom2": [ + -50.0, + -50.0, + 50.0, + 50.0 + ], + "fillet": false, + "curves": [], + "points": [ + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.114205071880541, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.206608115818505, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 3.3438539018038806, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 5.413842914128113, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "ops": [ + { + "op": "members", + "trace_dir": 1.0, + "approx_tol": 0.001, + "start_tol": 0.001, + "step_tol": 1e-12, + "ang_tol": 0.3490658503988659 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.0, + 0.150033138286509 + ], + [ + 0.5148445885147384, + -8.48986382878898 + ] + ], + "i": 0, + "prev": null, + "step": null + }, + { + "op": "add_curve", + "i": 0 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.08333333333333333, + 0.09908337497758812 + ], + [ + 0.77401869508786, + -7.40622102570009 + ] + ], + "i": 1, + "prev": 0, + "step": null + }, + { + "op": "add_curve", + "i": 1 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.16666666666666666, + 0.05941626442098105 + ], + [ + 0.71060482555598, + -6.315660118847143 + ] + ], + "i": 2, + "prev": 1, + "step": null + }, + { + "op": "add_curve", + "i": 2 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.25, + 0.019461073767226014 + ], + [ + 0.422622091598571, + -5.215481077652523 + ] + ], + "i": 3, + "prev": 2, + "step": null + }, + { + "op": "add_curve", + "i": 3 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.3333333333333333, + 0.993465708103096 + ], + [ + -1.343295031875999, + -4.135485140547966 + ] + ], + "i": 4, + "prev": 3, + "step": null + }, + { + "op": "add_curve", + "i": 4 + }, + { + "op": "next", + "prev": 4, + "step": 0.05, + "next": 5, + "dev": -7.0, + "ang": -8.0 + }, + { + "op": "fbsp", + "bbox": [ + [ + -20.0, + -20.0, + -20.0 + ], + [ + 40.0, + 40.0, + 40.0 + ] + ], + "use_edges": [ + true, + true + ] + }, + { + "op": "state" + } + ] + } + }, + { + "name": "plane_shovel_section_27", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf)", + "inputs": { + "a": { + "kind": "plane", + "o": [ + 6.873596442923077, + 9.190877093, + 5.445775034067729 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "domain": [ + -50.0, + -50.0, + 50.0, + 50.0 + ] + }, + "b": { + "kind": "b_spline", + "p": 2, + "q": 2, + "net": [ + [ + [ + 7.47036934, + 0.705567127, + 5.757506574, + 1.0 + ], + [ + 12.741060292, + 1.209543646, + 9.338290118, + 1.714285714 + ], + [ + 12.034674434, + 1.142346777, + 8.831312248, + 1.653061224 + ], + [ + 11.330464815, + 1.075149908, + 8.342058417, + 1.571428571 + ], + [ + 7.225114315, + 0.683168171, + 5.508755778, + 1.071428571 + ], + [ + 9.061423838, + 0.844268357, + 7.887172321, + 1.461538462 + ], + [ + 9.869019894, + 0.916634216, + 8.814897008, + 1.615384615 + ], + [ + 10.904959364, + 1.006086459, + 10.268392134, + 1.833333333 + ], + [ + 5.98970602, + 0.548774432, + 5.93930917, + 1.0 + ] + ], + [ + [ + 7.974018725, + 1.838605157, + 6.339577598, + 1.0 + ], + [ + 14.354808413, + 3.195491094, + 9.65370527, + 1.828750521 + ], + [ + 12.128573508, + 2.978193013, + 8.202974675, + 1.616834127 + ], + [ + 10.422034921, + 2.608923009, + 7.156177691, + 1.423187022 + ], + [ + 6.540693938, + 1.70519632, + 5.173172872, + 1.045437556 + ], + [ + 9.059045576, + 2.551818558, + 8.624447061, + 1.620135193 + ], + [ + 9.111881372, + 2.594125607, + 8.966102567, + 1.658929677 + ], + [ + 8.695395339, + 2.613935111, + 9.374338224, + 1.646855845 + ], + [ + 5.417320869, + 1.567867346, + 6.653500622, + 1.0 + ] + ], + [ + [ + 7.340506412, + 4.009606228, + 5.572999657, + 1.0 + ], + [ + 14.950483683, + 8.315237832, + 10.029972649, + 2.063329306 + ], + [ + 10.744907439, + 6.099263778, + 7.401577546, + 1.542598749 + ], + [ + 9.878341716, + 5.678589015, + 6.932365772, + 1.447728515 + ], + [ + 7.315100148, + 4.598984654, + 5.693044268, + 1.192585267 + ], + [ + 8.57226602, + 5.97074561, + 7.628955727, + 1.536968005 + ], + [ + 9.271661489, + 6.525508826, + 8.480436866, + 1.691734517 + ], + [ + 9.665479771, + 6.748675737, + 9.428046049, + 1.819975686 + ], + [ + 5.386939289, + 3.80273607, + 5.812867538, + 1.0 + ] + ], + [ + [ + 6.369785527, + 6.410765998, + 5.046931717, + 1.0 + ], + [ + 11.486402503, + 11.630512518, + 9.26584573, + 1.804116133 + ], + [ + 10.690786378, + 10.785147342, + 8.50457581, + 1.688725176 + ], + [ + 9.782256013, + 9.926503381, + 7.743307825, + 1.553024829 + ], + [ + 7.249095485, + 7.578921205, + 5.692389532, + 1.184702841 + ], + [ + 8.468824823, + 9.165323643, + 7.226333995, + 1.438611537 + ], + [ + 8.975920959, + 9.800057859, + 7.816617083, + 1.53725251 + ], + [ + 11.66455025, + 13.056212626, + 10.600402541, + 2.066953192 + ], + [ + 5.686543274, + 6.338415051, + 5.130823317, + 1.0 + ] + ], + [ + [ + 8.53256603, + 6.621548481, + 4.976926675, + 1.0 + ], + [ + 15.210590138, + 12.163366052, + 5.278185973, + 1.838956055 + ], + [ + 12.602226911, + 10.733503109, + 4.458275248, + 1.634030042 + ], + [ + 11.059463597, + 9.738018674, + 4.129158753, + 1.489795606 + ], + [ + 6.401637592, + 7.07548052, + 3.353514008, + 1.113510452 + ], + [ + 6.219380513, + 9.345204695, + 4.853971081, + 1.511813939 + ], + [ + 6.384298895, + 10.229693955, + 5.394656579, + 1.663180288 + ], + [ + 5.839938761, + 10.900335249, + 6.167718206, + 1.788374223 + ], + [ + 3.574318404, + 6.09650204, + 5.585722932, + 1.0 + ] + ], + [ + [ + 8.644678704, + 8.943491432, + 4.204420904, + 1.0 + ], + [ + 15.586173264, + 16.390170224, + 5.783140838, + 1.83233098 + ], + [ + 12.922849316, + 14.589998935, + 5.143713293, + 1.644430735 + ], + [ + 11.295992173, + 13.270665307, + 4.757553683, + 1.50181912 + ], + [ + 6.296113826, + 9.727504149, + 3.831012348, + 1.127048223 + ], + [ + 5.45659866, + 12.630968986, + 5.451272604, + 1.497893949 + ], + [ + 5.414159906, + 13.76731165, + 6.03483902, + 1.63923417 + ], + [ + 4.965513149, + 15.31377506, + 7.133728928, + 1.841348119 + ], + [ + 2.803944722, + 8.324995377, + 4.921572862, + 1.0 + ] + ], + [ + [ + 9.281476811, + 11.421794208, + 3.378271054, + 1.0 + ], + [ + 17.05814398, + 20.956859407, + 5.33212102, + 1.833754941 + ], + [ + 13.860050561, + 18.624890994, + 4.872853317, + 1.642195262 + ], + [ + 11.961291017, + 16.930783535, + 4.534558986, + 1.499234845 + ], + [ + 5.982663967, + 12.379577383, + 3.769652856, + 1.124138481 + ], + [ + 4.008061792, + 16.097564779, + 5.520879872, + 1.500885843 + ], + [ + 3.63484774, + 17.55370252, + 6.141316076, + 1.644381031 + ], + [ + 2.468490904, + 19.391608447, + 7.103931708, + 1.82996217 + ], + [ + 1.490663753, + 10.596797358, + 4.334862614, + 1.0 + ] + ], + [ + [ + 9.607128726, + 13.031811609, + 2.85043222, + 1.0 + ], + [ + 16.872737671, + 23.813258269, + 5.316693701, + 1.833333333 + ], + [ + 13.625602069, + 21.18093543, + 4.947765286, + 1.642857143 + ], + [ + 11.745499113, + 19.265490562, + 4.602893002, + 1.5 + ], + [ + 5.810781112, + 14.131612715, + 3.820320007, + 1.125 + ], + [ + 3.749917185, + 18.41881001, + 5.584627018, + 1.5 + ], + [ + 3.345568162, + 20.092346149, + 6.209994735, + 1.642857143 + ], + [ + 2.066104471, + 22.24533132, + 7.134719656, + 1.833333333 + ], + [ + 0.723148806, + 12.091055439, + 3.941247793, + 1.0 + ] + ] + ], + "u": [ + 0.0, + 0.0, + 0.0, + 0.173383008, + 0.339364385, + 0.485613778, + 0.625575023, + 0.776367696, + 1.0, + 1.0, + 1.0 + ], + "v": [ + 0.0, + 0.0, + 0.0, + 0.25, + 0.3, + 0.35, + 0.65, + 0.7, + 0.75, + 1.0, + 1.0, + 1.0 + ] + }, + "dom1": [ + -50.0, + -50.0, + 50.0, + 50.0 + ], + "dom2": [ + 0.0, + 0.0, + 1.0, + 1.0 + ], + "fillet": false, + "curves": [], + "points": [ + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.114205071880541, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 2.206608115818505, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 3.3438539018038806, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 5.413842914128113, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "ops": [ + { + "op": "cpv", + "uvs": [ + [ + 0.5148445885147384, + -8.48986382878898 + ], + [ + 0.0, + 0.150033138286509 + ] + ], + "i": 0, + "prev": null, + "step": null + }, + { + "op": "cpv", + "uvs": [ + [ + 0.77401869508786, + -7.40622102570009 + ], + [ + 0.08333333333333333, + 0.09908337497758812 + ] + ], + "i": 1, + "prev": 0, + "step": 0.1 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.71060482555598, + -6.315660118847143 + ], + [ + 0.16666666666666666, + 0.05941626442098105 + ] + ], + "i": 2, + "prev": 1, + "step": 0.1 + }, + { + "op": "cpv", + "uvs": [ + [ + 0.422622091598571, + -5.215481077652523 + ], + [ + 0.25, + 0.019461073767226014 + ] + ], + "i": 3, + "prev": 2, + "step": 0.1 + }, + { + "op": "cpv", + "uvs": [ + [ + -1.343295031875999, + -4.135485140547966 + ], + [ + 0.3333333333333333, + 0.993465708103096 + ] + ], + "i": 4, + "prev": 3, + "step": 0.1 + }, + { + "op": "fbsp", + "bbox": [ + [ + -20.0, + -20.0, + -20.0 + ], + [ + 40.0, + 40.0, + 40.0 + ] + ], + "use_edges": [ + true, + true + ] + }, + { + "op": "state" + } + ] + } + }, + { + "name": "shovel_bpt_translated", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf)", + "inputs": { + "a": { + "kind": "b_spline", + "p": 2, + "q": 2, + "net": [ + [ + [ + 7.47036934, + 0.705567127, + 5.757506574, + 1.0 + ], + [ + 12.741060292, + 1.209543646, + 9.338290118, + 1.714285714 + ], + [ + 12.034674434, + 1.142346777, + 8.831312248, + 1.653061224 + ], + [ + 11.330464815, + 1.075149908, + 8.342058417, + 1.571428571 + ], + [ + 7.225114315, + 0.683168171, + 5.508755778, + 1.071428571 + ], + [ + 9.061423838, + 0.844268357, + 7.887172321, + 1.461538462 + ], + [ + 9.869019894, + 0.916634216, + 8.814897008, + 1.615384615 + ], + [ + 10.904959364, + 1.006086459, + 10.268392134, + 1.833333333 + ], + [ + 5.98970602, + 0.548774432, + 5.93930917, + 1.0 + ] + ], + [ + [ + 7.974018725, + 1.838605157, + 6.339577598, + 1.0 + ], + [ + 14.354808413, + 3.195491094, + 9.65370527, + 1.828750521 + ], + [ + 12.128573508, + 2.978193013, + 8.202974675, + 1.616834127 + ], + [ + 10.422034921, + 2.608923009, + 7.156177691, + 1.423187022 + ], + [ + 6.540693938, + 1.70519632, + 5.173172872, + 1.045437556 + ], + [ + 9.059045576, + 2.551818558, + 8.624447061, + 1.620135193 + ], + [ + 9.111881372, + 2.594125607, + 8.966102567, + 1.658929677 + ], + [ + 8.695395339, + 2.613935111, + 9.374338224, + 1.646855845 + ], + [ + 5.417320869, + 1.567867346, + 6.653500622, + 1.0 + ] + ], + [ + [ + 7.340506412, + 4.009606228, + 5.572999657, + 1.0 + ], + [ + 14.950483683, + 8.315237832, + 10.029972649, + 2.063329306 + ], + [ + 10.744907439, + 6.099263778, + 7.401577546, + 1.542598749 + ], + [ + 9.878341716, + 5.678589015, + 6.932365772, + 1.447728515 + ], + [ + 7.315100148, + 4.598984654, + 5.693044268, + 1.192585267 + ], + [ + 8.57226602, + 5.97074561, + 7.628955727, + 1.536968005 + ], + [ + 9.271661489, + 6.525508826, + 8.480436866, + 1.691734517 + ], + [ + 9.665479771, + 6.748675737, + 9.428046049, + 1.819975686 + ], + [ + 5.386939289, + 3.80273607, + 5.812867538, + 1.0 + ] + ], + [ + [ + 6.369785527, + 6.410765998, + 5.046931717, + 1.0 + ], + [ + 11.486402503, + 11.630512518, + 9.26584573, + 1.804116133 + ], + [ + 10.690786378, + 10.785147342, + 8.50457581, + 1.688725176 + ], + [ + 9.782256013, + 9.926503381, + 7.743307825, + 1.553024829 + ], + [ + 7.249095485, + 7.578921205, + 5.692389532, + 1.184702841 + ], + [ + 8.468824823, + 9.165323643, + 7.226333995, + 1.438611537 + ], + [ + 8.975920959, + 9.800057859, + 7.816617083, + 1.53725251 + ], + [ + 11.66455025, + 13.056212626, + 10.600402541, + 2.066953192 + ], + [ + 5.686543274, + 6.338415051, + 5.130823317, + 1.0 + ] + ], + [ + [ + 8.53256603, + 6.621548481, + 4.976926675, + 1.0 + ], + [ + 15.210590138, + 12.163366052, + 5.278185973, + 1.838956055 + ], + [ + 12.602226911, + 10.733503109, + 4.458275248, + 1.634030042 + ], + [ + 11.059463597, + 9.738018674, + 4.129158753, + 1.489795606 + ], + [ + 6.401637592, + 7.07548052, + 3.353514008, + 1.113510452 + ], + [ + 6.219380513, + 9.345204695, + 4.853971081, + 1.511813939 + ], + [ + 6.384298895, + 10.229693955, + 5.394656579, + 1.663180288 + ], + [ + 5.839938761, + 10.900335249, + 6.167718206, + 1.788374223 + ], + [ + 3.574318404, + 6.09650204, + 5.585722932, + 1.0 + ] + ], + [ + [ + 8.644678704, + 8.943491432, + 4.204420904, + 1.0 + ], + [ + 15.586173264, + 16.390170224, + 5.783140838, + 1.83233098 + ], + [ + 12.922849316, + 14.589998935, + 5.143713293, + 1.644430735 + ], + [ + 11.295992173, + 13.270665307, + 4.757553683, + 1.50181912 + ], + [ + 6.296113826, + 9.727504149, + 3.831012348, + 1.127048223 + ], + [ + 5.45659866, + 12.630968986, + 5.451272604, + 1.497893949 + ], + [ + 5.414159906, + 13.76731165, + 6.03483902, + 1.63923417 + ], + [ + 4.965513149, + 15.31377506, + 7.133728928, + 1.841348119 + ], + [ + 2.803944722, + 8.324995377, + 4.921572862, + 1.0 + ] + ], + [ + [ + 9.281476811, + 11.421794208, + 3.378271054, + 1.0 + ], + [ + 17.05814398, + 20.956859407, + 5.33212102, + 1.833754941 + ], + [ + 13.860050561, + 18.624890994, + 4.872853317, + 1.642195262 + ], + [ + 11.961291017, + 16.930783535, + 4.534558986, + 1.499234845 + ], + [ + 5.982663967, + 12.379577383, + 3.769652856, + 1.124138481 + ], + [ + 4.008061792, + 16.097564779, + 5.520879872, + 1.500885843 + ], + [ + 3.63484774, + 17.55370252, + 6.141316076, + 1.644381031 + ], + [ + 2.468490904, + 19.391608447, + 7.103931708, + 1.82996217 + ], + [ + 1.490663753, + 10.596797358, + 4.334862614, + 1.0 + ] + ], + [ + [ + 9.607128726, + 13.031811609, + 2.85043222, + 1.0 + ], + [ + 16.872737671, + 23.813258269, + 5.316693701, + 1.833333333 + ], + [ + 13.625602069, + 21.18093543, + 4.947765286, + 1.642857143 + ], + [ + 11.745499113, + 19.265490562, + 4.602893002, + 1.5 + ], + [ + 5.810781112, + 14.131612715, + 3.820320007, + 1.125 + ], + [ + 3.749917185, + 18.41881001, + 5.584627018, + 1.5 + ], + [ + 3.345568162, + 20.092346149, + 6.209994735, + 1.642857143 + ], + [ + 2.066104471, + 22.24533132, + 7.134719656, + 1.833333333 + ], + [ + 0.723148806, + 12.091055439, + 3.941247793, + 1.0 + ] + ] + ], + "u": [ + 0.0, + 0.0, + 0.0, + 0.173383008, + 0.339364385, + 0.485613778, + 0.625575023, + 0.776367696, + 1.0, + 1.0, + 1.0 + ], + "v": [ + 0.0, + 0.0, + 0.0, + 0.25, + 0.3, + 0.35, + 0.65, + 0.7, + 0.75, + 1.0, + 1.0, + 1.0 + ] + }, + "b": { + "kind": "b_spline", + "p": 2, + "q": 2, + "net": [ + [ + [ + 107.47036934, + 0.705567127, + 5.757506574, + 1.0 + ], + [ + 184.169631692, + 1.209543646, + 9.338290118, + 1.714285714 + ], + [ + 177.340796834, + 1.142346777, + 8.831312248, + 1.653061224 + ], + [ + 168.47332191499999, + 1.075149908, + 8.342058417, + 1.571428571 + ], + [ + 114.367971415, + 0.683168171, + 5.508755778, + 1.071428571 + ], + [ + 155.215270038, + 0.844268357, + 7.887172321, + 1.461538462 + ], + [ + 171.40748139399997, + 0.916634216, + 8.814897008, + 1.615384615 + ], + [ + 194.238292664, + 1.006086459, + 10.268392134, + 1.833333333 + ], + [ + 105.98970602, + 0.548774432, + 5.93930917, + 1.0 + ] + ], + [ + [ + 107.974018725, + 1.838605157, + 6.339577598, + 1.0 + ], + [ + 197.229860513, + 3.195491094, + 9.65370527, + 1.828750521 + ], + [ + 173.81198620799998, + 2.978193013, + 8.202974675, + 1.616834127 + ], + [ + 152.740737121, + 2.608923009, + 7.156177691, + 1.423187022 + ], + [ + 111.084449538, + 1.70519632, + 5.173172872, + 1.045437556 + ], + [ + 171.072564876, + 2.551818558, + 8.624447061, + 1.620135193 + ], + [ + 175.00484907199998, + 2.594125607, + 8.966102567, + 1.658929677 + ], + [ + 173.380979839, + 2.613935111, + 9.374338224, + 1.646855845 + ], + [ + 105.417320869, + 1.567867346, + 6.653500622, + 1.0 + ] + ], + [ + [ + 107.340506412, + 4.009606228, + 5.572999657, + 1.0 + ], + [ + 221.28341428299998, + 8.315237832, + 10.029972649, + 2.063329306 + ], + [ + 165.004782339, + 6.099263778, + 7.401577546, + 1.542598749 + ], + [ + 154.651193216, + 5.678589015, + 6.932365772, + 1.447728515 + ], + [ + 126.57362684799999, + 4.598984654, + 5.693044268, + 1.192585267 + ], + [ + 162.26906652, + 5.97074561, + 7.628955727, + 1.536968005 + ], + [ + 178.44511318899998, + 6.525508826, + 8.480436866, + 1.691734517 + ], + [ + 191.663048371, + 6.748675737, + 9.428046049, + 1.819975686 + ], + [ + 105.386939289, + 3.80273607, + 5.812867538, + 1.0 + ] + ], + [ + [ + 106.369785527, + 6.410765998, + 5.046931717, + 1.0 + ], + [ + 191.898015803, + 11.630512518, + 9.26584573, + 1.804116133 + ], + [ + 179.563303978, + 10.785147342, + 8.50457581, + 1.688725176 + ], + [ + 165.084738913, + 9.926503381, + 7.743307825, + 1.553024829 + ], + [ + 125.719379585, + 7.578921205, + 5.692389532, + 1.184702841 + ], + [ + 152.32997852300002, + 9.165323643, + 7.226333995, + 1.438611537 + ], + [ + 162.70117195900002, + 9.800057859, + 7.816617083, + 1.53725251 + ], + [ + 218.35986945000002, + 13.056212626, + 10.600402541, + 2.066953192 + ], + [ + 105.686543274, + 6.338415051, + 5.130823317, + 1.0 + ] + ], + [ + [ + 108.53256603, + 6.621548481, + 4.976926675, + 1.0 + ], + [ + 199.10619563799997, + 12.163366052, + 5.278185973, + 1.838956055 + ], + [ + 176.005231111, + 10.733503109, + 4.458275248, + 1.634030042 + ], + [ + 160.03902419699997, + 9.738018674, + 4.129158753, + 1.489795606 + ], + [ + 117.75268279200002, + 7.07548052, + 3.353514008, + 1.113510452 + ], + [ + 157.40077441300002, + 9.345204695, + 4.853971081, + 1.511813939 + ], + [ + 172.702327695, + 10.229693955, + 5.394656579, + 1.663180288 + ], + [ + 184.677361061, + 10.900335249, + 6.167718206, + 1.788374223 + ], + [ + 103.574318404, + 6.09650204, + 5.585722932, + 1.0 + ] + ], + [ + [ + 108.644678704, + 8.943491432, + 4.204420904, + 1.0 + ], + [ + 198.819271264, + 16.390170224, + 5.783140838, + 1.83233098 + ], + [ + 177.365922816, + 14.589998935, + 5.143713293, + 1.644430735 + ], + [ + 161.47790417299998, + 13.270665307, + 4.757553683, + 1.50181912 + ], + [ + 119.000936126, + 9.727504149, + 3.831012348, + 1.127048223 + ], + [ + 155.24599356000002, + 12.630968986, + 5.451272604, + 1.497893949 + ], + [ + 169.337576906, + 13.76731165, + 6.03483902, + 1.63923417 + ], + [ + 189.10032504900002, + 15.31377506, + 7.133728928, + 1.841348119 + ], + [ + 102.803944722, + 8.324995377, + 4.921572862, + 1.0 + ] + ], + [ + [ + 109.281476811, + 11.421794208, + 3.378271054, + 1.0 + ], + [ + 200.43363808, + 20.956859407, + 5.33212102, + 1.833754941 + ], + [ + 178.079576761, + 18.624890994, + 4.872853317, + 1.642195262 + ], + [ + 161.884775517, + 16.930783535, + 4.534558986, + 1.499234845 + ], + [ + 118.39651206699999, + 12.379577383, + 3.769652856, + 1.124138481 + ], + [ + 154.09664609200001, + 16.097564779, + 5.520879872, + 1.500885843 + ], + [ + 168.07295084, + 17.55370252, + 6.141316076, + 1.644381031 + ], + [ + 185.464707904, + 19.391608447, + 7.103931708, + 1.82996217 + ], + [ + 101.490663753, + 10.596797358, + 4.334862614, + 1.0 + ] + ], + [ + [ + 109.607128726, + 13.031811609, + 2.85043222, + 1.0 + ], + [ + 200.206070971, + 23.813258269, + 5.316693701, + 1.833333333 + ], + [ + 177.911316369, + 21.18093543, + 4.947765286, + 1.642857143 + ], + [ + 161.745499113, + 19.265490562, + 4.602893002, + 1.5 + ], + [ + 118.310781112, + 14.131612715, + 3.820320007, + 1.125 + ], + [ + 153.749917185, + 18.41881001, + 5.584627018, + 1.5 + ], + [ + 167.631282462, + 20.092346149, + 6.209994735, + 1.642857143 + ], + [ + 185.39943777099998, + 22.24533132, + 7.134719656, + 1.833333333 + ], + [ + 100.723148806, + 12.091055439, + 3.941247793, + 1.0 + ] + ] + ], + "u": [ + 0.0, + 0.0, + 0.0, + 0.173383008, + 0.339364385, + 0.485613778, + 0.625575023, + 0.776367696, + 1.0, + 1.0, + 1.0 + ], + "v": [ + 0.0, + 0.0, + 0.0, + 0.25, + 0.3, + 0.35, + 0.65, + 0.7, + 0.75, + 1.0, + 1.0, + 1.0 + ] + }, + "dom1": [ + 0.0, + 0.0, + 1.0, + 1.0 + ], + "dom2": [ + 0.0, + 0.0, + 1.0, + 1.0 + ], + "fillet": false, + "curves": [], + "points": [ + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "ops": [ + { + "op": "cpv", + "uvs": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "i": 0, + "prev": null, + "step": null + }, + { + "op": "fbsp", + "bbox": [ + [ + -20.0, + -20.0, + -20.0 + ], + [ + 40.0, + 40.0, + 40.0 + ] + ], + "use_edges": [ + true, + true + ] + }, + { + "op": "state" + } + ] + } + }, + { + "name": "shovel_bpt_self", + "upstream_ref": "tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf)", + "inputs": { + "a": { + "kind": "b_spline", + "p": 2, + "q": 2, + "net": [ + [ + [ + 7.47036934, + 0.705567127, + 5.757506574, + 1.0 + ], + [ + 12.741060292, + 1.209543646, + 9.338290118, + 1.714285714 + ], + [ + 12.034674434, + 1.142346777, + 8.831312248, + 1.653061224 + ], + [ + 11.330464815, + 1.075149908, + 8.342058417, + 1.571428571 + ], + [ + 7.225114315, + 0.683168171, + 5.508755778, + 1.071428571 + ], + [ + 9.061423838, + 0.844268357, + 7.887172321, + 1.461538462 + ], + [ + 9.869019894, + 0.916634216, + 8.814897008, + 1.615384615 + ], + [ + 10.904959364, + 1.006086459, + 10.268392134, + 1.833333333 + ], + [ + 5.98970602, + 0.548774432, + 5.93930917, + 1.0 + ] + ], + [ + [ + 7.974018725, + 1.838605157, + 6.339577598, + 1.0 + ], + [ + 14.354808413, + 3.195491094, + 9.65370527, + 1.828750521 + ], + [ + 12.128573508, + 2.978193013, + 8.202974675, + 1.616834127 + ], + [ + 10.422034921, + 2.608923009, + 7.156177691, + 1.423187022 + ], + [ + 6.540693938, + 1.70519632, + 5.173172872, + 1.045437556 + ], + [ + 9.059045576, + 2.551818558, + 8.624447061, + 1.620135193 + ], + [ + 9.111881372, + 2.594125607, + 8.966102567, + 1.658929677 + ], + [ + 8.695395339, + 2.613935111, + 9.374338224, + 1.646855845 + ], + [ + 5.417320869, + 1.567867346, + 6.653500622, + 1.0 + ] + ], + [ + [ + 7.340506412, + 4.009606228, + 5.572999657, + 1.0 + ], + [ + 14.950483683, + 8.315237832, + 10.029972649, + 2.063329306 + ], + [ + 10.744907439, + 6.099263778, + 7.401577546, + 1.542598749 + ], + [ + 9.878341716, + 5.678589015, + 6.932365772, + 1.447728515 + ], + [ + 7.315100148, + 4.598984654, + 5.693044268, + 1.192585267 + ], + [ + 8.57226602, + 5.97074561, + 7.628955727, + 1.536968005 + ], + [ + 9.271661489, + 6.525508826, + 8.480436866, + 1.691734517 + ], + [ + 9.665479771, + 6.748675737, + 9.428046049, + 1.819975686 + ], + [ + 5.386939289, + 3.80273607, + 5.812867538, + 1.0 + ] + ], + [ + [ + 6.369785527, + 6.410765998, + 5.046931717, + 1.0 + ], + [ + 11.486402503, + 11.630512518, + 9.26584573, + 1.804116133 + ], + [ + 10.690786378, + 10.785147342, + 8.50457581, + 1.688725176 + ], + [ + 9.782256013, + 9.926503381, + 7.743307825, + 1.553024829 + ], + [ + 7.249095485, + 7.578921205, + 5.692389532, + 1.184702841 + ], + [ + 8.468824823, + 9.165323643, + 7.226333995, + 1.438611537 + ], + [ + 8.975920959, + 9.800057859, + 7.816617083, + 1.53725251 + ], + [ + 11.66455025, + 13.056212626, + 10.600402541, + 2.066953192 + ], + [ + 5.686543274, + 6.338415051, + 5.130823317, + 1.0 + ] + ], + [ + [ + 8.53256603, + 6.621548481, + 4.976926675, + 1.0 + ], + [ + 15.210590138, + 12.163366052, + 5.278185973, + 1.838956055 + ], + [ + 12.602226911, + 10.733503109, + 4.458275248, + 1.634030042 + ], + [ + 11.059463597, + 9.738018674, + 4.129158753, + 1.489795606 + ], + [ + 6.401637592, + 7.07548052, + 3.353514008, + 1.113510452 + ], + [ + 6.219380513, + 9.345204695, + 4.853971081, + 1.511813939 + ], + [ + 6.384298895, + 10.229693955, + 5.394656579, + 1.663180288 + ], + [ + 5.839938761, + 10.900335249, + 6.167718206, + 1.788374223 + ], + [ + 3.574318404, + 6.09650204, + 5.585722932, + 1.0 + ] + ], + [ + [ + 8.644678704, + 8.943491432, + 4.204420904, + 1.0 + ], + [ + 15.586173264, + 16.390170224, + 5.783140838, + 1.83233098 + ], + [ + 12.922849316, + 14.589998935, + 5.143713293, + 1.644430735 + ], + [ + 11.295992173, + 13.270665307, + 4.757553683, + 1.50181912 + ], + [ + 6.296113826, + 9.727504149, + 3.831012348, + 1.127048223 + ], + [ + 5.45659866, + 12.630968986, + 5.451272604, + 1.497893949 + ], + [ + 5.414159906, + 13.76731165, + 6.03483902, + 1.63923417 + ], + [ + 4.965513149, + 15.31377506, + 7.133728928, + 1.841348119 + ], + [ + 2.803944722, + 8.324995377, + 4.921572862, + 1.0 + ] + ], + [ + [ + 9.281476811, + 11.421794208, + 3.378271054, + 1.0 + ], + [ + 17.05814398, + 20.956859407, + 5.33212102, + 1.833754941 + ], + [ + 13.860050561, + 18.624890994, + 4.872853317, + 1.642195262 + ], + [ + 11.961291017, + 16.930783535, + 4.534558986, + 1.499234845 + ], + [ + 5.982663967, + 12.379577383, + 3.769652856, + 1.124138481 + ], + [ + 4.008061792, + 16.097564779, + 5.520879872, + 1.500885843 + ], + [ + 3.63484774, + 17.55370252, + 6.141316076, + 1.644381031 + ], + [ + 2.468490904, + 19.391608447, + 7.103931708, + 1.82996217 + ], + [ + 1.490663753, + 10.596797358, + 4.334862614, + 1.0 + ] + ], + [ + [ + 9.607128726, + 13.031811609, + 2.85043222, + 1.0 + ], + [ + 16.872737671, + 23.813258269, + 5.316693701, + 1.833333333 + ], + [ + 13.625602069, + 21.18093543, + 4.947765286, + 1.642857143 + ], + [ + 11.745499113, + 19.265490562, + 4.602893002, + 1.5 + ], + [ + 5.810781112, + 14.131612715, + 3.820320007, + 1.125 + ], + [ + 3.749917185, + 18.41881001, + 5.584627018, + 1.5 + ], + [ + 3.345568162, + 20.092346149, + 6.209994735, + 1.642857143 + ], + [ + 2.066104471, + 22.24533132, + 7.134719656, + 1.833333333 + ], + [ + 0.723148806, + 12.091055439, + 3.941247793, + 1.0 + ] + ] + ], + "u": [ + 0.0, + 0.0, + 0.0, + 0.173383008, + 0.339364385, + 0.485613778, + 0.625575023, + 0.776367696, + 1.0, + 1.0, + 1.0 + ], + "v": [ + 0.0, + 0.0, + 0.0, + 0.25, + 0.3, + 0.35, + 0.65, + 0.7, + 0.75, + 1.0, + 1.0, + 1.0 + ] + }, + "b": null, + "dom1": [ + 0.0, + 0.0, + 1.0, + 1.0 + ], + "dom2": [ + 0.0, + 0.0, + 1.0, + 1.0 + ], + "fillet": false, + "curves": [], + "points": [ + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1.0, + 5.0, + 5.0, + 5.0, + 5.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "ops": [ + { + "op": "cpv", + "uvs": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "i": 0, + "prev": null, + "step": null + }, + { + "op": "fbsp", + "bbox": [ + [ + -20.0, + -20.0, + -20.0 + ], + [ + 40.0, + 40.0, + 40.0 + ] + ], + "use_edges": [ + true, + true + ] + }, + { + "op": "state" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/harness/cpp/shim/intersect_surface_intersector_p3.cpp b/harness/cpp/shim/intersect_surface_intersector_p3.cpp new file mode 100644 index 0000000000..25474e5fc6 --- /dev/null +++ b/harness/cpp/shim/intersect_surface_intersector_p3.cpp @@ -0,0 +1,716 @@ +// SPDX-License-Identifier: Apache-2.0 +// difftest shim for unit `intersect.surface_intersector_p3`: the SmSurfaceIntersector members +// FindBoundaryStartPoints, ComputeNextPoint, TestPoint (with the file function sm_UpdateTsectPoint) +// and SplitSpan (source/SMLib/src/SmSurfaceIntersector.cpp), run on a real SmSurfaceIntersector +// over SmPlane / SmBSplineSurface / SmCurveBoundedSurface objects (a derived class only exposes the +// protected state). +// +// One entry point, sc_intersect_surface_intersector_p3_run(in, n_in, out, cap, out_len). `in` is +// a program (layout in crates/solidcore-ffi/src/units/intersect_surface_intersector_p3.rs); +// every read is bounds checked here (a bad program is SC_ERR_ARG). Ops whose upstream behaviour +// is undefined report REJECTED (see the op cases). +#include "sc_shim.h" + +#include "StdAfx.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace +{ +enum Op : int32_t +{ + OP_STATE = 1, + OP_POINT = 2, + OP_ADD_CURVE = 3, + OP_ADD_START = 4, + OP_ADD_THROUGH = 5, + OP_CPV = 6, + OP_MEMBERS = 7, + OP_ENDS = 8, + OP_EXT = 9, + OP_TEST = 10, + OP_NEXT = 11, + OP_SPLIT = 12, + OP_FBSP = 13, + OP_LAST = 13, +}; + +// Op status of an op the shim does not run. +const double REJECTED = -2.0; + +struct Bad : std::runtime_error +{ + Bad() : std::runtime_error("bad program") {} +}; + +struct Rd +{ + const double* in; + int64_t n; + int64_t at; + double num() + { + if (at >= n) + throw Bad(); + return in[at++]; + } + int64_t idx(int64_t lo, int64_t hi) + { + double d = num(); + if (!(d >= (double)lo && d <= (double)hi) || d != (double)(int64_t)d) + throw Bad(); + return (int64_t)d; + } + bool flag() { return idx(0, 1) != 0; } + SmVector3d vec() + { + double x = num(); + double y = num(); + double z = num(); + return SmVector3d(x, y, z); + } + SmPoint2d uv() + { + double x = num(); + double y = num(); + return SmPoint2d(x, y); + } + SmExtent2d dom4() + { + double a = num(); + double b = num(); + double c = num(); + double d = num(); + return SmExtent2d(a, b, c, d); + } +}; + +double st(SmStatus s) +{ + return s == SM_SUCCESS ? 0.0 : (double)s; +} + +double flg(SmBoolean b) +{ + return b ? 1.0 : 0.0; +} + +void put_vec(std::vector& o, const SmVector3d& v) +{ + o.push_back(v.x); + o.push_back(v.y); + o.push_back(v.z); +} + +void put_uv(std::vector& o, const SmVector2d& v) +{ + o.push_back(v.x); + o.push_back(v.y); +} + +// `0 o x y scale dom` (SmPlane) or `1 p q nu nv net(x y z w) u v` (SmBSplineSurface). +SmSurface* read_basic_surface(Rd& rd, const SmContext& ctx) +{ + int64_t kind = rd.idx(0, 1); + if (kind == 0) + { + SmPoint3d o = rd.vec(); + SmVector3d x = rd.vec(); + SmVector3d y = rd.vec(); + SmVector2d s = rd.uv(); + SmExtent2d d = rd.dom4(); + return new (ctx) SmPlane(o, x, y, s, d, &ctx); + } + gw_DEGREE p = (gw_DEGREE)rd.idx(1, 8); + gw_DEGREE q = (gw_DEGREE)rd.idx(1, 8); + gw_INDEX nu = (gw_INDEX)rd.idx(2, 17); + gw_INDEX nv = (gw_INDEX)rd.idx(2, 17); + if (p >= nu || q >= nv) + throw Bad(); + gw_INDEX n = nu - 1; + gw_INDEX m = nv - 1; + gw_INDEX r = n + p + 1; + gw_INDEX s = m + q + 1; + std::vector v; + for (int64_t i = 0; i < 4 * (int64_t)nu * nv + r + 1 + s + 1; i++) + v.push_back(rd.num()); + gw_SURFACE* sur = sm_AllocateNurbSurface(n, m, p, q, r, s); + size_t k = 0; + for (gw_INDEX i = 0; i <= n; i++) + for (gw_INDEX j = 0; j <= m; j++) + { + sur->net->Pw[i][j].x = v[k++]; + sur->net->Pw[i][j].y = v[k++]; + sur->net->Pw[i][j].z = v[k++]; + sur->net->Pw[i][j].w = v[k++]; + } + for (gw_INDEX i = 0; i <= r; i++) + sur->knu->U[i] = v[k++]; + for (gw_INDEX i = 0; i <= s; i++) + sur->knv->U[i] = v[k++]; + return new (ctx) SmBSplineSurface(sur, FALSE, &ctx); +} + +// A basic surface (`0 ..` / `1 ..`) or `3 basic`: an SmCurveBoundedSurface (implicit outer, no +// boundary curves) over it, which owns (deletes) its basis. (`2` marks B = A.) +SmSurface* read_surface(Rd& rd, const SmContext& ctx) +{ + if (rd.at < rd.n && rd.in[rd.at] == 3.0) + { + rd.at++; + SmSurface* basis = read_basic_surface(rd, ctx); + SmTArray c3d(ctx), cuv(ctx); + return new (ctx) SmCurveBoundedSurface(*basis, &c3d, &cuv, TRUE); + } + return read_basic_surface(rd, ctx); +} + +// `0 a b` (SmLine::CreateLineSegment, dim 3) or `1 dim p ncp cpts(x y z w) knots`. +SmCurve* read_curve(Rd& rd, const SmContext& ctx) +{ + int64_t kind = rd.idx(0, 1); + if (kind == 0) + { + SmPoint3d a = rd.vec(); + SmPoint3d b = rd.vec(); + SmLine* l = NULL; + if (SmLine::CreateLineSegment(ctx, 3, a, b, l) != SM_SUCCESS || l == NULL) + throw Bad(); + return l; + } + ULONG dim = (ULONG)rd.idx(2, 3); + int64_t p = rd.idx(1, 8); + int64_t ncp = rd.idx(2, 33); + if (p >= ncp) + throw Bad(); + int64_t n = ncp - 1; + int64_t m = n + p + 1; + std::vector v; + for (int64_t i = 0; i < 4 * ncp + m + 1; i++) + v.push_back(rd.num()); + gw_CURVE* cur = sm_AllocateNurbCurve((gw_INDEX)n, (gw_DEGREE)p, (gw_INDEX)m); + for (int64_t i = 0; i <= n; i++) + { + cur->pol->Pw[i].x = v[4 * i]; + cur->pol->Pw[i].y = v[4 * i + 1]; + cur->pol->Pw[i].z = v[4 * i + 2]; + cur->pol->Pw[i].w = v[4 * i + 3]; + } + for (int64_t i = 0; i <= m; i++) + cur->knt->U[i] = v[4 * ncp + i]; + SmBSplineCurve* c = new (ctx) SmBSplineCurve(dim, (ULONG)cur->pol->n, (ULONG)cur->knt->m, (short)cur->p, + cur->pol->Pw, cur->knt->U, &ctx); + smos_Free(cur); + return c; +} + +// A point: `type ptype[4] uv0 duv0 uv1 duv1 srf0[3][3] srf1[3][3] crv_pos crv_deriv param +// angle deviation user[4]` (80 values). +void read_point(Rd& rd, SmTsectPnt& t) +{ + t.m_ePointType = (SmIntersectionPointType)rd.idx(0, 7); + for (int s = 0; s < 2; s++) + for (int d = 0; d < 2; d++) + t.m_eUVParamType[s][d] = (SmExtentPointType)rd.idx(0, 5); + for (int s = 0; s < 2; s++) + for (int d = 0; d < 2; d++) + t.m_vUVCurvePV[s][d] = rd.uv(); + for (int s = 0; s < 2; s++) + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + t.m_vSurfacePV[s][i][j] = rd.vec(); + t.m_v3DCurvePV[0] = rd.vec(); + t.m_v3DCurvePV[1] = rd.vec(); + t.m_dCurveParameter = rd.num(); + t.m_dTangentPlaneAngleRad = rd.num(); + t.m_dDeviation = rd.num(); + for (int i = 0; i < SM_MAX_USER_DOUBLES; i++) + t.m_adUserDoubles[i] = rd.num(); +} + +void put_point(std::vector& o, const SmTsectPnt& t) +{ + o.push_back((double)t.m_ePointType); + for (int s = 0; s < 2; s++) + for (int d = 0; d < 2; d++) + o.push_back((double)t.m_eUVParamType[s][d]); + for (int s = 0; s < 2; s++) + for (int d = 0; d < 2; d++) + put_uv(o, t.m_vUVCurvePV[s][d]); + for (int s = 0; s < 2; s++) + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + put_vec(o, t.m_vSurfacePV[s][i][j]); + put_vec(o, t.m_v3DCurvePV[0]); + put_vec(o, t.m_v3DCurvePV[1]); + o.push_back(t.m_dCurveParameter); + o.push_back(t.m_dTangentPlaneAngleRad); + o.push_back(t.m_dDeviation); + for (int i = 0; i < SM_MAX_USER_DOUBLES; i++) + o.push_back(t.m_adUserDoubles[i]); +} + +// Reads the protected STEP flags through pointers to members named in a derived class. +struct PeekC : SmBSplineCurve +{ + static SmKnotType SmBSplineCurve::*kt() { return &PeekC::m_eKnotType; } + static SmBSplineCurveForm SmBSplineCurve::*form() { return &PeekC::m_eBSplineCurveForm; } +}; + +// `type dim knot_type form has [n p m cpts(x y z w) knots] ivl[2]` of a B-spline curve. +void put_bspline(std::vector& o, const SmCurve* c) +{ + o.push_back((double)c->GetType()); + o.push_back((double)c->GetDim()); + if (!c->IsKindOf(SmBSplineCurve_TYPE)) + throw Bad(); + const SmBSplineCurve* b = (const SmBSplineCurve*)c; + o.push_back((double)(b->*PeekC::kt())); + o.push_back((double)(b->*PeekC::form())); + const gw_CURVE* g = b->GetGwNurbPointer(); + o.push_back(g ? 1.0 : 0.0); + if (g) + { + o.push_back((double)g->pol->n); + o.push_back((double)g->p); + o.push_back((double)g->knt->m); + for (gw_INDEX i = 0; i <= g->pol->n; i++) + { + o.push_back(g->pol->Pw[i].x); + o.push_back(g->pol->Pw[i].y); + o.push_back(g->pol->Pw[i].z); + o.push_back(g->pol->Pw[i].w); + } + for (gw_INDEX i = 0; i <= g->knt->m; i++) + o.push_back(g->knt->U[i]); + } + SmExtent1d ivl = c->GetNaturalInterval(); + o.push_back(ivl.GetMin()); + o.push_back(ivl.GetMax()); +} + +// `count curves..` from index `from` of an array. +void put_curves(std::vector& o, const SmTArray& a, ULONG from) +{ + o.push_back((double)(a.GetSize() - from)); + for (ULONG i = from; i < a.GetSize(); i++) + put_bspline(o, a[i]); +} + +struct Prog +{ + const SmContext& ctx; + std::vector pts; + std::vector curves; + ~Prog() + { + for (SmTsectPnt* p : pts) + delete p; + for (SmCurve* c : curves) + delete c; + } + SmTsectPnt* pt(Rd& rd) + { + int64_t i = rd.idx(0, (int64_t)pts.size() - 1); + return pts[(size_t)i]; + } + // `has idx`: a point or NULL + SmTsectPnt* opt_pt(Rd& rd) + { + bool has = rd.flag(); + SmTsectPnt* p = pt(rd); + return has ? p : NULL; + } + static bool linked(const SmTsectPnt* p) { return p->m_pNext != NULL || p->m_pPrev != NULL; } + double index_of(const SmTsectPnt* p) const + { + for (size_t i = 0; i < pts.size(); i++) + if (pts[i] == p) + return (double)i; + return -1.0; + } + // a program point's index, or `-1` and the point's values + void put_ref(std::vector& o, const SmTsectPnt* p) const + { + double i = index_of(p); + o.push_back(i); + if (i < 0.0) + put_point(o, *p); + } +}; + +// The intersector with its protected state reachable. +struct Peek : SmSurfaceIntersector +{ + Peek(const SmSurface& a, const SmExtent2d& da, const SmSurface& b, const SmExtent2d& db, SmBoolean f) + : SmSurfaceIntersector(a, da, b, db, f) + { + } + + void set_context(const SmContext& c) { m_cpContext = &c; } + + void set_members(double trace_dir, double approx_tol, double start_tol, double step_tol, double ang_tol) + { + m_dCurveTraceDirection = trace_dir; + m_dThisApproxTol3d = approx_tol; + m_dStartParallelTolRadians = start_tol; + m_dSteppingParallelTolRadians = step_tol; + m_dThisAngTolRad = ang_tol; + } + + void set_ends(SmTsectPnt* s, SmTsectPnt* e) + { + m_pStartPoint = s; + m_pEndPoint = e; + } + + void set_ext(bool clip, double last, double dist) + { + m_bDoingExtensionClipping = clip ? TRUE : FALSE; + m_dLastThroughParmeter = last; + m_dExtensionDistance = dist; + } + + SmTsectPnt* last_curve_point() const { return m_vCurvePoints.GetLastNode(); } + bool no_curve_points() const { return m_vCurvePoints.GetFirstNode() == NULL; } + bool needs_prev() const + { + return m_vThroughPoints.GetFirstNode() != NULL || m_pStartPoint != NULL || m_pEndPoint != NULL; + } + + void put_list(std::vector& o, const Prog& pr, const SmTList& l) const + { + SmTsectPnt* aData[70]; + SmTArray a(70, aData); + l.GetAllNodes(a); + o.push_back((double)a.GetSize()); + for (ULONG i = 0; i < a.GetSize(); i++) + pr.put_ref(o, a[i]); + } + + // `approx_tol trace_dir start_tol step_tol ang_tol last_through ext_dist ext_clip closed + // clipped interior start_point end_point curve_list start_list through_list npoints points` + void put_state(std::vector& o, const Prog& pr) const + { + o.push_back(m_dThisApproxTol3d); + o.push_back(m_dCurveTraceDirection); + o.push_back(m_dStartParallelTolRadians); + o.push_back(m_dSteppingParallelTolRadians); + o.push_back(m_dThisAngTolRad); + o.push_back(m_dLastThroughParmeter); + o.push_back(m_dExtensionDistance); + o.push_back(flg(m_bDoingExtensionClipping)); + o.push_back(flg(m_bCurveIsClosed)); + o.push_back(flg(m_bClippedByThroughPoint)); + o.push_back(flg(m_bCheckForInteriorCurves)); + o.push_back(m_pStartPoint ? pr.index_of(m_pStartPoint) : -3.0); + o.push_back(m_pEndPoint ? pr.index_of(m_pEndPoint) : -3.0); + put_list(o, pr, m_vCurvePoints); + put_list(o, pr, m_vStartPoints); + put_list(o, pr, m_vThroughPoints); + o.push_back((double)pr.pts.size()); + for (const SmTsectPnt* p : pr.pts) + put_point(o, *p); + } +}; + +// The accumulated FlushCurve outputs: `out3d` starts with the program's curves. +struct Outs +{ + SmCurve* a3[8]; + SmCurve* a0[8]; + SmCurve* a1[8]; + SmTsectCurveType at[8]; + double ad[8]; + SmTArray c3; + SmTArray c0; + SmTArray c1; + SmTArray types; + SmTArray devs; + ULONG first; + Outs() : c3(8, a3), c0(8, a0), c1(8, a1), types(8, at), devs(8, ad), first(0) {} + ~Outs() + { + for (ULONG i = first; i < c3.GetSize(); i++) + delete c3[i]; + for (ULONG i = 0; i < c0.GetSize(); i++) + delete c0[i]; + for (ULONG i = 0; i < c1.GetSize(); i++) + delete c1[i]; + } + void put(std::vector& o) const + { + put_curves(o, c3, first); + put_curves(o, c0, 0); + put_curves(o, c1, 0); + o.push_back((double)types.GetSize()); + for (ULONG i = 0; i < types.GetSize(); i++) + o.push_back((double)types[i]); + o.push_back((double)devs.GetSize()); + for (ULONG i = 0; i < devs.GetSize(); i++) + o.push_back(devs[i]); + } +}; + +void run_op(int32_t op, Rd& rd, Prog& pr, Peek& si, Outs& outs, std::vector& o) +{ + switch (op) + { + case OP_STATE: + o.push_back(0.0); + si.put_state(o, pr); + return; + case OP_POINT: + { + SmTsectPnt* p = pr.pt(rd); + o.push_back(0.0); + put_point(o, *p); + return; + } + case OP_ADD_CURVE: + case OP_ADD_START: + case OP_ADD_THROUGH: + { + SmTsectPnt* p = pr.pt(rd); + // linking a point that is on a list corrupts the intrusive lists + if (Prog::linked(p)) + { + o.push_back(REJECTED); + return; + } + SmStatus s = op == OP_ADD_CURVE ? si.AddPointToCurve(*p) + : op == OP_ADD_START ? si.AddStartPoint(*p) + : si.AddThroughPoint(*p); + o.push_back(st(s)); + return; + } + case OP_CPV: + { + SmPoint2d uvs[2]; + uvs[0] = rd.uv(); + uvs[1] = rd.uv(); + SmTsectPnt* p = pr.pt(rd); + SmTsectPnt* prev = pr.opt_pt(rd); + bool has_step = rd.flag(); + double step = rd.num(); + if (prev == p) + throw Bad(); + o.push_back(st(si.ComputePointValues(uvs, *p, prev, has_step ? &step : NULL))); + put_point(o, *p); + return; + } + case OP_MEMBERS: + { + double td = rd.num(); + double at = rd.num(); + double sp = rd.num(); + double stp = rd.num(); + double ang = rd.num(); + si.set_members(td, at, sp, stp, ang); + o.push_back(0.0); + return; + } + case OP_ENDS: + { + SmTsectPnt* s = pr.opt_pt(rd); + SmTsectPnt* e = pr.opt_pt(rd); + si.set_ends(s, e); + o.push_back(0.0); + return; + } + case OP_EXT: + { + bool clip = rd.flag(); + double last = rd.num(); + double dist = rd.num(); + si.set_ext(clip, last, dist); + o.push_back(0.0); + return; + } + case OP_TEST: + { + SmTsectPnt* p = pr.pt(rd); + bool done0 = rd.flag(); + // the next point as the previous point (evaluated onto itself through two + // aliases), or a null previous point dereferenced + if (p == si.last_curve_point() || (si.no_curve_points() && si.needs_prev())) + { + o.push_back(REJECTED); + return; + } + SmBoolean done = done0 ? TRUE : FALSE; + SmStatus s = si.TestPoint(*p, done); + o.push_back(st(s)); + if (s == SM_SUCCESS) + o.push_back(flg(done)); + put_point(o, *p); + return; + } + case OP_NEXT: + { + SmTsectPnt* prev = pr.pt(rd); + double step = rd.num(); + SmTsectPnt* next = pr.pt(rd); + double dev = rd.num(); + double ang = rd.num(); + if (prev == next) + { + o.push_back(REJECTED); + return; + } + SmBoolean good = 7, clipped = 7, hit = 7; + SmStatus s = si.ComputeNextPoint(*prev, step, *next, good, dev, ang, clipped, hit); + o.push_back(st(s)); + if (s == SM_SUCCESS) + { + o.push_back(flg(good)); + o.push_back(dev); + o.push_back(ang); + o.push_back(flg(clipped)); + o.push_back(flg(hit)); + } + put_point(o, *next); + return; + } + case OP_SPLIT: + { + SmTsectPnt* curr = pr.pt(rd); + SmTsectPnt* next = pr.pt(rd); + double delta = rd.num(); + SmVector3d normals[2]; + normals[0] = rd.vec(); + normals[1] = rd.vec(); + bool avg = rd.flag(); + bool orient = rd.flag(); + if (pr.curves.empty()) + throw Bad(); + SmCurve* crv = pr.curves[(size_t)rd.idx(0, (int64_t)pr.curves.size() - 1)]; + double a = rd.num(); + double b = rd.num(); + SmExtent1d ivl(a, b); + double so[2]; + so[0] = rd.num(); + so[1] = rd.num(); + SmFilletLaw law; + SmTsectPnt* np = NULL; + SmStatus s = si.SplitSpan(curr, next, delta, normals, avg ? TRUE : FALSE, law, orient ? TRUE : FALSE, *crv, + ivl, so, np); + o.push_back(st(s)); + if (s == SM_SUCCESS) + put_point(o, *np); + return; + } + case OP_FBSP: + { + SmPoint3d bmin = rd.vec(); + SmPoint3d bmax = rd.vec(); + bool use0 = rd.flag(); + bool use1 = rd.flag(); + SmExtent3d box(bmin.x, bmin.y, bmin.z, bmax.x, bmax.y, bmax.z); + si.SetUseSurfaceEdges(use0 ? TRUE : FALSE, use1 ? TRUE : FALSE); + SmStatus s = si.FindBoundaryStartPoints(box, outs.c3, outs.c0, outs.c1, outs.types, outs.devs); + o.push_back(st(s)); + outs.put(o); + return; + } + default: + throw Bad(); + } +} +} // namespace + +// Program: `surfA surfB` (surfB `2` = the same object as A), `dom1[4] dom2[4] fillet`, +// `ncurves curves`, `npoints points`, `nops ops`. Output: per op `op status [values]`, then the +// final state. +SC_EXPORT int32_t sc_intersect_surface_intersector_p3_run(const double* in, int64_t n_in, double* out, + int64_t cap, int64_t* out_len) +{ + if (in == NULL || n_in < 2) + return SC_ERR_ARG; + try + { + SmContext ctx; + std::vector o; + Rd rd{in, n_in, 0}; + SmSurface* a = read_surface(rd, ctx); + SmSurface* b = NULL; + bool same = false; + if (rd.at < rd.n && rd.in[rd.at] == 2.0) + { + rd.at++; + same = true; + b = a; + } + else + b = read_surface(rd, ctx); + SmExtent2d d1 = rd.dom4(); + SmExtent2d d2 = rd.dom4(); + bool fillet = rd.flag(); + Prog pr{ctx, {}, {}}; + int64_t nc = rd.idx(0, 8); + for (int64_t i = 0; i < nc; i++) + pr.curves.push_back(read_curve(rd, ctx)); + int64_t np = rd.idx(0, 64); + for (int64_t i = 0; i < np; i++) + { + SmTsectPnt* t = new SmTsectPnt(); + pr.pts.push_back(t); + read_point(rd, *t); + } + int64_t nops = rd.idx(0, 64); + { + Peek si(*a, d1, *b, d2, fillet ? TRUE : FALSE); + si.set_context(ctx); + Outs outs; + for (SmCurve* c : pr.curves) + outs.c3.Add(c); + outs.first = outs.c3.GetSize(); + for (int64_t i = 0; i < nops; i++) + { + int32_t op = (int32_t)rd.idx(1, OP_LAST); + o.push_back((double)op); + run_op(op, rd, pr, si, outs, o); + } + si.put_state(o, pr); + // unlink every point before the lists go away + for (SmTsectPnt* t : pr.pts) + t->ReSet(); + si.set_ends(NULL, NULL); + } + if (!same) + delete b; + delete a; + return sc_copy_out(o.data(), (int64_t)o.size(), out, cap, out_len); + } + catch (const Bad&) + { + return SC_ERR_ARG; + } + catch (...) + { + return SC_ERR_EXCEPTION; + } +} From a0b6150524c39e010275049f6d8d0b2c83ef8aea Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 13:00:37 -0400 Subject: [PATCH 34/54] port: surface.surface_point_solve_p1 The problem data (SmSurfacePointSolver), the global solver's helpers (closure cache, objective, control-net triangle and leg guesses, seam, stride, extremum and boundary tests) and the local stepper's pieces (construction, copies, lazy evaluation, clamping, boundary hits, bounds check, iso-curve drop) of SmSurfacePointSolve.cpp, with the static control-net helpers. The shim compiles the upstream file itself (its classes are file-local), renaming the classes and SmSurface's two point-solve members. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm --- .../units/surface_surface_point_solve_p1.rs | 996 ++ .../units/surface_surface_point_solve_p1.rs | 278 + crates/solidcore/src/surface.rs | 1 + .../src/surface/surface_point_solve.rs | 12 + .../src/surface/surface_point_solve/p1.rs | 2379 +++++ .../shim/surface_surface_point_solve_p1.cpp | 625 ++ plan/upstream-issues.md | 18 + .../surface.surface_point_solve_p1.json | 8536 +++++++++++++++++ 8 files changed, 12845 insertions(+) create mode 100644 crates/difftest/src/units/surface_surface_point_solve_p1.rs create mode 100644 crates/solidcore-ffi/src/units/surface_surface_point_solve_p1.rs create mode 100644 crates/solidcore/src/surface/surface_point_solve.rs create mode 100644 crates/solidcore/src/surface/surface_point_solve/p1.rs create mode 100644 harness/cpp/shim/surface_surface_point_solve_p1.cpp create mode 100644 reports/difftest/surface.surface_point_solve_p1.json diff --git a/crates/difftest/src/units/surface_surface_point_solve_p1.rs b/crates/difftest/src/units/surface_surface_point_solve_p1.rs new file mode 100644 index 0000000000..4fdd57f9f2 --- /dev/null +++ b/crates/difftest/src/units/surface_surface_point_solve_p1.rs @@ -0,0 +1,996 @@ +//! Runner for unit `surface.surface_point_solve_p1`: the problem data, global-solver +//! helpers and local-stepper pieces of `SmSurfacePointSolve.cpp` the unit owns. +//! +//! C++: `solidcore_ffi::units::surface_surface_point_solve_p1` (the shim compiles the +//! upstream file, whose classes are file-local). Rust: +//! `solidcore::surface::surface_point_solve::p1`. +//! +//! A case is a surface `surf` (a B-spline, a plane or a curve-bounded surface, wrapped in +//! a STEP surface when `wrap`), the problem (solver domain `dom`, operation `solver` +//! as an `SmSolverOperationType` code, test point `test`, tolerance `tol`) and an `op` +//! with its parameters. Both sides produce the flat record documented in the ffi +//! module; the runner reports its first entry as the `status` (`0` = `SM_SUCCESS`, else +//! the `SmStatus`; `1007` for an index past the control net, a Rust `InvalidInput`; +//! `-1` for a Rust error upstream cannot produce) and the rest as the `out` values. +//! +//! Cases: inline cases on the upstream `Surface.sms` with the test points of +//! `my_test_surface_closest_point` (`tests/prog_test/src/smSurfaceTest.cpp:4117`), and +//! generated cases (planes, B-splines incl. closed, rational, bilinear, collapsed and +//! huge / tiny ones, curve-bounded and STEP-wrapped surfaces; sub-domains; test points on, +//! near and far from the surface). +//! +//! Deferred cases: `SmSurface::IsOnSeam` and `SmSurfaceEval::Normal` +//! (`surface.surface_p4`), the base `CreateIsoParametricCurve` (`surface.surface_p5`), +//! and every surface cache build of a curve-bounded or STEP surface's bounding box +//! (`SmSurface::CalculateContinuities`, `surface.surface_p6`). + +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +use solidcore::geom::global_solver::{SolutionRequested, SolverOperation}; +use solidcore::geom::vector2d::Point2; +use solidcore::geom::vector3d::Point3; +use solidcore::kernel::Kernel; +use solidcore::nurbs::math::NOW; +use solidcore::nurbs::b_spline_surface::SurfParamType; +use solidcore::surface::surface::p1::StepSurface; +use solidcore::surface::surface::p2::SurfaceEval; +use solidcore::surface::surface::Surface; +use solidcore::surface::surface_point_solve::p1::{ + triangles_dist, well_behaved_control_net, SurfPtGlobalSolver, SurfPtSolveStepper, +}; +use solidcore::SolidError; +use solidcore_ffi::units::surface_surface_point_solve_p1::{self as ffi, Op, MAX_HIT_STEPS}; + +use super::surface_surface_cache_p1::{ + default_form, dom_of, flag, gen_knots, gen_sub_dom, gvec, harness, push3, push_dom, srf, status, v3, + BssIn, InlineSrf, SrfIn, +}; +use super::surface_surface_cache_p3::{gen_surf, push_surf, surf_domain, surf_size, surface_in, SurfIn}; +use crate::case::{CaseContext, CaseSource}; +use crate::runner::default_cases; +use crate::{Case, HarnessError, Output, Rng, UnitDiff}; + +/// Generated cases per run, whatever `--seeds` says (it can only raise this). +pub const MIN_GENERATED: usize = 900; + +/// `surface.surface_point_solve_p1` runner. +pub struct Runner; + +// ---- inputs ----------------------------------------------------------------------- + +/// One `HitBound` step: move to `uv`, then hit `v` (else u) towards `tob`. +#[derive(Debug, Clone, Serialize, Deserialize)] +struct HitIn { + uv: [f64; 2], + #[serde(default)] + v: bool, + tob: i32, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "op", rename_all = "snake_case")] +enum OpIn { + Ctor, + Closed, + Func { + uv: [f64; 2], + }, + TriGuess { + iu: usize, + iv: usize, + }, + Leg { + iu: usize, + iv: usize, + }, + Stride { + uv: [f64; 2], + }, + SeamsUv { + uv: [f64; 2], + }, + SeamsCpts { + iu: usize, + iv: usize, + }, + Crease, + Local { + uv: [f64; 2], + ltol: f64, + }, + TriDist { + i: usize, + j: usize, + }, + Well { + i: usize, + j: usize, + }, + Stepper { + uv: [f64; 2], + tight: f64, + uv2: [f64; 2], + }, + HitBound { + uv: [f64; 2], + steps: Vec, + }, + CheckBounds { + curr: [f64; 2], + next: [f64; 2], + bdom: [f64; 4], + }, + DropIso { + uv: [f64; 2], + #[serde(default)] + v: bool, + crease: f64, + param: f64, + }, +} + +impl OpIn { + fn ffi(&self) -> Op { + match self { + OpIn::Ctor => Op::Ctor, + OpIn::Closed => Op::Closed, + OpIn::Func { .. } => Op::Func, + OpIn::TriGuess { .. } => Op::TriGuess, + OpIn::Leg { .. } => Op::Leg, + OpIn::Stride { .. } => Op::Stride, + OpIn::SeamsUv { .. } => Op::SeamsUv, + OpIn::SeamsCpts { .. } => Op::SeamsCpts, + OpIn::Crease => Op::Crease, + OpIn::Local { .. } => Op::Local, + OpIn::TriDist { .. } => Op::TriDist, + OpIn::Well { .. } => Op::Well, + OpIn::Stepper { .. } => Op::Stepper, + OpIn::HitBound { .. } => Op::HitBound, + OpIn::CheckBounds { .. } => Op::CheckBounds, + OpIn::DropIso { .. } => Op::DropIso, + } + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct Inputs { + /// Wrap the surface in an `SmSTEPSurface`. + #[serde(default)] + wrap: bool, + surf: SurfIn, + /// The solver domain. + dom: [f64; 4], + /// The `SmSolverOperationType` code. + solver: u8, + test: [f64; 3], + tol: f64, + #[serde(flatten)] + op: OpIn, +} + +// ---- C++ side ----------------------------------------------------------------------- + +fn cpp_input(i: &Inputs) -> Result<(Op, Vec), HarnessError> { + let mut o = vec![flag(i.wrap)]; + push_surf(&mut o, &i.surf)?; + o.extend(i.dom); + o.push(f64::from(i.solver)); + o.extend(i.test); + o.push(i.tol); + match &i.op { + OpIn::Ctor | OpIn::Closed | OpIn::Crease => {} + OpIn::Func { uv } | OpIn::Stride { uv } | OpIn::SeamsUv { uv } => o.extend(uv), + OpIn::TriGuess { iu, iv } | OpIn::Leg { iu, iv } | OpIn::SeamsCpts { iu, iv } => { + o.extend([*iu as f64, *iv as f64]); + } + OpIn::TriDist { i, j } | OpIn::Well { i, j } => o.extend([*i as f64, *j as f64]), + OpIn::Local { uv, ltol } => { + o.extend(uv); + o.push(*ltol); + } + OpIn::Stepper { uv, tight, uv2 } => { + o.extend(uv); + o.push(*tight); + o.extend(uv2); + } + OpIn::HitBound { uv, steps } => { + o.extend(uv); + o.push(steps.len() as f64); + for s in steps { + o.extend(s.uv); + o.push(flag(s.v)); + o.push(f64::from(s.tob)); + } + } + OpIn::CheckBounds { curr, next, bdom } => { + o.extend(curr); + o.extend(next); + o.extend(bdom); + } + OpIn::DropIso { + uv, + v, + crease, + param, + } => { + o.extend(uv); + o.push(flag(*v)); + o.push(*crease); + o.push(*param); + } + } + Ok((i.op.ffi(), o)) +} + +fn to_output(flat: &[f64]) -> Output { + let (status, rest) = flat + .split_first() + .map_or((f64::NAN, &[][..]), |(s, r)| (*s, r)); + Output::new() + .values("status", vec![status]) + .values("out", rest.to_vec()) +} + +fn cpp(i: &Inputs) -> Result { + let (op, input) = cpp_input(i)?; + let flat = ffi::eval(op, &input).map_err(|e| harness(e.to_string()))?; + Ok(to_output(&flat)) +} + +// ---- Rust side ---------------------------------------------------------------------- + +fn wrapped_of(wrap: bool, s: &SurfIn) -> Result { + let s = surface_in(s)?; + Ok(if wrap { + Surface::from(StepSurface::new(s, true)) + } else { + s + }) +} + +fn p2(uv: [f64; 2]) -> Point2 { + Point2::new(uv[0], uv[1]) +} + +fn push2(o: &mut Vec, v: Point2) { + o.extend([v.x, v.y]); +} + +fn solver_op(code: u8) -> Result { + SolverOperation::ALL + .get(usize::from(code)) + .copied() + .ok_or_else(|| harness(format!("bad solver operation {code}"))) +} + +/// `status has_bspl tight loose test dir` of the problem data. +fn push_base(o: &mut Vec, b: &solidcore::surface::surface_point_solve::SurfacePointSolver<'_>) { + o.push(0.0); + o.push(flag(b.b_spline().is_some())); + o.push(b.tight_tol()); + o.push(b.loose_tol()); + push3(o, b.test_point()); + push3(o, b.dir_vec()); +} + +/// The control net of the solver's B-spline: `(nu, nv, points, rational)`. +type Net = (usize, usize, Vec, bool); + +fn net_of(g: &SurfPtGlobalSolver<'_>) -> Option { + let b = g.base.b_spline()?; + let (nu, nv, pts) = b.control_points().ok()?; + Some((nu, nv, pts, b.is_rational())) +} + +#[allow(clippy::too_many_lines)] +fn rust_op(i: &Inputs) -> Result>, HarnessError> { + let k = Kernel::default(); + let surface = wrapped_of(i.wrap, &i.surf)?; + let dom = dom_of(i.dom); + let op = solver_op(i.solver)?; + let test = v3(i.test); + let tol = i.tol; + let global = || { + SurfPtGlobalSolver::new( + &k, + &surface, + &dom, + op, + test, + tol, + None, + SolutionRequested::Single, + ) + }; + let stepper = |uv: [f64; 2], tight: f64| { + SurfPtSolveStepper::new(&k, &surface, &dom, test, p2(uv), tight, tol, op) + }; + let run = || -> solidcore::Result> { + let mut o = Vec::new(); + match &i.op { + OpIn::Ctor => { + let g = global()?; + push_base(&mut o, &g.base); + } + OpIn::Closed => { + let mut g = global()?; + o.push(0.0); + o.push(flag(g.closed_surface(SurfParamType::U)?)); + o.push(flag(g.closed_surface(SurfParamType::V)?)); + o.push(flag(g.closed_surface(SurfParamType::U)?)); + o.push(flag(g.closed_surface(SurfParamType::Both)?)); + } + OpIn::Func { uv } => { + let g = global()?; + o.push(0.0); + o.push(g.calc_func_val(p2(*uv))?); + } + OpIn::TriGuess { iu, iv } => { + let g = global()?; + let r = g.find_polygon_triangle_guess((*iu, *iv))?; + o.push(0.0); + push2(&mut o, r.uv); + o.extend([r.best_idx_u as f64, r.best_idx_v as f64]); + o.extend([r.best_dist, r.ave_cpt_dist, flag(r.suspicious)]); + } + OpIn::Leg { iu, iv } => { + let g = global()?; + let uv = g.refine_guess_polygon_leg(*iu, *iv)?; + o.push(0.0); + push2(&mut o, uv); + } + OpIn::Stride { uv } => { + let g = global()?; + let mut pt0 = SurfaceEval::new(Some(&surface)); + pt0.set_uv(p2(*uv)); + let r = g.check_bad_guess_stride(&mut pt0)?; + o.push(0.0); + o.push(flag(r.is_some())); + if let Some((npt, f)) = r { + push2(&mut o, npt.uv()); + o.push(f); + } + } + OpIn::SeamsUv { uv } => { + let mut g = global()?; + let r = g.check_guess_for_seams(p2(*uv))?; + o.push(0.0); + push2(&mut o, r); + } + OpIn::SeamsCpts { iu, iv } => { + let g = global()?; + let Some((nu, nv, pts, rational)) = net_of(&g) else { + return Err(SolidError::sm_err("difftest: no control net")); + }; + let (a, b) = g.check_guess_for_seams_cpts(*iu, *iv, nu, nv, &pts, rational)?; + o.extend([0.0, a as f64, b as f64]); + } + OpIn::Crease => { + let g = global()?; + let list = g.crease_subdomains()?; + o.push(0.0); + o.push(list.len() as f64); + for d in &list { + push_dom(&mut o, d); + } + } + OpIn::Local { uv, ltol } => { + let g = global()?; + o.push(0.0); + let mut e = SurfaceEval::new(Some(&surface)); + e.set_uv(p2(*uv)); + o.push(flag(g.is_local_min(&mut e, *ltol)?)); + let mut e = SurfaceEval::new(Some(&surface)); + e.set_uv(p2(*uv)); + o.push(flag(g.is_local_max(&mut e, *ltol)?)); + let mut e = SurfaceEval::new(Some(&surface)); + e.set_uv(p2(*uv)); + let (b, which) = g.pushing_boundary(&mut e, *ltol)?; + o.push(flag(b)); + o.push(f64::from(which as u8)); + } + OpIn::TriDist { i: a, j } => { + let g = global()?; + let Some((nu, nv, pts, rational)) = net_of(&g) else { + return Err(SolidError::sm_err("difftest: no control net")); + }; + let (d, u, v) = triangles_dist(g.base.test_point(), &pts, rational, *a, *j, nu, nv)?; + o.extend([0.0, d, u, v]); + } + OpIn::Well { i: a, j } => { + let g = global()?; + let Some((nu, nv, pts, rational)) = net_of(&g) else { + return Err(SolidError::sm_err("difftest: no control net")); + }; + let b = well_behaved_control_net(g.base.test_point(), &pts, rational, *a, *j, nu, nv)?; + o.extend([0.0, flag(b)]); + } + OpIn::Stepper { uv, tight, uv2 } => { + let mut s = stepper(*uv, *tight)?; + push_base(&mut o, &s.base); + o.push(s.max_step()); + let v = s.eval()?; + push3(&mut o, s.gap()?); + push3(&mut o, s.gap_u()?); + push3(&mut o, s.gap_v()?); + o.push(s.gap_length()?); + o.extend([v.f_val, v.g_val, v.f_check, v.g_check, v.sum_check]); + push3(&mut o, s.pos()?); + push3(&mut o, s.su()?); + push3(&mut o, s.sv()?); + push3(&mut o, s.suu()?); + push3(&mut o, s.suv()?); + push3(&mut o, s.svv()?); + let c = SurfPtSolveStepper::copy_of(&s); + o.push(flag(c.is_set())); + push2(&mut o, c.uv()); + let mut a = stepper(*uv2, *tight)?; + a.assign(&s); + o.push(flag(a.is_set())); + o.push(a.gap_length()?); + s.set_uv(p2(*uv2)); + o.push(flag(s.is_set())); + s.clamp(); + push2(&mut o, s.uv()); + } + OpIn::HitBound { uv, steps } => { + let mut s = stepper(*uv, tol)?; + o.push(0.0); + for h in steps { + s.set_uv(p2(h.uv)); + let which = if h.v { SurfParamType::V } else { SurfParamType::U }; + s.hit_bound(which, h.tob); + o.push(f64::from(s.bound_hits_u())); + o.push(f64::from(s.bound_hits_v())); + } + } + OpIn::CheckBounds { curr, next, bdom } => { + // the stepper is constructed (and may fail) as upstream's + let _ = stepper(*curr, tol)?; + let r = SurfPtSolveStepper::check_bounds(p2(*curr), p2(*next), &dom_of(*bdom)); + o.push(0.0); + o.push(flag(r.out_of_bounds)); + o.extend([f64::from(r.hits_u), f64::from(r.hits_v)]); + push2(&mut o, r.clamped_uv.unwrap_or(Point2::new(0.0, 0.0))); + push2(&mut o, r.clamped_uv_scaled.unwrap_or(Point2::new(0.0, 0.0))); + o.push(r.step_scale); + } + OpIn::DropIso { + uv, + v, + crease, + param, + } => { + let mut s = stepper(*uv, tol)?; + let which = if *v { SurfParamType::V } else { SurfParamType::U }; + let b = s.drop_to_iso_curve(&k, which, *crease, *param)?; + o.push(0.0); + o.push(flag(b)); + push2(&mut o, s.uv()); + } + } + Ok(o) + }; + Ok(run()) +} + +fn rust(i: &Inputs) -> Result { + Ok(match rust_op(i)? { + Ok(o) => to_output(&o), + Err(e) => Output::unported(&e).unwrap_or_else(|| to_output(&[status(&e)])), + }) +} + +// ---- generated cases ---------------------------------------------------------------- + +/// The supported solver operations. +const SOLVERS: [u8; 5] = [0, 3, 4, 5, 10]; + +/// A point of `d`: a corner, a point on a side, or inside. +fn gen_uv(rng: &mut Rng, d: [f64; 4]) -> [f64; 2] { + let pick = |rng: &mut Rng, a: f64, b: f64| -> f64 { + match rng.below(6) { + 0 => a, + 1 => b, + _ => a + (b - a) * rng.unit(), + } + }; + [pick(rng, d[0], d[2]), pick(rng, d[1], d[3])] +} + +/// A point in `d` or, half the time, somewhat outside it. +fn gen_uv_any(rng: &mut Rng, d: [f64; 4]) -> [f64; 2] { + let [u, v] = gen_uv(rng, d); + if rng.chance(0.5) { + return [u, v]; + } + let (w, h) = (d[2] - d[0], d[3] - d[1]); + [ + u + w * rng.uniform(-0.9, 0.9), + v + h * rng.uniform(-0.9, 0.9), + ] +} + +/// A test point for the surface: on it, slightly or well off it along its normal, or +/// anywhere around it. +fn gen_test(rng: &mut Rng, s: &Surface, d: [f64; 4], size: f64) -> [f64; 3] { + let uv = gen_uv(rng, d); + let Ok((p, su, sv)) = s.evaluate_1st_derivatives(p2(uv), false, false) else { + return gvec(rng, size * 2.0); + }; + let n = su.cross(sv).unitize_or_z(); + let off = match rng.below(6) { + 0 => 0.0, + 1 => size * 10f64.powf(rng.uniform(-12.0, -7.0)), + 2 => size * rng.uniform(-0.3, 0.3), + 3 => size * rng.uniform(-3.0, 3.0), + 4 => return gvec(rng, size * 1.5), + _ => { + // off the normal: a tangential offset too + let t = su.unitize_or_z() * (size * rng.uniform(-0.5, 0.5)); + let q = p + n * (size * rng.uniform(-0.5, 0.5)) + t; + return [q.x, q.y, q.z]; + } + }; + let q: Point3 = p + n * off; + [q.x, q.y, q.z] +} + +/// A test point on the surface normal at `uv`: on the surface, or off it on either +/// side by a small to large distance. +fn test_on_normal(rng: &mut Rng, s: &Surface, uv: [f64; 2], size: f64) -> [f64; 3] { + let Ok((p, su, sv)) = s.evaluate_1st_derivatives(p2(uv), false, false) else { + return gvec(rng, size); + }; + let n = su.cross(sv).unitize_or_z(); + let off = match rng.below(4) { + 0 => 0.0, + 1 => size * 10f64.powf(rng.uniform(-13.0, -6.0)), + 2 => size * rng.uniform(-1.0, 1.0), + _ => size * rng.uniform(-20.0, 20.0), + }; + let q = p + n * off; + [q.x, q.y, q.z] +} + +/// A closed B-spline: a full rational circle (or a closed polygon) in u swept in v. +fn gen_closed(rng: &mut Rng) -> InlineSrf { + let r = rng.uniform(0.5, 5.0); + let h = rng.uniform(0.5, 5.0); + let v_rows = 2 + rng.below(2) as usize; + let q = v_rows - 1; + let v_knots: Vec = std::iter::repeat_n(0.0, q + 1) + .chain(std::iter::repeat_n(1.0, q + 1)) + .collect(); + if rng.chance(0.5) { + // rational circle: 9 points, degree 2 + let w = std::f64::consts::FRAC_1_SQRT_2; + let pts: [(f64, f64, f64); 9] = [ + (1.0, 0.0, 1.0), + (1.0, 1.0, w), + (0.0, 1.0, 1.0), + (-1.0, 1.0, w), + (-1.0, 0.0, 1.0), + (-1.0, -1.0, w), + (0.0, -1.0, 1.0), + (1.0, -1.0, w), + (1.0, 0.0, 1.0), + ]; + let net = pts + .iter() + .map(|&(x, y, wt)| { + (0..v_rows) + .map(|j| { + let z = h * j as f64 / q as f64; + [x * r * wt, y * r * wt, z * wt, wt] + }) + .collect() + }) + .collect(); + InlineSrf { + net, + p: 2, + q, + u: vec![0.0, 0.0, 0.0, 0.25, 0.25, 0.5, 0.5, 0.75, 0.75, 1.0, 1.0, 1.0], + v: v_knots, + } + } else { + // closed polygon, degree 1 (non-rational) + let k = 3 + rng.below(4) as usize; + let net = (0..=k) + .map(|i| { + let t = std::f64::consts::TAU * (i % k) as f64 / k as f64; + (0..v_rows) + .map(|j| { + let z = h * j as f64 / q as f64; + [r * t.cos(), r * t.sin(), z, NOW] + }) + .collect() + }) + .collect(); + let mut u = vec![0.0]; + u.extend((0..=k).map(|i| i as f64 / k as f64)); + u.push(1.0); + InlineSrf { + net, + p: 1, + q, + u, + v: v_knots, + } + } +} + +/// A bilinear (2 x 2) surface, sometimes twisted. +fn gen_bilinear(rng: &mut Rng) -> InlineSrf { + let tw = if rng.chance(0.5) { 0.0 } else { rng.uniform(-1.0, 1.0) }; + let net = vec![ + vec![[0.0, 0.0, 0.0, NOW], [0.0, 1.0, 0.0, NOW]], + vec![[1.0, 0.0, 0.0, NOW], [1.0, 1.0, tw, NOW]], + ]; + InlineSrf { + net, + p: 1, + q: 1, + u: vec![0.0, 0.0, 1.0, 1.0], + v: vec![0.0, 0.0, 1.0, 1.0], + } +} + +/// A badly behaved net: sharp zigzags and coincident interior points. +fn gen_zigzag(rng: &mut Rng) -> InlineSrf { + let p = 1 + rng.below(3) as usize; + let q = 1 + rng.below(3) as usize; + let n = p + 1 + rng.below(3) as usize; + let m = q + 1 + rng.below(3) as usize; + let net = (0..=n) + .map(|i| { + (0..=m) + .map(|j| { + let mut x = i as f64; + let mut y = j as f64; + if rng.chance(0.3) { + // fold back in u or v + x -= rng.uniform(0.5, 2.5); + } + if rng.chance(0.3) { + y -= rng.uniform(0.5, 2.5); + } + if rng.chance(0.15) && i > 0 { + // coincident with the previous row + x = (i - 1) as f64; + } + [x, y, rng.uniform(-0.3, 0.3), NOW] + }) + .collect() + }) + .collect(); + InlineSrf { + net, + p, + q, + u: gen_knots(rng, p, n), + v: gen_knots(rng, q, m), + } +} + +fn gen_surface(rng: &mut Rng) -> SurfIn { + let bss = |s: InlineSrf| BssIn { + oob: false, + form: default_form(), + srf: SrfIn::Inline(s), + }; + match rng.below(14) { + 0 | 1 => SurfIn::Bspline(bss(gen_closed(rng))), + 2 => SurfIn::Bspline(bss(gen_bilinear(rng))), + 3 | 4 => SurfIn::Bspline(bss(gen_zigzag(rng))), + _ => gen_surf(rng), + } +} + +/// The control-net counts of a surface input (a plane's net is 2 x 2). +fn net_counts(s: &SurfIn) -> Result<(usize, usize), HarnessError> { + match s { + SurfIn::Plane(_) => Ok((2, 2)), + SurfIn::Bspline(b) | SurfIn::CurveBounded(b) => { + let s = srf(&b.srf)?; + Ok((s.net.len(), s.net.first().map_or(0, Vec::len))) + } + } +} + +fn gen_op(rng: &mut Rng, s: &SurfIn, d: [f64; 4], sd: [f64; 4], size: f64) -> Result { + let (nu, nv) = net_counts(s)?; + let idx = |rng: &mut Rng, n: usize, edge: bool| -> usize { + if edge && rng.chance(0.5) { + if rng.chance(0.5) { + 0 + } else { + n.saturating_sub(1) + } + } else { + rng.below(n.max(1) as u64) as usize + } + }; + let small_tol = |rng: &mut Rng| -> f64 { + match rng.below(4) { + 0 => 1e-10, + 1 => size * 1e-6, + 2 => -size * 1e-6, + _ => size * rng.uniform(1e-4, 0.1), + } + }; + // more local-extremum and control-net cases than the others + let pick = match rng.below(46) { + 40..=42 => 29, + 43..=45 => 23, + x => x, + }; + Ok(match pick { + 0..=1 => OpIn::Ctor, + 2..=3 => OpIn::Closed, + 4..=7 => OpIn::Func { + uv: gen_uv_any(rng, d), + }, + 8..=11 => OpIn::TriGuess { + iu: idx(rng, nu, false), + iv: idx(rng, nv, false), + }, + 12..=14 => OpIn::Leg { + iu: idx(rng, nu, true), + iv: idx(rng, nv, true), + }, + 15..=17 => OpIn::Stride { uv: gen_uv(rng, sd) }, + 18 => OpIn::SeamsUv { uv: gen_uv(rng, sd) }, + 19..=21 => OpIn::SeamsCpts { + iu: idx(rng, nu, true), + iv: idx(rng, nv, true), + }, + 22 => OpIn::Crease, + 23..=26 => OpIn::Local { + uv: gen_uv(rng, sd), + ltol: small_tol(rng), + }, + 27..=28 => OpIn::TriDist { + i: idx(rng, nu.saturating_sub(1), false), + j: idx(rng, nv.saturating_sub(1), false), + }, + 29..=30 => OpIn::Well { + i: idx(rng, nu, true), + j: idx(rng, nv, true), + }, + 31..=33 => OpIn::Stepper { + uv: gen_uv(rng, d), + tight: small_tol(rng).abs(), + uv2: gen_uv_any(rng, sd), + }, + 34..=35 => { + let n = 1 + rng.below(12) as usize; + let steps = (0..n.min(MAX_HIT_STEPS)) + .map(|_| HitIn { + uv: gen_uv_any(rng, sd), + v: rng.chance(0.5), + tob: rng.range_i64(-1, 1) as i32, + }) + .collect(); + OpIn::HitBound { + uv: gen_uv(rng, d), + steps, + } + } + 36..=37 => { + let bdom = if rng.chance(0.5) { sd } else { gen_sub_dom(rng, sd) }; + OpIn::CheckBounds { + curr: gen_uv(rng, d), + next: gen_uv_any(rng, bdom), + bdom, + } + } + _ => { + let v = rng.chance(0.5); + let (a, b) = if v { (d[1], d[3]) } else { (d[0], d[2]) }; + OpIn::DropIso { + uv: gen_uv(rng, d), + v, + crease: a + (b - a) * rng.unit(), + param: rng.uniform(-1.0, 2.0), + } + } + }) +} + +fn gen_case(rng: &mut Rng) -> Result { + let surf = gen_surface(rng); + let wrap = rng.chance(0.15); + let d = surf_domain(&surf)?; + let size = surf_size(&surf)?; + let sd = if rng.chance(0.5) { d } else { gen_sub_dom(rng, d) }; + let solver = *rng.choose(&SOLVERS).unwrap_or(&3); + let s = surface_in(&surf)?; + let test = if solver == 10 { + match rng.below(4) { + 0 => [1.0, 0.0, 0.0], + 1 => [0.0, -1.0, 0.0], + _ => gvec(rng, 1.0), + } + } else { + gen_test(rng, &s, sd, size) + }; + let tol = match rng.below(4) { + 0 => 1e-6, + 1 => size * 1e-8, + 2 => size * rng.uniform(1e-5, 1e-2), + _ => 1e-10, + }; + let mut op = gen_op(rng, &surf, d, sd, size)?; + let mut test = test; + if let OpIn::Local { uv, .. } = &mut op { + if solver != 10 && rng.chance(0.7) { + test = test_on_normal(rng, &s, *uv, size); + } + } + Ok(Inputs { + wrap, + surf, + dom: sd, + solver, + test, + tol, + op, + }) +} + +// ---- inline cases from the upstream tests ---------------------------------------------------- + +/// The test points of `my_test_surface_closest_point` on `Surface.sms` +/// (`tests/prog_test/src/smSurfaceTest.cpp:4117`). +const SURFACE_SMS_POINTS: [[f64; 3]; 15] = [ + [-1.0616429349692744, -20.167126109553802, 20.020823739437560], + [-1.1583434957685239, -19.953438722680168, 20.005921768970701], + [-4.5941574701649142, -9.6528635542995485, 19.290949275641431], + [-0.83908714000092477, -20.645564191951244, 20.054070584952139], + [-0.22169184902399575, -21.752883811327614, 20.077084827504891], + [0.097876793468328019, -21.633397717952313, 18.978461556867217], + [-0.25257593806641893, -20.10880763638518, 19.018298541213202], + [-0.32629818190650922, -19.760345509317247, 19.026748453308592], + [-0.66892154856885222, -17.879224383359258, 19.072647185802911], + [-0.83758573462226327, -20.648619822796935, 20.054270506974774], + [-0.22211826515506564, -21.75240325273451, 20.077401022086111], + [0.097878601273081345, -21.633405764037899, 18.978461275445223], + [-0.25280760311075551, -20.107797610675622, 19.018327728721825], + [-0.32651463102618838, -19.7592999915767, 19.026773809915298], + [-0.40219453853645376, -19.384417128948424, 19.035877125510886], +]; + +fn upstream_cases(ctx: &CaseContext, id: &str) -> Result, HarnessError> { + let path = ctx.upstream_test_file("Surface.sms")?; + let sms = SrfIn::File { + sms: path.to_string_lossy().into_owned(), + }; + let inline = srf(&sms)?; + let surf = SurfIn::Bspline(BssIn { + oob: false, + form: default_form(), + srf: sms, + }); + let d = [ + inline.u.first().copied().unwrap_or(0.0), + inline.v.first().copied().unwrap_or(0.0), + inline.u.last().copied().unwrap_or(1.0), + inline.v.last().copied().unwrap_or(1.0), + ]; + let (nu, nv) = (inline.net.len(), inline.net.first().map_or(0, Vec::len)); + let mid = [0.5 * (d[0] + d[2]), 0.5 * (d[1] + d[3])]; + let mut out = Vec::new(); + for (pi, test) in SURFACE_SMS_POINTS.iter().enumerate() { + let ops = [ + OpIn::Ctor, + OpIn::Closed, + OpIn::TriGuess { iu: 0, iv: 0 }, + OpIn::Leg { + iu: pi % nu, + iv: (pi * 7) % nv, + }, + OpIn::SeamsCpts { + iu: if pi % 2 == 0 { 0 } else { nu - 1 }, + iv: pi % nv, + }, + OpIn::Func { uv: mid }, + OpIn::Stride { + uv: [d[0] + (d[2] - d[0]) * (pi as f64 / 14.0), d[1]], + }, + OpIn::Local { + uv: [d[2], d[1] + (d[3] - d[1]) * (pi as f64 / 14.0)], + ltol: 1e-6, + }, + OpIn::Stepper { + uv: mid, + tight: 1e-12, + uv2: [d[2] + 1.0, d[1] - 1.0], + }, + ]; + for (oi, op) in ops.into_iter().enumerate() { + let inputs = Inputs { + wrap: false, + surf: surf.clone(), + dom: d, + solver: 3, + test: *test, + tol: 1e-6, + op, + }; + out.push(Case { + unit: id.to_string(), + name: format!("surface_sms_pt{:02}_op{oi}", pi + 1), + source: CaseSource::Inline, + inputs: serde_json::to_value(inputs).map_err(|e| harness(e.to_string()))?, + }); + } + } + Ok(out) +} + +impl UnitDiff for Runner { + fn id(&self) -> &'static str { + "surface.surface_point_solve_p1" + } + + fn generate(&self, rng: &mut Rng) -> Option { + for _ in 0..64 { + let Ok(i) = gen_case(rng) else { + continue; + }; + let Ok((op, input)) = cpp_input(&i) else { + continue; + }; + if ffi::validate(op, &input).is_ok() { + return serde_json::to_value(i).ok(); + } + } + None + } + + fn cases(&self, ctx: &CaseContext) -> Result, HarnessError> { + let mut v = upstream_cases(ctx, self.id())?; + let ctx = CaseContext { + seeds: ctx.seeds.max(MIN_GENERATED), + ..ctx.clone() + }; + v.extend(default_cases(self, &ctx)?); + Ok(v) + } + + fn run_cpp(&self, case: &Case) -> Result { + cpp(&case.parse()?) + } + + fn run_rust(&self, case: &Case) -> Result { + rust(&case.parse()?) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn op_codes_round_trip() { + let i = Inputs { + wrap: false, + surf: SurfIn::Bspline(BssIn { + oob: false, + form: default_form(), + srf: SrfIn::Inline(gen_bilinear(&mut Rng::new(1))), + }), + dom: [0.0, 0.0, 1.0, 1.0], + solver: 3, + test: [0.5, 0.5, 1.0], + tol: 1e-6, + op: OpIn::Ctor, + }; + let (op, input) = cpp_input(&i).unwrap(); + assert_eq!(op, Op::Ctor); + assert!(ffi::validate(op, &input).is_ok()); + } +} diff --git a/crates/solidcore-ffi/src/units/surface_surface_point_solve_p1.rs b/crates/solidcore-ffi/src/units/surface_surface_point_solve_p1.rs new file mode 100644 index 0000000000..da7e355fcd --- /dev/null +++ b/crates/solidcore-ffi/src/units/surface_surface_point_solve_p1.rs @@ -0,0 +1,278 @@ +//! FFI wrappers for unit `surface.surface_point_solve_p1`. +//! +//! Shim: `harness/cpp/shim/surface_surface_point_solve_p1.cpp` +//! (`sc_surface_surface_point_solve_p1_eval`, which compiles the upstream file with its +//! file-local classes renamed). Upstream: `source/SMLib/src/SmSurfacePointSolve.cpp`. +//! +//! Notation as in [`super::surface_surface_p1`]: `W S` a surface (`S`: `0 B` B-spline +//! `oob form N`, `1 o x y sx sy D` bounded `SmPlane`, `2 B` `SmCurveBoundedSurface`), +//! wrapped in an `SmSTEPSurface` when `W = 1`; `uv` a point `u v`; `D` a domain +//! `umin vmin umax vmax`. Every op starts with the problem `P = W S D op test(3) tol` +//! (`op` an `SmSolverOperationType`: 0 intersect, 3 minimise, 4 maximise, 5 normalise, +//! 10 3D signed directed maximise; `D` the solver domain). +//! +//! | [`Op`] | upstream | parameters | +//! |---------------|-------------------------------------------------------|-------------------| +//! | `Ctor` | `SmSurfacePointSolver` constructor (via the global solver) | `P` | +//! | `Closed` | `SmSurfPtGlobalSolver::ClosedSurface` (U, V, U, BOTH) | `P` | +//! | `Func` | `CalcFuncVal` | `P uv` | +//! | `TriGuess` | `FindPolygonTriangleGuess` | `P iu iv` | +//! | `Leg` | `RefineGuessPolygonLeg` | `P iu iv` | +//! | `Stride` | `CheckBadGuessStride` | `P uv` | +//! | `SeamsUv` | `CheckGuessForSeams` (UV point) | `P uv` | +//! | `SeamsCpts` | `CheckGuessForSeams` (control points) | `P iu iv` | +//! | `Crease` | `GetCreaseSubdomains` | `P` | +//! | `Local` | `IsLocalMin`, `IsLocalMax`, `PushingBoundary` | `P uv tol` | +//! | `TriDist` | `GetTrianglesDist` (static) | `P i j` | +//! | `Well` | `WellBehavedControlNet` (static) | `P i j` | +//! | `Stepper` | `SmSurfPtSolveStepper`: constructor, `MaxStep`, `Eval` values, `Pos` and derivatives, copy, `operator=`, `SetUV`, `Clamp` | `P uv tight uv2` | +//! | `HitBound` | `HitBound` after `SetUV` | `P uv k (uv which tob)*k` | +//! | `CheckBounds` | `CheckBounds` | `P curr next D` | +//! | `DropIso` | `DropToIsoCurve` | `P uv which crease param` | +//! +//! The output is the op status (`0` = `SM_SUCCESS`, else the `SmStatus`) and the op's +//! outputs (see the shim). [`eval`] accepts only what upstream handles without undefined +//! behaviour: the surfaces of [`super::surface_surface_cache_p3`], a solver domain of +//! positive size inside the surface domain, the operations above, points inside the +//! surface domain wherever a surface evaluator is read (within a domain size of it for +//! `CalcFuncVal`, which checks the evaluation's status), control-net indices inside the +//! net (a plane's net is 2 x 2), finite values. + +use super::surface_surface_cache_p1::{bad, Reader, Srf}; +use super::surface_surface_cache_p3::{sized_surface, Kind}; +use crate::{call_with_buffer, FfiError}; + +/// The upstream routine run by the shim. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Op { + /// The constructor's problem data. + Ctor, + /// `ClosedSurface`. + Closed, + /// `CalcFuncVal`. + Func, + /// `FindPolygonTriangleGuess`. + TriGuess, + /// `RefineGuessPolygonLeg`. + Leg, + /// `CheckBadGuessStride`. + Stride, + /// `CheckGuessForSeams` (UV point). + SeamsUv, + /// `CheckGuessForSeams` (control points). + SeamsCpts, + /// `GetCreaseSubdomains`. + Crease, + /// `IsLocalMin`, `IsLocalMax`, `PushingBoundary`. + Local, + /// `GetTrianglesDist`. + TriDist, + /// `WellBehavedControlNet`. + Well, + /// The stepper's construction, evaluation and copies. + Stepper, + /// `HitBound`. + HitBound, + /// `CheckBounds`. + CheckBounds, + /// `DropToIsoCurve`. + DropIso, +} + +impl Op { + /// The shim's op code. + #[must_use] + pub fn code(self) -> i32 { + match self { + Op::Ctor => 0, + Op::Closed => 1, + Op::Func => 2, + Op::TriGuess => 3, + Op::Leg => 4, + Op::Stride => 5, + Op::SeamsUv => 6, + Op::SeamsCpts => 7, + Op::Crease => 8, + Op::Local => 9, + Op::TriDist => 10, + Op::Well => 11, + Op::Stepper => 12, + Op::HitBound => 13, + Op::CheckBounds => 14, + Op::DropIso => 15, + } + } +} + +/// Most `HitBound` steps in one case. +pub const MAX_HIT_STEPS: usize = 64; + +/// The solver operations the file's classes accept. +const OPS: [usize; 5] = [0, 3, 4, 5, 10]; + +mod sys { + extern "C" { + pub fn sc_surface_surface_point_solve_p1_eval( + op: i32, + input: *const f64, + n_in: i64, + out: *mut f64, + cap: i64, + out_len: *mut i64, + ) -> i32; + } +} + +/// The problem `P`: the surface domain and the control-net counts (`2 x 2` for a plane). +struct Problem { + srf: Srf, + num_u: usize, + num_v: usize, +} + +fn problem(rd: &mut Reader<'_>) -> Result { + rd.flag()?; + let at = rd.at; + let (kind, srf, _) = sized_surface(rd)?; + let get = |i: usize| rd.input.get(i).copied().unwrap_or(0.0) as usize; + let (num_u, num_v) = match kind { + Kind::Plane => (2, 2), + // `kind oob form n m ..` + Kind::BSpline | Kind::CurveBounded => (get(at + 3) + 1, get(at + 4) + 1), + }; + rd.domain_in(&srf, true)?; + let op = rd.index(10)?; + if !OPS.contains(&op) { + return Err(bad(format!("unsupported solver operation {op}"))); + } + rd.vec3()?; + rd.finite()?; + Ok(Problem { srf, num_u, num_v }) +} + +/// A point `uv` inside the surface domain. +fn uv_in(rd: &mut Reader<'_>, srf: &Srf) -> Result<(), FfiError> { + let u = rd.finite()?; + let v = rd.finite()?; + let d = srf.dom; + if u < d[0] || u > d[2] || v < d[1] || v > d[3] { + return Err(bad("uv outside the surface domain")); + } + Ok(()) +} + +/// A point `uv` within a domain size of the surface domain. +fn uv_near(rd: &mut Reader<'_>, srf: &Srf) -> Result<(), FfiError> { + let u = rd.finite()?; + let v = rd.finite()?; + let d = srf.dom; + let (w, h) = (d[2] - d[0], d[3] - d[1]); + if u < d[0] - w || u > d[2] + w || v < d[1] - h || v > d[3] + h { + return Err(bad("uv too far outside the surface domain")); + } + Ok(()) +} + +/// Control-net indices `i j` with `i + du < num_u`, `j + dv < num_v`. +fn net_index(rd: &mut Reader<'_>, p: &Problem, d: usize) -> Result<(), FfiError> { + let i = rd.index(1 << 20)?; + let j = rd.index(1 << 20)?; + if i + d >= p.num_u || j + d >= p.num_v { + return Err(bad("control point index past the net")); + } + Ok(()) +} + +fn validate_op(op: Op, rd: &mut Reader<'_>) -> Result<(), FfiError> { + let p = problem(rd)?; + match op { + Op::Ctor | Op::Closed | Op::Crease => {} + Op::Func => uv_near(rd, &p.srf)?, + Op::TriGuess | Op::Leg | Op::SeamsCpts | Op::Well => net_index(rd, &p, 0)?, + Op::TriDist => net_index(rd, &p, 1)?, + Op::Stride | Op::SeamsUv => uv_in(rd, &p.srf)?, + Op::Local => { + uv_in(rd, &p.srf)?; + rd.finite()?; + } + Op::Stepper => { + uv_in(rd, &p.srf)?; + rd.finite()?; + rd.finite()?; + rd.finite()?; + } + Op::HitBound => { + uv_in(rd, &p.srf)?; + let k = rd.index(MAX_HIT_STEPS)?; + for _ in 0..k { + rd.finite()?; + rd.finite()?; + rd.flag()?; + let tob = rd.finite()?; + if tob.fract() != 0.0 || tob.abs() > 3.0 { + return Err(bad("hit bound: direction must be a small integer")); + } + } + } + Op::CheckBounds => { + uv_in(rd, &p.srf)?; + rd.finite()?; + rd.finite()?; + rd.domain()?; + } + Op::DropIso => { + uv_in(rd, &p.srf)?; + let v = rd.flag()?; + let c = rd.finite()?; + let (lo, hi) = if v { + (p.srf.dom[1], p.srf.dom[3]) + } else { + (p.srf.dom[0], p.srf.dom[2]) + }; + if c < lo || c > hi { + return Err(bad("drop to iso curve: crease value outside the surface domain")); + } + rd.finite()?; + } + } + Ok(()) +} + +/// Checks `input` for `op` (layouts in the module docs). +/// +/// # Errors +/// +/// [`FfiError::InvalidArgument`] for input the shim must not see. +pub fn validate(op: Op, input: &[f64]) -> Result<(), FfiError> { + let mut rd = Reader { input, at: 0 }; + validate_op(op, &mut rd)?; + rd.done() +} + +/// Runs `op` on `input` (layouts in the module docs); returns the shim's output record. +/// +/// # Errors +/// +/// [`FfiError::InvalidArgument`] for input the shim must not see; [`FfiError::Status`] +/// for a shim failure. +pub fn eval(op: Op, input: &[f64]) -> Result, FfiError> { + validate(op, input)?; + call_with_buffer(4096, |buf, len| { + // SAFETY: input is valid for input.len() reads and holds exactly what the shim + // reads for `op` (validated above: well-formed clamped surfaces, planes with + // independent axes, a solver domain inside the surface domain, supported + // operations, evaluated points inside the surface domain, control-net indices + // inside the net, bounded step counts); buf is valid for buf.len() writes and the + // shim honours the capacity; len is valid. + unsafe { + sys::sc_surface_surface_point_solve_p1_eval( + op.code(), + input.as_ptr(), + input.len() as i64, + buf.as_mut_ptr(), + buf.len() as i64, + &raw mut *len, + ) + } + }) +} diff --git a/crates/solidcore/src/surface.rs b/crates/solidcore/src/surface.rs index 7c5c88aa15..a022c90cd3 100644 --- a/crates/solidcore/src/surface.rs +++ b/crates/solidcore/src/surface.rs @@ -17,6 +17,7 @@ pub mod surf_of_revolution; #[allow(clippy::module_inception)] pub mod surface; pub mod surface_cache; +pub mod surface_point_solve; pub mod torus; pub mod trim_srf_cache; pub mod twist_volume; diff --git a/crates/solidcore/src/surface/surface_point_solve.rs b/crates/solidcore/src/surface/surface_point_solve.rs new file mode 100644 index 0000000000..9df1464395 --- /dev/null +++ b/crates/solidcore/src/surface/surface_point_solve.rs @@ -0,0 +1,12 @@ +//! The newer surface-point solvers (`SmSurface::GlobalPointSolve_1` and +//! `LocalPointSolve_1`) and their file-local classes: the problem data +//! (`SmSurfacePointSolver`), the global solver (`SmSurfPtGlobalSolver`) and the local +//! iteration stepper (`SmSurfPtSolveStepper`). +//! +//! Upstream: `source/SMLib/src/SmSurfacePointSolve.cpp`. +//! The file is split over the plan units `surface.surface_point_solve_p1`, `_p2` and +//! `_p3`; each lives in its own submodule and adds methods to the classes of `p1`. + +pub mod p1; + +pub use p1::{SurfPtGlobalSolver, SurfPtSolveStepper, SurfacePointSolver}; diff --git a/crates/solidcore/src/surface/surface_point_solve/p1.rs b/crates/solidcore/src/surface/surface_point_solve/p1.rs new file mode 100644 index 0000000000..20af956930 --- /dev/null +++ b/crates/solidcore/src/surface/surface_point_solve/p1.rs @@ -0,0 +1,2379 @@ +//! Surface-point solving, part 1: the problem data of a surface-point solve +//! ([`SurfacePointSolver`]), the global solver's construction, closure cache, objective +//! function, control-net guesses, seam and stride checks, local extremum and boundary +//! tests ([`SurfPtGlobalSolver`]), and the local iteration stepper's construction, +//! accessors, lazy evaluation, clamping, boundary bookkeeping and iso-curve drop +//! ([`SurfPtSolveStepper`]), with the file-static control-net helpers. +//! +//! Upstream: `source/SMLib/src/SmSurfacePointSolve.cpp`. +//! +//! | Rust | Upstream | +//! |---------------------------------------------------|--------------------------------------------------| +//! | [`SurfacePointSolver`], [`SurfacePointSolver::new`] | `SmSurfacePointSolver` (constructor) | +//! | `Clone`, `Clone::clone_from`, `Drop` (implicit) | `SmSurfacePointSolver` copy constructor, `operator=`, destructor | +//! | [`SurfacePointSolver::surface`], [`SurfacePointSolver::test_point`], [`SurfacePointSolver::domain`], [`SurfacePointSolver::solver_op`], [`SurfacePointSolver::tight_tol`], [`SurfacePointSolver::loose_tol`] | `SurfacePtr`, `TestPoint`, `Domain`, `SolverOp`, `TightTol`, `LooseTol` | +//! | [`SurfacePointSolver::dir_vec`], [`SurfacePointSolver::b_spline`] | `m_sDirVec`, `m_pBSplSrf` (protected members) | +//! | [`SurfPtGlobalSolver`], [`SurfPtGlobalSolver::new`] | `SmSurfPtGlobalSolver` (constructor) | +//! | [`SurfPtGlobalSolver::closed_surface`] | `SmSurfPtGlobalSolver::ClosedSurface` | +//! | [`SurfPtGlobalSolver::calc_func_val`] | `SmSurfPtGlobalSolver::CalcFuncVal` | +//! | [`SurfPtGlobalSolver::find_polygon_triangle_guess`], [`PolygonTriangleGuess`] | `SmSurfPtGlobalSolver::FindPolygonTriangleGuess` | +//! | [`SurfPtGlobalSolver::refine_guess_polygon_leg`] | `SmSurfPtGlobalSolver::RefineGuessPolygonLeg` | +//! | [`SurfPtGlobalSolver::check_bad_guess_stride`] | `SmSurfPtGlobalSolver::CheckBadGuessStride` | +//! | [`SurfPtGlobalSolver::check_guess_for_seams`] | `SmSurfPtGlobalSolver::CheckGuessForSeams` (UV point) | +//! | [`SurfPtGlobalSolver::check_guess_for_seams_cpts`] | `SmSurfPtGlobalSolver::CheckGuessForSeams` (control points) | +//! | [`SurfPtGlobalSolver::crease_subdomains`] | `SmSurfPtGlobalSolver::GetCreaseSubdomains` | +//! | [`SurfPtGlobalSolver::is_local_min`], [`SurfPtGlobalSolver::is_local_max`] | `SmSurfPtGlobalSolver::IsLocalMin`, `IsLocalMax` | +//! | [`SurfPtGlobalSolver::pushing_boundary`] | `SmSurfPtGlobalSolver::PushingBoundary` | +//! | [`triangles_dist`] | `GetTrianglesDist` (static) | +//! | [`well_behaved_control_net`] | `WellBehavedControlNet` (static) | +//! | [`ErrorNormType`] | `SmSrfPtErrorNormType` | +//! | [`SurfPtSolveStepper`], [`SurfPtSolveStepper::new`] | `SmSurfPtSolveStepper` (constructor) | +//! | [`SurfPtSolveStepper::copy_of`], [`SurfPtSolveStepper::assign`], `Drop` (implicit) | copy constructor, `operator=`, destructor | +//! | [`SurfPtSolveStepper::set_uv`], [`SurfPtSolveStepper::uv`], [`SurfPtSolveStepper::max_step`] | `SetUV`, `UV`, `MaxStep` | +//! | [`SurfPtSolveStepper::pos`], [`SurfPtSolveStepper::su`], [`SurfPtSolveStepper::sv`], [`SurfPtSolveStepper::suu`], [`SurfPtSolveStepper::suv`], [`SurfPtSolveStepper::svv`], [`SurfPtSolveStepper::normal`] | `Pos`, `Su`, `Sv`, `Suu`, `Suv`, `Svv`, `Normal` | +//! | [`SurfPtSolveStepper::gap`], [`SurfPtSolveStepper::gap_u`], [`SurfPtSolveStepper::gap_v`], [`SurfPtSolveStepper::gap_length`] | `Gap`, `GapU`, `GapV`, `GapLength` | +//! | [`SurfPtSolveStepper::iter_count`], [`SurfPtSolveStepper::set_iter_count`], [`SurfPtSolveStepper::nr_step_suspect`], [`SurfPtSolveStepper::set_nr_suspect`] | `IterCount`, `SetIterCount`, `NRStepSuspect`, `SetNRSuspect` | +//! | [`SurfPtSolveStepper::bound_hits_u`], [`SurfPtSolveStepper::bound_hits_v`] | `BoundHitsU`, `BoundHitsV` | +//! | [`SurfPtSolveStepper::eval`], [`StepperValues`] | `SmSurfPtSolveStepper::Eval` (private) | +//! | [`SurfPtSolveStepper::clamp`] | `Clamp` | +//! | [`SurfPtSolveStepper::hit_bound`] | `HitBound` | +//! | [`SurfPtSolveStepper::check_bounds`], [`BoundsCheck`] | `CheckBounds` | +//! | [`SurfPtSolveStepper::drop_to_iso_curve`] | `DropToIsoCurve` | +//! +//! Deviations: +//! - **Object model.** The classes are plain structs: the global solver and the +//! stepper hold a [`SurfacePointSolver`] (`base`) instead of deriving from it. The +//! surface is borrowed for the life of the solver (`m_pSrf`, not owned upstream +//! either); `m_pBSplSrf` is the B-spline part of a B-spline or plane with a NURB. +//! `SmOffsetSurface` is not ported, so its base-surface lookup is not reachable. +//! - **Out-params** become return values: [`PolygonTriangleGuess`], +//! [`BoundsCheck`], `(bool, SurfParamType)` from the boundary test, the new grid +//! point of the stride check. Upstream's in/out best indices of +//! `FindPolygonTriangleGuess` (kept when no net point qualifies) are passed in. +//! The constructor keeps the unused `cpdOptTargetDistance` and +//! `eSolutionRequested` (`NotUsed` upstream). +//! - **Ignored statuses.** Where upstream ignores an evaluation's status the outputs +//! keep their previous values (initially undefined, [`Vec3::UNDEF`]), and an +//! `SmSurfaceEval` accessor reads the values it holds; [`SolidError::Unported`] +//! still propagates. A failing `CalculateBoundingBox` of the directed-maximise +//! constructor leaves the box in its initial (inside-out) state, as upstream. +//! - **Unported callees.** `SmSurface::IsOnSeam` (`surface.surface_p4`) for every +//! kind but planes, `SmSurfaceEval::Normal` (`surface.surface_p4`) and the base +//! `SmSurface::CreateIsoParametricCurve` (`surface.surface_p5`, the iso curve of a +//! curve-bounded or STEP surface) return [`SolidError::Unported`]. +//! - **`DropToIsoCurve`** passes its guess parameter by pointer and its output +//! parameter by reference to the same variable: `SmCurve::DropPoint` zeroes the +//! output first, so the guess is always `0`. The port passes `0` explicitly. +//! - **Control points.** An index past the control net (upstream reads past the +//! array) returns [`SolidError::InvalidInput`]. +//! - Debug-only drawing and `SM_ASSERT`s are compiled out of the release build and +//! omitted. `Dump` has no counterpart. + +use crate::curve::curve::Curve; +use crate::error::{Result, SolidError}; +use crate::geom::extent1d::Extent1d; +use crate::geom::extent2d::{Extent2d, SS_UMAX, SS_UMIN, SS_VMAX, SS_VMIN}; +use crate::geom::extent3d::Extent3d; +use crate::geom::geom_utility::p1::{line_closest_point, vec_lin_comb_two_vectors}; +use crate::geom::geom_utility::p2::{triangle_point_distance, ContinuityType}; +use crate::geom::global_solver::{SolutionRequested, SolverOperation}; +use crate::geom::tol::ANG_TOL_DEG; +use crate::geom::vector2d::{Point2, Vec2}; +use crate::geom::vector3d::{Point3, Vec3}; +use crate::kernel::Kernel; +use crate::math::{BIG_DOUBLE, EFF_ZERO, EFF_ZERO_SQRT, UNDEF_DOUBLE}; +use crate::nurbs::b_spline_surface::p2::IsoCurveOptions; +use crate::nurbs::b_spline_surface::BSplineSurface; +use crate::nurbs::b_spline_surface::SurfParamType; +use crate::nurbs::math::CPoint; +use crate::surface::surface::p2::SurfaceEval; +use crate::surface::surface::{Surface, SurfaceKind}; + +const OP_CPTS: &str = "surface::surface_point_solve::p1::control_point"; +const OP_TRI: &str = + "surface::surface_point_solve::p1::SurfPtGlobalSolver::find_polygon_triangle_guess"; +const OP_LEG: &str = + "surface::surface_point_solve::p1::SurfPtGlobalSolver::refine_guess_polygon_leg"; + +/// `SM_CONTINUITY_ANGLE`, the default angle tolerance of `CalculateContinuities`. +const CONTINUITY_ANGLE: f64 = ANG_TOL_DEG; + +// ---- SmSurfacePointSolver --------------------------------------------------------------- + +/// The data common to a surface-point solve (`SmSurfacePointSolver`): the surface, its +/// domain, the test point, the operation and the tolerances. +/// +/// The allowed operations are [`SolverOperation::Minimize`], +/// [`SolverOperation::Normalize`], [`SolverOperation::Intersect`] and (partly) +/// [`SolverOperation::Maximize`] and [`SolverOperation::Signed3dDirectedMaximize`]. +#[derive(Debug, Clone)] +pub struct SurfacePointSolver<'s> { + /// `m_pSrf` (not owned). + surface: &'s Surface, + /// `m_sDomain`. + domain: Extent2d, + /// `m_sTestPt`. + test_pt: Point3, + /// `m_sDirVec`: for the directed operation. + dir_vec: Vec3, + /// `m_eSolverOp`. + solver_op: SolverOperation, + /// `m_pBSplSrf`: the surface as a B-spline with a NURB, if it is one. + b_spline: Option<&'s BSplineSurface>, + /// `m_dTightTol`. + tight_tol: f64, + /// `m_dLooseTol`. + loose_tol: f64, +} + +impl<'s> SurfacePointSolver<'s> { + /// The problem data (`SmSurfacePointSolver(pSurf, crUVDomain, eSolverOp, + /// crTestPoint, dDistanceTolerance, cpdOptTargetDistance, eSolutionRequested)`). + /// + /// For [`SolverOperation::Signed3dDirectedMaximize`] the test point is the + /// direction to maximise along; the stored direction is its unitised negation and + /// the stored test point a corner of the surface's bounding box, expanded by 20%, + /// on the far side from that direction. + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the bounding box (directed operation only; its + /// other failures are ignored, as upstream). + pub fn new( + k: &Kernel, + surface: &'s Surface, + uv_domain: &Extent2d, + solver_op: SolverOperation, + test_point: Point3, + distance_tolerance: f64, + _opt_target_distance: Option, + _solution_requested: SolutionRequested, + ) -> Result { + // We need an SmBSplineSurface for some operations. + // (An SmOffsetSurface would work from its base surface: not ported.) + let b_spline = match surface.kind() { + SurfaceKind::BSpline(b) => Some(b), + SurfaceKind::Plane(p) => Some(p.base()), + SurfaceKind::CurveBounded(_) | SurfaceKind::Step(_) => None, + } + .filter(|b| b.gw_nurb().is_some()); + + let mut solver = Self { + surface, + domain: *uv_domain, + test_pt: test_point, + dir_vec: Vec3::ZERO, + solver_op, + b_spline, + // Tight tolerance: tight, but it should be achievable. + tight_tol: EFF_ZERO * (1.0 + test_point.max_dimension()), + loose_tol: distance_tolerance, + }; + + if solver_op == SolverOperation::Signed3dDirectedMaximize { + // The direction comes in as the test point; to maximise along it we + // minimise along its negation. + solver.dir_vec = (-test_point).unitize_or_z(); + + // A point to define a plane: a corner of the expanded bounding box. + // (status ignored: a failing box is left in its initial, inside-out state) + let mut bbox = + match surface.calculate_bounding_box(k, &solver.domain, [true, false, false], true) + { + Ok(boxes) => boxes.normal_box.unwrap_or_else(Extent3d::new), + Err(e) if e.is_unported() => return Err(e), + Err(_) => Extent3d::new(), + }; + bbox.expand_relative(0.2); + + let d = solver.dir_vec; + solver.test_pt.x = if d.x > 0.0 { + bbox.min().x + } else { + bbox.max().x + }; + solver.test_pt.y = if d.y > 0.0 { + bbox.min().y + } else { + bbox.max().y + }; + solver.test_pt.z = if d.z > 0.0 { + bbox.min().z + } else { + bbox.max().z + }; + } + Ok(solver) + } + + /// The surface (`SurfacePtr`). + #[must_use] + pub const fn surface(&self) -> &'s Surface { + self.surface + } + + /// The test point (`TestPoint`). + #[must_use] + pub const fn test_point(&self) -> Point3 { + self.test_pt + } + + /// The UV domain (`Domain`). + #[must_use] + pub const fn domain(&self) -> &Extent2d { + &self.domain + } + + /// The operation (`SolverOp`). + #[must_use] + pub const fn solver_op(&self) -> SolverOperation { + self.solver_op + } + + /// The tight tolerance (`TightTol`). + #[must_use] + pub const fn tight_tol(&self) -> f64 { + self.tight_tol + } + + /// The loose tolerance (`LooseTol`). + #[must_use] + pub const fn loose_tol(&self) -> f64 { + self.loose_tol + } + + /// The direction of the directed operation, zero otherwise (`m_sDirVec`). + #[must_use] + pub const fn dir_vec(&self) -> Vec3 { + self.dir_vec + } + + /// The surface as a B-spline with a NURB, if it is one (`m_pBSplSrf`). + #[must_use] + pub const fn b_spline(&self) -> Option<&'s BSplineSurface> { + self.b_spline + } + + /// `crGap` reduced to its component along the direction for the directed + /// operation (`dDot * m_sDirVec`), else unchanged. + fn directed(&self, gap: Vec3) -> Vec3 { + if self.solver_op == SolverOperation::Signed3dDirectedMaximize { + let dot = gap.dot(self.dir_vec); + dot * self.dir_vec + } else { + gap + } + } +} + +// ---- control-net helpers ------------------------------------------------------------------ + +/// The control point `(i, j)` of a net stored row by row with `num_v` points per row, +/// divided by its weight when the net is rational. +fn control_point( + pts: &[CPoint], + num_v: usize, + i: usize, + j: usize, + rational: bool, +) -> Result { + let idx = + i.checked_mul(num_v) + .and_then(|x| x.checked_add(j)) + .ok_or(SolidError::invalid_input( + OP_CPTS, + "control point index overflows", + ))?; + let c = pts.get(idx).ok_or(SolidError::invalid_input( + OP_CPTS, + "control point index past the net", + ))?; + let mut p = Point3::new(c.x, c.y, c.z); + if rational { + p /= c.w; + } + Ok(p) +} + +/// The closest approach of `test_pt` to the two triangles of the control-net square +/// with lower corner `(i, j)` (`GetTrianglesDist`): the distance and the local `(u, v)` +/// of the closest point in the square (`[i j] [i+1 j] [i j+1]` and +/// `[i+1 j+1] [i j+1] [i+1 j]`). +/// +/// The control points are stored row by row (`v` fastest), `num_v` per row; +/// `_num_u` is not used (as upstream). +/// +/// # Errors +/// +/// [`SolidError::InvalidInput`] for a square past the net. +pub fn triangles_dist( + test_pt: Point3, + cpts: &[CPoint], + rational: bool, + i: usize, + j: usize, + _num_u: usize, + num_v: usize, +) -> Result<(f64, f64, f64)> { + // get the four corners of this 'square'. + let pt00 = control_point(cpts, num_v, i, j, rational)?; + let pt10 = control_point(cpts, num_v, i + 1, j, rational)?; + let pt01 = control_point(cpts, num_v, i, j + 1, rational)?; + let pt11 = control_point(cpts, num_v, i + 1, j + 1, rational)?; + + let d1 = triangle_point_distance(pt00, pt10, pt01, test_pt)?; + let d2 = triangle_point_distance(pt11, pt01, pt10, test_pt)?; + + if d1.distance <= d2.distance { + Ok((d1.distance, d1.u, d1.v)) + } else { + Ok((d2.distance, 1.0 - d2.u, 1.0 - d2.v)) + } +} + +/// Whether the control net is well behaved around control point `(ii, jj)`, so that +/// the control-net triangle guess cannot be fooled (`WellBehavedControlNet`): no sharp +/// turn in u or v (cosine below `-0.61`), no coincident interior points, and the u and +/// v legs neither too acute nor too oblique (cosine within `ยฑ0.8`). +/// +/// `_test_pt` is not used (as upstream). +/// +/// # Errors +/// +/// [`SolidError::InvalidInput`] for a point past the net. +pub fn well_behaved_control_net( + _test_pt: Point3, + cpts: &[CPoint], + rational: bool, + ii: usize, + jj: usize, + num_u: usize, + num_v: usize, +) -> Result { + // Method: check for sharp angles. Check u- and v-directions. + const COSINE_LIMIT0: f64 = -0.61; // about 127.6 degrees + // For the u-v angle: arbitrary guess to limit how often `return TRUE` occurs. + const COSINE_LIMIT1: f64 = -0.80; // about 143.1 degrees + + // Get the mid point. + let pt1 = control_point(cpts, num_v, ii, jj, rational)?; + + // First check in u-direction. + if ii > 0 && ii < num_u.wrapping_sub(1) { + let pt0 = control_point(cpts, num_v, ii - 1, jj, rational)?; + let pt2 = control_point(cpts, num_v, ii + 1, jj, rational)?; + + let vec1 = pt1 - pt0; + let vec2 = pt2 - pt1; + + let len1 = vec1.length(); + let len2 = vec2.length(); + + if len1 < EFF_ZERO || len2 < EFF_ZERO { + // Coincident control points: ok only on the low or high end of v. + return Ok(jj == 0 || jj >= num_v.wrapping_sub(1)); + } + + let cosine = vec1.dot(vec2) / (len1 * len2); + if cosine < COSINE_LIMIT0 { + return Ok(false); + } + } + + // Repeat check in v-direction. + if jj > 0 && jj < num_v.wrapping_sub(1) { + let pt0 = control_point(cpts, num_v, ii, jj - 1, rational)?; + let pt2 = control_point(cpts, num_v, ii, jj + 1, rational)?; + + let vec1 = pt1 - pt0; + let vec2 = pt2 - pt1; + + let len1 = vec1.length(); + let len2 = vec2.length(); + + if len1 < EFF_ZERO || len2 < EFF_ZERO { + // Coincident control points: ok only on the low or high end of u. + return Ok(ii == 0 || ii >= num_u.wrapping_sub(1)); + } + + let cosine = vec1.dot(vec2) / (len1 * len2); + if cosine < COSINE_LIMIT0 { + return Ok(false); + } + } + + // Check angle between U and V directions + if ii < num_u.wrapping_sub(1) && jj < num_v.wrapping_sub(1) { + let pt0 = control_point(cpts, num_v, ii + 1, jj, rational)?; + let pt2 = control_point(cpts, num_v, ii, jj + 1, rational)?; + + let vec1 = pt0 - pt1; + let vec2 = pt2 - pt1; + + let len1 = vec1.length(); + let len2 = vec2.length(); + + if len1 < EFF_ZERO { + // ok only on the low or high end of v. + return Ok(jj == 0 || jj >= num_v.wrapping_sub(1)); + } else if len2 < EFF_ZERO { + // ok only on the low or high end of u. + return Ok(ii == 0 || ii >= num_u.wrapping_sub(1)); + } + + let cosine = vec1.dot(vec2) / (len1 * len2); + if cosine < COSINE_LIMIT1 || cosine > -COSINE_LIMIT1 { + return Ok(false); + } + } + + // No complaints. + Ok(true) +} + +// ---- SmSurfPtGlobalSolver ----------------------------------------------------------------- + +/// The global surface-point solver (`SmSurfPtGlobalSolver`): the problem data and the +/// lazily computed closure of the surface in u and v. +#[derive(Debug, Clone)] +pub struct SurfPtGlobalSolver<'s> { + /// The problem data (the `SmSurfacePointSolver` base). + pub base: SurfacePointSolver<'s>, + /// `m_bClosedInU` (`None` = `UNSURE`). + closed_in_u: Option, + /// `m_bClosedInV` (`None` = `UNSURE`). + closed_in_v: Option, +} + +/// The result of [`SurfPtGlobalSolver::find_polygon_triangle_guess`]. +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct PolygonTriangleGuess { + /// The UV guess (`sUVGuess`). + pub uv: Point2, + /// The best control point's u index (`rlBestIdxU`). + pub best_idx_u: usize, + /// The best control point's v index (`rlBestIdxV`). + pub best_idx_v: usize, + /// The distance to the closest control-net triangle (`rdBestDist`; negated for + /// maximise, the signed distance along the direction for the directed operation). + pub best_dist: f64, + /// The average distance between neighbouring control points (`rdAveCPtDist`). + pub ave_cpt_dist: f64, + /// The net may be far from the surface (`rbSuspicious`): rational, or badly + /// behaved somewhere. + pub suspicious: bool, +} + +impl<'s> SurfPtGlobalSolver<'s> { + /// A global solver (`SmSurfPtGlobalSolver(...)`); the closure is computed on + /// first use. + /// + /// # Errors + /// + /// Those of [`SurfacePointSolver::new`]. + pub fn new( + k: &Kernel, + surface: &'s Surface, + uv_domain: &Extent2d, + solver_op: SolverOperation, + test_point: Point3, + distance_tolerance: f64, + opt_target_distance: Option, + solution_requested: SolutionRequested, + ) -> Result { + Ok(Self { + base: SurfacePointSolver::new( + k, + surface, + uv_domain, + solver_op, + test_point, + distance_tolerance, + opt_target_distance, + solution_requested, + )?, + closed_in_u: None, + closed_in_v: None, + }) + } + + /// Whether the surface is closed over the domain in `which_dir` (`SM_SP_U` or + /// `SM_SP_V`; `false` for any other value), computed once (`ClosedSurface`). + /// + /// # Errors + /// + /// Those of [`Surface::is_closed`]. + pub fn closed_surface(&mut self, which_dir: SurfParamType) -> Result { + let b = &self.base; + if which_dir == SurfParamType::U { + if self.closed_in_u.is_none() { + self.closed_in_u = Some( + b.surface + .is_closed(&b.domain, SurfParamType::U, None, false)? + .0, + ); + } + Ok(self.closed_in_u.unwrap_or(false)) + } else if which_dir == SurfParamType::V { + if self.closed_in_v.is_none() { + self.closed_in_v = Some( + b.surface + .is_closed(&b.domain, SurfParamType::V, None, false)? + .0, + ); + } + Ok(self.closed_in_v.unwrap_or(false)) + } else { + Ok(false) + } + } + + /// The objective function at `uv` (`CalcFuncVal`): for normalise the sum of the + /// gap's components along the unit tangents, else the distance (along the + /// direction for the directed operation, negated for maximise); + /// [`BIG_DOUBLE`] when the surface does not evaluate. + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn calc_func_val(&self, uv: Point2) -> Result { + let b = &self.base; + let mut ret_val = 0.0; + + if b.solver_op == SolverOperation::Normalize { + let (srf_pt, su, sv) = match b.surface.evaluate_1st_derivatives(uv, false, false) { + Ok(r) => r, + Err(e) if e.is_unported() => return Err(e), + Err(_) => return Ok(BIG_DOUBLE), + }; + if srf_pt.is_undef() { + return Ok(BIG_DOUBLE); + } + + let gap = srf_pt - b.test_pt; + + let su = su.unitize_or_z(); + let sv = sv.unitize_or_z(); + + ret_val += gap.dot(su).abs(); + ret_val += gap.dot(sv).abs(); + } else { + let srf_pt = match b.surface.evaluate_point(uv) { + Ok(p) => p, + Err(e) if e.is_unported() => return Err(e), + Err(_) => return Ok(BIG_DOUBLE), + }; + if srf_pt.is_undef() { + return Ok(BIG_DOUBLE); + } + + let gap = b.directed(srf_pt - b.test_pt); + ret_val = gap.length(); + + if b.solver_op == SolverOperation::Maximize { + ret_val = -ret_val; + } + } + + Ok(ret_val) + } + + /// A first guess from the control net (`FindPolygonTriangleGuess`): the UV of the + /// closest point on any control-net triangle (the extreme control point for the + /// directed operation), from the Greville abscissae of its square, clamped to + /// the domain. `best_idx` is the caller's best control point, kept when no net + /// point qualifies (upstream's in/out indices). + /// + /// # Errors + /// + /// `SM_ERR` without a B-spline surface with a NURB; those of the Greville + /// abscissae and the triangle distances. + pub fn find_polygon_triangle_guess( + &self, + best_idx: (usize, usize), + ) -> Result { + let b = &self.base; + // We need a SmBSplineSurface to work with control points. + let Some(bspl) = b.b_spline else { + return Err(SolidError::sm_err(OP_TRI)); + }; + + let (best_idx_u, best_idx_v) = best_idx; + let mut best_idx_u = best_idx_u; + let mut best_idx_v = best_idx_v; + let (num_u, num_v, cpts) = bspl + .control_points() + .map_err(|_| SolidError::sm_err(OP_TRI))?; + let rational = bspl.is_rational(); + let mut best_dist = BIG_DOUBLE; + let mut this_local_u = -1.0; + let mut best_local_u = -1.0; + let mut this_local_v = -1.0; + let mut best_local_v = -1.0; + + // For collecting average distances: + let mut accum_dist = 0.0; + let mut dist_count: u64 = 0; + + // Rational surfaces can have polygons whose shapes are very different from + // the surface. [B29] + let mut suspicious = rational; + + // For operation MAXIMIZE - negate the BestDist guess + if b.solver_op == SolverOperation::Maximize { + best_dist = -best_dist; + } + + for ii in 0..num_u { + for jj in 0..num_v { + // First, check for a badly-behaved control net. [080718, 080830] + if !suspicious + && !well_behaved_control_net(b.test_pt, &cpts, rational, ii, jj, num_u, num_v)? + { + suspicious = true; // Warn the caller. + } + + // This control point. + let pt0 = control_point(&cpts, num_v, ii, jj, rational)?; + + // In all cases, the best is the smallest signed value. + let this_dist = if b.solver_op == SolverOperation::Signed3dDirectedMaximize { + this_local_u = -1.0; + this_local_v = -1.0; + pt0.dot(b.dir_vec) + } else { + // The triangles of the square 'ahead' of this point: ii+1, jj+1. + let mut d = BIG_DOUBLE; + if ii < num_u - 1 && jj < num_v - 1 { + let (dist, lu, lv) = + triangles_dist(b.test_pt, &cpts, rational, ii, jj, num_u, num_v)?; + d = dist; + this_local_u = lu; + this_local_v = lv; + + if b.solver_op == SolverOperation::Maximize { + d = -d; + } + } + d + }; + + // save the best found case + if this_dist < best_dist { + best_dist = this_dist; + best_idx_u = ii; + best_idx_v = jj; + best_local_u = this_local_u; + best_local_v = this_local_v; + } + + // same col control point distances + if ii > 0 { + let pt1 = control_point(&cpts, num_v, ii - 1, jj, rational)?; + accum_dist += pt0.distance(pt1); + dist_count += 1; + } + + // same row control point distances + if jj > 0 { + let pt1 = control_point(&cpts, num_v, ii, jj - 1, rational)?; + accum_dist += pt0.distance(pt1); + dist_count += 1; + } + } + } + + // Other outputs + let ave_cpt_dist = accum_dist / dist_count as f64; + + // Have to check here for seams. + let (iu, iv) = + self.check_guess_for_seams_cpts(best_idx_u, best_idx_v, num_u, num_v, &cpts, rational)?; + best_idx_u = iu; + best_idx_v = iv; + + // Use the Greville abscissae for the control point indices. + let mut uv = Point2::new( + bspl.greville_abscissa(SurfParamType::U, best_idx_u)?, + bspl.greville_abscissa(SurfParamType::V, best_idx_v)?, + ); + + // Refine according to the local triangle position. + if b.solver_op != SolverOperation::Signed3dDirectedMaximize { + if best_local_u > EFF_ZERO_SQRT && best_idx_u < num_u - 1 { + let next_greville = bspl.greville_abscissa(SurfParamType::U, best_idx_u + 1)?; + uv.x = uv.x + best_local_u * (next_greville - uv.x); + } + if best_local_v > EFF_ZERO_SQRT && best_idx_v < num_v - 1 { + let next_greville = bspl.greville_abscissa(SurfParamType::V, best_idx_v + 1)?; + uv.y = uv.y + best_local_v * (next_greville - uv.y); + } + } + + Ok(PolygonTriangleGuess { + uv: b.domain.clamp_point(uv), + best_idx_u, + best_idx_v, + best_dist, + ave_cpt_dist, + suspicious, + }) + } + + /// Refines the guess of the closest control point `(best_idx_u, best_idx_v)` by + /// dropping the test point to the four control-polygon legs around it + /// (`RefineGuessPolygonLeg`): the Greville abscissae of the point, shifted + /// linearly towards a neighbour by up to half a leg. + /// + /// # Errors + /// + /// `SM_ERR` without a B-spline surface with a NURB or for the directed operation; + /// those of the Greville abscissae; [`SolidError::InvalidInput`] for indices past + /// the net. + pub fn refine_guess_polygon_leg(&self, best_idx_u: usize, best_idx_v: usize) -> Result { + let b = &self.base; + // This requires an SmBSplineSurface. + let Some(bspl) = b.b_spline else { + return Err(SolidError::sm_err(OP_LEG)); + }; + + // Also, this won't help in this case: + if b.solver_op == SolverOperation::Signed3dDirectedMaximize { + return Err(SolidError::sm_err(OP_LEG)); + } + + let (num_u, num_v, cpts) = bspl + .control_points() + .map_err(|_| SolidError::sm_err(OP_LEG))?; + let rational = bspl.is_rational(); + + let best_pt = control_point(&cpts, num_v, best_idx_u, best_idx_v, rational)?; + + let mut uv = Point2::new( + bspl.greville_abscissa(SurfParamType::U, best_idx_u)?, + bspl.greville_abscissa(SurfParamType::V, best_idx_v)?, + ); + + let shift_to = |this_pt: Point3| -> f64 { + let shift = line_closest_point(best_pt, this_pt - best_pt, b.test_pt); + // (NaN stays NaN, as upstream's two tests) + shift.clamp(0.0, 0.5) + }; + + // Drop to the two legs running in the u-direction. + let mut down_shift = 0.0; + let mut up_shift = 0.0; + if best_idx_u > 0 { + down_shift = shift_to(control_point( + &cpts, + num_v, + best_idx_u - 1, + best_idx_v, + rational, + )?); + } + if best_idx_u < num_u - 1 { + up_shift = shift_to(control_point( + &cpts, + num_v, + best_idx_u + 1, + best_idx_v, + rational, + )?); + } + + // If it dropped interior to either or both, shift the parameter. + let mut shift = up_shift - down_shift; + if shift.abs() > EFF_ZERO_SQRT { + let other_prm = if shift > 0.0 { + bspl.greville_abscissa(SurfParamType::U, best_idx_u + 1)? + } else { + shift = -shift; // make it positive. + bspl.greville_abscissa(SurfParamType::U, best_idx_u.wrapping_sub(1))? + }; + + // Linearly interpolate + uv.x = (1.0 - shift) * uv.x + shift * other_prm; + } + + // Now repeat the whole thing for the v-direction. + down_shift = 0.0; + up_shift = 0.0; + if best_idx_v > 0 { + down_shift = shift_to(control_point( + &cpts, + num_v, + best_idx_u, + best_idx_v - 1, + rational, + )?); + } + if best_idx_v < num_v - 1 { + up_shift = shift_to(control_point( + &cpts, + num_v, + best_idx_u, + best_idx_v + 1, + rational, + )?); + } + + shift = up_shift - down_shift; + if shift.abs() > EFF_ZERO_SQRT { + let other_prm = if shift > 0.0 { + bspl.greville_abscissa(SurfParamType::V, best_idx_v + 1)? + } else { + shift = -shift; // make it positive. + bspl.greville_abscissa(SurfParamType::V, best_idx_v.wrapping_sub(1))? + }; + + // Linearly interpolate + uv.y = (1.0 - shift) * uv.y + shift * other_prm; + } + + Ok(uv) + } + + /// Whether a grid point may be on the wrong side of a surface that doubles back + /// (`CheckBadGuessStride`): takes a plane step from `grid_pt0` towards the test + /// point (clamped to the domain) and, when that step is longer than 10% of the + /// domain, a second one if it improves the objective. Returns `None` when the + /// first plane step cannot be computed (the check is skipped), else the new grid + /// point and its objective value. + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluations. + pub fn check_bad_guess_stride( + &self, + grid_pt0: &mut SurfaceEval<'s>, + ) -> Result, f64)>> { + let b = &self.base; + let pos0 = eval_value(grid_pt0, 0, 0)?; + let su0 = eval_value(grid_pt0, 1, 0)?; + let sv0 = eval_value(grid_pt0, 0, 1)?; + let gap = b.test_pt - pos0; + let Ok(uv_step) = vec_lin_comb_two_vectors(su0, sv0, gap) else { + return Ok(None); // Just forget this check. + }; + + let mut new_grid_pt = SurfaceEval::new(Some(b.surface)); + let mut new_uv0 = grid_pt0.uv() + uv_step; + new_uv0 = b.domain.clamp_point(new_uv0); // ok if outside 'subdomain'. + new_grid_pt.set_uv(new_uv0); + let mut new_func_val = self.calc_func_val(new_uv0)?; + + // If the step was big, take another one. [B51] + let max_step_sq = 0.10 * 0.10; // 10%, squared. + + if uv_step.length_squared() > max_step_sq * b.domain.size().length_squared() { + // watch out for failing Evaluations + if fails_eval(&mut new_grid_pt)? { + return Ok(Some((new_grid_pt, new_func_val))); // Just use the first result. + } + + let gap = b.test_pt - eval_value(&mut new_grid_pt, 0, 0)?; + let su = eval_value(&mut new_grid_pt, 1, 0)?; + let sv = eval_value(&mut new_grid_pt, 0, 1)?; + let Ok(uv_step) = vec_lin_comb_two_vectors(su, sv, gap) else { + return Ok(Some((new_grid_pt, new_func_val))); // Just use the first result. + }; + + let mut uv = new_grid_pt.uv() + uv_step; + uv = b.domain.clamp_point(uv); // ok if outside 'subdomain'. + let temp_func_val = self.calc_func_val(uv)?; + if temp_func_val < new_func_val { + new_grid_pt.set_uv(uv); + new_func_val = temp_func_val; + } + } + + Ok(Some((new_grid_pt, new_func_val))) + } + + /// On a seam, decides which end of the domain the UV guess is better at and may + /// flip it across (`CheckGuessForSeams`, UV point version). + /// + /// # Errors + /// + /// Those of the seam and closure tests; [`SolidError::Unported`]: + /// `SmSurface::IsOnSeam` (`surface.surface_p4`) for every kind but planes. + pub fn check_guess_for_seams(&mut self, uv_guess: Point2) -> Result { + let mut uv = uv_guess; + if !is_on_seam(self.base.surface, uv)? { + return Ok(uv); + } + + let mut pt = Point3::UNDEF; + let mut su = Vec3::UNDEF; + let mut sv = Vec3::UNDEF; + + // Check u-direction. + let dom = self.base.domain; + if (uv.x < dom.min().x + EFF_ZERO || uv.x > dom.max().x - EFF_ZERO) + && self.closed_surface(SurfParamType::U)? + { + // Check whether low or high bound is better (status ignored upstream). + eval_1st(self.base.surface, uv, &mut pt, &mut su, &mut sv)?; + let gap = self.base.directed(pt - self.base.test_pt); + uv.x = if gap.dot(su) > 0.0 { + dom.max().x + } else { + dom.min().x + }; + } + + // Check v-direction. + if (uv.y < dom.min().y + EFF_ZERO || uv.y > dom.max().y - EFF_ZERO) + && self.closed_surface(SurfParamType::V)? + { + eval_1st(self.base.surface, uv, &mut pt, &mut su, &mut sv)?; + let gap = self.base.directed(pt - self.base.test_pt); + uv.y = if gap.dot(sv) > 0.0 { + dom.max().y + } else { + dom.min().y + }; + } + Ok(uv) + } + + /// On a seam of the control net, decides which end the best control point + /// `(idx_u, idx_v)` is better at and may flip it across (`CheckGuessForSeams`, + /// control point version): a direction with more than two points is a seam when + /// its first and last points of the row coincide. + /// + /// # Errors + /// + /// [`SolidError::InvalidInput`] for indices past the net. + pub fn check_guess_for_seams_cpts( + &self, + idx_u: usize, + idx_v: usize, + num_u: usize, + num_v: usize, + cpts: &[CPoint], + rational: bool, + ) -> Result<(usize, usize)> { + let mut idx_u = idx_u; + let mut idx_v = idx_v; + if idx_u > 0 && idx_u < num_u.wrapping_sub(1) && idx_v > 0 && idx_v < num_v.wrapping_sub(1) + { + return Ok((idx_u, idx_v)); // not on boundary. + } + let b = &self.base; + let shift = |seam_pt: Point3, other_pt: Point3| -> f64 { + if b.solver_op == SolverOperation::Signed3dDirectedMaximize { + -b.dir_vec.dot(other_pt - seam_pt) + } else { + line_closest_point(seam_pt, other_pt - seam_pt, b.test_pt) + } + }; + + // Check u-direction. + if num_u > 2 && (idx_u == 0 || idx_u == num_u - 1) { + // Check whether it's a seam. + let seam_pt = control_point(cpts, num_v, 0, idx_v, rational)?; + let other_pt = control_point(cpts, num_v, num_u - 1, idx_v, rational)?; + + if seam_pt.closer_than(EFF_ZERO, other_pt) { + let down_shift = shift( + seam_pt, + control_point(cpts, num_v, num_u - 2, idx_v, rational)?, + ); + let up_shift = shift(seam_pt, control_point(cpts, num_v, 1, idx_v, rational)?); + + // Lean towards the one that's positive. + let diff = up_shift - down_shift; + idx_u = if diff >= 0.0 { 0 } else { num_u - 1 }; + } + } + + // Repeat for v-direction. + if num_v > 2 && (idx_v == 0 || idx_v == num_v - 1) { + // Check whether it's a seam. + let seam_pt = control_point(cpts, num_v, idx_u, 0, rational)?; + let other_pt = control_point(cpts, num_v, idx_u, num_v - 1, rational)?; + + if seam_pt.closer_than(EFF_ZERO, other_pt) { + let down_shift = shift( + seam_pt, + control_point(cpts, num_v, idx_u, num_v - 2, rational)?, + ); + let up_shift = shift(seam_pt, control_point(cpts, num_v, idx_u, 1, rational)?); + + let diff = up_shift - down_shift; + idx_v = if diff >= 0.0 { 0 } else { num_v - 1 }; + } + } + + Ok((idx_u, idx_v)) + } + + /// The domain broken up along creases (`GetCreaseSubdomains`). Upstream switches + /// the splitting off (`sbDoCreaseSubdomains = FALSE`): the list is the whole + /// domain. + /// + /// # Errors + /// + /// Those of the knots (only with the splitting switched on). + pub fn crease_subdomains(&self) -> Result> { + // Currently not used. + const DO_CREASE_SUBDOMAINS: bool = false; + + let b = &self.base; + let mut list = vec![b.domain]; + if !DO_CREASE_SUBDOMAINS { + return Ok(list); + } + + // This requires a B-Spline surface. + let Some(bspl) = b.b_spline else { + return Ok(list); + }; + + for dir in [SurfParamType::U, SurfParamType::V] { + let domain = if dir == SurfParamType::U { + b.domain.u_interval() + } else { + b.domain.v_interval() + }; + let tol = -(domain.length() / 1000.0); // on-boundary means Outside. + let (knots, mults) = bspl.knots(dir, None)?; + let deg = bspl.degree(dir); + // For each interior knot: + let num_knots = mults.len(); + for ii in 1..num_knots.saturating_sub(1) { + let (Some(&knot), Some(&mult)) = (knots.get(ii), mults.get(ii)) else { + continue; + }; + if mult < deg || !domain.contains_value(knot, tol) { + continue; + } + // Split every subdomain that contains the knot into two pieces. + let list_size = list.len(); + for jj in 0..list_size { + let Some(sub) = list.get(jj).copied() else { + continue; + }; + let mut ivl = if dir == SurfParamType::U { + sub.u_interval() + } else { + sub.v_interval() + }; + if !ivl.contains_value(knot, tol) { + continue; + } + let high_end = ivl.max(); + let mut low = sub; + let _ = ivl.set_min_max(ivl.min(), knot); + set_interval(&mut low, dir, &ivl); + list.push(low); + let mut high = low; + let _ = ivl.set_min_max(knot, high_end); + set_interval(&mut high, dir, &ivl); + if let Some(slot) = list.get_mut(jj) { + *slot = high; + } + } + } + } + Ok(list) + } + + /// Whether the evaluated point is a local minimum of the distance to the test + /// point (`IsLocalMin`): on the surface within `tol`, or on the surface normal + /// and within the radius of curvature in some direction not along a boundary it + /// sits on. + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn is_local_min(&self, surf_eval: &mut SurfaceEval<'_>, tol: f64) -> Result { + self.is_local_extremum(surf_eval, tol, true) + } + + /// Whether the evaluated point is a local maximum of the distance to the test + /// point (`IsLocalMax`): off the surface, on its normal and beyond the centre of + /// curvature in some direction not along a boundary it sits on. + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn is_local_max(&self, surf_eval: &mut SurfaceEval<'_>, tol: f64) -> Result { + self.is_local_extremum(surf_eval, tol, false) + } + + /// The common body of `IsLocalMin` (`on_surface_result = TRUE`) and `IsLocalMax` + /// (`FALSE`): they differ only in the result for a point on the surface. + fn is_local_extremum( + &self, + surf_eval: &mut SurfaceEval<'_>, + tol: f64, + on_surface_result: bool, + ) -> Result { + let b = &self.base; + let gap = b.directed(eval_value(surf_eval, 0, 0)? - b.test_pt); + let dist = gap.length(); + if dist <= tol { + return Ok(on_surface_result); + } + + // We are not right on the surface. + let su = eval_value(surf_eval, 1, 0)?; + let sv = eval_value(surf_eval, 0, 1)?; + + if gap.dot(su).abs() > tol { + return Ok(false); + } + if gap.dot(sv).abs() > tol { + return Ok(false); + } + + // We are off the surface and on the surface normal: see upstream's notes on + // the Newton and plane step denominators. + let noise_lim = EFF_ZERO * 1000.0; + + let suu = eval_value(surf_eval, 2, 0)?; + let svv = eval_value(surf_eval, 0, 2)?; + + let gap_u = b.directed(su); + let gap_v = b.directed(sv); + + // If on a boundary, don't check in the direction of the boundary + // that we're on; like being on the end of a curve [B243]. + let bdry_flags = b.domain.point_boundaries(surf_eval.uv(), EFF_ZERO); + + if !((bdry_flags & SS_UMIN) != 0 || (bdry_flags & SS_UMAX) != 0) { + let f1 = gap_u.dot(su); + let f2 = gap.dot(suu); + + // If flat, don't return positive: make sure f1 is not zero. + if f1.abs() > noise_lim && f1 + f2 < -noise_lim { + return Ok(true); + } + } + + if !((bdry_flags & SS_VMIN) != 0 || (bdry_flags & SS_VMAX) != 0) { + let f1 = gap_v.dot(sv); + let f2 = gap.dot(svv); + + if f1.abs() > noise_lim && f1 + f2 < -noise_lim { + return Ok(true); + } + } + + Ok(false) + } + + /// Whether the evaluated point is on a domain boundary (within `|tol|`) and the + /// plane step towards the test point leaves the domain there by more than `tol` + /// (`PushingBoundary`), and which boundary: [`SurfParamType::UMin`], + /// [`SurfParamType::UMax`], [`SurfParamType::VMin`], [`SurfParamType::VMax`], + /// [`SurfParamType::Both`] (a corner) or [`SurfParamType::Neither`]. + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn pushing_boundary( + &self, + surf_eval: &mut SurfaceEval<'_>, + tol: f64, + ) -> Result<(bool, SurfParamType)> { + let b = &self.base; + if !b.domain.is_point_on_boundary(surf_eval.uv(), tol.abs()).0 { + return Ok((false, SurfParamType::Neither)); + } + + let mut gap = b.test_pt - eval_value(surf_eval, 0, 0)?; + if b.solver_op == SolverOperation::Signed3dDirectedMaximize { + let dot = -(gap.dot(b.dir_vec)); + gap = dot * b.dir_vec; + } + + // Method: find the uv direction that the 3d step will take us, and see + // whether it's heading out of bounds. + let uv = surf_eval.uv(); + let su = eval_value(surf_eval, 1, 0)?; + let sv = eval_value(surf_eval, 0, 1)?; + + let Ok(uv_step) = vec_lin_comb_two_vectors(su, sv, gap) else { + return Ok((false, SurfParamType::Neither)); + }; + + let mut ret_val = SurfParamType::Neither; + + let bdry_tol = EFF_ZERO; + let pushing_tol = tol; + + if uv.x < b.domain.u_interval().min() + bdry_tol && uv_step.x < -pushing_tol { + ret_val = SurfParamType::UMin; + } else if uv.x > b.domain.u_interval().max() - bdry_tol && uv_step.x > pushing_tol { + ret_val = SurfParamType::UMax; + } + + if uv.y < b.domain.v_interval().min() + bdry_tol && uv_step.y < -pushing_tol { + ret_val = if ret_val == SurfParamType::Neither { + SurfParamType::VMin + } else { + SurfParamType::Both + }; + } else if uv.y > b.domain.v_interval().max() - bdry_tol && uv_step.y > pushing_tol { + ret_val = if ret_val == SurfParamType::Neither { + SurfParamType::VMax + } else { + SurfParamType::Both + }; + } + + Ok((ret_val != SurfParamType::Neither, ret_val)) + } +} + +/// `sDomainList[jj].SetUInterval` / `SetVInterval`. +fn set_interval(d: &mut Extent2d, dir: SurfParamType, ivl: &Extent1d) { + if dir == SurfParamType::U { + d.set_u_interval(ivl); + } else { + d.set_v_interval(ivl); + } +} + +/// `pSurf->IsOnSeam(crUV)` (virtual, default arguments): a plane has no seam; the base +/// body is unported. +fn is_on_seam(surface: &Surface, _uv: Point2) -> Result { + match surface.kind() { + SurfaceKind::Plane(p) => Ok(p.is_on_seam().0), + SurfaceKind::BSpline(_) | SurfaceKind::CurveBounded(_) | SurfaceKind::Step(_) => { + // UNPORTED(surface.surface_p4): SmSurface::IsOnSeam + Err(SolidError::unported( + "SmSurface::IsOnSeam", + "surface.surface_p4", + )) + } + } +} + +/// `Evaluate1stDerivatives(uv, FALSE, FALSE, ...)` with its status ignored: the +/// outputs keep their previous values on failure. +fn eval_1st( + surface: &Surface, + uv: Point2, + pt: &mut Point3, + su: &mut Vec3, + sv: &mut Vec3, +) -> Result<()> { + match surface.evaluate_1st_derivatives(uv, false, false) { + Ok((p, u, v)) => { + *pt = p; + *su = u; + *sv = v; + Ok(()) + } + Err(e) if e.is_unported() => Err(e), + Err(_) => Ok(()), + } +} + +/// `SmSurfaceEval` accessor `m_sPVV[i][j]` after `Eval()` with its status ignored: the +/// values held when the evaluation fails. +fn eval_value(ev: &mut SurfaceEval<'_>, i: usize, j: usize) -> Result { + if let Err(e) = ev.eval() { + if e.is_unported() { + return Err(e); + } + } + Ok(ev + .values() + .get(i) + .and_then(|r| r.get(j)) + .copied() + .unwrap_or(Vec3::UNDEF)) +} + +/// `SmSurfaceEval::FailsEval(FALSE)`: evaluates and reports a failure. +fn fails_eval(ev: &mut SurfaceEval<'_>) -> Result { + match ev.eval() { + Ok(()) => Ok(false), + Err(e) if e.is_unported() => Err(e), + Err(_) => Ok(true), + } +} + +// ---- SmSurfPtSolveStepper ----------------------------------------------------------------- + +/// The error norms of a stepper evaluation (`SmSrfPtErrorNormType`). +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub enum ErrorNormType { + /// `SM_SPN_SUM_ABS`: `|F| + |G|`, the L1 norm (the usual one). + #[default] + SumAbs = 0, + /// `SM_SPN_SUM`: `F + G`. + Sum = 1, + /// `SM_SPN_F`. + F = 2, + /// `SM_SPN_G`. + G = 3, + /// `SM_SPN_F_ABS`. + FAbs = 4, + /// `SM_SPN_G_ABS`. + GAbs = 5, + /// `SM_SPN_MAX`: `F` when `|F| >= |G|`, else `G`. + Max = 6, + /// `SM_SPN_MAX_ABS`: the L-infinity norm. + MaxAbs = 7, + /// `SM_SPN_GAP`: the 3D distance. + Gap = 8, +} + +/// The numerical values of a stepper at its UV point, valid once evaluated +/// (`m_sGap` ... `m_dSumCheck`). +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct StepperValues { + /// `m_sGap`: `S(u, v) - TestPt` (along the direction for the directed operation). + pub gap: Vec3, + /// `m_sGapU`: `Su` (along the direction for the directed operation). + pub gap_u: Vec3, + /// `m_sGapV`: `Sv` (along the direction for the directed operation). + pub gap_v: Vec3, + /// `m_dGapLen`. + pub gap_len: f64, + /// `m_dFVal`: `Gap . Su`. + pub f_val: f64, + /// `m_dGVal`: `Gap . Sv`. + pub g_val: f64, + /// `m_dFCheck`: `F / |Su|` (`|Su|` at least `0.0001`). + pub f_check: f64, + /// `m_dGCheck`: `G / |Sv|` (`|Sv|` at least `0.0001`). + pub g_check: f64, + /// `m_dSumCheck`: `|FCheck| + |GCheck|`. + pub sum_check: f64, +} + +impl StepperValues { + /// The values of a copy-constructed stepper before evaluation (upstream leaves + /// them uninitialised). + const UNSET: Self = Self { + gap: Vec3::UNDEF, + gap_u: Vec3::UNDEF, + gap_v: Vec3::UNDEF, + gap_len: UNDEF_DOUBLE, + f_val: UNDEF_DOUBLE, + g_val: UNDEF_DOUBLE, + f_check: UNDEF_DOUBLE, + g_check: UNDEF_DOUBLE, + sum_check: UNDEF_DOUBLE, + }; +} + +/// One iteration guess of the local solver (`SmSurfPtSolveStepper`): the problem data, +/// the surface evaluation at the guess, iteration and boundary-hit counters, the step +/// limit, and the lazily computed gap values. +#[derive(Debug)] +pub struct SurfPtSolveStepper<'s> { + /// The problem data (the `SmSurfacePointSolver` base). + pub base: SurfacePointSolver<'s>, + /// `m_sSrfEval`. + srf_eval: SurfaceEval<'s>, + /// `m_bSet`. + set: bool, + /// `m_iIter`. + iter: i32, + /// `m_iBndHitU`. + bnd_hit_u: i32, + /// `m_iBndHitV`. + bnd_hit_v: i32, + /// `m_dMaxStepFrac`. + max_step_frac: f64, + /// `m_bNRSuspect`. + nr_suspect: bool, + /// `m_sGap` ... `m_dSumCheck`. + values: StepperValues, +} + +/// The result of [`SurfPtSolveStepper::check_bounds`]. +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct BoundsCheck { + /// The next UV is outside the domain (the return value). + pub out_of_bounds: bool, + /// `-1` past the low u bound, `+1` past the high one, `0` neither (`riHitsU`). + pub hits_u: i32, + /// The same for v (`riHitsV`). + pub hits_v: i32, + /// The next UV clamped to the domain boundary (`rClampedUV`; `None` when not + /// clamped: upstream leaves it unset). + pub clamped_uv: Option, + /// The point where the step from the current UV leaves the domain + /// (`rClampedUVScaled`; `None` when not clamped). + pub clamped_uv_scaled: Option, + /// The ratio of the clamped step to the whole step (`rdStepScale`). + pub step_scale: f64, +} + +impl<'s> SurfPtSolveStepper<'s> { + /// A stepper at `uv` (`SmSurfPtSolveStepper(pSurf, crDomain, crTestPt, rUV, + /// dTightTol, dLooseTol, eSolverOp)`): the steps are limited to 40% of the domain, + /// or not at all for a bilinear B-spline (2 x 2 control points). + /// + /// # Errors + /// + /// Those of [`SurfacePointSolver::new`]. + pub fn new( + k: &Kernel, + surface: &'s Surface, + domain: &Extent2d, + test_pt: Point3, + uv: Point2, + tight_tol: f64, + loose_tol: f64, + solver_op: SolverOperation, + ) -> Result { + let mut base = SurfacePointSolver::new( + k, + surface, + domain, + solver_op, + test_pt, + loose_tol, + None, + SolutionRequested::Single, + )?; + base.tight_tol = tight_tol; + + // Maximum single step: say 40% of domain... + let mut max_step_frac = 0.40; + + // ...unless the surface is bilinear: allow anything. + if let Some(bspl) = base.b_spline { + if bspl.number_control_points(SurfParamType::U) == 2 + && bspl.number_control_points(SurfParamType::V) == 2 + { + max_step_frac = 2.00; + } + } + + let mut srf_eval = SurfaceEval::new(Some(surface)); + srf_eval.set_uv(uv); + Ok(Self { + base, + srf_eval, + set: false, + iter: 0, + bnd_hit_u: 0, + bnd_hit_v: 0, + max_step_frac, + nr_suspect: false, + values: StepperValues::UNSET, + }) + } + + /// The copy constructor: the problem data, counters and step limit of `other` at + /// its UV, not evaluated (the copy is never expected to stay at the same UV). + #[must_use] + pub fn copy_of(other: &Self) -> Self { + let mut srf_eval = SurfaceEval::new(Some(other.base.surface)); + srf_eval.set_uv(other.uv()); + Self { + base: other.base.clone(), + srf_eval, + set: false, // see note above. + iter: other.iter, + bnd_hit_u: other.bnd_hit_u, + bnd_hit_v: other.bnd_hit_v, + max_step_frac: other.max_step_frac, + nr_suspect: other.nr_suspect, + values: StepperValues::UNSET, + } + } + + /// The assignment operator: everything of `other`, including its evaluation when + /// it has one (`operator=`). + pub fn assign(&mut self, other: &Self) { + self.base.clone_from(&other.base); + + self.srf_eval.set_uv(other.uv()); + self.set = other.set; + self.iter = other.iter; + self.bnd_hit_u = other.bnd_hit_u; + self.bnd_hit_v = other.bnd_hit_v; + self.max_step_frac = other.max_step_frac; + self.nr_suspect = other.nr_suspect; + + if self.set { + self.srf_eval.clone_from(&other.srf_eval); + self.values = other.values; + } + } + + /// Moves to `uv` and drops the evaluated values (`SetUV`). + pub fn set_uv(&mut self, uv: Point2) { + self.srf_eval.set_uv(uv); + self.set = false; + } + + /// The UV point (`UV`). + #[must_use] + pub const fn uv(&self) -> Point2 { + self.srf_eval.uv() + } + + /// The largest step as a fraction of the domain (`MaxStep`). + #[must_use] + pub const fn max_step(&self) -> f64 { + self.max_step_frac + } + + /// The surface point (`Pos`). + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn pos(&mut self) -> Result { + eval_value(&mut self.srf_eval, 0, 0) + } + + /// `Su`. + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn su(&mut self) -> Result { + eval_value(&mut self.srf_eval, 1, 0) + } + + /// `Sv`. + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn sv(&mut self) -> Result { + eval_value(&mut self.srf_eval, 0, 1) + } + + /// `Suu`. + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn suu(&mut self) -> Result { + eval_value(&mut self.srf_eval, 2, 0) + } + + /// `Suv`. + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn suv(&mut self) -> Result { + eval_value(&mut self.srf_eval, 1, 1) + } + + /// `Svv`. + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn svv(&mut self) -> Result { + eval_value(&mut self.srf_eval, 0, 2) + } + + /// The unit normal (`Normal`). + /// + /// # Errors + /// + /// [`SolidError::Unported`]: `SmSurfaceEval::Normal` (`surface.surface_p4`). + pub fn normal(&mut self) -> Result { + // UNPORTED(surface.surface_p4): SmSurfaceEval::Normal + Err(SolidError::unported( + "SmSurfaceEval::Normal", + "surface.surface_p4", + )) + } + + /// The gap `S(u, v) - TestPt` (`Gap`). + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn gap(&mut self) -> Result { + Ok(self.eval()?.gap) + } + + /// `GapU`. + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn gap_u(&mut self) -> Result { + Ok(self.eval()?.gap_u) + } + + /// `GapV`. + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn gap_v(&mut self) -> Result { + Ok(self.eval()?.gap_v) + } + + /// The gap length (`GapLength`). + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn gap_length(&mut self) -> Result { + Ok(self.eval()?.gap_len) + } + + /// The iteration count (`IterCount`). + #[must_use] + pub const fn iter_count(&self) -> i32 { + self.iter + } + + /// Whether the Newton step is not to be trusted (`NRStepSuspect`). + #[must_use] + pub const fn nr_step_suspect(&self) -> bool { + self.nr_suspect + } + + /// Sets the iteration count (`SetIterCount`). + pub fn set_iter_count(&mut self, new_count: i32) { + self.iter = new_count; + } + + /// Sets whether the Newton step is not to be trusted (`SetNRSuspect`). + pub fn set_nr_suspect(&mut self, is_suspect: bool) { + self.nr_suspect = is_suspect; + } + + /// The u boundary-hit count (`BoundHitsU`). + #[must_use] + pub const fn bound_hits_u(&self) -> i32 { + self.bnd_hit_u + } + + /// The v boundary-hit count (`BoundHitsV`). + #[must_use] + pub const fn bound_hits_v(&self) -> i32 { + self.bnd_hit_v + } + + /// Whether the gap values are evaluated for the current UV point (`m_bSet`). + #[must_use] + pub const fn is_set(&self) -> bool { + self.set + } + + /// The evaluation (surface) at the UV point. + #[must_use] + pub const fn surface_eval(&self) -> &SurfaceEval<'s> { + &self.srf_eval + } + + /// Evaluates the gap values unless done already (`Eval`, private upstream). + /// + /// # Errors + /// + /// [`SolidError::Unported`] from the evaluation. + pub fn eval(&mut self) -> Result { + if self.set { + return Ok(self.values); + } + + let pos = self.pos()?; + let su = self.su()?; + let sv = self.sv()?; + let b = &self.base; + let mut gap = pos - b.test_pt; + let mut gap_u = su; + let mut gap_v = sv; + if b.solver_op == SolverOperation::Signed3dDirectedMaximize { + gap = b.dir_vec * gap.dot(b.dir_vec); + gap_u = b.dir_vec * gap_u.dot(b.dir_vec); + gap_v = b.dir_vec * gap_v.dot(b.dir_vec); + } + + let gap_len = gap.length(); + + let f_val = gap.dot(su); + let g_val = gap.dot(sv); + + // Convert fcn vals to cosines for convergence test. + let mut su_len = su.length(); + let mut sv_len = sv.length(); + // Check zero-divide: near a singularity, don't make convergence impossible. + let min_deriv_length = 0.0001; + if su_len < min_deriv_length { + su_len = min_deriv_length; + } + if sv_len < min_deriv_length { + sv_len = min_deriv_length; + } + + // Note: do not divide by the distance (see upstream). + let dist = 1.0; + + let f_check = f_val / (dist * su_len); + let g_check = g_val / (dist * sv_len); + let sum_check = f_check.abs() + g_check.abs(); + + self.values = StepperValues { + gap, + gap_u, + gap_v, + gap_len, + f_val, + g_val, + f_check, + g_check, + sum_check, + }; + self.set = true; + + Ok(self.values) + } + + /// Clamps the UV point to the domain (`Clamp`). + pub fn clamp(&mut self) { + let uv = self.base.domain.clamp_point(self.srf_eval.uv()); + self.set_uv(uv); + } + + /// Records a boundary hit in `which` (`SM_SP_U`, else v) (`HitBound`): + /// `top_or_bottom` `+1` / `-1` pushes outward at the high / low end (counting up + /// while pushing the same way), `0` resets the count when the point is strictly + /// inside the domain in that direction. + pub fn hit_bound(&mut self, which: SurfParamType, top_or_bottom: i32) { + if top_or_bottom == 0 { + if which == SurfParamType::U { + if self.bnd_hit_u != 0 + && self + .base + .domain + .u_interval() + .contains_value(self.srf_eval.uv().x, -EFF_ZERO) + { + self.bnd_hit_u = 0; + } + } else if self.bnd_hit_v != 0 + && self + .base + .domain + .v_interval() + .contains_value(self.srf_eval.uv().y, -EFF_ZERO) + { + self.bnd_hit_v = 0; + } + } else if which == SurfParamType::U { + self.bnd_hit_u = if self.bnd_hit_u.wrapping_mul(top_or_bottom) > 0 { + self.bnd_hit_u.wrapping_add(top_or_bottom) // pushing same direction + } else { + top_or_bottom // no previous bound, or pushing opposite + }; + } else { + self.bnd_hit_v = if self.bnd_hit_v.wrapping_mul(top_or_bottom) > 0 { + self.bnd_hit_v.wrapping_add(top_or_bottom) + } else { + top_or_bottom + }; + } + } + + /// Whether `next_uv` is outside `domain` (`CheckBounds`), with the boundaries hit, + /// the next UV clamped to the boundary, and the step from `curr_uv` scaled to end + /// where it leaves the domain. + #[must_use] + pub fn check_bounds(curr_uv: Point2, next_uv: Point2, domain: &Extent2d) -> BoundsCheck { + let mut hits_u = 0; + let mut hits_v = 0; + + let mut step_scale = 1.0; + + let u_min = domain.min().x; + let v_min = domain.min().y; + let u_max = domain.max().x; + let v_max = domain.max().y; + + if next_uv.x < u_min { + hits_u = -1; + step_scale = if curr_uv.x >= u_min { + (u_min - curr_uv.x) / (next_uv.x - curr_uv.x) + } else { + 0.0 + }; + } else if next_uv.x > u_max { + hits_u = 1; + step_scale = if curr_uv.x <= u_max { + (u_max - curr_uv.x) / (next_uv.x - curr_uv.x) + } else { + 0.0 + }; + } + + if next_uv.y < v_min { + hits_v = -1; + let this_scale = if curr_uv.y >= v_min { + (v_min - curr_uv.y) / (next_uv.y - curr_uv.y) + } else { + 0.0 + }; + if this_scale < step_scale { + step_scale = this_scale; + } + } else if next_uv.y > v_max { + hits_v = 1; + let this_scale = if curr_uv.y <= v_max { + (v_max - curr_uv.y) / (next_uv.y - curr_uv.y) + } else { + 0.0 + }; + if this_scale < step_scale { + step_scale = this_scale; + } + } + + let mut out = BoundsCheck { + out_of_bounds: false, + hits_u, + hits_v, + clamped_uv: None, + clamped_uv_scaled: None, + step_scale, + }; + + if hits_u != 0 || hits_v != 0 { + out.out_of_bounds = true; + out.clamped_uv_scaled = Some(curr_uv + step_scale * (next_uv - curr_uv)); + + let mut clamped = Vec2::new(next_uv.x, next_uv.y); + if hits_u < 0 { + clamped = Vec2::new(u_min, clamped.y); + } else if hits_u > 0 { + clamped = Vec2::new(u_max, clamped.y); + } + if hits_v < 0 { + clamped = Vec2::new(clamped.x, v_min); + } else if hits_v > 0 { + clamped = Vec2::new(clamped.x, v_max); + } + out.clamped_uv = Some(clamped); + } + + out + } + + /// Drops the test point to the iso curve `which_param = crease_param_val` + /// (`DropToIsoCurve`, not used upstream): over each G1-or-worse section of the + /// iso curve within the domain, keeps the closest drop and moves there. Returns + /// whether a drop was found. + /// + /// # Errors + /// + /// [`SolidError::Unported`]: the base `SmSurface::CreateIsoParametricCurve` + /// (`surface.surface_p5`) of a curve-bounded or STEP surface, and from the drops. + pub fn drop_to_iso_curve( + &mut self, + k: &Kernel, + which_param: SurfParamType, + crease_param_val: f64, + _param_on_crease: f64, + ) -> Result { + let b = &self.base; + // The iso curve (no curve: FALSE). + let iso_curve: Curve = match b.surface.kind() { + SurfaceKind::BSpline(s) => { + match s.create_iso_parametric_curve( + k, + which_param, + crease_param_val, + IsoCurveOptions::default(), + ) { + Ok(r) => Curve::from(r.curve), + Err(e) if e.is_unported() => return Err(e), + Err(_) => return Ok(false), + } + } + SurfaceKind::Plane(p) => { + match p.create_iso_parametric_curve(which_param, crease_param_val, None, false) { + Ok(r) => Curve::from(r.curve), + Err(e) if e.is_unported() => return Err(e), + Err(_) => return Ok(false), + } + } + SurfaceKind::CurveBounded(_) | SurfaceKind::Step(_) => { + // UNPORTED(surface.surface_p5): SmSurface::CreateIsoParametricCurve + return Err(SolidError::unported( + "SmSurface::CreateIsoParametricCurve", + "surface.surface_p5", + )); + } + }; + + let domain = if which_param == SurfParamType::U { + b.domain.v_interval() + } else { + b.domain.u_interval() + }; + + // We have to check the iso-curve itself for having kinks (status ignored). + let conts = match iso_curve.calculate_continuities(CONTINUITY_ANGLE) { + Ok((_, c)) => c, + Err(e) if e.is_unported() => return Err(e), + Err(_) => Vec::new(), + }; + + let mut got_iso_drop = false; + let mut min_dist = BIG_DOUBLE; + let mut min_param = domain.min(); + + // Drop the point to each continuous section. + let knots = match iso_curve.knots(None) { + Ok((k, _)) => k, + Err(e) if e.is_unported() => return Err(e), + Err(_) => Vec::new(), + }; + let first_knot = *knots.first().ok_or(SolidError::invalid_input( + "surface::surface_point_solve::p1::drop_to_iso_curve", + "iso curve without knots", + ))?; + let mut ivl = Extent1d::from_min_max(first_knot, first_knot); + for ii in 1..conts.len() { + let Some(&cont) = conts.get(ii) else { continue }; + if (cont as i32) > (ContinuityType::G1 as i32) { + continue; + } + let knot = knots.get(ii).copied().ok_or(SolidError::invalid_input( + "surface::surface_point_solve::p1::drop_to_iso_curve", + "fewer knots than continuities", + ))?; + let _ = ivl.set_min_max(ivl.min(), knot); + + // in case surface domain is smaller: + ivl = ivl.intersect(&domain).unwrap_or_else(|_| Extent1d::new()); + + // The guess and the output parameter are the same variable upstream: + // DropPoint zeroes the output first, so the guess is 0. + let dropped = match iso_curve.drop_point( + k, + &ivl, + b.test_pt, + None, + b.tight_tol, + Some(0.0), + SolverOperation::Minimize, + ) { + Ok(d) => Some(d), + Err(e) if e.is_unported() => return Err(e), + Err(_) => None, + }; + + if let Some(d) = dropped { + if d.success && d.distance < min_dist { + got_iso_drop = true; + min_dist = d.distance; + min_param = d.parameter; + } + } + + // Set up for next interval. + let _ = ivl.set_min_max(ivl.max(), ivl.max()); + } + + if got_iso_drop { + let crease_uv = if which_param == SurfParamType::U { + Point2::new(crease_param_val, min_param) + } else { + Point2::new(min_param, crease_param_val) + }; + self.set_uv(crease_uv); + return Ok(true); + } + + Ok(false) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::nurbs::math::NOW; + use crate::surface::curve_bounded_surface::CurveBoundedSurface; + + fn bilinear(twist: f64) -> Surface { + Surface::from( + BSplineSurface::create_bilinear_surface( + Point3::new(0.0, 0.0, 0.0), + Point3::new(1.0, 0.0, 0.0), + Point3::new(0.0, 1.0, 0.0), + Point3::new(1.0, 1.0, twist), + ) + .unwrap(), + ) + } + + fn unit_dom() -> Extent2d { + Extent2d::from_bounds(0.0, 0.0, 1.0, 1.0) + } + + fn global<'s>( + k: &Kernel, + s: &'s Surface, + op: SolverOperation, + test: Point3, + ) -> SurfPtGlobalSolver<'s> { + SurfPtGlobalSolver::new( + k, + s, + &unit_dom(), + op, + test, + 1e-6, + None, + SolutionRequested::Single, + ) + .unwrap() + } + + fn cp(x: f64, y: f64, z: f64) -> CPoint { + CPoint { x, y, z, w: NOW } + } + + #[test] + fn problem_data() { + let k = Kernel::default(); + let s = bilinear(0.0); + let g = global( + &k, + &s, + SolverOperation::Minimize, + Point3::new(0.5, -3.0, 2.0), + ); + assert!(g.base.b_spline().is_some()); + assert_eq!(g.base.tight_tol(), EFF_ZERO * 4.0); + assert_eq!(g.base.loose_tol(), 1e-6); + assert_eq!(g.base.dir_vec(), Vec3::ZERO); + assert_eq!(g.base.test_point(), Point3::new(0.5, -3.0, 2.0)); + + // directed: the direction is negated and unitised, the test point a corner of + // the expanded box on the far side + let g = global( + &k, + &s, + SolverOperation::Signed3dDirectedMaximize, + Point3::new(0.0, 0.0, 2.0), + ); + assert_eq!(g.base.dir_vec(), Vec3::new(0.0, 0.0, -1.0)); + let t = g.base.test_point(); + assert!(t.z > 0.0 && t.x > 1.0 && t.y > 1.0); + + // a curve-bounded surface has no B-spline part + let cb = Surface::from(CurveBoundedSurface::new( + bilinear(0.0), + Vec::new(), + Vec::new(), + true, + )); + let g = global(&k, &cb, SolverOperation::Minimize, Point3::ZERO); + assert!(g.base.b_spline().is_none()); + assert!(g.find_polygon_triangle_guess((0, 0)).is_err()); + assert!(g.refine_guess_polygon_leg(0, 0).is_err()); + assert_eq!(g.crease_subdomains().unwrap().len(), 1); + } + + #[test] + fn objective_and_guesses() { + let k = Kernel::default(); + let s = bilinear(0.0); + let g = global( + &k, + &s, + SolverOperation::Minimize, + Point3::new(0.25, 0.75, 2.0), + ); + assert!((g.calc_func_val(Point2::new(0.25, 0.75)).unwrap() - 2.0).abs() < 1e-12); + let m = global( + &k, + &s, + SolverOperation::Maximize, + Point3::new(0.25, 0.75, 2.0), + ); + assert!(m.calc_func_val(Point2::new(0.25, 0.75)).unwrap() < 0.0); + + let r = g.find_polygon_triangle_guess((1, 1)).unwrap(); + assert!((r.uv.x - 0.25).abs() < 1e-12 && (r.uv.y - 0.75).abs() < 1e-12); + assert!((r.best_dist - 2.0).abs() < 1e-12); + assert!((r.ave_cpt_dist - 1.0).abs() < 1e-12); + assert!(!r.suspicious); + + let uv = g.refine_guess_polygon_leg(0, 0).unwrap(); + assert!((uv.x - 0.25).abs() < 1e-12 && (uv.y - 0.5).abs() < 1e-12); + assert!(g.refine_guess_polygon_leg(5, 0).is_err()); + } + + #[test] + fn control_net_helpers() { + // a flat 3 x 3 net + let flat: Vec = (0..3) + .flat_map(|i| (0..3).map(move |j| cp(f64::from(i), f64::from(j), 0.0))) + .collect(); + let t = Point3::new(0.25, 0.25, 1.0); + let (d, u, v) = triangles_dist(t, &flat, false, 0, 0, 3, 3).unwrap(); + assert!((d - 1.0).abs() < 1e-12 && (u - 0.25).abs() < 1e-12 && (v - 0.25).abs() < 1e-12); + assert!(triangles_dist(t, &flat, false, 2, 0, 3, 3).is_err()); + for i in 0..3 { + for j in 0..3 { + assert!(well_behaved_control_net(t, &flat, false, i, j, 3, 3).unwrap()); + } + } + // a fold in u at the middle point + let mut folded = flat.clone(); + folded[7] = cp(0.0, 1.0, 0.0); // point (2, 1) back on (0, 1) + assert!(!well_behaved_control_net(t, &folded, false, 1, 1, 3, 3).unwrap()); + // coincident interior points + let mut coinc = flat; + coinc[4] = coinc[1]; + assert!(!well_behaved_control_net(t, &coinc, false, 1, 1, 3, 3).unwrap()); + } + + #[test] + fn seams_from_control_points() { + let k = Kernel::default(); + let s = bilinear(0.0); + // a closed ring of 4 points in u (first == last), 2 in v + let ring = [(1.0, 0.0), (0.0, 1.0), (-1.0, 0.0), (1.0, 0.0)]; + let pts: Vec = ring + .iter() + .flat_map(|&(x, y)| [cp(x, y, 0.0), cp(x, y, 1.0)]) + .collect(); + // test point near the last leg (towards point 2): prefer the high end + let g = global( + &k, + &s, + SolverOperation::Minimize, + Point3::new(0.0, -0.6, 0.0), + ); + assert_eq!( + g.check_guess_for_seams_cpts(0, 0, 4, 2, &pts, false) + .unwrap(), + (3, 0) + ); + let g = global( + &k, + &s, + SolverOperation::Minimize, + Point3::new(0.6, 0.6, 0.0), + ); + assert_eq!( + g.check_guess_for_seams_cpts(3, 1, 4, 2, &pts, false) + .unwrap(), + (0, 1) + ); + // interior: unchanged + assert_eq!( + g.check_guess_for_seams_cpts(1, 1, 4, 3, &pts, false) + .unwrap(), + (1, 1) + ); + } + + #[test] + fn extremum_and_boundary_tests() { + let k = Kernel::default(); + let s = bilinear(0.0); + let g = global( + &k, + &s, + SolverOperation::Minimize, + Point3::new(0.5, 0.5, 1.0), + ); + let mut e = SurfaceEval::new(Some(&s)); + e.set_uv(Point2::new(0.5, 0.5)); + // on the normal of a flat surface: neither (flat is not positive) + assert!(!g.is_local_min(&mut e, 1e-6).unwrap()); + assert!(!g.is_local_max(&mut e, 1e-6).unwrap()); + // on the surface: a minimum + let g = global( + &k, + &s, + SolverOperation::Minimize, + Point3::new(0.5, 0.5, 0.0), + ); + assert!(g.is_local_min(&mut e, 1e-6).unwrap()); + assert!(!g.is_local_max(&mut e, 1e-6).unwrap()); + + // pushing the u = 1 boundary + let g = global( + &k, + &s, + SolverOperation::Minimize, + Point3::new(2.0, 0.5, 0.0), + ); + let mut e = SurfaceEval::new(Some(&s)); + e.set_uv(Point2::new(1.0, 0.5)); + assert_eq!( + g.pushing_boundary(&mut e, 1e-6).unwrap(), + (true, SurfParamType::UMax) + ); + // off a corner + let g = global( + &k, + &s, + SolverOperation::Minimize, + Point3::new(-1.0, -1.0, 0.0), + ); + let mut e = SurfaceEval::new(Some(&s)); + e.set_uv(Point2::new(0.0, 0.0)); + assert_eq!( + g.pushing_boundary(&mut e, 1e-6).unwrap(), + (true, SurfParamType::Both) + ); + // inside: not on a boundary + let mut e = SurfaceEval::new(Some(&s)); + e.set_uv(Point2::new(0.5, 0.5)); + assert_eq!( + g.pushing_boundary(&mut e, 1e-6).unwrap(), + (false, SurfParamType::Neither) + ); + } + + #[test] + fn bad_guess_stride() { + let k = Kernel::default(); + let s = bilinear(0.0); + let g = global( + &k, + &s, + SolverOperation::Minimize, + Point3::new(0.8, 0.3, 1.0), + ); + let mut e = SurfaceEval::new(Some(&s)); + e.set_uv(Point2::new(0.1, 0.9)); + let (pt, f) = g.check_bad_guess_stride(&mut e).unwrap().unwrap(); + assert!((pt.uv().x - 0.8).abs() < 1e-12 && (pt.uv().y - 0.3).abs() < 1e-12); + assert!((f - 1.0).abs() < 1e-12); + } + + #[test] + fn stepper_basics() { + let k = Kernel::default(); + let s = bilinear(0.0); + let test = Point3::new(0.5, 0.5, 2.0); + let mut st = SurfPtSolveStepper::new( + &k, + &s, + &unit_dom(), + test, + Point2::new(0.25, 0.5), + 1e-12, + 1e-6, + SolverOperation::Minimize, + ) + .unwrap(); + // bilinear: big steps allowed + assert_eq!(st.max_step(), 2.0); + assert_eq!(st.base.tight_tol(), 1e-12); + assert!(!st.is_set()); + let v = st.eval().unwrap(); + assert!(st.is_set()); + assert_eq!(v.gap, Vec3::new(-0.25, 0.0, -2.0)); + assert_eq!(v.f_val, -0.25); + assert_eq!(v.g_val, 0.0); + assert_eq!(v.sum_check, 0.25); + assert!((st.gap_length().unwrap() - (0.0625_f64 + 4.0).sqrt()).abs() < 1e-15); + assert!(st.normal().is_err()); + + // the copy is not evaluated, the assignment copies the evaluation + let c = SurfPtSolveStepper::copy_of(&st); + assert!(!c.is_set()); + assert_eq!(c.uv(), st.uv()); + let mut a = SurfPtSolveStepper::copy_of(&c); + a.assign(&st); + assert!(a.is_set()); + + // clamp + st.set_uv(Point2::new(1.5, -0.5)); + assert!(!st.is_set()); + st.clamp(); + assert_eq!(st.uv(), Point2::new(1.0, 0.0)); + + // boundary hits + st.hit_bound(SurfParamType::U, 1); + st.hit_bound(SurfParamType::U, 1); + assert_eq!(st.bound_hits_u(), 2); + st.hit_bound(SurfParamType::U, -1); + assert_eq!(st.bound_hits_u(), -1); + st.hit_bound(SurfParamType::U, 0); // on the boundary: kept + assert_eq!(st.bound_hits_u(), -1); + st.set_uv(Point2::new(0.5, 0.5)); + st.hit_bound(SurfParamType::U, 0); // strictly inside: reset + assert_eq!(st.bound_hits_u(), 0); + st.hit_bound(SurfParamType::V, -1); + assert_eq!(st.bound_hits_v(), -1); + st.set_iter_count(3); + st.set_nr_suspect(true); + assert_eq!(st.iter_count(), 3); + assert!(st.nr_step_suspect()); + } + + #[test] + fn bounds_check() { + let d = unit_dom(); + let r = SurfPtSolveStepper::check_bounds(Point2::new(0.5, 0.5), Point2::new(0.7, 0.2), &d); + assert!(!r.out_of_bounds && r.step_scale == 1.0 && r.clamped_uv.is_none()); + let r = SurfPtSolveStepper::check_bounds(Point2::new(0.5, 0.5), Point2::new(1.5, -0.5), &d); + assert!(r.out_of_bounds); + assert_eq!((r.hits_u, r.hits_v), (1, -1)); + assert_eq!(r.step_scale, 0.5); + assert_eq!(r.clamped_uv, Some(Point2::new(1.0, 0.0))); + assert_eq!(r.clamped_uv_scaled, Some(Point2::new(1.0, 0.0))); + // starting outside: no step + let r = + SurfPtSolveStepper::check_bounds(Point2::new(-0.5, 0.5), Point2::new(-1.0, 0.5), &d); + assert_eq!(r.step_scale, 0.0); + } + + #[test] + fn drop_to_iso_curve() { + let k = Kernel::default(); + let s = bilinear(0.0); + let mut st = SurfPtSolveStepper::new( + &k, + &s, + &unit_dom(), + Point3::new(0.3, 0.7, 1.0), + Point2::new(0.5, 0.5), + 1e-12, + 1e-6, + SolverOperation::Minimize, + ) + .unwrap(); + assert!(st + .drop_to_iso_curve(&k, SurfParamType::U, 0.2, 0.5) + .unwrap()); + assert!((st.uv().x - 0.2).abs() < 1e-12 && (st.uv().y - 0.7).abs() < 1e-9); + + let cb = Surface::from(CurveBoundedSurface::new( + bilinear(0.0), + Vec::new(), + Vec::new(), + true, + )); + let mut st = SurfPtSolveStepper::new( + &k, + &cb, + &unit_dom(), + Point3::ZERO, + Point2::new(0.5, 0.5), + 1e-12, + 1e-6, + SolverOperation::Minimize, + ) + .unwrap(); + assert!(st + .drop_to_iso_curve(&k, SurfParamType::U, 0.2, 0.5) + .unwrap_err() + .is_unported()); + } +} diff --git a/harness/cpp/shim/surface_surface_point_solve_p1.cpp b/harness/cpp/shim/surface_surface_point_solve_p1.cpp new file mode 100644 index 0000000000..bdc6894b4b --- /dev/null +++ b/harness/cpp/shim/surface_surface_point_solve_p1.cpp @@ -0,0 +1,625 @@ +// SPDX-License-Identifier: Apache-2.0 +// difftest shim for unit `surface.surface_point_solve_p1`: the file-local classes of +// upstream source/SMLib/src/SmSurfacePointSolve.cpp (SmSurfacePointSolver, +// SmSurfPtGlobalSolver, SmSurfPtSolveStepper) and its static helpers (GetTrianglesDist, +// WellBehavedControlNet). +// +// The classes are local to that file, so this translation unit compiles the upstream +// source itself (same flags as the kernel), at global scope: +// * every header the file includes is included first, so its own #includes are no-ops; +// * the three classes are renamed with macros, so they do not clash with the copies in +// the library (SmSurfacePointSolve.o); +// * SmSurface::GlobalPointSolve_1 / LocalPointSolve_1, which the file also defines, are +// renamed before any header is read, so this TU's definitions get new names (same +// vtable slots, never called from here); +// * `private` / `protected` are made public for the class definitions only, so the shim +// can call the private members and read the problem data. +// +// One entry point, sc_surface_surface_point_solve_p1_eval(op, in, n_in, out, cap, +// out_len). Layouts are documented in +// crates/solidcore-ffi/src/units/surface_surface_point_solve_p1.rs, which validates every +// input. +#define GlobalPointSolve_1 sc_spsp1_GlobalPointSolve_1 +#define LocalPointSolve_1 sc_spsp1_LocalPointSolve_1 + +#include "sc_shim.h" + +#include "StdAfx.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define SmSurfacePointSolver sc_spsp1_SmSurfacePointSolver +#define SmSurfPtGlobalSolver sc_spsp1_SmSurfPtGlobalSolver +#define SmSurfPtSolveStepper sc_spsp1_SmSurfPtSolveStepper +#define SmSrfPtErrorNormType sc_spsp1_SmSrfPtErrorNormType +#define GetTrianglesDist sc_spsp1_GetTrianglesDist +#define WellBehavedControlNet sc_spsp1_WellBehavedControlNet +#define private public +#define protected public +#include "../../../upstream/source/SMLib/src/SmSurfacePointSolve.cpp" +#undef private +#undef protected + +namespace sc_spsp1 +{ +enum +{ + OP_CTOR = 0, + OP_CLOSED = 1, + OP_FUNC = 2, + OP_TRI_GUESS = 3, + OP_LEG = 4, + OP_STRIDE = 5, + OP_SEAMS_UV = 6, + OP_SEAMS_CPTS = 7, + OP_CREASE = 8, + OP_LOCAL = 9, + OP_TRI_DIST = 10, + OP_WELL = 11, + OP_STEPPER = 12, + OP_HIT_BOUND = 13, + OP_CHECK_BOUNDS = 14, + OP_DROP_ISO = 15, +}; + +// `SmSTATUS` for an index past the control net: the Rust port's InvalidInput. +constexpr double ST_BAD_INDEX = 1007.0; + +struct Rd +{ + const double* in; + int64_t at; + double num() { return in[at++]; } + int64_t idx() { return (int64_t)in[at++]; } + bool flag() { return in[at++] != 0.0; } + SmVector3d vec() + { + double x = num(); + double y = num(); + double z = num(); + return SmVector3d(x, y, z); + } + SmPoint2d uv() + { + double x = num(); + double y = num(); + return SmPoint2d(x, y); + } + SmExtent2d domain() + { + double a = num(); + double b = num(); + double c = num(); + double d = num(); + return SmExtent2d(a, b, c, d); + } +}; + +double st(SmStatus s) +{ + return s == SM_SUCCESS ? 0.0 : (double)s; +} + +double flg(bool b) +{ + return b ? 1.0 : 0.0; +} + +void put_vec(std::vector& o, const SmVector3d& v) +{ + o.push_back(v.x); + o.push_back(v.y); + o.push_back(v.z); +} + +void put_uv(std::vector& o, const SmVector2d& v) +{ + o.push_back(v.x); + o.push_back(v.y); +} + +void put_dom(std::vector& o, const SmExtent2d& d) +{ + o.push_back(d.GetMin().x); + o.push_back(d.GetMin().y); + o.push_back(d.GetMax().x); + o.push_back(d.GetMax().y); +} + +gw_SURFACE* read_nurb(Rd& rd) +{ + gw_INDEX n = (gw_INDEX)rd.idx(); + gw_INDEX m = (gw_INDEX)rd.idx(); + gw_DEGREE p = (gw_DEGREE)rd.idx(); + gw_DEGREE q = (gw_DEGREE)rd.idx(); + gw_INDEX r = (gw_INDEX)rd.idx(); + gw_INDEX s = (gw_INDEX)rd.idx(); + gw_SURFACE* sur = sm_AllocateNurbSurface(n, m, p, q, r, s); + for (gw_INDEX i = 0; i <= n; i++) + for (gw_INDEX j = 0; j <= m; j++) + { + sur->net->Pw[i][j].x = rd.num(); + sur->net->Pw[i][j].y = rd.num(); + sur->net->Pw[i][j].z = rd.num(); + sur->net->Pw[i][j].w = rd.num(); + } + for (gw_INDEX i = 0; i <= r; i++) + sur->knu->U[i] = rd.num(); + for (gw_INDEX i = 0; i <= s; i++) + sur->knv->U[i] = rd.num(); + return sur; +} + +// `oob form nurb`. +SmBSplineSurface* read_bspline(Rd& rd, const SmContext& ctx) +{ + bool oob = rd.flag(); + SmBSplineSurfaceForm form = (SmBSplineSurfaceForm)rd.idx(); + SmBSplineSurface* s = new (ctx) SmBSplineSurface(read_nurb(rd), FALSE, NULL); + s->GetOutOfBoundsEnabled() = oob ? TRUE : FALSE; + s->SetBSplineSurfaceForm(form); + return s; +} + +// A surface `kind ...`: 0 B-spline `oob form nurb`; 1 bounded plane `o x y sx sy D`; +// 2 curve-bounded surface (implicit outer, no boundary curves) over a B-spline block. +SmSurface* read_surface(Rd& rd, const SmContext& ctx) +{ + int64_t kind = rd.idx(); + if (kind == 1) + { + SmPoint3d o = rd.vec(); + SmVector3d x = rd.vec(); + SmVector3d y = rd.vec(); + double sx = rd.num(); + double sy = rd.num(); + SmExtent2d d = rd.domain(); + return new (ctx) SmPlane(o, x, y, SmVector2d(sx, sy), d, &ctx); + } + SmBSplineSurface* b = read_bspline(rd, ctx); + if (kind == 0) + return b; + // the curve-bounded surface owns (deletes) its basis + SmTArray c3d(ctx), cuv(ctx); + return new (ctx) SmCurveBoundedSurface(*b, &c3d, &cuv, TRUE); +} + +// `W S`: the surface, wrapped in an SmSTEPSurface owning it when W = 1. +SmSurface* read_wrapped(Rd& rd, const SmContext& ctx) +{ + bool wrap = rd.flag(); + SmSurface* s = read_surface(rd, ctx); + if (!wrap) + return s; + return new (ctx) SmSTEPSurface(*s, TRUE); +} + +// The problem: `W S D op test tol`. +struct Problem +{ + SmSurface* srf; + SmExtent2d dom; + SmSolverOperationType op; + SmPoint3d test; + double tol; +}; + +Problem read_problem(Rd& rd, const SmContext& ctx) +{ + Problem p; + p.srf = read_wrapped(rd, ctx); + p.dom = rd.domain(); + p.op = (SmSolverOperationType)rd.idx(); + p.test = rd.vec(); + p.tol = rd.num(); + return p; +} + +// `status has_bspl tight loose test(3) dir(3)` of the base class data. +void put_base(std::vector& o, const SmSurfacePointSolver& s) +{ + o.push_back(0.0); + o.push_back(flg(s.m_pBSplSrf != NULL)); + o.push_back(s.m_dTightTol); + o.push_back(s.m_dLooseTol); + put_vec(o, s.m_sTestPt); + put_vec(o, s.m_sDirVec); +} + +// The control net of the solver's B-spline, or false when it has none. +bool net(const SmSurfacePointSolver& s, ULONG& nu, ULONG& nv, double*& cpts, SmBoolean& rational) +{ + if (s.m_pBSplSrf == NULL) + return false; + if (s.m_pBSplSrf->GetControlPointsPointer(nu, nv, cpts) != SM_SUCCESS) + return false; + rational = s.m_pBSplSrf->IsRational(); + return true; +} + +// `P`: base data. +void op_ctor(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + SmSurfPtGlobalSolver g(p.srf, p.dom, p.op, p.test, p.tol, NULL, SM_SR_SINGLE); + put_base(o, g); +} + +// `P`: ClosedSurface(U), (V), (U again), (BOTH). +void op_closed(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + SmSurfPtGlobalSolver g(p.srf, p.dom, p.op, p.test, p.tol, NULL, SM_SR_SINGLE); + o.push_back(0.0); + o.push_back(flg(g.ClosedSurface(SM_SP_U) != FALSE)); + o.push_back(flg(g.ClosedSurface(SM_SP_V) != FALSE)); + o.push_back(flg(g.ClosedSurface(SM_SP_U) != FALSE)); + o.push_back(flg(g.ClosedSurface(SM_SP_BOTH) != FALSE)); +} + +// `P uv`: CalcFuncVal. +void op_func(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + SmPoint2d uv = rd.uv(); + SmSurfPtGlobalSolver g(p.srf, p.dom, p.op, p.test, p.tol, NULL, SM_SR_SINGLE); + o.push_back(0.0); + o.push_back(g.CalcFuncVal(uv)); +} + +// `P iu iv`: FindPolygonTriangleGuess with the given initial best indices. +void op_tri_guess(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + ULONG iu = (ULONG)rd.idx(); + ULONG iv = (ULONG)rd.idx(); + SmSurfPtGlobalSolver g(p.srf, p.dom, p.op, p.test, p.tol, NULL, SM_SR_SINGLE); + ULONG nu = 0, nv = 0; + double* cpts = NULL; + SmBoolean rational = FALSE; + if (net(g, nu, nv, cpts, rational) && (iu >= nu || iv >= nv)) + { + o.push_back(ST_BAD_INDEX); + return; + } + SmPoint2d uv; + double best = 0.0, ave = 0.0; + SmBoolean susp = FALSE; + SmStatus s = g.FindPolygonTriangleGuess(uv, iu, iv, best, ave, susp); + o.push_back(st(s)); + if (s != SM_SUCCESS) + return; + put_uv(o, uv); + o.push_back((double)iu); + o.push_back((double)iv); + o.push_back(best); + o.push_back(ave); + o.push_back(flg(susp != FALSE)); +} + +// `P iu iv`: RefineGuessPolygonLeg. +void op_leg(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + ULONG iu = (ULONG)rd.idx(); + ULONG iv = (ULONG)rd.idx(); + SmSurfPtGlobalSolver g(p.srf, p.dom, p.op, p.test, p.tol, NULL, SM_SR_SINGLE); + ULONG nu = 0, nv = 0; + double* cpts = NULL; + SmBoolean rational = FALSE; + if (net(g, nu, nv, cpts, rational) && (iu >= nu || iv >= nv) && + p.op != SM_SO_3D_SIGNED_DIRECTED_MAXIMIZE) + { + o.push_back(ST_BAD_INDEX); + return; + } + SmPoint2d uv(0.0, 0.0); + SmStatus s = g.RefineGuessPolygonLeg(uv, iu, iv); + o.push_back(st(s)); + if (s != SM_SUCCESS) + return; + put_uv(o, uv); +} + +// `P uv`: CheckBadGuessStride from a grid point at uv. +void op_stride(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + SmPoint2d uv = rd.uv(); + SmSurfPtGlobalSolver g(p.srf, p.dom, p.op, p.test, p.tol, NULL, SM_SR_SINGLE); + SmSurfaceEval pt0(p.srf); + pt0.SetUV(uv); + SmSurfaceEval npt(p.srf); + double f = 0.0; + SmBoolean b = g.CheckBadGuessStride(pt0, npt, f); + o.push_back(0.0); + o.push_back(flg(b != FALSE)); + if (b == FALSE) + return; + put_uv(o, npt.GetUV()); + o.push_back(f); +} + +// `P uv`: CheckGuessForSeams (UV point). +void op_seams_uv(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + SmPoint2d uv = rd.uv(); + SmSurfPtGlobalSolver g(p.srf, p.dom, p.op, p.test, p.tol, NULL, SM_SR_SINGLE); + SmStatus s = g.CheckGuessForSeams(uv); + o.push_back(st(s)); + put_uv(o, uv); +} + +// `P iu iv`: CheckGuessForSeams (control points) over the solver's B-spline net. +void op_seams_cpts(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + ULONG iu = (ULONG)rd.idx(); + ULONG iv = (ULONG)rd.idx(); + SmSurfPtGlobalSolver g(p.srf, p.dom, p.op, p.test, p.tol, NULL, SM_SR_SINGLE); + ULONG nu = 0, nv = 0; + double* cpts = NULL; + SmBoolean rational = FALSE; + if (!net(g, nu, nv, cpts, rational)) + { + o.push_back(st(SM_ERR)); + return; + } + if (iu >= nu || iv >= nv) + { + o.push_back(ST_BAD_INDEX); + return; + } + SmStatus s = g.CheckGuessForSeams(iu, iv, nu, nv, cpts, rational); + o.push_back(st(s)); + o.push_back((double)iu); + o.push_back((double)iv); +} + +// `P`: GetCreaseSubdomains. +void op_crease(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + SmSurfPtGlobalSolver g(p.srf, p.dom, p.op, p.test, p.tol, NULL, SM_SR_SINGLE); + SmTArray list(ctx); + SmStatus s = g.GetCreaseSubdomains(list); + o.push_back(st(s)); + o.push_back((double)list.GetSize()); + for (ULONG i = 0; i < list.GetSize(); i++) + put_dom(o, list[i]); +} + +// `P uv tol`: IsLocalMin, IsLocalMax, PushingBoundary (fresh evaluators each). +void op_local(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + SmPoint2d uv = rd.uv(); + double tol = rd.num(); + SmSurfPtGlobalSolver g(p.srf, p.dom, p.op, p.test, p.tol, NULL, SM_SR_SINGLE); + o.push_back(0.0); + { + SmSurfaceEval e(p.srf); + e.SetUV(uv); + o.push_back(flg(g.IsLocalMin(e, tol) != FALSE)); + } + { + SmSurfaceEval e(p.srf); + e.SetUV(uv); + o.push_back(flg(g.IsLocalMax(e, tol) != FALSE)); + } + { + SmSurfaceEval e(p.srf); + e.SetUV(uv); + SmSurfParamType which = SM_SP_UNKNOWN; + SmBoolean b = g.PushingBoundary(e, tol, &which); + o.push_back(flg(b != FALSE)); + o.push_back((double)which); + } +} + +// `P i j`: GetTrianglesDist over the solver's B-spline net. +void op_tri_dist(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + ULONG i = (ULONG)rd.idx(); + ULONG j = (ULONG)rd.idx(); + SmSurfPtGlobalSolver g(p.srf, p.dom, p.op, p.test, p.tol, NULL, SM_SR_SINGLE); + ULONG nu = 0, nv = 0; + double* cpts = NULL; + SmBoolean rational = FALSE; + if (!net(g, nu, nv, cpts, rational)) + { + o.push_back(st(SM_ERR)); + return; + } + if (i + 1 >= nu || j + 1 >= nv) + { + o.push_back(ST_BAD_INDEX); + return; + } + double u = 0.0, v = 0.0; + double d = GetTrianglesDist(g.m_sTestPt, cpts, rational, i, j, nu, nv, u, v); + o.push_back(0.0); + o.push_back(d); + o.push_back(u); + o.push_back(v); +} + +// `P i j`: WellBehavedControlNet over the solver's B-spline net. +void op_well(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + ULONG i = (ULONG)rd.idx(); + ULONG j = (ULONG)rd.idx(); + SmSurfPtGlobalSolver g(p.srf, p.dom, p.op, p.test, p.tol, NULL, SM_SR_SINGLE); + ULONG nu = 0, nv = 0; + double* cpts = NULL; + SmBoolean rational = FALSE; + if (!net(g, nu, nv, cpts, rational)) + { + o.push_back(st(SM_ERR)); + return; + } + if (i >= nu || j >= nv) + { + o.push_back(ST_BAD_INDEX); + return; + } + SmBoolean b = WellBehavedControlNet(g.m_sTestPt, cpts, rational, i, j, nu, nv); + o.push_back(0.0); + o.push_back(flg(b != FALSE)); +} + +// `P uv tight uv2`: a stepper at uv: base data, MaxStep, the Eval values, Pos and the +// derivatives; then SetUV(uv2), Clamp and the UV; then a copy and an assignment. +void op_stepper(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + SmPoint2d uv = rd.uv(); + double tight = rd.num(); + SmPoint2d uv2 = rd.uv(); + SmSurfPtSolveStepper s(p.srf, p.dom, p.test, uv, tight, p.tol, p.op); + put_base(o, s); + o.push_back(s.MaxStep()); + put_vec(o, s.Gap()); + put_vec(o, s.GapU()); + put_vec(o, s.GapV()); + o.push_back(s.GapLength()); + o.push_back(s.m_dFVal); + o.push_back(s.m_dGVal); + o.push_back(s.m_dFCheck); + o.push_back(s.m_dGCheck); + o.push_back(s.m_dSumCheck); + put_vec(o, s.Pos()); + put_vec(o, s.Su()); + put_vec(o, s.Sv()); + put_vec(o, s.Suu()); + put_vec(o, s.Suv()); + put_vec(o, s.Svv()); + // the copy is not evaluated; the assignment copies the evaluation + SmSurfPtSolveStepper c(s); + o.push_back(flg(c.m_bSet != FALSE)); + put_uv(o, c.UV()); + SmSurfPtSolveStepper a(p.srf, p.dom, p.test, uv2, tight, p.tol, p.op); + a = s; + o.push_back(flg(a.m_bSet != FALSE)); + o.push_back(a.GapLength()); + s.SetUV(uv2); + o.push_back(flg(s.m_bSet != FALSE)); + s.Clamp(); + put_uv(o, s.UV()); +} + +// `P uv k (u v which tob)*k`: HitBound after moving to each uv; the counts after each. +void op_hit_bound(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + SmPoint2d uv = rd.uv(); + int64_t k = rd.idx(); + SmSurfPtSolveStepper s(p.srf, p.dom, p.test, uv, p.tol, p.tol, p.op); + o.push_back(0.0); + for (int64_t i = 0; i < k; i++) + { + SmPoint2d at = rd.uv(); + SmSurfParamType which = rd.flag() ? SM_SP_V : SM_SP_U; + int tob = (int)rd.num(); + s.SetUV(at); + s.HitBound(which, tob); + o.push_back((double)s.BoundHitsU()); + o.push_back((double)s.BoundHitsV()); + } +} + +// `P curr next D`: CheckBounds. +void op_check_bounds(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + SmPoint2d curr = rd.uv(); + SmPoint2d next = rd.uv(); + SmExtent2d d = rd.domain(); + SmSurfPtSolveStepper s(p.srf, p.dom, p.test, curr, p.tol, p.tol, p.op); + int hu = 7, hv = 7; + SmPoint2d c(0.0, 0.0), cs(0.0, 0.0); + double scale = -7.0; + SmBoolean b = s.CheckBounds(curr, next, d, hu, hv, c, cs, scale); + o.push_back(0.0); + o.push_back(flg(b != FALSE)); + o.push_back((double)hu); + o.push_back((double)hv); + put_uv(o, c); + put_uv(o, cs); + o.push_back(scale); +} + +// `P uv which crease param`: DropToIsoCurve; the result and the UV. +void op_drop_iso(Rd& rd, const SmContext& ctx, std::vector& o) +{ + Problem p = read_problem(rd, ctx); + SmPoint2d uv = rd.uv(); + SmSurfParamType which = rd.flag() ? SM_SP_V : SM_SP_U; + double crease = rd.num(); + double param = rd.num(); + SmSurfPtSolveStepper s(p.srf, p.dom, p.test, uv, p.tol, p.tol, p.op); + SmBoolean b = s.DropToIsoCurve(which, crease, param); + o.push_back(0.0); + o.push_back(flg(b != FALSE)); + put_uv(o, s.UV()); +} +} // namespace sc_spsp1 + +SC_EXPORT int32_t sc_surface_surface_point_solve_p1_eval(int32_t op, const double* in, int64_t n_in, double* out, + int64_t cap, int64_t* out_len) +{ + (void)n_in; + SC_TRY + SmContext ctx; + std::vector o; + sc_spsp1::Rd rd{in, 0}; + switch (op) + { + case sc_spsp1::OP_CTOR: sc_spsp1::op_ctor(rd, ctx, o); break; + case sc_spsp1::OP_CLOSED: sc_spsp1::op_closed(rd, ctx, o); break; + case sc_spsp1::OP_FUNC: sc_spsp1::op_func(rd, ctx, o); break; + case sc_spsp1::OP_TRI_GUESS: sc_spsp1::op_tri_guess(rd, ctx, o); break; + case sc_spsp1::OP_LEG: sc_spsp1::op_leg(rd, ctx, o); break; + case sc_spsp1::OP_STRIDE: sc_spsp1::op_stride(rd, ctx, o); break; + case sc_spsp1::OP_SEAMS_UV: sc_spsp1::op_seams_uv(rd, ctx, o); break; + case sc_spsp1::OP_SEAMS_CPTS: sc_spsp1::op_seams_cpts(rd, ctx, o); break; + case sc_spsp1::OP_CREASE: sc_spsp1::op_crease(rd, ctx, o); break; + case sc_spsp1::OP_LOCAL: sc_spsp1::op_local(rd, ctx, o); break; + case sc_spsp1::OP_TRI_DIST: sc_spsp1::op_tri_dist(rd, ctx, o); break; + case sc_spsp1::OP_WELL: sc_spsp1::op_well(rd, ctx, o); break; + case sc_spsp1::OP_STEPPER: sc_spsp1::op_stepper(rd, ctx, o); break; + case sc_spsp1::OP_HIT_BOUND: sc_spsp1::op_hit_bound(rd, ctx, o); break; + case sc_spsp1::OP_CHECK_BOUNDS: sc_spsp1::op_check_bounds(rd, ctx, o); break; + case sc_spsp1::OP_DROP_ISO: sc_spsp1::op_drop_iso(rd, ctx, o); break; + default: return SC_ERR_ARG; + } + return sc_copy_out(o.data(), (int64_t)o.size(), out, cap, out_len); + SC_CATCH +} diff --git a/plan/upstream-issues.md b/plan/upstream-issues.md index b4d0ffb69e..5161e99067 100644 --- a/plan/upstream-issues.md +++ b/plan/upstream-issues.md @@ -1465,6 +1465,24 @@ by area within each severity. - **Severity:** wrong result. - **Rust port:** Ported as written. +#### WR-62. `SmSurfPtSolveStepper::DropToIsoCurve` passes the same variable as guess and output of `DropPoint` +- **Location:** `SmSurfacePointSolve.cpp:4733` (`pIsoCurve->DropPoint(.., &dGuessParam, bGotThisDrop, dGuessParam, dDist)`), `SmCurve::DropPoint` at `SmCurve.cpp:3290`. +- **What happens:** `DropPoint` zeroes its output parameter before it reads the guess, so the guess (the crease parameter clamped to the section) is always `0`. +- **Trigger:** Any call (the method is not used upstream). +- **How found:** read during porting. +- **Confirmed:** no. +- **Severity:** wrong result (a poorer guess for the local solve). +- **Rust port:** Passes `Some(0.0)`, as upstream's code ends up doing. + +#### WR-63. The directed-maximise `SmSurfacePointSolver` ignores a failed `CalculateBoundingBox` +- **Location:** `SmSurfacePointSolve.cpp:463` (`m_pSrf->CalculateBoundingBox(m_sDomain, &sBBox, NULL, NULL)`), constructor at `:406`. +- **What happens:** The status is not checked. When the box cannot be built (for example a curve-bounded surface without boundary curves, whose surface cache fails on the base `SmSurface::GetKnots`), the box stays in its inside-out `Init()` state and the test point becomes a corner of it, near `ยฑSM_BIG_DOUBLE`. +- **Trigger:** `SM_SO_3D_SIGNED_DIRECTED_MAXIMIZE` on a surface whose cache cannot be built. +- **How found:** generated difftest case (`surface.surface_point_solve_p1`, curve-bounded surfaces). +- **Confirmed:** yes. +- **Severity:** wrong result. +- **Rust port:** Reproduces it (the box stays `Extent3d::new()`); `SolidError::Unported` still propagates. + ### Intersection #### WR-50. `AddStartPoint` "replaces" a bounded start point by assigning a local pointer diff --git a/reports/difftest/surface.surface_point_solve_p1.json b/reports/difftest/surface.surface_point_solve_p1.json new file mode 100644 index 0000000000..fb7d446308 --- /dev/null +++ b/reports/difftest/surface.surface_point_solve_p1.json @@ -0,0 +1,8536 @@ +{ + "abs_floors": [], + "cases": [ + { + "max_rel_err": 0.0, + "name": "surface_sms_pt01_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt01_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt01_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt01_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt01_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt01_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt01_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt01_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt01_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt02_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt02_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt02_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt02_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt02_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt02_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt02_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt02_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt02_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt03_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt03_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt03_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt03_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt03_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt03_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt03_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt03_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt03_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt04_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt04_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt04_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt04_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt04_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt04_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt04_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt04_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt04_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt05_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt05_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt05_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt05_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt05_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt05_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt05_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt05_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt05_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt06_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt06_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt06_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt06_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt06_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt06_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt06_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt06_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt06_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt07_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt07_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt07_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt07_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt07_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt07_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt07_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt07_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt07_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt08_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt08_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt08_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt08_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt08_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt08_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt08_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt08_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt08_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt09_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt09_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt09_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt09_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt09_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt09_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt09_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt09_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt09_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt10_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt10_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt10_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt10_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt10_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt10_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt10_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt10_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt10_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt11_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt11_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt11_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt11_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt11_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt11_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt11_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt11_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt11_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt12_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt12_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt12_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt12_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt12_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt12_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt12_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt12_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt12_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt13_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt13_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt13_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt13_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt13_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt13_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt13_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt13_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt13_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt14_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt14_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt14_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt14_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt14_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt14_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt14_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt14_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt14_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt15_op0", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt15_op1", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt15_op2", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt15_op3", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt15_op4", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt15_op5", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt15_op6", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt15_op7", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "surface_sms_pt15_op8", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0000", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737146", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0001", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737147", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0002", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737148", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0003", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737149", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0004", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737150", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0005", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737151", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0006", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737152", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0007", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737153", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0008", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737154", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0009", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737155", + "values_compared": 11 + }, + { + "max_rel_err": 0.0, + "name": "gen0010", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737156", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0011", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737157", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0012", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737158", + "values_compared": 11 + }, + { + "max_rel_err": 0.0, + "name": "gen0013", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737159", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0014", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737160", + "values_compared": 8 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0015", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737161", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0016", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737162", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0017", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737163", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0018", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737164", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0019", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737165", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0020", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737166", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0021", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737167", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0022", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737168", + "values_compared": 8 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0023", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737169", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0024", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737170", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0025", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737171", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0026", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737172", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0027", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737173", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0028", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737174", + "values_compared": 8 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0029", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737175", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0030", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737176", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0031", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737177", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0032", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737178", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0033", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737179", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0034", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737180", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0035", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737181", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0036", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737182", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0037", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737183", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0038", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737184", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0039", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737185", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0040", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737186", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0041", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737187", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0042", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737188", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0043", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737189", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0044", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737190", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0045", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737191", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0046", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737192", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0047", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737193", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0048", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737194", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0049", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737195", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0050", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737196", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0051", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737197", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0052", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737198", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0053", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737199", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0054", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737200", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0055", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737201", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0056", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737202", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0057", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737203", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0058", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737204", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0059", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737205", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0060", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737206", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0061", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737207", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0062", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737208", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0063", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737209", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0064", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737210", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0065", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737211", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0066", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737212", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0067", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737213", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0068", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737214", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0069", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737215", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0070", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737216", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0071", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737217", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0072", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737218", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0073", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737219", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0074", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737220", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0075", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737221", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0076", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737222", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0077", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737223", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0078", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737224", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0079", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737225", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0080", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737226", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0081", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737227", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0082", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737228", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0083", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737229", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0084", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737230", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0085", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737231", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0086", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737232", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0087", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737233", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0088", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737234", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0089", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737235", + "values_compared": 3 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0090", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737236", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0091", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737237", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0092", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737238", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0093", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737239", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0094", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737240", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0095", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737241", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0096", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737242", + "values_compared": 17 + }, + { + "max_rel_err": 0.0, + "name": "gen0097", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737243", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0098", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737244", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0099", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737245", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0100", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737246", + "values_compared": 1 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0101", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737247", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0102", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737248", + "values_compared": 15 + }, + { + "max_rel_err": 0.0, + "name": "gen0103", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737249", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0104", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737250", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0105", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737251", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0106", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737252", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0107", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737253", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0108", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737254", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0109", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737255", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0110", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737256", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0111", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737257", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0112", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737258", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0113", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737259", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0114", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737260", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0115", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737261", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0116", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737262", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0117", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737263", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0118", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737264", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0119", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737265", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0120", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737266", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0121", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737267", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0122", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737268", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0123", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737269", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0124", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737270", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0125", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737271", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0126", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737272", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0127", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737273", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0128", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737274", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0129", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737275", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0130", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737276", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0131", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737277", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0132", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737278", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0133", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737279", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0134", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737280", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0135", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737281", + "values_compared": 11 + }, + { + "max_rel_err": 0.0, + "name": "gen0136", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737282", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0137", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737283", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0138", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737284", + "values_compared": 23 + }, + { + "max_rel_err": 0.0, + "name": "gen0139", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737285", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0140", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737286", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0141", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737287", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0142", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737288", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0143", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737289", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0144", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737290", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0145", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737291", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0146", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737292", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0147", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737293", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0148", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737294", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0149", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737295", + "values_compared": 6 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0150", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737296", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0151", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737297", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0152", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737298", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0153", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737299", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0154", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737300", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0155", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737301", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0156", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737302", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0157", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737303", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0158", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737304", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0159", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737305", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0160", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737306", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0161", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737307", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0162", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737308", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0163", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737309", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0164", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737310", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0165", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737311", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0166", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737312", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0167", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737313", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0168", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737314", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0169", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737315", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0170", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737316", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0171", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737317", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0172", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737318", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0173", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737319", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0174", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737320", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0175", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737321", + "values_compared": 9 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0176", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737322", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0177", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737323", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0178", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737324", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0179", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737325", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0180", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737326", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0181", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737327", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0182", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737328", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0183", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737329", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0184", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737330", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0185", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737331", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0186", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737332", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0187", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737333", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0188", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737334", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0189", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737335", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0190", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737336", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0191", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737337", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0192", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737338", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0193", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737339", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0194", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737340", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0195", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737341", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0196", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737342", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0197", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737343", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0198", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737344", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0199", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737345", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0200", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737346", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0201", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737347", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0202", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737348", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0203", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737349", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0204", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737350", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0205", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737351", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0206", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737352", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0207", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737353", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0208", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737354", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0209", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737355", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0210", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737356", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0211", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737357", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0212", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737358", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0213", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737359", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0214", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737360", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0215", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737361", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0216", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737362", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0217", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737363", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0218", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737364", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0219", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737365", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0220", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737366", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0221", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737367", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0222", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737368", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0223", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737369", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0224", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737370", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0225", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737371", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0226", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737372", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0227", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737373", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0228", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737374", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0229", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737375", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0230", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737376", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0231", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737377", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0232", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737378", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0233", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737379", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0234", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737380", + "values_compared": 1 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0235", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737381", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0236", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737382", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0237", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737383", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0238", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737384", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0239", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737385", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0240", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737386", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0241", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737387", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0242", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737388", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0243", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737389", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0244", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737390", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0245", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737391", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0246", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737392", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0247", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737393", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0248", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737394", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0249", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737395", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0250", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737396", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0251", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737397", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0252", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737398", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0253", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737399", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0254", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737400", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0255", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737401", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0256", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737402", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0257", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737403", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0258", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737404", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0259", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737405", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0260", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737406", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0261", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737407", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0262", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737408", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0263", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737409", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0264", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737410", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0265", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737411", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0266", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737412", + "values_compared": 21 + }, + { + "max_rel_err": 0.0, + "name": "gen0267", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737413", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0268", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737414", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0269", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737415", + "values_compared": 13 + }, + { + "max_rel_err": 0.0, + "name": "gen0270", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737416", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0271", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737417", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0272", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737418", + "values_compared": 3 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0273", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737419", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0274", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737420", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0275", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737421", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0276", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737422", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0277", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737423", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0278", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737424", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0279", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737425", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0280", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737426", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0281", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737427", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0282", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737428", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0283", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737429", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0284", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737430", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0285", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737431", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0286", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737432", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0287", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737433", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0288", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737434", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0289", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737435", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0290", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737436", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0291", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737437", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0292", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737438", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0293", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737439", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0294", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737440", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0295", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737441", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0296", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737442", + "values_compared": 1 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0297", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737443", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0298", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737444", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0299", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737445", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0300", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737446", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0301", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737447", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0302", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737448", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0303", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737449", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0304", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737450", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0305", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737451", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0306", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737452", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0307", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737453", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0308", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737454", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0309", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737455", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0310", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737456", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0311", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737457", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0312", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737458", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0313", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737459", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0314", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737460", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0315", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737461", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0316", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737462", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0317", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737463", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0318", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737464", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0319", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737465", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0320", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737466", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0321", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737467", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0322", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737468", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0323", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737469", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0324", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737470", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0325", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737471", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0326", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737472", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0327", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737473", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0328", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737474", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0329", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737475", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0330", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737476", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0331", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737477", + "values_compared": 2 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0332", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737478", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0333", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737479", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0334", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737480", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0335", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737481", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0336", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737482", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0337", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737483", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0338", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737484", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0339", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737485", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0340", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737486", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0341", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737487", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0342", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737488", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0343", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737489", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0344", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737490", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0345", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737491", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0346", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737492", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0347", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737493", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0348", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737494", + "values_compared": 23 + }, + { + "max_rel_err": 0.0, + "name": "gen0349", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737495", + "values_compared": 10 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0350", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737496", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0351", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737497", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0352", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737498", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0353", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737499", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0354", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737500", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0355", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737501", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0356", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737502", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0357", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737503", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0358", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737504", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0359", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737505", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0360", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737506", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0361", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737507", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0362", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737508", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0363", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737509", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0364", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737510", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0365", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737511", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0366", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737512", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0367", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737513", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0368", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737514", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0369", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737515", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0370", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737516", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0371", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737517", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0372", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737518", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0373", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737519", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0374", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737520", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0375", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737521", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0376", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737522", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0377", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737523", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0378", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737524", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0379", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737525", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0380", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737526", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0381", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737527", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0382", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737528", + "values_compared": 2 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0383", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737529", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0384", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737530", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0385", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737531", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0386", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737532", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0387", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737533", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0388", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737534", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0389", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737535", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0390", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737536", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0391", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737537", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0392", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737538", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0393", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737539", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0394", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737540", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0395", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737541", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0396", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737542", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0397", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737543", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0398", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737544", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0399", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737545", + "values_compared": 21 + }, + { + "max_rel_err": 0.0, + "name": "gen0400", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737546", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0401", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737547", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0402", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737548", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0403", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737549", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0404", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737550", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0405", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737551", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0406", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737552", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0407", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737553", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0408", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737554", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0409", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737555", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0410", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737556", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0411", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737557", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0412", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737558", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0413", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737559", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0414", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737560", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0415", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737561", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0416", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737562", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0417", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737563", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0418", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737564", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0419", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737565", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0420", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737566", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0421", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737567", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0422", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737568", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0423", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737569", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0424", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737570", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0425", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737571", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0426", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737572", + "values_compared": 2 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0427", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737573", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0428", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737574", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0429", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737575", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0430", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737576", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0431", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737577", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0432", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737578", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0433", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737579", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0434", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737580", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0435", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737581", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0436", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737582", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0437", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737583", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0438", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737584", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0439", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737585", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0440", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737586", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0441", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737587", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0442", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737588", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0443", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737589", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0444", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737590", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0445", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737591", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0446", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737592", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0447", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737593", + "values_compared": 8 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0448", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737594", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0449", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737595", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0450", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737596", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0451", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737597", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0452", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737598", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0453", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737599", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0454", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737600", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0455", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737601", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0456", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737602", + "values_compared": 8 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0457", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737603", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0458", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737604", + "values_compared": 19 + }, + { + "max_rel_err": 0.0, + "name": "gen0459", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737605", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0460", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737606", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0461", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737607", + "values_compared": 2 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0462", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737608", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0463", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737609", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0464", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737610", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0465", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737611", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0466", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737612", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0467", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737613", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0468", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737614", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0469", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737615", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0470", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737616", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0471", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737617", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0472", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737618", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0473", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737619", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0474", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737620", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0475", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737621", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0476", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737622", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0477", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737623", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0478", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737624", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0479", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737625", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0480", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737626", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0481", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737627", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0482", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737628", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0483", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737629", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0484", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737630", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0485", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737631", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0486", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737632", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0487", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737633", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0488", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737634", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0489", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737635", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0490", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737636", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0491", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737637", + "values_compared": 8 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0492", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737638", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0493", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737639", + "values_compared": 2 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0494", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737640", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0495", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737641", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0496", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737642", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0497", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737643", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0498", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737644", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0499", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737645", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0500", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737646", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0501", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737647", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0502", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737648", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0503", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737649", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0504", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737650", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0505", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737651", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0506", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737652", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0507", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737653", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0508", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737654", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0509", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737655", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0510", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737656", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0511", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737657", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0512", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737658", + "values_compared": 2 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0513", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737659", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0514", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737660", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0515", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737661", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0516", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737662", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0517", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737663", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0518", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737664", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0519", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737665", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0520", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737666", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0521", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737667", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0522", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737668", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0523", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737669", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0524", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737670", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0525", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737671", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0526", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737672", + "values_compared": 1 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0527", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737673", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0528", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737674", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0529", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737675", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0530", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737676", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0531", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737677", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0532", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737678", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0533", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737679", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0534", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737680", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0535", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737681", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0536", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737682", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0537", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737683", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0538", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737684", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0539", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737685", + "values_compared": 11 + }, + { + "max_rel_err": 0.0, + "name": "gen0540", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737686", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0541", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737687", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0542", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737688", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0543", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737689", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0544", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737690", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0545", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737691", + "values_compared": 6 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0546", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737692", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0547", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737693", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0548", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737694", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0549", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737695", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0550", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737696", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0551", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737697", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0552", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737698", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0553", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737699", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0554", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737700", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0555", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737701", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0556", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737702", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0557", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737703", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0558", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737704", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0559", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737705", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0560", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737706", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0561", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737707", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0562", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737708", + "values_compared": 23 + }, + { + "max_rel_err": 0.0, + "name": "gen0563", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737709", + "values_compared": 1 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0564", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737710", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0565", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737711", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0566", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737712", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0567", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737713", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0568", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737714", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0569", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737715", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0570", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737716", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0571", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737717", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0572", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737718", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0573", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737719", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0574", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737720", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0575", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737721", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0576", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737722", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0577", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737723", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0578", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737724", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0579", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737725", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0580", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737726", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0581", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737727", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0582", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737728", + "values_compared": 2 + }, + { + "deferred": { + "symbol": "SmSurface::CreateIsoParametricCurve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0583", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737729", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0584", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737730", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0585", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737731", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0586", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737732", + "values_compared": 2 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0587", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737733", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0588", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737734", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0589", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737735", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0590", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737736", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0591", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737737", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0592", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737738", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0593", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737739", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0594", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737740", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0595", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737741", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0596", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737742", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0597", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737743", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0598", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737744", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0599", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737745", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0600", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737746", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0601", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737747", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0602", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737748", + "values_compared": 11 + }, + { + "max_rel_err": 0.0, + "name": "gen0603", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737749", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0604", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737750", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0605", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737751", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0606", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737752", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0607", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737753", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0608", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737754", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0609", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737755", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0610", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737756", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0611", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737757", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0612", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737758", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0613", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737759", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0614", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737760", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0615", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737761", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0616", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737762", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0617", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737763", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0618", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737764", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0619", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737765", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0620", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737766", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0621", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737767", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0622", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737768", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0623", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737769", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0624", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737770", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0625", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737771", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0626", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737772", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0627", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737773", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0628", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737774", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0629", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737775", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0630", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737776", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0631", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737777", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0632", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737778", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0633", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737779", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0634", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737780", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0635", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737781", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0636", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737782", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0637", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737783", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0638", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737784", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0639", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737785", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0640", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737786", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0641", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737787", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0642", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737788", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0643", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737789", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0644", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737790", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0645", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737791", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0646", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737792", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0647", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737793", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0648", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737794", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0649", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737795", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0650", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737796", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0651", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737797", + "values_compared": 15 + }, + { + "max_rel_err": 0.0, + "name": "gen0652", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737798", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0653", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737799", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0654", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737800", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0655", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737801", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0656", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737802", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0657", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737803", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0658", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737804", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0659", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737805", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0660", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737806", + "values_compared": 17 + }, + { + "max_rel_err": 0.0, + "name": "gen0661", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737807", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0662", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737808", + "values_compared": 25 + }, + { + "max_rel_err": 0.0, + "name": "gen0663", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737809", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0664", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737810", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0665", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737811", + "values_compared": 17 + }, + { + "max_rel_err": 0.0, + "name": "gen0666", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737812", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0667", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737813", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0668", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737814", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0669", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737815", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0670", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737816", + "values_compared": 17 + }, + { + "max_rel_err": 0.0, + "name": "gen0671", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737817", + "values_compared": 9 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0672", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737818", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0673", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737819", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0674", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737820", + "values_compared": 21 + }, + { + "max_rel_err": 0.0, + "name": "gen0675", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737821", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0676", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737822", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0677", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737823", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0678", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737824", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0679", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737825", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0680", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737826", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0681", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737827", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0682", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737828", + "values_compared": 3 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0683", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737829", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0684", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737830", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0685", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737831", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0686", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737832", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0687", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737833", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0688", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737834", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0689", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737835", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0690", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737836", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0691", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737837", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0692", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737838", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0693", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737839", + "values_compared": 19 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0694", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737840", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0695", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737841", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0696", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737842", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0697", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737843", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0698", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737844", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0699", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737845", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0700", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737846", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0701", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737847", + "values_compared": 2 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0702", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737848", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0703", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737849", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0704", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737850", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0705", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737851", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0706", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737852", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0707", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737853", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0708", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737854", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0709", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737855", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0710", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737856", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0711", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737857", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0712", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737858", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0713", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737859", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0714", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737860", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0715", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737861", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0716", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737862", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0717", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737863", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0718", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737864", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0719", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737865", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0720", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737866", + "values_compared": 2 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0721", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737867", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0722", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737868", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0723", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737869", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0724", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737870", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0725", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737871", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0726", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737872", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0727", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737873", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0728", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737874", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0729", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737875", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0730", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737876", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0731", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737877", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0732", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737878", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0733", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737879", + "values_compared": 15 + }, + { + "max_rel_err": 0.0, + "name": "gen0734", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737880", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0735", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737881", + "values_compared": 10 + }, + { + "max_rel_err": 0.0, + "name": "gen0736", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737882", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0737", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737883", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0738", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737884", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0739", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737885", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0740", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737886", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0741", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737887", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0742", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737888", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0743", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737889", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0744", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737890", + "values_compared": 6 + }, + { + "max_rel_err": 0.0, + "name": "gen0745", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737891", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0746", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737892", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0747", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737893", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0748", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737894", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0749", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737895", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0750", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737896", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0751", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737897", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0752", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737898", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0753", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737899", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0754", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737900", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0755", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737901", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0756", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737902", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0757", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737903", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0758", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737904", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0759", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737905", + "values_compared": 21 + }, + { + "max_rel_err": 0.0, + "name": "gen0760", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737906", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0761", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737907", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0762", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737908", + "values_compared": 2 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0763", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737909", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0764", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737910", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0765", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737911", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0766", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737912", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::CreateIsoParametricCurve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0767", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737913", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0768", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737914", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0769", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737915", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0770", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737916", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0771", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737917", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0772", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737918", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0773", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737919", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0774", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737920", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0775", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737921", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0776", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737922", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0777", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737923", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0778", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737924", + "values_compared": 8 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0779", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737925", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0780", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737926", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0781", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737927", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0782", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737928", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0783", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737929", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0784", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737930", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0785", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737931", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0786", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737932", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0787", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737933", + "values_compared": 1 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0788", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737934", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0789", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737935", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0790", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737936", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0791", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737937", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0792", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737938", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0793", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737939", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0794", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737940", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0795", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737941", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0796", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737942", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0797", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737943", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0798", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737944", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0799", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737945", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0800", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737946", + "values_compared": 3 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0801", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737947", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0802", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737948", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0803", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737949", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0804", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737950", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0805", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737951", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0806", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737952", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0807", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737953", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0808", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737954", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0809", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737955", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0810", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737956", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0811", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737957", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0812", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737958", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0813", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737959", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0814", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737960", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0815", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737961", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0816", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737962", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0817", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737963", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0818", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737964", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0819", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737965", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0820", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737966", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0821", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737967", + "values_compared": 1 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0822", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737968", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0823", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737969", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0824", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737970", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0825", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737971", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0826", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737972", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0827", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737973", + "values_compared": 5 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0828", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737974", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0829", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737975", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0830", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737976", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0831", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737977", + "values_compared": 3 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0832", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028737978", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0833", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737979", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0834", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737980", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0835", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737981", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0836", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737982", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0837", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737983", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0838", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737984", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0839", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737985", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0840", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737986", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0841", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737987", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0842", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737988", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0843", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737989", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0844", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737990", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0845", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737991", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0846", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737992", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0847", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737993", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0848", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737994", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0849", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737995", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0850", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737996", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0851", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737997", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0852", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737998", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0853", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028737999", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0854", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738000", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0855", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738001", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0856", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738002", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0857", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738003", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0858", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738004", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0859", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738005", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0860", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738006", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0861", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738007", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0862", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738008", + "values_compared": 3 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0863", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028738009", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0864", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738010", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0865", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738011", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0866", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738012", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0867", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738013", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0868", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738014", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0869", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738015", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0870", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738016", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0871", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738017", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0872", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738018", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "gen0873", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738019", + "values_compared": 7 + }, + { + "max_rel_err": 0.0, + "name": "gen0874", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738020", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0875", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738021", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0876", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738022", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0877", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738023", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0878", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738024", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0879", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738025", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0880", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738026", + "values_compared": 52 + }, + { + "max_rel_err": 0.0, + "name": "gen0881", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738027", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0882", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738028", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0883", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738029", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0884", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738030", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0885", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738031", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0886", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738032", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0887", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738033", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0888", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738034", + "values_compared": 2 + }, + { + "deferred": { + "symbol": "SmSurface::IsOnSeam", + "unit": "surface.surface_p4" + }, + "max_rel_err": 0.0, + "name": "gen0889", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=15400321399028738035", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0890", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738036", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0891", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738037", + "values_compared": 2 + }, + { + "max_rel_err": 0.0, + "name": "gen0892", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738038", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0893", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738039", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "gen0894", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738040", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0895", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738041", + "values_compared": 5 + }, + { + "max_rel_err": 0.0, + "name": "gen0896", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738042", + "values_compared": 4 + }, + { + "max_rel_err": 0.0, + "name": "gen0897", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738043", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "gen0898", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738044", + "values_compared": 1 + }, + { + "max_rel_err": 0.0, + "name": "gen0899", + "outcome": "pass", + "pass": true, + "source": "generated:seed=15400321399028738045", + "values_compared": 10 + } + ], + "cases_both_errored": 0, + "cases_deferred": 59, + "cases_failed": 0, + "cases_passed": 976, + "cases_total": 1035, + "deferred_by_unit": { + "surface.surface_p4": 27, + "surface.surface_p5": 32 + }, + "max_rel_err": 0.0, + "pass": true, + "rel_tol": 1e-9, + "seeds": 16, + "status": "partial", + "unit": "surface.surface_point_solve_p1" +} From c627a56c1deff72a590d1a506821a4bfcaae47ca Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 13:10:20 -0400 Subject: [PATCH 35/54] plan: surface.surface_point_solve_p1 partial Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm --- plan/modules.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plan/modules.toml b/plan/modules.toml index 9d69435fe4..d771eac703 100644 --- a/plan/modules.toml +++ b/plan/modules.toml @@ -2153,10 +2153,10 @@ soft_depends_on = ["curve.curve_p6", "geom.geom_utility_p1", "geom.geom_utility_ est_lines = 1771 layer = 32 tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"] -status = "todo" +status = "partial" claimed_by = "" claimed_at = "" -notes = "49 fns; largest: SmSurfPtGlobalSolver::RefineGuessPolygonLeg, WellBehavedControlNet, SmSurfPtGlobalSolver::FindPolygonTriangleGuess, SmSurfPtGlobalSolver::CheckGuessForSeams; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit" +notes = "49 fns; largest: SmSurfPtGlobalSolver::RefineGuessPolygonLeg, WellBehavedControlNet, SmSurfPtGlobalSolver::FindPolygonTriangleGuess, SmSurfPtGlobalSolver::CheckGuessForSeams; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; PARTIAL (PR #58): difftest 1035 cases (135 inline on upstream Surface.sms with the my_test_surface_closest_point points, 900 generated: planes, B-splines incl. closed / rational / bilinear / zigzag / huge / tiny nets, curve-bounded and STEP-wrapped surfaces, sub-domains, the 5 solver operations, test points on, near and off the surface), 976 pass bit-identical, 59 deferred (surface.surface_p5 32, surface.surface_p4 27); --perturb SENSITIVE" [[unit]] id = "topology.brep_data" From 22f78eed505e65b437af0fc95bd4b7f1b3dc67ec Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 13:13:49 -0400 Subject: [PATCH 36/54] surface.surf_of_extrusion_p2: port SmSurfOfExtrusion part 2 GlobalSurfaceIntersect, IntersectWithPlane, IntersectWithCylinder, IntersectWithSurfOfExtrusion, IsNurbSurfaceSurfOfExtrusion, TrimWithDomain and ReadFromDB, with the C++ shim, FFI wrappers, difftest runner and fixtures (incl. the two SmSurfOfExtrusion records of the upstream Fillet test files). Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm --- .../src/units/surface_surf_of_extrusion_p1.rs | 76 +- .../src/units/surface_surf_of_extrusion_p2.rs | 1631 ++++++ .../src/units/surface_surf_of_extrusion_p1.rs | 12 +- .../src/units/surface_surf_of_extrusion_p2.rs | 636 +++ .../src/units/topology_brep_data.rs | 34 +- .../src/surface/surf_of_extrusion.rs | 2 + .../src/surface/surf_of_extrusion/p1.rs | 4 +- .../src/surface/surf_of_extrusion/p2.rs | 1250 +++++ crates/solidcore/src/surface/surface/p2.rs | 17 +- .../surface.surf_of_extrusion_p2/cases.json | 4878 +++++++++++++++++ .../cpp/shim/surface_surf_of_extrusion_p2.cpp | 903 +++ 11 files changed, 9382 insertions(+), 61 deletions(-) create mode 100644 crates/difftest/src/units/surface_surf_of_extrusion_p2.rs create mode 100644 crates/solidcore-ffi/src/units/surface_surf_of_extrusion_p2.rs create mode 100644 crates/solidcore/src/surface/surf_of_extrusion/p2.rs create mode 100644 fixtures/surface.surf_of_extrusion_p2/cases.json create mode 100644 harness/cpp/shim/surface_surf_of_extrusion_p2.cpp diff --git a/crates/difftest/src/units/surface_surf_of_extrusion_p1.rs b/crates/difftest/src/units/surface_surf_of_extrusion_p1.rs index 693176dabe..cf1e90811d 100644 --- a/crates/difftest/src/units/surface_surf_of_extrusion_p1.rs +++ b/crates/difftest/src/units/surface_surf_of_extrusion_p1.rs @@ -55,7 +55,7 @@ pub const MIN_GENERATED: usize = 800; /// `surface.surf_of_extrusion_p1` runner. pub struct Runner; -fn harness(msg: impl Into) -> HarnessError { +pub(crate) fn harness(msg: impl Into) -> HarnessError { HarnessError::new(msg) } @@ -63,18 +63,18 @@ fn harness(msg: impl Into) -> HarnessError { /// An inline 3D curve: Euclidean control points, optional weights, degree, knots. #[derive(Debug, Clone, Serialize, Deserialize)] -struct InlineCrv { - cpts: Vec<[f64; 3]>, +pub(crate) struct InlineCrv { + pub(crate) cpts: Vec<[f64; 3]>, #[serde(default, skip_serializing_if = "Option::is_none")] - weights: Option>, - p: usize, - u: Vec, + pub(crate) weights: Option>, + pub(crate) p: usize, + pub(crate) u: Vec, } /// A generator. #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "kind", rename_all = "snake_case")] -enum GenIn { +pub(crate) enum GenIn { BSpline(InlineCrv), Line { a: [f64; 3], @@ -114,7 +114,7 @@ enum GenIn { #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "mode", rename_all = "snake_case")] -enum BuildIn { +pub(crate) enum BuildIn { Canonical { vec: [f64; 3], }, @@ -129,13 +129,13 @@ enum BuildIn { } #[derive(Debug, Clone, Serialize, Deserialize)] -struct SurfIn { - gen: GenIn, - build: BuildIn, +pub(crate) struct SurfIn { + pub(crate) gen: GenIn, + pub(crate) build: BuildIn, #[serde(default)] - oob: bool, + pub(crate) oob: bool, #[serde(default)] - swap: bool, + pub(crate) swap: bool, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -216,7 +216,7 @@ struct Inputs { // ---- C++ side ------------------------------------------------------------------------- -fn cpts4(c: &InlineCrv) -> Result, HarnessError> { +pub(crate) fn cpts4(c: &InlineCrv) -> Result, HarnessError> { match &c.weights { None => Ok(c.cpts.iter().map(|&[x, y, z]| [x, y, z, NOW]).collect()), Some(w) => { @@ -232,7 +232,7 @@ fn cpts4(c: &InlineCrv) -> Result, HarnessError> { } } -fn ffi_gen(g: &GenIn) -> Result { +pub(crate) fn ffi_gen(g: &GenIn) -> Result { Ok(match g { GenIn::BSpline(c) => ffi::Gen::BSpline(ffi::BSplineData { cpts: cpts4(c)?, @@ -273,7 +273,7 @@ fn ffi_gen(g: &GenIn) -> Result { }) } -fn ffi_surf(s: &SurfIn) -> Result { +pub(crate) fn ffi_surf(s: &SurfIn) -> Result { Ok(ffi::Surf { gen: ffi_gen(&s.gen)?, build: match &s.build { @@ -386,30 +386,30 @@ fn to_output(i: &Inputs, flat: &[f64]) -> Result { // ---- Rust side ------------------------------------------------------------------------ -fn flag(b: bool) -> f64 { +pub(crate) fn flag(b: bool) -> f64 { f64::from(u8::from(b)) } -fn v3(p: [f64; 3]) -> Vec3 { +pub(crate) fn v3(p: [f64; 3]) -> Vec3 { let [x, y, z] = p; Vec3::new(x, y, z) } -fn push_v(o: &mut Vec, v: Vec3) { +pub(crate) fn push_v(o: &mut Vec, v: Vec3) { o.extend([v.x, v.y, v.z]); } -fn push_dom(o: &mut Vec, d: &Extent2d) { +pub(crate) fn push_dom(o: &mut Vec, d: &Extent2d) { o.extend([d.min().x, d.min().y, d.max().x, d.max().y]); } -fn dom4(d: [f64; 4]) -> Extent2d { +pub(crate) fn dom4(d: [f64; 4]) -> Extent2d { let [a, b, c, e] = d; Extent2d::from_bounds(a, b, c, e) } /// The `SmStatus` of a Rust error; `-1` for one upstream cannot return. -fn status(e: &SolidError) -> f64 { +pub(crate) fn status(e: &SolidError) -> f64 { match e { SolidError::InvalidInput { .. } => 1007.0, SolidError::Upstream { code, .. } => f64::from(*code), @@ -427,7 +427,7 @@ impl SolutionObject for SurfHandle { } } -fn rust_gen(k: &Kernel, g: &GenIn) -> Result { +pub(crate) fn rust_gen(k: &Kernel, g: &GenIn) -> Result { Ok(match g { GenIn::BSpline(c) => { let pw = cpts4(c)? @@ -499,7 +499,7 @@ fn rust_gen(k: &Kernel, g: &GenIn) -> Result { } /// Builds the surface; `Ok(Err(e))` when the construction fails. -fn rust_surf( +pub(crate) fn rust_surf( k: &Kernel, s: &SurfIn, ) -> Result, HarnessError> { @@ -531,7 +531,7 @@ fn step_interval(c: &Curve) -> Extent1d { } } -fn nurb_of(c: &Curve) -> Option<&NurbCurve> { +pub(crate) fn nurb_of(c: &Curve) -> Option<&NurbCurve> { match c.kind() { CurveKind::BSpline(b) => b.gw_nurb(), CurveKind::Ellipse(e) => e.base().gw_nurb(), @@ -542,7 +542,7 @@ fn nurb_of(c: &Curve) -> Option<&NurbCurve> { } } -fn put_curve(o: &mut Vec, c: Option<&Curve>) { +pub(crate) fn put_curve(o: &mut Vec, c: Option<&Curve>) { o.push(flag(c.is_some())); let Some(c) = c else { return }; o.push(c.type_code() as f64); @@ -560,7 +560,7 @@ fn put_curve(o: &mut Vec, c: Option<&Curve>) { o.extend_from_slice(cur.knots()); } -fn put_state(o: &mut Vec, s: &SurfOfExtrusion) -> solidcore::Result<()> { +pub(crate) fn put_state(o: &mut Vec, s: &SurfOfExtrusion) -> solidcore::Result<()> { o.extend([ flag(s.is_kind_of(SURF_OF_EXTRUSION_TYPE)?), flag(s.is_kind_of(B_SPLINE_SURFACE_TYPE)?), @@ -800,7 +800,7 @@ fn rust(i: &Inputs) -> Result { // ---- generation ----------------------------------------------------------------------- -fn unit_vec(rng: &mut Rng) -> [f64; 3] { +pub(crate) fn unit_vec(rng: &mut Rng) -> [f64; 3] { loop { let [x, y, z] = rng.point3(-1.0, 1.0); let l = (x * x + y * y + z * z).sqrt(); @@ -810,31 +810,31 @@ fn unit_vec(rng: &mut Rng) -> [f64; 3] { } } -fn add(a: [f64; 3], b: [f64; 3], s: f64) -> [f64; 3] { +pub(crate) fn add(a: [f64; 3], b: [f64; 3], s: f64) -> [f64; 3] { let [ax, ay, az] = a; let [bx, by, bz] = b; [ax + s * bx, ay + s * by, az + s * bz] } -fn scale(a: [f64; 3], s: f64) -> [f64; 3] { +pub(crate) fn scale(a: [f64; 3], s: f64) -> [f64; 3] { let [x, y, z] = a; [s * x, s * y, s * z] } -fn cross3(a: [f64; 3], b: [f64; 3]) -> [f64; 3] { +pub(crate) fn cross3(a: [f64; 3], b: [f64; 3]) -> [f64; 3] { let [ax, ay, az] = a; let [bx, by, bz] = b; [ay * bz - az * by, az * bx - ax * bz, ax * by - ay * bx] } -fn normalize(a: [f64; 3]) -> [f64; 3] { +pub(crate) fn normalize(a: [f64; 3]) -> [f64; 3] { let [x, y, z] = a; let l = (x * x + y * y + z * z).sqrt(); [x / l, y / l, z / l] } /// A clamped knot vector for `n + 1` control points of degree `p` on `[a, b]`. -fn knots(rng: &mut Rng, n: usize, p: usize, a: f64, b: f64) -> Vec { +pub(crate) fn knots(rng: &mut Rng, n: usize, p: usize, a: f64, b: f64) -> Vec { let inner = n - p; let mut ts: Vec = (0..inner) .map(|i| (i as f64 + 1.0) / (inner as f64 + 1.0)) @@ -851,9 +851,9 @@ fn knots(rng: &mut Rng, n: usize, p: usize, a: f64, b: f64) -> Vec { } /// A frame: origin, unit X, unit Y, unit Z (the generator plane normal). -type Frame = ([f64; 3], [f64; 3], [f64; 3], [f64; 3]); +pub(crate) type Frame = ([f64; 3], [f64; 3], [f64; 3], [f64; 3]); -fn frame(rng: &mut Rng, size: f64) -> Frame { +pub(crate) fn frame(rng: &mut Rng, size: f64) -> Frame { let origin = if rng.chance(0.3) { [0.0, 0.0, 0.0] } else { @@ -874,12 +874,12 @@ fn frame(rng: &mut Rng, size: f64) -> Frame { } /// A point of the frame's X/Y plane at `(a, b)`, out of plane by `off`. -fn in_frame(f: &Frame, a: f64, b: f64, off: f64) -> [f64; 3] { +pub(crate) fn in_frame(f: &Frame, a: f64, b: f64, off: f64) -> [f64; 3] { let (o, x, y, z) = f; add(add(add(*o, *x, a), *y, b), *z, off) } -fn gen_generator(rng: &mut Rng, f: &Frame, planar: bool, size: f64) -> GenIn { +pub(crate) fn gen_generator(rng: &mut Rng, f: &Frame, planar: bool, size: f64) -> GenIn { let off = |rng: &mut Rng| { if planar { 0.0 @@ -1016,7 +1016,7 @@ fn gen_vec(rng: &mut Rng, f: &Frame) -> [f64; 3] { } } -fn gen_surf(rng: &mut Rng) -> SurfIn { +pub(crate) fn gen_surf(rng: &mut Rng) -> SurfIn { let size = match rng.below(10) { 0 => 1e-3, 1 => 1e3, diff --git a/crates/difftest/src/units/surface_surf_of_extrusion_p2.rs b/crates/difftest/src/units/surface_surf_of_extrusion_p2.rs new file mode 100644 index 0000000000..e00cdc1214 --- /dev/null +++ b/crates/difftest/src/units/surface_surf_of_extrusion_p2.rs @@ -0,0 +1,1631 @@ +//! Runner for unit `surface.surf_of_extrusion_p2`: `SmSurfOfExtrusion` part 2 +//! (`IntersectWithPlane`, `IntersectWithCylinder`, `IntersectWithSurfOfExtrusion`, +//! `GlobalSurfaceIntersect`, `IsNurbSurfaceSurfOfExtrusion`, `TrimWithDomain`, +//! `ReadFromDB`). +//! +//! C++: `solidcore_ffi::units::surface_surf_of_extrusion_p2` (upstream +//! `source/SMLib/src/SmSurfOfExtrusion.cpp`). Rust: +//! `solidcore::surface::surf_of_extrusion::p2`. +//! +//! A case is a surface source `src` (a surface built as in the +//! `surface.surf_of_extrusion_p1` runner, a database record written from data, or the +//! record of a surface of extrusion in an upstream test file) plus `op` and its +//! parameters; `is_nurb` cases have a test surface instead. Both sides produce the same +//! flat record (layout in the FFI module docs), split into `build` (the source status) +//! and `out` (the rest). Statuses are `0` (`SM_SUCCESS`) or the `SmStatus`; `-1` on the +//! Rust side for an error upstream cannot produce. +//! +//! Deferred cases: `IntersectWithPlane` of a linear or coplanar generator +//! (`SmPlane::IntersectWithPlane`, `surface.plane_p2`), and of a plane parallel to a +//! planar generator inside the extrusion (`SmSurface::GetFace`, `surface.surface_p1`); +//! parallel extrusions / cylinder axes (`SmCurve::GlobalCurveSolve`, `curve.curve_p9`); +//! `GlobalSurfaceIntersect` needing the general intersector +//! (`intersect.adv_surface_intersector`). + +use std::path::Path; + +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +use solidcore::geom::axis2_placement::Axis2Placement; +use solidcore::geom::vector2d::{Point2, Vec2}; +use solidcore::geom::vector3d::Vec3; +use solidcore::kernel::Kernel; +use solidcore::nurbs::b_spline_surface::BSplineSurface; +use solidcore::nurbs::math::{CPoint, NOW}; +use solidcore::nurbs::srf_basic::Surface as NurbSurface; +use solidcore::surface::cone::Cone; +use solidcore::surface::plane::Plane; +use solidcore::surface::surf_of_extrusion::p2::{ExtrusionIntersection, IntersectTarget}; +use solidcore::surface::surf_of_extrusion::SurfOfExtrusion; +use solidcore::surface::surface::Surface; +use solidcore::topology::database_io::{DatabaseReader, FileType}; +use solidcore_ffi::units::surface_surf_of_extrusion_p2 as ffi; + +use super::surface_surf_of_extrusion_p1::{ + add, cross3, dom4, ffi_surf, flag, frame, gen_generator, gen_surf, harness, normalize, nurb_of, + put_curve, put_state, rust_surf, scale, status, unit_vec, v3, BuildIn, Frame, SurfIn, +}; +use crate::case::CaseContext; +use crate::runner::default_cases; +use crate::{Case, HarnessError, Output, Rng, UnitDiff}; + +/// Generated cases per run, whatever `--seeds` says (it can only raise this). +pub const MIN_GENERATED: usize = 1200; + +/// `surface.surf_of_extrusion_p2` runner. +pub struct Runner; + +/// `SmSurfOfExtrusion_TYPE` record versions generated. +const VERSIONS: &[u64] = &[29, 30, 32, 33, 38, 41, 45]; + +// ---- inputs ----------------------------------------------------------------------- + +/// A B-spline curve record (`SmBSplineCurve::ReadFromDB`): stored control points +/// (`dim` coordinates, then the weight when rational). +#[derive(Debug, Clone, Serialize, Deserialize)] +struct CurveRec { + p: i16, + rat: i16, + dim: i16, + kt: u64, + form: u64, + pts: Vec>, + knots: Vec, +} + +/// A B-spline surface record (`SmBSplineSurface::ReadFromDB`), `v` fastest. +#[derive(Debug, Clone, Serialize, Deserialize)] +struct SurfRec { + n: i64, + m: i64, + p: i16, + q: i16, + rat: i16, + kt: u64, + form: u64, + pts: Vec>, + u: Vec, + v: Vec, +} + +/// A surface of extrusion record (`SmSurfOfExtrusion::ReadFromDB`). +#[derive(Debug, Clone, Serialize, Deserialize)] +struct RecordIn { + binary: bool, + version: u64, + origin: [f64; 3], + vec: [f64; 3], + anal: [f64; 4], + orient: u64, + swap: i32, + cp: [f64; 3], + cv: [f64; 3], + gen: CurveRec, + surf: SurfRec, +} + +/// A surface source. +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "src", rename_all = "snake_case")] +enum SrcIn { + /// Built as in the p1 runner. + Built { surf: SurfIn }, + /// A record written from data. + Record { rec: Box }, + /// The ASCII record of an upstream test file starting at 1-based `line` (after the + /// `Object Type 15030` header). + File { + path: String, + line: usize, + version: u64, + }, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "kind", rename_all = "snake_case")] +enum PlaneIn { + Bounded { + o: [f64; 3], + x: [f64; 3], + y: [f64; 3], + scale: [f64; 2], + dom: [f64; 4], + }, + Normal { + o: [f64; 3], + n: [f64; 3], + }, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "kind", rename_all = "snake_case")] +enum ConeKindIn { + Canonical { + bot: f64, + top: f64, + height: f64, + #[serde(default)] + swap: bool, + #[serde(default)] + inside: bool, + }, + Semi { + bot: f64, + semi: f64, + #[serde(default)] + height: Option, + #[serde(default)] + swap: bool, + #[serde(default)] + inside: bool, + }, + Cylinder { + radius: f64, + }, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct ConeIn { + cone: ConeKindIn, + o: [f64; 3], + x: [f64; 3], + y: [f64; 3], +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "target", rename_all = "snake_case")] +enum TargetIn { + /// An `SmPlane`; `as_surface` passes it as a `Surface` on the Rust side. + Plane { + plane: PlaneIn, + #[serde(default)] + as_surface: bool, + }, + Cone { + cone: ConeIn, + }, + Extrusion { + other: Box, + }, + /// The NURB of a surface of extrusion as an `SmBSplineSurface`. + Bspline { + other: Box, + }, +} + +/// An inline NURB surface (stored control points, `v` fastest). +#[derive(Debug, Clone, Serialize, Deserialize)] +struct NurbIn { + n: usize, + m: usize, + p: usize, + q: usize, + cpts: Vec<[f64; 4]>, + u: Vec, + v: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "test", rename_all = "snake_case")] +enum TestSourceIn { + Raw { nurb: NurbIn }, + Src { of: Box }, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +struct TestIn { + source: TestSourceIn, + #[serde(default)] + transpose: bool, + #[serde(default)] + reparam: Option<[f64; 4]>, + #[serde(default)] + perturb: Option<(usize, usize, [f64; 3])>, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(tag = "op", rename_all = "snake_case")] +enum OpIn { + State {}, + Plane { + plane: PlaneIn, + #[serde(default)] + dom: Option<[f64; 4]>, + #[serde(default)] + other_dom: Option<[f64; 4]>, + #[serde(default)] + tol: Option, + }, + Cylinder { + cone: ConeIn, + #[serde(default)] + tol: Option, + }, + Extrusion { + other: Box, + #[serde(default)] + tol: Option, + }, + Global { + #[serde(flatten)] + target: TargetIn, + #[serde(default)] + dom: Option<[f64; 4]>, + #[serde(default)] + other_dom: Option<[f64; 4]>, + #[serde(default)] + tol: Option, + #[serde(default)] + ang: Option, + }, + Trim { + dom: [f64; 4], + }, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +enum Inputs { + IsNurb { is_nurb: TestIn, scale: f64 }, + Op { + #[serde(flatten)] + src: SrcIn, + #[serde(flatten)] + op: OpIn, + }, +} + +// ---- records ---------------------------------------------------------------------- + +/// Writes a database stream in either format. +struct W { + binary: bool, + buf: Vec, + mid: bool, +} + +impl W { + fn sep(&mut self) { + if self.mid { + self.buf.push(b' '); + } + self.mid = true; + } + fn text(&mut self, s: &str) { + if !self.binary { + self.sep(); + self.buf.extend(s.as_bytes()); + } + } + fn eol(&mut self) { + if !self.binary { + self.buf.push(b'\n'); + self.mid = false; + } + } + fn ul(&mut self, v: u64) { + if self.binary { + self.buf.extend(v.to_ne_bytes()); + } else { + self.sep(); + self.buf.extend(v.to_string().as_bytes()); + } + } + fn lg(&mut self, v: i64) { + if self.binary { + self.buf.extend(v.to_ne_bytes()); + } else { + self.sep(); + self.buf.extend(v.to_string().as_bytes()); + } + } + fn bo(&mut self, v: i32) { + if self.binary { + self.buf.extend(v.to_ne_bytes()); + } else { + self.sep(); + self.buf.extend(v.to_string().as_bytes()); + } + } + fn sh(&mut self, v: i16) { + if self.binary { + self.buf.extend(v.to_ne_bytes()); + } else { + self.sep(); + self.buf.extend(v.to_string().as_bytes()); + } + } + fn db(&mut self, v: f64) { + if self.binary { + self.buf.extend(v.to_ne_bytes()); + } else { + self.sep(); + self.buf.extend(format!("{v:e}").as_bytes()); + } + } + fn dbs(&mut self, v: &[f64]) { + for &x in v { + self.db(x); + } + self.eol(); + } +} + +/// The bytes of a record (after the surface's own type header). +fn record_bytes(r: &RecordIn) -> Vec { + let mut w = W { + binary: r.binary, + buf: Vec::new(), + mid: false, + }; + w.dbs(&r.origin); + w.dbs(&r.vec); + w.dbs(&r.anal); + w.ul(r.orient); + w.eol(); + w.bo(r.swap); + w.eol(); + w.dbs(&r.cp); + w.dbs(&r.cv); + w.text("IwSurfOfExtrusion->GenCurve"); + w.eol(); + // the generator's type header + let c = &r.gen; + if w.binary { + w.lg(14033); + w.ul(c.dim as u64); + } else { + w.text("Object Type"); + w.lg(14033); + w.eol(); + w.text("Curve Dim"); + w.ul(c.dim as u64); + w.eol(); + } + w.lg(c.pts.len() as i64 - 1); + w.eol(); + w.sh(c.p); + w.eol(); + w.sh(c.rat); + w.eol(); + w.sh(c.dim); + w.eol(); + if r.version > 32 { + w.ul(c.kt); + w.eol(); + w.ul(c.form); + w.eol(); + } + for p in &c.pts { + w.dbs(p); + } + for &k in &c.knots { + w.dbs(&[k]); + } + let s = &r.surf; + w.lg(s.n); + w.lg(s.m); + w.eol(); + w.sh(s.p); + w.sh(s.q); + w.eol(); + w.sh(s.rat); + w.eol(); + if r.version > 32 { + w.ul(s.kt); + w.eol(); + w.ul(s.form); + w.eol(); + } + for p in &s.pts { + w.dbs(p); + } + for &k in &s.u { + w.dbs(&[k]); + } + for &k in &s.v { + w.dbs(&[k]); + } + w.buf +} + +/// The bytes of an upstream file from 1-based `line` on. +fn file_bytes(path: &str, line: usize) -> Result, HarnessError> { + let data = std::fs::read(Path::new(path)).map_err(|e| harness(format!("{path}: {e}")))?; + let mut at = 0usize; + let mut cur = 1usize; + while cur < line { + let nl = data + .get(at..) + .and_then(|d| d.iter().position(|&c| c == b'\n')) + .ok_or_else(|| harness(format!("{path}: no line {line}")))?; + at += nl + 1; + cur += 1; + } + Ok(data.get(at..).unwrap_or(&[]).to_vec()) +} + +/// `(ascii, version, bytes)` of a record source. +fn src_bytes(s: &SrcIn) -> Result)>, HarnessError> { + Ok(match s { + SrcIn::Built { .. } => None, + SrcIn::Record { rec } => Some((!rec.binary, rec.version, record_bytes(rec))), + SrcIn::File { + path, + line, + version, + } => Some((true, *version, file_bytes(path, *line)?)), + }) +} + +// ---- C++ side ------------------------------------------------------------------------- + +fn ffi_src(s: &SrcIn) -> Result { + if let SrcIn::Built { surf } = s { + return Ok(ffi::Src::Built(ffi_surf(surf)?)); + } + let (ascii, version, bytes) = src_bytes(s)?.ok_or_else(|| harness("no record"))?; + Ok(ffi::Src::Record { + ascii, + version, + bytes, + }) +} + +fn ffi_plane(p: &PlaneIn) -> ffi::PlaneIn { + match p { + PlaneIn::Bounded { + o, + x, + y, + scale, + dom, + } => ffi::PlaneIn::Bounded { + o: *o, + x: *x, + y: *y, + scale: *scale, + dom: *dom, + }, + PlaneIn::Normal { o, n } => ffi::PlaneIn::Normal { o: *o, n: *n }, + } +} + +fn ffi_cone(c: &ConeIn) -> ffi::ConeIn { + ffi::ConeIn { + kind: match c.cone { + ConeKindIn::Canonical { + bot, + top, + height, + swap, + inside, + } => ffi::ConeKind::Canonical { + bot, + top, + height, + swap, + inside, + }, + ConeKindIn::Semi { + bot, + semi, + height, + swap, + inside, + } => ffi::ConeKind::Semi { + bot, + semi, + height, + swap, + inside, + }, + ConeKindIn::Cylinder { radius } => ffi::ConeKind::Cylinder { radius }, + }, + o: c.o, + x: c.x, + y: c.y, + } +} + +fn cpp(i: &Inputs) -> Result { + let flat = match i { + Inputs::IsNurb { is_nurb, scale } => { + let t = ffi::TestSurf { + source: match &is_nurb.source { + TestSourceIn::Raw { nurb } => ffi::TestSource::Raw(ffi::NurbIn { + n: nurb.n, + m: nurb.m, + p: nurb.p, + q: nurb.q, + cpts: nurb.cpts.clone(), + u: nurb.u.clone(), + v: nurb.v.clone(), + }), + TestSourceIn::Src { of } => ffi::TestSource::Src(ffi_src(of)?), + }, + transpose: is_nurb.transpose, + reparam: is_nurb.reparam, + perturb: is_nurb.perturb, + }; + ffi::is_nurb(&t, *scale) + } + Inputs::Op { src, op } => { + let op = match op { + OpIn::State {} => ffi::Op::State, + OpIn::Plane { + plane, + dom, + other_dom, + tol, + } => ffi::Op::Plane { + plane: ffi_plane(plane), + dom: *dom, + other_dom: *other_dom, + tol: *tol, + }, + OpIn::Cylinder { cone, tol } => ffi::Op::Cylinder { + cone: ffi_cone(cone), + tol: *tol, + }, + OpIn::Extrusion { other, tol } => ffi::Op::Extrusion { + other: ffi_src(other)?, + tol: *tol, + }, + OpIn::Global { + target, + dom, + other_dom, + tol, + ang, + } => ffi::Op::Global { + target: match target { + TargetIn::Plane { plane, .. } => ffi::Target::Plane(ffi_plane(plane)), + TargetIn::Cone { cone } => ffi::Target::Cone(ffi_cone(cone)), + TargetIn::Extrusion { other } => ffi::Target::Extrusion(ffi_src(other)?), + TargetIn::Bspline { other } => ffi::Target::BSpline(ffi_src(other)?), + }, + dom: *dom, + other_dom: *other_dom, + tol: *tol, + ang: *ang, + }, + OpIn::Trim { dom } => ffi::Op::Trim { dom: *dom }, + }; + ffi::surface_op(&ffi_src(src)?, &op) + } + } + .map_err(|e| harness(e.to_string()))?; + to_output(&flat) +} + +/// Splits a record into `build` and `out`. +fn to_output(flat: &[f64]) -> Result { + let (b, rest) = flat + .split_first() + .ok_or_else(|| harness("empty record"))?; + Ok(Output::new() + .values("build", vec![*b]) + .values("out", rest.to_vec())) +} + +// ---- Rust side ------------------------------------------------------------------------ + +/// A failed Rust step: deferred (unported) or an `SmStatus` written to the record. +enum Stop { + Deferred(Output), + Status(f64), +} + +fn stop(e: &solidcore::SolidError) -> Stop { + Output::unported(e).map_or_else(|| Stop::Status(status(e)), Stop::Deferred) +} + +/// The surface of a source; `Ok(Err(..))` when it cannot be made. +fn rust_src(k: &Kernel, s: &SrcIn) -> Result, HarnessError> { + if let SrcIn::Built { surf } = s { + return Ok(rust_surf(k, surf)?.map_err(|e| stop(&e))); + } + let (ascii, version, bytes) = src_bytes(s)?.ok_or_else(|| harness("no record"))?; + let mut db = DatabaseReader::new(); + db.open_for_read( + bytes, + if ascii { + FileType::Ascii + } else { + FileType::Binary + }, + ); + db.set_version(version); + Ok(SurfOfExtrusion::read_from_db(k, &mut db, version).map_err(|e| stop(&e))) +} + +fn rust_plane(p: &PlaneIn) -> Plane { + match p { + PlaneIn::Bounded { + o, + x, + y, + scale, + dom, + } => Plane::new( + v3(*o), + v3(*x), + v3(*y), + Vec2::new(scale[0], scale[1]), + &dom4(*dom), + ), + PlaneIn::Normal { o, n } => Plane::from_normal(v3(*o), v3(*n)), + } +} + +fn rust_cone(k: &Kernel, c: &ConeIn) -> solidcore::Result { + let a2p = Axis2Placement::new(v3(c.o), v3(c.x), v3(c.y)); + match c.cone { + ConeKindIn::Canonical { + bot, + top, + height, + swap, + inside, + } => Cone::create_canonical(k, &a2p, bot, top, height, swap, inside), + ConeKindIn::Semi { + bot, + semi, + height, + swap, + inside, + } => Cone::create_canonical_with_semi_angle(k, &a2p, bot, semi, height, swap, inside), + ConeKindIn::Cylinder { radius } => Cone::create_canonical_cylinder(k, &a2p, radius), + } +} + +/// The intersection outputs (see the FFI module docs). +fn put_tsect(o: &mut Vec, r: &ExtrusionIntersection) { + o.push(flag(r.needs_more_intersections)); + o.push(r.curves_3d.len() as f64); + for c in &r.curves_3d { + put_curve(o, Some(c)); + } + o.push(r.curve_types.len() as f64); + o.extend(r.curve_types.iter().map(|t| f64::from(*t as u8))); + o.push(r.surface1_uv_curves.len() as f64); + o.extend(r.surface1_uv_curves.iter().map(|c| flag(c.is_some()))); + o.push(r.surface2_uv_curves.len() as f64); + o.extend(r.surface2_uv_curves.iter().map(|c| flag(c.is_some()))); + o.push(r.deviations.len() as f64); + o.extend_from_slice(&r.deviations); +} + +/// Pushes the status of an intersection and its outputs. +fn tsect(o: &mut Vec, r: solidcore::Result) -> Result<(), Stop> { + match r { + Ok(r) => { + o.push(0.0); + put_tsect(o, &r); + Ok(()) + } + Err(e) => match stop(&e) { + Stop::Status(s) => { + o.push(s); + Ok(()) + } + d @ Stop::Deferred(_) => Err(d), + }, + } +} + +/// The NURB of a surface as an `SmBSplineSurface` (`SmBSplineSurface(const gw_SURFACE*)`). +fn nurb_surface(s: &SurfOfExtrusion) -> Result { + s.base() + .gw_nurb() + .map(BSplineSurface::from_gw_nurb) + .ok_or_else(|| harness("source surface has no NURB")) +} + +/// Pushes a sub-object's status; `Ok(None)` when it failed (status written). +fn sub(o: &mut Vec, r: Result) -> Result, Stop> { + match r { + Ok(v) => { + o.push(0.0); + Ok(Some(v)) + } + Err(Stop::Status(s)) => { + o.push(s); + Ok(None) + } + Err(d) => Err(d), + } +} + +fn rust_op( + k: &Kernel, + s: &mut SurfOfExtrusion, + op: &OpIn, + o: &mut Vec, +) -> Result, HarnessError> { + let natural = |s: &SurfOfExtrusion| s.base().natural_uv_domain(); + Ok(match op { + OpIn::State {} => { + o.push(0.0); + put_state(o, s).map_err(|e| stop(&e)) + } + OpIn::Plane { + plane, + dom, + other_dom, + tol, + } => { + let pl = rust_plane(plane); + let d = dom.map_or_else(|| natural(s), dom4); + let od = other_dom.map_or_else(|| pl.natural_uv_domain(), dom4); + tsect(o, s.intersect_with_plane(k, &d, &pl, &od, *tol)) + } + OpIn::Cylinder { cone, tol } => { + match sub(o, rust_cone(k, cone).map_err(|e| stop(&e))) { + Err(d) => Err(d), + Ok(None) => Ok(()), + Ok(Some(c)) => tsect(o, s.intersect_with_cylinder(k, &c, *tol)), + } + } + OpIn::Extrusion { other, tol } => match sub(o, rust_src(k, other)?) { + Err(d) => Err(d), + Ok(None) => Ok(()), + Ok(Some(other)) => tsect(o, s.intersect_with_surf_of_extrusion(k, &other, *tol)), + }, + OpIn::Global { + target, + dom, + other_dom, + tol, + ang, + } => { + let d = dom.map_or_else(|| natural(s), dom4); + let r = match target { + TargetIn::Plane { plane, as_surface } => { + o.push(0.0); + let pl = rust_plane(plane); + let od = other_dom.map_or_else(|| pl.natural_uv_domain(), dom4); + if *as_surface { + let srf = Surface::from(pl); + s.global_surface_intersect( + k, + &d, + IntersectTarget::Surface(&srf), + &od, + [true, true], + *tol, + *ang, + ) + } else { + s.global_surface_intersect( + k, + &d, + IntersectTarget::Plane(&pl), + &od, + [true, true], + *tol, + *ang, + ) + } + } + TargetIn::Cone { cone } => { + match sub(o, rust_cone(k, cone).map_err(|e| stop(&e))) { + Err(d) => return Ok(Err(d)), + Ok(None) => return Ok(Ok(())), + Ok(Some(c)) => { + let od = other_dom.map_or_else( + || c.rev().base().natural_uv_domain(), + dom4, + ); + s.global_surface_intersect( + k, + &d, + IntersectTarget::Cone(&c), + &od, + [true, true], + *tol, + *ang, + ) + } + } + } + TargetIn::Extrusion { other } => match sub(o, rust_src(k, other)?) { + Err(d) => return Ok(Err(d)), + Ok(None) => return Ok(Ok(())), + Ok(Some(e)) => { + let od = other_dom.map_or_else(|| natural(&e), dom4); + s.global_surface_intersect( + k, + &d, + IntersectTarget::SurfOfExtrusion(&e), + &od, + [true, true], + *tol, + *ang, + ) + } + }, + TargetIn::Bspline { other } => match sub(o, rust_src(k, other)?) { + Err(d) => return Ok(Err(d)), + Ok(None) => return Ok(Ok(())), + Ok(Some(e)) => { + let b = nurb_surface(&e)?; + let od = other_dom.map_or_else(|| b.natural_uv_domain(), dom4); + let srf = Surface::from(b); + s.global_surface_intersect( + k, + &d, + IntersectTarget::Surface(&srf), + &od, + [true, true], + *tol, + *ang, + ) + } + }, + }; + tsect(o, r) + } + OpIn::Trim { dom } => match s.trim_with_domain(k, &dom4(*dom)) { + Ok(()) => { + o.push(0.0); + put_state(o, s).map_err(|e| stop(&e)) + } + Err(e) => match stop(&e) { + Stop::Status(st) => { + o.push(st); + Ok(()) + } + d @ Stop::Deferred(_) => Err(d), + }, + }, + }) +} + +/// The test surface of `IsNurbSurfaceSurfOfExtrusion`; `Ok(Err(..))` when a step +/// fails (statuses written). +fn rust_test( + k: &Kernel, + t: &TestIn, + o: &mut Vec, +) -> Result, Stop>, HarnessError> { + let mut b = match &t.source { + TestSourceIn::Raw { nurb } => { + let mut net = Vec::new(); + for i in 0..=nurb.n { + let row = (0..=nurb.m) + .map(|j| { + nurb.cpts + .get(i * (nurb.m + 1) + j) + .map(|&[x, y, z, w]| CPoint::new(x, y, z, w)) + .ok_or_else(|| harness("test NURB: too few points")) + }) + .collect::, _>>()?; + net.push(row); + } + let sur = NurbSurface::new(net, nurb.p, nurb.q, nurb.u.clone(), nurb.v.clone()) + .map_err(|e| harness(format!("test NURB: {e}")))?; + o.push(0.0); + BSplineSurface::from_nurb(sur, false) + } + TestSourceIn::Src { of } => match rust_src(k, of)? { + Ok(s) => { + o.push(0.0); + nurb_surface(&s)? + } + Err(Stop::Status(st)) => { + o.push(st); + return Ok(Ok(None)); + } + Err(d) => return Ok(Err(d)), + }, + }; + let push = |o: &mut Vec, r: solidcore::Result<()>| -> Result<(), Stop> { + match r { + Ok(()) => { + o.push(0.0); + Ok(()) + } + Err(e) => match stop(&e) { + Stop::Status(st) => { + o.push(st); + Ok(()) + } + d @ Stop::Deferred(_) => Err(d), + }, + } + }; + if t.transpose { + if let Err(d) = push(o, b.swap_uv()) { + return Ok(Err(d)); + } + } + if let Some(d) = t.reparam { + if let Err(d) = push(o, b.reparameterize(&dom4(d))) { + return Ok(Err(d)); + } + } + if let Some((i, j, d)) = t.perturb { + let p = b + .get_or_create_gw_nurb() + .and_then(|sur| sur.cpt_mut(i, j)) + .map_err(|_| harness("perturbation outside the test NURB"))?; + p.x += d[0]; + p.y += d[1]; + p.z += d[2]; + } + Ok(Ok(Some(b))) +} + +fn rust(i: &Inputs) -> Result { + let k = Kernel::default(); + let mut o = Vec::new(); + match i { + Inputs::IsNurb { is_nurb, scale } => match rust_test(&k, is_nurb, &mut o)? { + Err(Stop::Deferred(d)) => return Ok(d), + Err(Stop::Status(_)) => return Err(harness("unexpected status stop")), + Ok(None) => {} + Ok(Some(t)) => { + match SurfOfExtrusion::is_nurb_surface_surf_of_extrusion(&k, &t, *scale) { + Ok(Some(mut s)) => { + // whether the NURB was made, then the state with it made + let had = s.base().gw_nurb().is_some(); + o.extend([0.0, 1.0, flag(had)]); + let made = if had { Ok(()) } else { s.make_nurb(&k) }; + match made { + Ok(()) => { + o.push(0.0); + put_state(&mut o, &s).map_err(|e| harness(e.to_string()))?; + } + Err(e) => { + if let Some(d) = Output::unported(&e) { + return Ok(d); + } + o.push(status(&e)); + } + } + } + Ok(None) => o.extend([0.0, 0.0]), + Err(e) => { + if let Some(d) = Output::unported(&e) { + return Ok(d); + } + o.push(status(&e)); + } + } + } + }, + Inputs::Op { src, op } => match rust_src(&k, src)? { + Err(Stop::Deferred(d)) => return Ok(d), + Err(Stop::Status(st)) => o.push(st), + Ok(mut s) => { + o.push(0.0); + if let Err(stop) = rust_op(&k, &mut s, op, &mut o)? { + match stop { + Stop::Deferred(d) => return Ok(d), + Stop::Status(_) => return Err(harness("unexpected status stop")), + } + } + } + }, + } + to_output(&o) +} + +// ---- generation ----------------------------------------------------------------------- + +/// A built source with its Rust surface (to size the parameters). +fn gen_built(rng: &mut Rng, k: &Kernel) -> Option<(SurfIn, SurfOfExtrusion)> { + for _ in 0..8 { + let s = gen_surf(rng); + if let Ok(Ok(b)) = rust_surf(k, &s) { + return Some((s, b)); + } + } + None +} + +/// A sample range of the STEP domain (the infinite extrusion clamped). +fn step_box(b: &SurfOfExtrusion) -> [f64; 4] { + let d = b.step_uv_domain(); + let (v0, v1) = if d.max().y - d.min().y > 1e5 { + (-3.0, 3.0) + } else { + (d.min().y, d.max().y) + }; + [d.min().x, v0, d.max().x, v1] +} + +/// A point of the surface at fractions `(a, b)` of its sample range. +fn surf_point(k: &Kernel, b: &SurfOfExtrusion, a: f64, c: f64) -> Option<[f64; 3]> { + let [u0, v0, u1, v1] = step_box(b); + let p = b + .evaluate_step_point(k, Point2::new(u0 + a * (u1 - u0), v0 + c * (v1 - v0))) + .ok()?; + Some([p.x, p.y, p.z]) +} + +fn as_arr(v: Vec3) -> [f64; 3] { + [v.x, v.y, v.z] +} + +/// A plane through `o` with normal `n`: infinite, or bounded around `o` (a few sizes). +fn gen_plane(rng: &mut Rng, o: [f64; 3], n: [f64; 3], size: f64) -> PlaneIn { + if rng.chance(0.4) { + return PlaneIn::Normal { o, n }; + } + let nn = normalize(n); + let t = unit_vec(rng); + let mut y = cross3(nn, t); + if (y[0] * y[0] + y[1] * y[1] + y[2] * y[2]).sqrt() < 1e-3 { + y = cross3(nn, [1.0, 0.0, 0.0]); + } + let y = normalize(y); + let x = cross3(y, nn); + let half = size * rng.uniform(0.3, 8.0); + let sc = if rng.chance(0.2) { + [rng.uniform(0.5, 3.0), rng.uniform(0.5, 3.0)] + } else { + [1.0, 1.0] + }; + PlaneIn::Bounded { + o, + x, + y, + scale: sc, + dom: [-half, -half * 0.7, half, half * 1.3], + } +} + +fn gen_tol(rng: &mut Rng) -> Option { + match rng.below(10) { + 0 => Some(0.0), + 1 => Some(1e-3), + 2 => Some(-1e-6), + 3 => Some(1e-12), + _ => None, + } +} + +#[allow(clippy::too_many_lines)] // one plane case generator per branch +fn gen_plane_op(rng: &mut Rng, k: &Kernel, b: &SurfOfExtrusion) -> Option { + let e = as_arr(b.extrusion_vector()); + let el = (e[0] * e[0] + e[1] * e[1] + e[2] * e[2]).sqrt(); + if el < 1e-12 { + return None; + } + let en = scale(e, 1.0 / el); + let size = { + let [u0, v0, u1, v1] = step_box(b); + let p0 = surf_point(k, b, 0.0, 0.0)?; + let p1 = surf_point(k, b, 1.0, 1.0)?; + let _ = (u0, v0, u1, v1); + let d = [p1[0] - p0[0], p1[1] - p0[1], p1[2] - p0[2]]; + (d[0] * d[0] + d[1] * d[1] + d[2] * d[2]).sqrt().max(1e-3) + }; + let cv = as_arr(b.curve_vec()); + let plane = match rng.below(10) { + // parallel to the extrusion: directrices through the generator hits + 0..=4 => { + let mut n = cross3(en, unit_vec(rng)); + if (n[0] * n[0] + n[1] * n[1] + n[2] * n[2]).sqrt() < 1e-3 { + n = cross3(en, [0.0, 0.0, 1.0]); + } + let n = normalize(n); + let a = match rng.below(6) { + 0 => 0.0, + 1 => 1.0, + _ => rng.unit(), + }; + let p = surf_point(k, b, a, rng.unit())?; + let off = match rng.below(5) { + 0 => 0.0, + 1 => size * 1e-9, + _ => rng.uniform(-0.3, 0.3) * size, + }; + gen_plane(rng, add(p, n, off), n, size) + } + // parallel to the generator's plane (perpendicular / independent generators) + 5..=7 if cv.iter().all(|x| x.is_finite()) => { + let n = if rng.chance(0.5) { cv } else { scale(cv, -1.0) }; + let c = match rng.below(6) { + 0 => -0.3, + 1 => 1.3, + 2 => 0.0, + 3 => 1.0, + _ => rng.unit(), + }; + let p = surf_point(k, b, rng.unit(), c.clamp(0.0, 1.0))?; + let shift = if c < 0.0 { + -0.3 * size + } else if c > 1.0 { + 0.3 * size + } else if rng.chance(0.2) { + 1e-9 * size + } else { + 0.0 + }; + gen_plane(rng, add(p, en, shift), n, size) + } + // oblique + _ => { + let n = normalize(add(en, unit_vec(rng), rng.uniform(0.2, 2.0))); + let p = surf_point(k, b, rng.unit(), rng.unit())?; + gen_plane(rng, p, n, size) + } + }; + let dom = if rng.chance(0.15) { + let d = b.base().natural_uv_domain(); + Some([d.min().x, d.min().y, d.max().x, d.max().y]) + } else { + None + }; + Some(OpIn::Plane { + plane, + dom, + other_dom: None, + tol: gen_tol(rng), + }) +} + +/// A cone near the surface. For `IntersectWithCylinder` (`for_cylinder`) only cones whose +/// bottom iso circle upstream makes from defined values: an unbounded cylinder puts the +/// circle at `-SM_INFINITE_PARAMETER`, where the STEP inversion leaves its outputs +/// unset (the shim rejects those). +fn gen_cone( + rng: &mut Rng, + k: &Kernel, + b: &SurfOfExtrusion, + parallel: bool, + for_cylinder: bool, +) -> Option { + let e = as_arr(b.extrusion_vector()); + if (e[0] * e[0] + e[1] * e[1] + e[2] * e[2]).sqrt() < 1e-12 { + return None; + } + let e = normalize(e); + let z = if parallel { + if rng.chance(0.5) { + e + } else { + scale(e, -1.0) + } + } else { + unit_vec(rng) + }; + let t = unit_vec(rng); + let mut x = cross3(t, z); + if (x[0] * x[0] + x[1] * x[1] + x[2] * x[2]).sqrt() < 1e-3 { + x = cross3([1.0, 0.0, 0.0], z); + } + let x = normalize(x); + let y = cross3(z, x); + let o = surf_point(k, b, rng.unit(), rng.unit())?; + let o = add(o, x, rng.uniform(-1.0, 1.0)); + let r = rng.uniform(0.2, 2.0); + let cone = match rng.below(6) { + 0..=2 => ConeKindIn::Canonical { + bot: r, + top: if rng.chance(0.7) { + r + } else { + r * rng.uniform(0.3, 1.8) + }, + height: rng.uniform(0.5, 4.0), + swap: rng.chance(0.3), + inside: rng.chance(0.2), + }, + 3 => ConeKindIn::Canonical { + bot: r, + top: r * (1.0 + 1e-17), + height: rng.uniform(0.5, 4.0), + swap: false, + inside: false, + }, + 4 => { + let semi = if rng.chance(0.5) { + 0.0 + } else { + rng.uniform(5.0, 40.0) + }; + let height = if for_cylinder && semi == 0.0 { + Some(rng.uniform(0.5, 3.0)) + } else { + rng.chance(0.7).then(|| rng.uniform(0.5, 3.0)) + }; + ConeKindIn::Semi { + bot: r, + semi, + height, + swap: rng.chance(0.3), + inside: rng.chance(0.2), + } + } + _ if for_cylinder => ConeKindIn::Canonical { + bot: r, + top: r, + height: rng.uniform(1e-3, 10.0), + swap: rng.chance(0.5), + inside: rng.chance(0.5), + }, + _ => ConeKindIn::Cylinder { radius: r }, + }; + [o, x, y] + .iter() + .flatten() + .all(|v| v.is_finite()) + .then_some(ConeIn { cone, o, x, y }) +} + +/// Another built surface swept along `b`'s extrusion (or not). +fn gen_other_ext(rng: &mut Rng, b: &SurfOfExtrusion, parallel: bool) -> Option { + let size = 1.0; + let f: Frame = frame(rng, size); + let gen = gen_generator(rng, &f, true, size); + let e = as_arr(b.extrusion_vector()); + let vec = if parallel { + scale(e, rng.uniform(-2.0, 2.0)) + } else { + let (_, _, _, z) = f; + z + }; + Some(SurfIn { + gen, + build: BuildIn::Canonical { vec }, + oob: false, + swap: false, + }) +} + +/// A record written from a built surface's data, with varied fields. +fn gen_record(rng: &mut Rng, k: &Kernel) -> Option { + let (_, b) = gen_built(rng, k)?; + let gen = b.gen_curve()?; + // the generator's NURB as an SmBSplineCurve record + let gnurb = nurb_of(gen)?; + let rat = gnurb.cpts().iter().any(|p| p.w != NOW); + let pts: Vec> = gnurb + .cpts() + .iter() + .map(|p| { + if rat { + vec![p.x, p.y, p.z, p.w] + } else { + vec![p.x, p.y, p.z] + } + }) + .collect(); + let gen_rec = CurveRec { + p: gnurb.degree() as i16, + rat: i16::from(rat), + dim: 3, + kt: rng.below(5), + form: rng.below(7), + pts, + knots: gnurb.knots().to_vec(), + }; + let sur = b.base().gw_nurb()?; + let ix = sur.indices(); + let srat = sur.rows().flatten().any(|p| p.w != NOW); + let spts: Vec> = sur + .rows() + .flatten() + .map(|p| { + if srat { + vec![p.x, p.y, p.z, p.w] + } else { + vec![p.x, p.y, p.z] + } + }) + .collect(); + let surf = SurfRec { + n: ix.n as i64, + m: ix.m as i64, + p: ix.p as i16, + q: ix.q as i16, + rat: i16::from(srat), + kt: rng.below(5), + form: rng.below(12), + pts: spts, + u: sur.u_knots().to_vec(), + v: sur.v_knots().to_vec(), + }; + let d = b.step_uv_domain(); + let mut anal = [d.min().x, d.min().y, d.max().x, d.max().y]; + if rng.chance(0.1) { + // inverted: SetMinMax refuses it + anal.swap(0, 2); + } + Some(RecordIn { + binary: rng.chance(0.5), + version: rng.choose(VERSIONS).copied().unwrap_or(38), + origin: as_arr(b.origin()), + vec: as_arr(b.extrusion_vector()), + anal, + orient: if rng.chance(0.1) { + rng.below(6) + } else { + b.orientation() as u64 + }, + swap: match rng.below(10) { + 0 => 2, + 1 => -1, + _ => i32::from(b.swap_uv()), + }, + cp: as_arr(b.curve_point()).map(|x| if x.is_finite() { x } else { 0.0 }), + cv: as_arr(b.curve_vec()).map(|x| if x.is_finite() { x } else { 0.0 }), + gen: gen_rec, + surf, + }) +} + +#[allow(clippy::too_many_lines)] // one case generator per op +fn gen_case(rng: &mut Rng) -> Option { + let k = Kernel::default(); + let pick = rng.below(100); + if pick < 8 { + // database records + let rec = gen_record(rng, &k)?; + let op = OpIn::State {}; + return Some(Inputs::Op { + src: SrcIn::Record { rec: Box::new(rec) }, + op, + }); + } + if pick < 18 { + // IsNurbSurfaceSurfOfExtrusion + let (s, b) = gen_built(rng, &k)?; + let sur = b.base().gw_nurb()?; + let ix = sur.indices(); + let perturb = rng.chance(0.25).then(|| { + let i = rng.below(ix.n as u64 + 1) as usize; + let j = rng.below(ix.m as u64 + 1) as usize; + let mag = match rng.below(4) { + 0 => 1e-12, + 1 => 1e-9, + 2 => 1e-6, + _ => 0.1, + }; + let d = scale(unit_vec(rng), mag); + (i, j, d) + }); + let transpose = rng.chance(0.3); + let perturb = perturb.map(|(i, j, d)| if transpose { (j, i, d) } else { (i, j, d) }); + let reparam = rng.chance(0.3).then(|| { + let a = rng.uniform(-5.0, 5.0); + let c = rng.uniform(-5.0, 5.0); + [a, c, a + rng.uniform(0.5, 4.0), c + rng.uniform(0.5, 4.0)] + }); + let scale_t = match rng.below(6) { + 0 => 0.0, + 1 => 1e3, + 2 => 1e-3, + _ => 1.0, + }; + return Some(Inputs::IsNurb { + is_nurb: TestIn { + source: TestSourceIn::Src { + of: Box::new(SrcIn::Built { surf: s }), + }, + transpose, + reparam, + perturb, + }, + scale: scale_t, + }); + } + let (s, b) = gen_built(rng, &k)?; + let op = match pick { + 18..=59 => gen_plane_op(rng, &k, &b)?, + 60..=69 => { + let parallel = rng.chance(0.3); + let tol = match rng.below(5) { + 0 => Some(1e-3), + 1 => Some(-1e-6), + 2 => Some(1e-6), + _ => None, + }; + OpIn::Cylinder { + cone: gen_cone(rng, &k, &b, parallel, true)?, + tol, + } + } + 70..=77 => { + let parallel = rng.chance(0.4); + OpIn::Extrusion { + other: Box::new(SrcIn::Built { + surf: gen_other_ext(rng, &b, parallel)?, + }), + tol: gen_tol(rng), + } + } + 78..=89 => { + let target = match rng.below(5) { + 0 | 1 => { + let OpIn::Plane { plane, .. } = gen_plane_op(rng, &k, &b)? else { + return None; + }; + TargetIn::Plane { + plane, + as_surface: rng.chance(0.5), + } + } + 2 => TargetIn::Cone { + cone: gen_cone(rng, &k, &b, false, true)?, + }, + 3 => TargetIn::Extrusion { + other: Box::new(SrcIn::Built { + surf: gen_other_ext(rng, &b, false)?, + }), + }, + _ => TargetIn::Bspline { + other: Box::new(SrcIn::Built { + surf: gen_other_ext(rng, &b, false)?, + }), + }, + }; + // (a cone's bottom iso circle needs a tolerance its inversion can meet) + let tol = if matches!(target, TargetIn::Cone { .. }) { + rng.chance(0.5).then_some(1e-6) + } else { + gen_tol(rng) + }; + OpIn::Global { + target, + dom: None, + other_dom: None, + tol, + ang: rng.chance(0.3).then(|| rng.uniform(0.01, 1.0)), + } + } + _ => { + let d = b.base().natural_uv_domain(); + let (u0, v0, u1, v1) = (d.min().x, d.min().y, d.max().x, d.max().y); + let (lu, lv) = (u1 - u0, v1 - v0); + let dom = match rng.below(8) { + 0 => [u0, v0, u1, v1], + 1 => [u0 - 1e-9, v0, u1, v1 + 1e-9], + 2 => [u0 - 0.1 * lu, v0, u1, v1], + 3 => [u0 + 0.5 * lu, v0, u1, v1], + _ => { + let a = u0 + rng.uniform(0.0, 0.4) * lu; + let c = v0 + rng.uniform(0.0, 0.4) * lv; + [a, c, a + rng.uniform(0.2, 0.6) * lu, c + rng.uniform(0.2, 0.6) * lv] + } + }; + OpIn::Trim { dom } + } + }; + Some(Inputs::Op { + src: SrcIn::Built { surf: s }, + op, + }) +} + +impl UnitDiff for Runner { + fn id(&self) -> &'static str { + "surface.surf_of_extrusion_p2" + } + + fn generate(&self, rng: &mut Rng) -> Option { + for _ in 0..8 { + // (a non-finite number would not survive the JSON round trip) + if let Some(v) = gen_case(rng).and_then(|i| serde_json::to_value(i).ok()) { + if serde_json::from_value::(v.clone()).is_ok() { + return Some(v); + } + } + } + None + } + + fn cases(&self, ctx: &CaseContext) -> Result, HarnessError> { + let ctx = CaseContext { + seeds: ctx.seeds.max(MIN_GENERATED), + ..ctx.clone() + }; + default_cases(self, &ctx) + } + + fn run_cpp(&self, case: &Case) -> Result { + cpp(&case.parse()?) + } + + fn run_rust(&self, case: &Case) -> Result { + rust(&case.parse()?) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::collections::BTreeMap; + + fn op_name(i: &Inputs) -> String { + match i { + Inputs::IsNurb { .. } => "is_nurb".into(), + Inputs::Op { src, op } => { + let s = match src { + SrcIn::Built { .. } => "", + _ => "record:", + }; + let o = match op { + OpIn::State {} => "state".to_string(), + OpIn::Plane { .. } => "plane".into(), + OpIn::Cylinder { .. } => "cylinder".into(), + OpIn::Extrusion { .. } => "extrusion".into(), + OpIn::Global { target, .. } => format!( + "global:{}", + match target { + TargetIn::Plane { .. } => "plane", + TargetIn::Cone { .. } => "cone", + TargetIn::Extrusion { .. } => "extrusion", + TargetIn::Bspline { .. } => "bspline", + } + ), + OpIn::Trim { .. } => "trim".into(), + }; + format!("{s}{o}") + } + } + } + + /// What the Rust side answers: deferred, a failed source, a failed op, or the + /// op's first outputs (the intersections' `more` flag and curve count). + fn outcome(i: &Inputs, out: &Output) -> String { + if let Some(d) = &out.deferred { + return format!("deferred:{}", d.unit); + } + let b = out.values.get("build").and_then(|v| v.first()).copied(); + let o = out.values.get("out").cloned().unwrap_or_default(); + if b != Some(0.0) { + return format!("build:{b:?}"); + } + match i { + Inputs::IsNurb { .. } => format!("{:?}", o.get(..2)), + Inputs::Op { op, .. } => match op { + OpIn::Plane { .. } => format!("{:?}", o.get(..3)), + OpIn::Cylinder { .. } | OpIn::Extrusion { .. } | OpIn::Global { .. } => { + format!("{:?}", o.get(..4)) + } + _ => format!("{:?}", o.first()), + }, + } + } + + /// The generators reach every op, with answers that are compared (not deferred), + /// curves found, statuses and needs-more answers. + #[test] + fn generated_cases_cover_every_op() { + let mut tally: BTreeMap<(String, String), usize> = BTreeMap::new(); + for seed in 0..1200u64 { + let mut rng = Rng::new(0x5eed_1000 + seed); + let Some(i) = gen_case(&mut rng) else { + continue; + }; + let out = rust(&i).expect("harness"); + *tally.entry((op_name(&i), outcome(&i, &out))).or_default() += 1; + } + for (k, v) in &tally { + eprintln!("{k:?} {v}"); + } + // (GlobalSurfaceIntersect with a cone, an extrusion or a B-spline surface always + // reaches the general intersector or the projected curve solve: deferred) + for op in [ + "plane", + "cylinder", + "extrusion", + "global:plane", + "trim", + "is_nurb", + "record:state", + ] { + let compared = tally + .iter() + .any(|((o, k), _)| o == op && !k.starts_with("deferred")); + assert!(compared, "{op} is never compared"); + } + } +} diff --git a/crates/solidcore-ffi/src/units/surface_surf_of_extrusion_p1.rs b/crates/solidcore-ffi/src/units/surface_surf_of_extrusion_p1.rs index badebe2fae..4bfa7c53ce 100644 --- a/crates/solidcore-ffi/src/units/surface_surf_of_extrusion_p1.rs +++ b/crates/solidcore-ffi/src/units/surface_surf_of_extrusion_p1.rs @@ -317,7 +317,7 @@ fn bad(msg: impl Into) -> FfiError { FfiError::InvalidArgument(msg.into()) } -fn finite(v: &[f64], what: &str) -> Result<(), FfiError> { +pub(crate) fn finite(v: &[f64], what: &str) -> Result<(), FfiError> { if v.iter().all(|x| x.is_finite()) { Ok(()) } else { @@ -337,7 +337,7 @@ fn cross(a: [f64; 3], b: [f64; 3]) -> [f64; 3] { } /// Checks two axes are long enough and far from parallel. -fn axes(x: [f64; 3], y: [f64; 3], what: &str) -> Result<(), FfiError> { +pub(crate) fn axes(x: [f64; 3], y: [f64; 3], what: &str) -> Result<(), FfiError> { finite(&x, what)?; finite(&y, what)?; let (lx, ly) = (len(x), len(y)); @@ -348,7 +348,7 @@ fn axes(x: [f64; 3], y: [f64; 3], what: &str) -> Result<(), FfiError> { } /// Checks an ordered finite domain, with positive extents when `strict`. -fn domain(d: [f64; 4], strict: bool, what: &str) -> Result<(), FfiError> { +pub(crate) fn domain(d: [f64; 4], strict: bool, what: &str) -> Result<(), FfiError> { finite(&d, what)?; let [a, b, c, e] = d; let ok = if strict { @@ -371,7 +371,7 @@ fn angular(d0: f64, d1: f64, what: &str) -> Result<(), FfiError> { } /// Checks a clamped knot vector of degree `p`. -fn check_knots(knots: &[f64], p: usize, what: &str) -> Result<(), FfiError> { +pub(crate) fn check_knots(knots: &[f64], p: usize, what: &str) -> Result<(), FfiError> { finite(knots, what)?; let m = knots .len() @@ -409,7 +409,7 @@ fn check_knots(knots: &[f64], p: usize, what: &str) -> Result<(), FfiError> { } /// Checks 3D control points sharing their rational marker. -fn check_points(pts: &[[f64; 4]], what: &str) -> Result<(), FfiError> { +pub(crate) fn check_points(pts: &[[f64; 4]], what: &str) -> Result<(), FfiError> { let mut first: Option = None; for &[x, y, z, w] in pts { finite(&[x, y, z], what)?; @@ -537,7 +537,7 @@ fn push_gen(o: &mut Vec, g: &Gen) -> Result<(), FfiError> { Ok(()) } -fn push_surf(o: &mut Vec, s: &Surf) -> Result<(), FfiError> { +pub(crate) fn push_surf(o: &mut Vec, s: &Surf) -> Result<(), FfiError> { let (mode, tail): (f64, Vec) = match &s.build { Build::Canonical { vec } => { finite(vec, "extrusion vector")?; diff --git a/crates/solidcore-ffi/src/units/surface_surf_of_extrusion_p2.rs b/crates/solidcore-ffi/src/units/surface_surf_of_extrusion_p2.rs new file mode 100644 index 0000000000..0824b14b17 --- /dev/null +++ b/crates/solidcore-ffi/src/units/surface_surf_of_extrusion_p2.rs @@ -0,0 +1,636 @@ +//! FFI wrappers for unit `surface.surf_of_extrusion_p2`. +//! +//! Shim: `harness/cpp/shim/surface_surf_of_extrusion_p2.cpp` +//! (`sc_surface_surf_of_extrusion_p2_eval`). +//! Upstream: `source/SMLib/src/SmSurfOfExtrusion.cpp`. +//! +//! [`surface_op`] makes a surface of extrusion from a [`Src`] (built as in +//! `surface.surf_of_extrusion_p1`, or read with `SmSurfOfExtrusion::ReadFromDB` from a +//! database record) and runs one [`Op`] on it; [`is_nurb`] runs +//! `IsNurbSurfaceSurfOfExtrusion` on a [`TestSurf`]. Both return the shim's flat +//! record. Statuses are `0` (`SM_SUCCESS`) or the `SmStatus`. +//! +//! * [`surface_op`]: the source status (construction or read), then on success the op's +//! record: a target status where the op makes a second object (`Cylinder`, +//! `Extrusion`, `Global`), then the op status and, on success, its outputs. `State`: +//! `0` and the state. `Plane`, `Cylinder`, `Extrusion`: an intersection `more n +//! curves ntypes types nuv1 has_uv1... nuv2 has_uv2... ndev devs`. `Global`: the same +//! (`more` always `0`), or the status `-3` when upstream would run the general +//! intersector (the special case needs more, or the other surface has none). +//! `Trim`: the state. A state is the `surface.surf_of_extrusion_p1` state, a curve +//! its curve layout. +//! * [`is_nurb`]: the source status (`0` for an inline NURB), the statuses of the +//! `SwapUV` and `Reparameterize` edits asked for, then the result: `0 found +//! [state]`, or the failing status upstream returns as its boolean. +//! +//! The wrappers accept only what upstream handles without undefined behaviour: built +//! surfaces as `surface.surf_of_extrusion_p1` accepts them; records that the strict +//! stream simulator of `topology.brep_data` reads completely (every extraction well +//! formed, no short binary read: upstream then reads uninitialised values) with a +//! B-spline generator (`SmCurve_TYPE` 14033: upstream casts other kinds unchecked) and +//! B-spline headers and knots it accepts; finite plane, cone and placement data with +//! independent axes, planes with positive UV scales and ordered domains (a plane normal +//! longer than `1e-6`), ordered edit domains with positive extents, clamped inline test +//! NURBs with `1 <= degree <= n` and at most [`MAX_INDEX`] control points per direction +//! and finite tolerances. The shim answers `SC_ERR_ARG` for a control point to perturb +//! outside the test NURB and for a cylinder whose bottom iso circle upstream would make +//! from unset values (as the `surface.cone_p1` shim tests it). + +use crate::units::surface_surf_of_extrusion_p1::{ + axes, check_knots, check_points, domain, finite, push_surf, Surf, +}; +use crate::units::topology_brep_data::Sim; +use crate::{call_with_buffer, FfiError}; + +/// Largest control point index of an inline test NURB. +pub const MAX_INDEX: usize = 64; +/// Largest degree of an inline test NURB. +pub const MAX_DEGREE: usize = 9; + +/// `SmBSplineCurve_TYPE`: the only generator kind a record may hold. +const B_SPLINE_CURVE_TYPE: i64 = 14033; + +mod sys { + extern "C" { + pub fn sc_surface_surf_of_extrusion_p2_eval( + op: i32, + input: *const f64, + n_in: i64, + bytes: *const u8, + n_bytes: i64, + out: *mut f64, + cap: i64, + out_len: *mut i64, + ) -> i32; + } +} + +/// Where the surface of extrusion comes from. +#[derive(Debug, Clone, PartialEq)] +pub enum Src { + /// Built as in `surface.surf_of_extrusion_p1`. + Built(Surf), + /// `SmSurfOfExtrusion::ReadFromDB` of a database record (the bytes after the + /// surface's type header). + Record { + /// ASCII (else binary) stream. + ascii: bool, + /// Database version. + version: u64, + /// The record. + bytes: Vec, + }, +} + +/// A plane. +#[derive(Debug, Clone, PartialEq)] +pub enum PlaneIn { + /// `SmPlane(O, X, Y, scale, domain)`. + Bounded { + /// Origin. + o: [f64; 3], + /// X axis. + x: [f64; 3], + /// Y axis. + y: [f64; 3], + /// UV scales. + scale: [f64; 2], + /// UV domain `umin vmin umax vmax`. + dom: [f64; 4], + }, + /// `SmPlane(O, N)` (infinite). + Normal { + /// Origin. + o: [f64; 3], + /// Normal. + n: [f64; 3], + }, +} + +/// How a cone is made. +#[derive(Debug, Clone, PartialEq)] +pub enum ConeKind { + /// `SmCone::CreateCanonical(O, bot, top, height, swap, inside)`. + Canonical { + /// Bottom radius. + bot: f64, + /// Top radius (the semi-angle for `height <= 0`). + top: f64, + /// Height. + height: f64, + /// `bSwapUV`. + swap: bool, + /// `bInsideOut`. + inside: bool, + }, + /// `SmCone::CreateCanonical(O, bot, semi, pOptHeight, swap, inside)`. + Semi { + /// Bottom radius. + bot: f64, + /// Semi-angle in degrees. + semi: f64, + /// Optional height. + height: Option, + /// `bSwapUV`. + swap: bool, + /// `bInsideOut`. + inside: bool, + }, + /// `SmCylinder::CreateCanonical(O, radius)`. + Cylinder { + /// Radius. + radius: f64, + }, +} + +/// A cone or cylinder. +#[derive(Debug, Clone, PartialEq)] +pub struct ConeIn { + /// Construction. + pub kind: ConeKind, + /// Placement origin. + pub o: [f64; 3], + /// Placement X axis. + pub x: [f64; 3], + /// Placement Y axis. + pub y: [f64; 3], +} + +/// The other surface of `GlobalSurfaceIntersect`. +#[derive(Debug, Clone, PartialEq)] +pub enum Target { + /// An `SmPlane`. + Plane(PlaneIn), + /// An `SmCone` / `SmCylinder`. + Cone(ConeIn), + /// An `SmSurfOfExtrusion`. + Extrusion(Src), + /// The NURB of a surface of extrusion as an `SmBSplineSurface`. + BSpline(Src), +} + +/// An inline NURB surface: control points `[x, y, z, w]` (`w` = `NL_NOW` for +/// non-rational), `v` fastest. +#[derive(Debug, Clone, PartialEq)] +pub struct NurbIn { + /// Highest U index. + pub n: usize, + /// Highest V index. + pub m: usize, + /// U degree. + pub p: usize, + /// V degree. + pub q: usize, + /// `(n + 1) (m + 1)` control points. + pub cpts: Vec<[f64; 4]>, + /// `n + p + 2` U knots. + pub u: Vec, + /// `m + q + 2` V knots. + pub v: Vec, +} + +/// The source of a test surface. +#[derive(Debug, Clone, PartialEq)] +pub enum TestSource { + /// `SmBSplineSurface(sur, FALSE, ctx)` of an inline NURB. + Raw(NurbIn), + /// `SmBSplineSurface(src->GetGwNurbPointer())`. + Src(Src), +} + +/// The test surface of `IsNurbSurfaceSurfOfExtrusion` and its edits. +#[derive(Debug, Clone, PartialEq)] +pub struct TestSurf { + /// The surface. + pub source: TestSource, + /// `SwapUV()` it. + pub transpose: bool, + /// `Reparameterize(domain)` it. + pub reparam: Option<[f64; 4]>, + /// Add `d` to the stored `x y z` of control point `(i, j)`. + pub perturb: Option<(usize, usize, [f64; 3])>, +} + +/// The member run on the surface. +#[derive(Debug, Clone, PartialEq)] +pub enum Op { + /// The state only. + State, + /// `IntersectWithPlane` (domains default to the natural ones). + Plane { + /// The plane. + plane: PlaneIn, + /// This surface's NURB domain. + dom: Option<[f64; 4]>, + /// The plane's domain. + other_dom: Option<[f64; 4]>, + /// `pdOptApproxTol3d`. + tol: Option, + }, + /// `IntersectWithCylinder`. + Cylinder { + /// The cone. + cone: ConeIn, + /// `pdOptApproxTol3d`. + tol: Option, + }, + /// `IntersectWithSurfOfExtrusion`. + Extrusion { + /// The other surface. + other: Src, + /// `pdOptApproxTol3d`. + tol: Option, + }, + /// `GlobalSurfaceIntersect`. + Global { + /// The other surface. + target: Target, + /// This surface's NURB domain. + dom: Option<[f64; 4]>, + /// The other surface's domain. + other_dom: Option<[f64; 4]>, + /// `pdOptApproxTol3d`. + tol: Option, + /// `pdOptAngTolRad`. + ang: Option, + }, + /// `TrimWithDomain`. + Trim { + /// The new NURB domain. + dom: [f64; 4], + }, +} + +impl Op { + const fn code(&self) -> i32 { + match self { + Self::State => 0, + Self::Plane { .. } => 1, + Self::Cylinder { .. } => 2, + Self::Extrusion { .. } => 3, + Self::Global { .. } => 4, + Self::Trim { .. } => 6, + } + } +} + +/// `OP_IS_NURB`. +const OP_IS_NURB: i32 = 5; + +fn bad(msg: impl Into) -> FfiError { + FfiError::InvalidArgument(msg.into()) +} + +fn flag(b: bool) -> f64 { + f64::from(u8::from(b)) +} + +fn len(v: [f64; 3]) -> f64 { + let [x, y, z] = v; + (x * x + y * y + z * z).sqrt() +} + +/// Checks a record with the strict stream simulator. +fn check_record(ascii: bool, version: u64, bytes: &[u8]) -> Result<(), FfiError> { + if i64::try_from(version).is_err() { + return Err(bad("record: version too large")); + } + let mut sim = Sim::for_record(bytes, !ascii); + let doubles = |sim: &mut Sim<'_>, n: usize| -> Result<(), FfiError> { + for _ in 0..n { + sim.double()?; + } + sim.lines(1); + Ok(()) + }; + doubles(&mut sim, 3)?; // origin + doubles(&mut sim, 3)?; // extrusion vector + doubles(&mut sim, 4)?; // analytic domain + sim.ulong()?; // orientation + sim.lines(1); + sim.boolean()?; // swap + sim.lines(1); + doubles(&mut sim, 3)?; // curve point + doubles(&mut sim, 3)?; // curve vector + sim.lines(1); + let (ty, _dim) = sim.read_type(true)?; + if ty != B_SPLINE_CURVE_TYPE { + return Err(bad("record: generator is not an SmBSplineCurve record")); + } + sim.bspline_curve(version)?; + sim.bspline_surface(version) +} + +fn check_plane(p: &PlaneIn) -> Result<(), FfiError> { + match p { + PlaneIn::Bounded { + o, + x, + y, + scale, + dom, + } => { + finite(o, "plane origin")?; + axes(*x, *y, "plane axes")?; + finite(scale, "plane scale")?; + if !(scale[0] > 0.0 && scale[1] > 0.0) { + return Err(bad("plane scale: not positive")); + } + domain(*dom, true, "plane domain") + } + PlaneIn::Normal { o, n } => { + finite(o, "plane origin")?; + finite(n, "plane normal")?; + if len(*n) < 1e-6 { + return Err(bad("plane normal: too short")); + } + Ok(()) + } + } +} + +fn check_nurb(s: &NurbIn) -> Result<(), FfiError> { + if s.n == 0 || s.m == 0 || s.n > MAX_INDEX || s.m > MAX_INDEX { + return Err(bad("test NURB: bad control point counts")); + } + if s.p == 0 || s.q == 0 || s.p > s.n || s.q > s.m || s.p > MAX_DEGREE || s.q > MAX_DEGREE { + return Err(bad("test NURB: need 1 <= degree <= n")); + } + if s.cpts.len() != (s.n + 1) * (s.m + 1) + || s.u.len() != s.n + s.p + 2 + || s.v.len() != s.m + s.q + 2 + { + return Err(bad("test NURB: wrong sizes")); + } + check_points(&s.cpts, "test NURB")?; + check_knots(&s.u, s.p, "test NURB U")?; + check_knots(&s.v, s.q, "test NURB V") +} + +fn opt(o: &mut Vec, v: Option, what: &str) -> Result<(), FfiError> { + let x = v.unwrap_or(0.0); + finite(&[x], what)?; + o.extend([flag(v.is_some()), x]); + Ok(()) +} + +fn opt_dom(o: &mut Vec, d: Option<[f64; 4]>, what: &str) -> Result<(), FfiError> { + if let Some(d) = d { + domain(d, false, what)?; + } + o.push(flag(d.is_some())); + o.extend(d.unwrap_or([0.0; 4])); + Ok(()) +} + +/// Encodes inputs and the record bytes. +struct Enc { + o: Vec, + bytes: Vec, +} + +impl Enc { + fn src(&mut self, s: &Src) -> Result<(), FfiError> { + match s { + Src::Built(b) => { + self.o.push(0.0); + push_surf(&mut self.o, b) + } + Src::Record { + ascii, + version, + bytes, + } => { + check_record(*ascii, *version, bytes)?; + let start = self.bytes.len(); + self.bytes.extend_from_slice(bytes); + self.o.extend([ + 1.0, + flag(*ascii), + *version as f64, + start as f64, + bytes.len() as f64, + ]); + Ok(()) + } + } + } + + fn plane(&mut self, p: &PlaneIn) -> Result<(), FfiError> { + check_plane(p)?; + match p { + PlaneIn::Bounded { + o, + x, + y, + scale, + dom, + } => { + self.o.push(0.0); + self.o.extend_from_slice(o); + self.o.extend_from_slice(x); + self.o.extend_from_slice(y); + self.o.extend_from_slice(scale); + self.o.extend_from_slice(dom); + } + PlaneIn::Normal { o, n } => { + self.o.push(1.0); + self.o.extend_from_slice(o); + self.o.extend_from_slice(n); + } + } + Ok(()) + } + + fn cone(&mut self, c: &ConeIn) -> Result<(), FfiError> { + finite(&c.o, "cone origin")?; + axes(c.x, c.y, "cone axes")?; + let (kind, p): (f64, [f64; 6]) = match c.kind { + ConeKind::Canonical { + bot, + top, + height, + swap, + inside, + } => (0.0, [bot, top, height, flag(swap), flag(inside), 0.0]), + ConeKind::Semi { + bot, + semi, + height, + swap, + inside, + } => ( + 1.0, + [ + bot, + semi, + flag(height.is_some()), + height.unwrap_or(0.0), + flag(swap), + flag(inside), + ], + ), + ConeKind::Cylinder { radius } => (2.0, [radius, 0.0, 0.0, 0.0, 0.0, 0.0]), + }; + finite(&p, "cone")?; + self.o.push(kind); + self.o.extend_from_slice(&c.o); + self.o.extend_from_slice(&c.x); + self.o.extend_from_slice(&c.y); + self.o.extend_from_slice(&p); + Ok(()) + } + + fn op(&mut self, op: &Op) -> Result<(), FfiError> { + match op { + Op::State => {} + Op::Plane { + plane, + dom, + other_dom, + tol, + } => { + self.plane(plane)?; + opt_dom(&mut self.o, *dom, "domain")?; + opt_dom(&mut self.o, *other_dom, "plane domain")?; + opt(&mut self.o, *tol, "tolerance")?; + } + Op::Cylinder { cone, tol } => { + self.cone(cone)?; + opt(&mut self.o, *tol, "tolerance")?; + } + Op::Extrusion { other, tol } => { + self.src(other)?; + opt(&mut self.o, *tol, "tolerance")?; + } + Op::Global { + target, + dom, + other_dom, + tol, + ang, + } => { + match target { + Target::Plane(p) => { + self.o.push(0.0); + self.plane(p)?; + } + Target::Cone(c) => { + self.o.push(1.0); + self.cone(c)?; + } + Target::Extrusion(s) => { + self.o.push(2.0); + self.src(s)?; + } + Target::BSpline(s) => { + self.o.push(3.0); + self.src(s)?; + } + } + opt_dom(&mut self.o, *dom, "domain")?; + opt_dom(&mut self.o, *other_dom, "other domain")?; + opt(&mut self.o, *tol, "tolerance")?; + opt(&mut self.o, *ang, "angle tolerance")?; + } + Op::Trim { dom } => { + domain(*dom, true, "trim domain")?; + self.o.extend_from_slice(dom); + } + } + Ok(()) + } + + fn test(&mut self, t: &TestSurf) -> Result<(), FfiError> { + match &t.source { + TestSource::Raw(s) => { + check_nurb(s)?; + self.o.push(1.0); + self.o + .extend([s.n, s.m, s.p, s.q].map(|x| x as f64)); + for c in &s.cpts { + self.o.extend_from_slice(c); + } + self.o.extend_from_slice(&s.u); + self.o.extend_from_slice(&s.v); + } + TestSource::Src(s) => { + self.o.push(0.0); + self.src(s)?; + } + } + self.o.push(flag(t.transpose)); + if let Some(d) = t.reparam { + domain(d, true, "reparameterisation domain")?; + } + self.o.push(flag(t.reparam.is_some())); + self.o.extend(t.reparam.unwrap_or([0.0; 4])); + let (i, j, d) = t.perturb.unwrap_or((0, 0, [0.0; 3])); + finite(&d, "perturbation")?; + if i > MAX_INDEX * 4 || j > MAX_INDEX * 4 { + return Err(bad("perturbation index too large")); + } + self.o.push(flag(t.perturb.is_some())); + self.o.extend([i as f64, j as f64]); + self.o.extend_from_slice(&d); + Ok(()) + } +} + +fn call(op: i32, input: &[f64], bytes: &[u8]) -> Result, FfiError> { + call_with_buffer(4096, |buf, len| { + // SAFETY: input is valid for input.len() reads and holds exactly what the shim + // reads for `op` (built and validated above: p1 surface blocks, records the strict + // stream simulator reads completely, finite planes, cones and domains, clamped + // inline NURBs); bytes is valid for bytes.len() reads and every record block names + // a range inside it; buf is valid for buf.len() writes and the shim honours the + // capacity; len is valid. + unsafe { + sys::sc_surface_surf_of_extrusion_p2_eval( + op, + input.as_ptr(), + input.len() as i64, + bytes.as_ptr(), + bytes.len() as i64, + buf.as_mut_ptr(), + buf.len() as i64, + &raw mut *len, + ) + } + }) +} + +/// Makes the surface from `src` and runs `op` on it; returns the shim's record (layout +/// in the module docs). +/// +/// # Errors +/// +/// [`FfiError::InvalidArgument`] for input the shim must not see; [`FfiError::Status`] +/// for a shim failure. +pub fn surface_op(src: &Src, op: &Op) -> Result, FfiError> { + let mut e = Enc { + o: Vec::new(), + bytes: Vec::new(), + }; + e.src(src)?; + e.op(op)?; + call(op.code(), &e.o, &e.bytes) +} + +/// Runs `IsNurbSurfaceSurfOfExtrusion(test, scale)`; returns the shim's record (layout +/// in the module docs). +/// +/// # Errors +/// +/// [`FfiError::InvalidArgument`] for input the shim must not see; [`FfiError::Status`] +/// for a shim failure. +pub fn is_nurb(test: &TestSurf, scale: f64) -> Result, FfiError> { + let mut e = Enc { + o: Vec::new(), + bytes: Vec::new(), + }; + e.test(test)?; + finite(&[scale], "tolerance scale")?; + e.o.push(scale); + call(OP_IS_NURB, &e.o, &e.bytes) +} diff --git a/crates/solidcore-ffi/src/units/topology_brep_data.rs b/crates/solidcore-ffi/src/units/topology_brep_data.rs index 9827d16767..588bc0d6df 100644 --- a/crates/solidcore-ffi/src/units/topology_brep_data.rs +++ b/crates/solidcore-ffi/src/units/topology_brep_data.rs @@ -254,8 +254,9 @@ enum Read { } /// Simulates upstream's reads on the bytes (strictly: anything that could make an -/// extraction fail is rejected). -struct Sim<'a> { +/// extraction fail is rejected). Also the guard of the `surface.surf_of_extrusion_p2` +/// record reads ([`Sim::for_record`]). +pub(crate) struct Sim<'a> { data: &'a [u8], pos: usize, binary: bool, @@ -272,7 +273,20 @@ fn is_space(c: u8) -> bool { matches!(c, b' ' | b'\t' | b'\n' | b'\x0b' | b'\x0c' | b'\r') } -impl Sim<'_> { +impl<'a> Sim<'a> { + /// A simulator over a geometry record (no attribute table, nothing trusted). + pub(crate) fn for_record(data: &'a [u8], binary: bool) -> Self { + Sim { + data, + pos: 0, + binary, + eof: false, + table: Vec::new(), + depth: 0, + trust: false, + } + } + fn peek(&self) -> Option { self.data.get(self.pos).copied() } @@ -487,7 +501,7 @@ impl Sim<'_> { // ---- common reads ---------------------------------------------------------------- - fn ulong(&mut self) -> Result { + pub(crate) fn ulong(&mut self) -> Result { if self.binary { self.b_u64() } else { @@ -503,7 +517,7 @@ impl Sim<'_> { } } - fn boolean(&mut self) -> Result<(), FfiError> { + pub(crate) fn boolean(&mut self) -> Result<(), FfiError> { if self.binary { self.take(4).map(|_| ()) } else { @@ -511,7 +525,7 @@ impl Sim<'_> { } } - fn double(&mut self) -> Result { + pub(crate) fn double(&mut self) -> Result { if self.binary { self.b_f64() } else { @@ -527,7 +541,7 @@ impl Sim<'_> { Ok(c) } - fn lines(&mut self, n: usize) { + pub(crate) fn lines(&mut self, n: usize) { if !self.binary { for _ in 0..n { self.next_line(); @@ -918,7 +932,7 @@ impl Sim<'_> { // ---- geometry -------------------------------------------------------------------- /// `ReadType`: the type code (and dimension). - fn read_type(&mut self, with_dim: bool) -> Result<(i64, u64), FfiError> { + pub(crate) fn read_type(&mut self, with_dim: bool) -> Result<(i64, u64), FfiError> { if self.binary { let t = self.b_u64()? as i64; let d = if with_dim { self.b_u64()? } else { 0 }; @@ -987,7 +1001,7 @@ impl Sim<'_> { } /// `SmBSplineCurve::ReadFromDB`. - fn bspline_curve(&mut self, version: u64) -> Result<(), FfiError> { + pub(crate) fn bspline_curve(&mut self, version: u64) -> Result<(), FfiError> { let (n, p, rat, read_dim) = if self.binary { let n = self.b_u64()? as i64; let p = i64::from(self.b_i16()?); @@ -1065,7 +1079,7 @@ impl Sim<'_> { Ok(Read::Done) } - fn bspline_surface(&mut self, version: u64) -> Result<(), FfiError> { + pub(crate) fn bspline_surface(&mut self, version: u64) -> Result<(), FfiError> { let (n, m, p, q, rat) = if self.binary { let n = self.b_u64()? as i64; let m = self.b_u64()? as i64; diff --git a/crates/solidcore/src/surface/surf_of_extrusion.rs b/crates/solidcore/src/surface/surf_of_extrusion.rs index 8de91441a1..3890114f5c 100644 --- a/crates/solidcore/src/surface/surf_of_extrusion.rs +++ b/crates/solidcore/src/surface/surf_of_extrusion.rs @@ -7,5 +7,7 @@ //! methods to [`SurfOfExtrusion`] (or free functions). pub mod p1; +pub mod p2; pub use p1::{CurveOrientType, GeneratorIntersection, SurfOfExtrusion}; +pub use p2::{ExtrusionIntersection, IntersectTarget}; diff --git a/crates/solidcore/src/surface/surf_of_extrusion/p1.rs b/crates/solidcore/src/surface/surf_of_extrusion/p1.rs index e365b09bc5..f809a6912a 100644 --- a/crates/solidcore/src/surface/surf_of_extrusion/p1.rs +++ b/crates/solidcore/src/surface/surf_of_extrusion/p1.rs @@ -140,7 +140,7 @@ const MAX_DERIV: usize = 5; // ---- the generator (a curve derived from SmBSplineCurve) ------------------------------- /// The `SmBSplineCurve` base object of a generator. -fn gen_base(c: &Curve) -> Result<&BSplineCurve> { +pub(super) fn gen_base(c: &Curve) -> Result<&BSplineCurve> { match c.kind() { CurveKind::BSpline(b) => Ok(b), CurveKind::Ellipse(e) => Ok(e.base()), @@ -208,7 +208,7 @@ fn gen_max_analytic_domain(c: &Curve) -> Result { /// The generator `c` with the out-of-bounds flag `enabled` /// (`SmTemporaryChangeValue(m_pGenCurve->GetOutOfBoundsEnabled(), ..)`): /// only the B-spline evaluation reads the flag, so only that kind is copied. -fn gen_with_out_of_bounds(c: &Curve, enabled: bool) -> Option { +pub(super) fn gen_with_out_of_bounds(c: &Curve, enabled: bool) -> Option { match c.kind() { CurveKind::BSpline(b) if b.is_out_of_bounds_enabled() != enabled => { let mut b = b.clone(); diff --git a/crates/solidcore/src/surface/surf_of_extrusion/p2.rs b/crates/solidcore/src/surface/surf_of_extrusion/p2.rs new file mode 100644 index 0000000000..a5e9710164 --- /dev/null +++ b/crates/solidcore/src/surface/surf_of_extrusion/p2.rs @@ -0,0 +1,1250 @@ +//! `SmSurfOfExtrusion`, part 2: the special-case surface/surface intersections of a +//! surface of extrusion (with a plane, a cylinder and another surface of extrusion, +//! and their dispatcher `GlobalSurfaceIntersect`), the recognition of a B-spline +//! surface as an extrusion (`IsNurbSurfaceSurfOfExtrusion`), trimming to a NURB +//! domain and database input. +//! +//! Upstream: `source/SMLib/src/SmSurfOfExtrusion.cpp`, +//! `source/SMLib/inc/SmSurfOfExtrusion.h`. +//! +//! | Rust | Upstream | +//! |---------------------------------------------------|--------------------------------------------------| +//! | [`SurfOfExtrusion::global_surface_intersect`], [`IntersectTarget`] | `GlobalSurfaceIntersect` | +//! | [`SurfOfExtrusion::intersect_with_plane`], [`ExtrusionIntersection`] | `IntersectWithPlane` | +//! | [`SurfOfExtrusion::intersect_with_cylinder`] | `IntersectWithCylinder` | +//! | [`SurfOfExtrusion::intersect_with_surf_of_extrusion`] | `IntersectWithSurfOfExtrusion` | +//! | [`SurfOfExtrusion::is_nurb_surface_surf_of_extrusion`] | `IsNurbSurfaceSurfOfExtrusion` (static) | +//! | [`SurfOfExtrusion::trim_with_domain`] | `TrimWithDomain` | +//! | [`SurfOfExtrusion::read_from_db`] | `ReadFromDB` (static) | +//! +//! Deviations: +//! - **Not a [`SurfaceKind`].** The surface does not join +//! [`crate::surface::surface::SurfaceKind`]: the `SmSurface` dispatchers of +//! [`Surface`] take no [`Kernel`], which every edit, conversion and solve of a +//! surface of extrusion needs. So `GlobalSurfaceIntersect` takes its other surface +//! as an [`IntersectTarget`] (a plane, a cone, a surface of extrusion, or a +//! [`Surface`] of any ported kind), and [`Surface::read_from_db`] reads the record +//! of a surface of extrusion with [`SurfOfExtrusion::read_from_db`] but cannot +//! return it (see `plan/findings.md`). +//! - **Outputs.** Out-params become return values ([`ExtrusionIntersection`]). Upstream +//! lets the caller pass `NULL` for each output array, but `IntersectWithPlane`, +//! `IntersectWithCylinder` and `IntersectWithSurfOfExtrusion` dereference the 3D +//! curve array unconditionally; here every output is always produced (with +//! `pOpt3DCurves` and `pOptCurveTypes` present upstream's choices do not depend on +//! the others). The UV curves upstream adds are `NULL` (`None`). `SmContext` +//! arguments and the arguments upstream marks `NotUsed` are dropped; the +//! approximation tolerance is converted as upstream's `SmApproxTol3d` parameter (its +//! magnitude; `SM_USE_DEFAULT` is half the zone tolerance). +//! - **Statuses.** Calls whose status upstream ignores keep upstream's values, except +//! that [`SolidError::Unported`] always propagates and a failure whose output +//! upstream would read uninitialised (the generator's evaluation at a plane +//! intersection, the projection of the generator, the surface evaluations of +//! `IsNurbSurfaceSurfOfExtrusion`) is returned. A failed `CreateDirectrixFromPoint` +//! (`pCrv` stays `NULL`) or `CreateIsoCircleFromPoint` (the circle stays `NULL`) +//! is skipped as upstream; the null circle is then an `SM_ERR_NULL_POINTER` where +//! upstream would dereference it (parallel extrusion and cylinder axes). +//! `IsNurbSurfaceSurfOfExtrusion` returns `SmBoolean`; its `SER`s return the +//! failing status as the boolean: here they are errors. +//! - **`IntersectWithPlane` tangent heuristic.** The first plane intersection point +//! is only recorded when the first solution makes a curve (upstream then compares +//! later points with an uninitialised point): here such a comparison is false. +//! - **Out-of-bounds evaluation.** As in part 1, `SmTemporaryChangeValue` gives the +//! generator the surface's out-of-bounds flag (only a B-spline generator reads it, +//! and the surface's setter already keeps both equal). +//! - **`ReadFromDB`.** The generator's owner is not set (as part 1). An orientation +//! code outside `SmCurveOrientType` is `InvalidInput` (upstream stores it). A +//! generator not derived from `SmBSplineCurve` is `InvalidInput` (upstream only +//! asserts, then casts). An ASCII stream whose curve type cannot be read is +//! `InvalidInput` (upstream reads its uninitialised type variable). +//! - **`IsNurbSurfaceSurfOfExtrusion`** does not copy the attributes of the test +//! surface (`Notify(SM_NO_COPY, ..)`): a free [`BSplineSurface`] has none here. +//! `TrimWithDomain`'s edit notifications are not modelled either. +//! - **Unported callees.** `IntersectWithPlane` of a linear or coplanar generator +//! intersects the generator's plane with the plane (`SmPlane::IntersectWithPlane`, +//! unit `surface.plane_p2`) and classifies the line on this surface +//! (`SmCurveClassification`, unit `intersect.curve_class_p1`); for a plane parallel +//! to a perpendicular or independent generator's plane it takes the plane's pseudo +//! box, which upstream expands by the zone tolerance of the plane's face +//! (`SmSurface::GetFace`, unit `surface.surface_p1`), then trims the projected +//! generator to the plane domain (`SmPlane::TrimCurveToPlaneDomain`, +//! `surface.plane_p2`). The general intersection `GlobalSurfaceIntersect` falls +//! back to needs `SmAdvSurfaceIntersector` (`intersect.adv_surface_intersector`); +//! parallel extrusions reach `SmCurve::GlobalCurveSolve` (`curve.curve_p9`) through +//! [`intersect_generators`]. Those return [`SolidError::Unported`]; the code below +//! the first two is ported with the callees. +//! - **Debug code.** The `SM_DEBUG_CODE` drawing and dumps are omitted. + +use crate::curve::curve::p7::PropertyAnalysisOptions; +use crate::curve::curve::{Curve, CurvePropertyType}; +use crate::error::{ignore_status, Result, SolidError}; +use crate::geom::axis2_placement::Axis2Placement; +use crate::geom::extent1d::Extent1d; +use crate::geom::extent2d::Extent2d; +use crate::geom::solution_array::{ObjectKind, SolutionObject, SolutionType}; +use crate::geom::tol::{approx_tol3d, is_zero}; +use crate::geom::vector2d::Point2; +use crate::geom::vector3d::{Point3, Vec3}; +use crate::kernel::Kernel; +use crate::math::{EFF_ZERO, EFF_ZERO_PARAM, EFF_ZERO_SQRT, PI}; +use crate::nurbs::b_spline_surface::{BSplineSurface, IsoCurveOptions, SurfParamType}; +use crate::nurbs::math::{CPoint, NOW, NOZ}; +use crate::surface::cone::Cone; +use crate::surface::plane::Plane; +use crate::surface::surface::p2::{TsectCurveType, CONE_TYPE}; +use crate::surface::surface::{Surface, SurfaceKind}; +use crate::topology::database_io::{DatabaseReader, FileType, InputStream}; + +use super::p1::{ + gen_base, gen_with_out_of_bounds, intersect_generators, CurveOrientType, SurfOfExtrusion, +}; + +const OP_PLANE: &str = "surface::surf_of_extrusion::p2::SurfOfExtrusion::intersect_with_plane"; +const OP_CYL: &str = "surface::surf_of_extrusion::p2::SurfOfExtrusion::intersect_with_cylinder"; +const OP_EXT: &str = + "surface::surf_of_extrusion::p2::SurfOfExtrusion::intersect_with_surf_of_extrusion"; +const OP_IS_NURB: &str = + "surface::surf_of_extrusion::p2::SurfOfExtrusion::is_nurb_surface_surf_of_extrusion"; +const OP_TRIM: &str = "surface::surf_of_extrusion::p2::SurfOfExtrusion::trim_with_domain"; +const OP_READ: &str = "surface::surf_of_extrusion::p2::SurfOfExtrusion::read_from_db"; + +/// `ANALYTIC_TOL_SCALE` (`SmConfig.h`). +const ANALYTIC_TOL_SCALE: f64 = 100.0; + +// ---- outputs --------------------------------------------------------------------------- + +/// The outputs of the special-case intersections (`IntersectWithPlane`, +/// `IntersectWithCylinder`, `IntersectWithSurfOfExtrusion`, and +/// `GlobalSurfaceIntersect` when a special case answers): one entry per curve in each +/// array. +#[derive(Debug, Clone, Default)] +pub struct ExtrusionIntersection { + /// `rbNeedsMoreIntersections`: the special case could not answer, use the general + /// surface/surface intersection (always `false` from `GlobalSurfaceIntersect`). + pub needs_more_intersections: bool, + /// `pOpt3DCurves`: the intersection curves. + pub curves_3d: Vec, + /// `pOptSurface1UVCurves`: their UV curves on this surface (`NULL` upstream). + pub surface1_uv_curves: Vec>, + /// `pOptSurface2UVCurves`: their UV curves on the other surface (`NULL` upstream). + pub surface2_uv_curves: Vec>, + /// `pOptCurveTypes`: the kind of each intersection. + pub curve_types: Vec, + /// `pOptDeviations`: the distance of each curve from the surfaces (`0`). + pub deviations: Vec, +} + +impl ExtrusionIntersection { + /// The "needs the general intersection" answer with empty outputs. + fn needs_more() -> Self { + Self { + needs_more_intersections: true, + ..Self::default() + } + } + + /// Adds the `NULL` UV curves and zero deviations of every curve (the closing + /// loop of `IntersectWithCylinder` and `IntersectWithSurfOfExtrusion`). + fn finish_null_outputs(&mut self) { + for _ in 0..self.curves_3d.len() { + self.surface1_uv_curves.push(None); + self.surface2_uv_curves.push(None); + self.deviations.push(0.0); + } + } +} + +/// The other surface of [`SurfOfExtrusion::global_surface_intersect`] (upstream's +/// `const SmSurface&`, dispatched on its type). +#[derive(Debug, Clone, Copy)] +pub enum IntersectTarget<'a> { + /// An `SmPlane`. + Plane(&'a Plane), + /// An `SmCone` or `SmCylinder` (only the `SmCone_TYPE` is a special case). + Cone(&'a Cone), + /// An `SmSurfOfExtrusion`. + SurfOfExtrusion(&'a SurfOfExtrusion), + /// A surface of a ported [`SurfaceKind`]. + Surface(&'a Surface), +} + +/// The generator's handle in its plane intersection solutions (upstream's curve +/// pointer): the solver's duplicate test reads its natural interval. +#[derive(Debug, Clone, Copy, PartialEq)] +struct GenHandle { + ivl: Extent1d, +} + +impl SolutionObject for GenHandle { + fn kind(&self) -> ObjectKind { + ObjectKind::Curve + } + + fn natural_interval(&self) -> Option { + Some(self.ivl) + } +} + +/// `TO_EUCLID(from, to)` (`SmNurbsCrv.h`): divides by the weight unless non-rational; +/// a missing `z` becomes `0`. +fn to_euclid(p: CPoint) -> Point3 { + if p.w == NOW { + let z = if p.z == NOZ { 0.0 } else { p.z }; + Point3::new(p.x, p.y, z) + } else { + let z = if p.z == NOZ { 0.0 } else { p.z / p.w }; + Point3::new(p.x / p.w, p.y / p.w, z) + } +} + +/// `COPY_XYZ(from, to)` (`SmNurbsCrv.h`): overwrites the stored `x`, `y`, `z`. +fn copy_xyz(from: Point3, to: &mut CPoint) { + to.x = from.x; + to.y = from.y; + to.z = from.z; +} + +/// `SM_DEG2RAD`. +fn deg2rad(adeg: f64) -> f64 { + adeg * (PI / 180.0) +} + +/// `SmSurface::GlobalSurfaceIntersect` of a surface of extrusion: the general +/// intersector. +fn base_global_surface_intersect() -> Result { + // UNPORTED(intersect.adv_surface_intersector): SmAdvSurfaceIntersector::SmAdvSurfaceIntersector + Err(SolidError::unported( + "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", + "intersect.adv_surface_intersector", + )) +} + +impl SurfOfExtrusion { + /// The generator (`m_pGenCurve`). + fn gen_or_null(&self, op: &'static str) -> Result<&Curve> { + self.gen_curve.as_ref().ok_or(SolidError::null_pointer(op)) + } + + // ---- GlobalSurfaceIntersect ------------------------------------------------------- + + /// The intersection curves of this surface over `uv_domain` with `other` over + /// `other_uv_domain` (`GlobalSurfaceIntersect`): a plane, an `SmCone_TYPE` cone + /// and a surface of extrusion first try their special case + /// ([`Self::intersect_with_plane`], [`Self::intersect_with_cylinder`], + /// [`Self::intersect_with_surf_of_extrusion`]); when that needs more, and for any + /// other surface, the general intersection (`SmSurface::GlobalSurfaceIntersect`) + /// runs. + /// + /// # Errors + /// + /// Those of the special cases; [`SolidError::Unported`] from the general + /// intersection (`SmAdvSurfaceIntersector`, unit + /// `intersect.adv_surface_intersector`). + #[allow(clippy::too_many_arguments)] // upstream's signature + pub fn global_surface_intersect( + &self, + k: &Kernel, + uv_domain: &Extent2d, + other: IntersectTarget<'_>, + other_uv_domain: &Extent2d, + use_surface_edges: [bool; 2], + approx_tol_3d: Option, + ang_tol_rad: Option, + ) -> Result { + // (the general intersection takes the edge flags and angle tolerance) + let _ = (use_surface_edges, ang_tol_rad); + + let plane = match other { + IntersectTarget::Plane(p) => Some(p), + IntersectTarget::Surface(s) => match s.kind() { + SurfaceKind::Plane(p) => Some(p), + _ => None, + }, + IntersectTarget::Cone(_) | IntersectTarget::SurfOfExtrusion(_) => None, + }; + let special = if let Some(p) = plane { + Some(self.intersect_with_plane(k, uv_domain, p, other_uv_domain, approx_tol_3d)?) + } else { + match other { + IntersectTarget::Cone(c) if c.type_code() == CONE_TYPE => { + Some(self.intersect_with_cylinder(k, c, approx_tol_3d)?) + } + IntersectTarget::SurfOfExtrusion(s) => { + Some(self.intersect_with_surf_of_extrusion(k, s, approx_tol_3d)?) + } + _ => None, + } + }; + + // when bNeedNurbIntersection == TRUE, intersection was too complicated for + // analytic intersectors + match special { + Some(r) if !r.needs_more_intersections => Ok(r), + _ => base_global_surface_intersect(), + } + } + + // ---- IntersectWithPlane ----------------------------------------------------------- + + /// The special cases of the intersection with `plane` over `other_uv_domain` + /// (`IntersectWithPlane`); `uv_domain` (this surface's NURB domain) gives the + /// generator's interval for the closed test. The tolerance is the smaller of + /// `approx_tol_3d` and `SM_EFF_ZERO_SQRT`. + /// + /// * A linear or coplanar generator whose swept plane is not parallel to the + /// plane: the line common to both planes, classified on this surface and + /// trimmed to the pieces inside it (crossing). + /// * A perpendicular or independent generator whose plane is parallel to the + /// plane: nothing when the plane cuts the extrusion axis outside the extrusion + /// interval (ends snapped within the tolerance), else the generator projected + /// onto the plane along the extrusion, trimmed to the plane domain. + /// * An extrusion parallel to the plane: a directrix through every generator / + /// plane intersection point, trimmed to the plane domain (a degenerate one when + /// shorter than the tolerance), touching, tangent (generator tangent within 2 + /// degrees of the plane) or crossing; of close tangent points, and of close + /// points at the two ends of a closed generator, only the better solution is + /// kept. A range solution (generator in the plane) needs more. + /// * Otherwise the general intersection is needed. + /// + /// # Errors + /// + /// `SM_ERR_NULL_POINTER` without generator; those of the generator's plane + /// intersection, evaluations, closed and degenerate tests; + /// [`SolidError::Unported`]: the first case (`SmPlane::IntersectWithPlane`, unit + /// `surface.plane_p2`), the second past the extrusion interval test (the plane's + /// pseudo box: `SmSurface::GetFace`, unit `surface.surface_p1`). + #[allow(clippy::too_many_lines)] // one upstream function + pub fn intersect_with_plane( + &self, + k: &Kernel, + uv_domain: &Extent2d, + plane: &Plane, + other_uv_domain: &Extent2d, + approx_tol_3d: Option, + ) -> Result { + // init output + let mut out = ExtrusionIntersection::default(); + + // plane and ExtrusionSurface locals + let plane_normal = plane.position().z_axis(); + let plane_origin = plane.position().origin(); + let ang_tol = EFF_ZERO_SQRT; + let tol = match approx_tol_3d { + Some(t) => approx_tol3d(k, t).min(EFF_ZERO_SQRT), + None => EFF_ZERO_SQRT, + }; + + let gen_curve_nurb_ivl = if self.swap_uv { + uv_domain.v_interval() + } else { + uv_domain.u_interval() + }; + let swept_normal = match self.orientation { + CurveOrientType::Linear => self.curve_vec.cross(self.extrusion_vec), + CurveOrientType::Coplanar => self.curve_vec, + _ => Vec3::UNDEF, + }; + + // If we are allowing out-of-bounds eval, then the gen curve needs to too. + let gen_own = self.gen_or_null(OP_PLANE)?; + let tmp = gen_with_out_of_bounds(gen_own, self.base.is_out_of_bounds_enabled()); + let gen = tmp.as_ref().unwrap_or(gen_own); + + // When GenCurve is linear or Planar and swept in its own plane + // and SweptPlanarSurface is not parallel to input Surface + // Then, + // XSect = Line + if matches!( + self.orientation, + CurveOrientType::Linear | CurveOrientType::Coplanar + ) && !swept_normal.is_parallel_to(plane_normal, ang_tol) + { + // build a plane bigger than the Surface + let this_plane = Plane::from_normal(self.curve_point, swept_normal); + let _ = (this_plane.step_uv_domain(), other_uv_domain); + + // get the Plane/Plane intersection line trimmed to input Plane, then + // classify it against the natural boundaries of this surface + // (SmCurveClassification) and add the intervals inside it + // UNPORTED(surface.plane_p2): SmPlane::IntersectWithPlane + return Err(SolidError::unported( + "SmPlane::IntersectWithPlane", + "surface.plane_p2", + )); + } + // When GenCurve is planar with an independent sweep direction + // and crPlane and plane containing GenCurve are parallel + // Then, + // XSect = translated copy of sweptCurve + else if matches!( + self.orientation, + CurveOrientType::Perpendicular | CurveOrientType::Independent + ) && self.curve_vec.is_parallel_to(plane_normal, ang_tol) + { + // get param along Extrusion Vector where InputPlane intersects + // ExtrusionVector (AngleBetween's status ignored: 0 on failure) + let dist_center_base_to_plane = (plane_origin - self.origin).dot(self.curve_vec); + let angle_rad = self + .curve_vec + .angle_between(self.extrusion_vec) + .unwrap_or(0.0); + let dist_along_extrusion = dist_center_base_to_plane * angle_rad.cos(); + let param_along_extrusion = dist_along_extrusion / self.extrusion_vec.length(); + + // get extrusionSurface's sweep interval + let orig_ivl = self.anal_uv_domain.v_interval(); + + // snap nearby distanceValues to extrusion begin / end position (the + // snapped value is not read again), skip planes outside of the + // extrusion domain + let snapped = (param_along_extrusion - orig_ivl.min()).abs() < tol + || (param_along_extrusion - orig_ivl.max()).abs() < tol; + if !snapped && !orig_ivl.contains_value(param_along_extrusion, 0.0) { + return Ok(out); // No intersections + } + + // intersectionCurve = sweptCurveCopy projected to the plane along the + // extrusion vector (status ignored upstream, which then reads the curve) + let _proj_curve = gen_base(gen)?.create_plane_projection( + crate::nurbs::b_spline_curve::ProjectionType::Parallel, + plane_origin, + plane_normal, + self.extrusion_vec, + )?; + + // get plane and intersection curve bounding boxes; the plane's pseudo box + // is expanded by the zone tolerance of the plane's face, then the curve is + // trimmed to the plane domain (SmPlane::TrimCurveToPlaneDomain, + // surface.plane_p2) when the boxes meet + // UNPORTED(surface.surface_p1): SmSurface::GetFace + return Err(SolidError::unported( + "SmSurface::GetFace", + "surface.surface_p1", + )); + } + // when extrusion vec is perpendicular to plane normal + // - xsect is one or more lines each line generated by sweeping + // a plane/GenCurve intersection point. + else if self + .extrusion_vec + .is_perpendicular_to(plane_normal, ang_tol) + { + // get sweptCurve/plane intersection point + let d = -plane_origin.dot(plane_normal); + let vecs = [plane_normal]; + let opts = PropertyAnalysisOptions { + property_value: Some(d), + opt_vectors: &vecs, + want_comb: false, + handle: Some(GenHandle { + ivl: gen.natural_interval(), + }), + }; + let solutions = gen + .global_property_analysis( + k, + &gen.natural_interval(), + CurvePropertyType::PlaneIntersection, + tol, + &opts, + )? + .solutions; + let sols = solutions.as_slice(); + + // for every SweptCurve/Plane intersection + if sols + .iter() + .any(|s| s.solution_type == SolutionType::RangeOfValues) + { + // Some Surf/Surf coincidence - handle it at a higher level + out.needs_more_intersections = true; + return Ok(out); + } + + // arrive here when all solutions are PointSolutions + let is_closed = gen.is_closed(&gen_curve_nurb_ivl, 0.0)?; + + // for every SweptCurve/Plane point intersection - build, trim and if + // nonNULL, output a line + let mut last_tangent = false; + let mut last_crv_pt = Vec3::UNDEF; + let mut first_crv_pt: Option = None; + for (ii, sol) in sols.iter().enumerate() { + // create line segment intersection curve (Evaluate's status ignored + // upstream, which then reads the points) + let crv_pt = gen.evaluate(sol.start.parameters[0], 1, true, true)?; + let (Some(&pt0), Some(&pt1)) = (crv_pt.first(), crv_pt.get(1)) else { + return Err(SolidError::sm_err(OP_PLANE)); + }; + let crv = match self.create_directrix_from_point(k, pt0, EFF_ZERO_SQRT) { + Ok(c) => c, + Err(e) if e.is_unported() => return Err(e), + Err(_) => continue, // pCrv stays NULL + }; + let mut crv = crv; + + // trim line control Points to plane + let nurb = crv.get_or_create_gw_nurb()?; + let (Some(&pw0), Some(&pw1)) = (nurb.cpts().first(), nurb.cpts().get(1)) else { + return Err(SolidError::sm_err(OP_PLANE)); + }; + let start_pt = to_euclid(pw0); + let end_pt = to_euclid(pw1); + let Some((mut start_pt, mut end_pt)) = plane.trim_plane_line_to_plane_domain( + &plane.natural_uv_domain(), + start_pt, + end_pt, + tol, + ) else { + // only use curves that intersect plane domain + continue; + }; + + // get trimmed xsectCurve length + let length = start_pt.distance(end_pt); + + // turn short curves into degenerate ones by snapping endPoints + if length < tol { + // make a degenerate line + start_pt = (start_pt + end_pt) / 2.0; + end_pt = start_pt; + } + + // Trim the curve definition - move control points + let nurb = crv.get_or_create_gw_nurb()?; + let cpts = nurb.cpts_mut(); + if let Some(p) = cpts.get_mut(0) { + copy_xyz(start_pt, p); + } + if let Some(p) = cpts.get_mut(1) { + copy_xyz(end_pt, p); + } + + // classify the solution - crossing or tangent + let crv_speed = pt1.length(); + let scaled_zero = EFF_ZERO * (1.0 + crv_speed.max(pt0.max_dimension())); + let angle_tol = deg2rad(2.0); + let tangent = crv_speed > scaled_zero + && (pt1 / crv_speed).is_perpendicular_to(plane_normal, angle_tol); + + // cheesy heuristic - GlobalPropertyAnalysis returns multiple close hits + // for a single tangent intersection and intersections on closed seam + // boundaries; the solutions are sorted by param value - so just save + // the best one. + if ii > 0 { + let value = sol.start.solution_value; + // remove multiple solutions due to tangent points + if tangent && last_tangent && last_crv_pt.distance(pt0) < tol { + let prev = sols.get(ii - 1).map_or(0.0, |s| s.start.solution_value); + if value < prev { + // replace the last saved solution with this solution + out.curves_3d.pop(); + out.curve_types.pop(); + } else { + // don't save this solution + continue; + } + } + // remove multiple solutions due to close curve start/end hits + // (the other end of the seam) + else if is_closed && first_crv_pt.is_some_and(|f| f.distance(pt0) < tol) { + let first = sols.first().map_or(0.0, |s| s.start.solution_value); + if value < first { + // replace the first saved solution with this solution + if !out.curves_3d.is_empty() { + out.curves_3d.remove(0); + } + if !out.curve_types.is_empty() { + out.curve_types.remove(0); + } + } else { + // don't save this solution + continue; + } + } + } + + // prepare for next iteration + last_tangent = tangent; + last_crv_pt = pt0; + if ii == 0 { + first_crv_pt = Some(pt0); + } + + // add curve to ouput + let curve_type = if crv.is_degenerate(EFF_ZERO, None)? { + TsectCurveType::Touching + } else if tangent { + TsectCurveType::Tangent + } else { + TsectCurveType::Crossing + }; + out.curves_3d.push(Curve::from(crv)); + out.curve_types.push(curve_type); + } + } else { + // this is not a special case intersection: + // plane cuts through SurfOfExtrusion at an angle, + out.needs_more_intersections = true; + return Ok(out); + } + + // set output + let cnt = out.curves_3d.len(); + for ii in 0..cnt { + out.surface1_uv_curves.push(None); + out.surface2_uv_curves.push(None); + // Line solutions have already added the curve types + if cnt != out.curve_types.len() { + let crv = out.curves_3d.get(ii).ok_or(SolidError::sm_err(OP_PLANE))?; + let t = if crv.is_degenerate(EFF_ZERO, None)? { + TsectCurveType::Touching + } else { + TsectCurveType::Crossing + }; + out.curve_types.push(t); + } + out.deviations.push(0.0); + } + + // all done + Ok(out) + } + + // ---- IntersectWithCylinder -------------------------------------------------------- + + /// The intersection with the cone `cylinder` when its radii agree within + /// `SM_EFF_ZERO * (1 + max radius)` (`IntersectWithCylinder`): the generators' + /// intersection of [`intersect_generators`] with the cylinder's bottom iso circle + /// swept along its axis over its heights (lines along a cylinder axis parallel to + /// the extrusion). Otherwise, and for an axis not parallel to the extrusion, the + /// general intersection is needed. The tolerance is `approx_tol_3d` + /// (`SM_EFF_ZERO_SQRT` without). + /// + /// # Errors + /// + /// `SM_ERR_NULL_POINTER` when the iso circle could not be made for a parallel + /// axis (upstream dereferences `NULL`); those of [`intersect_generators`] + /// ([`SolidError::Unported`] for parallel vectors: `SmCurve::GlobalCurveSolve`, + /// unit `curve.curve_p9`). + pub fn intersect_with_cylinder( + &self, + k: &Kernel, + cylinder: &Cone, + approx_tol_3d: Option, + ) -> Result { + // locals + let other_bot_radius = cylinder.bot_radius(); + let other_top_radius = cylinder.top_radius(); + + // no work - other surface not a rectilinear cylinder: + let radius_diff_tolerance = EFF_ZERO * (1.0 + other_bot_radius.max(other_top_radius)); + if (other_bot_radius - other_top_radius).abs() > radius_diff_tolerance { + return Ok(ExtrusionIntersection::needs_more()); + } + + // pick tolerance + let tol = approx_tol_3d.map_or(EFF_ZERO_SQRT, |t| approx_tol3d(k, t)); + + // otherCylinderSurface locals + let other_position = cylinder.rev().position(); + let other_origin = other_position.origin(); + let other_z_axis = other_position.z_axis(); + let other_ivl = Extent1d::from_min_max(cylinder.bot_height(), cylinder.top_height()); + let other_axis_segment_start_point = other_origin + other_ivl.min() * other_z_axis; + // (CreateIsoCircleFromPoint's status ignored: the circle stays NULL) + let other_gen_curve = + match cylinder.create_iso_circle_from_point(k, other_axis_segment_start_point, tol) { + Ok(c) => c, + Err(e) if e.is_unported() => return Err(e), + Err(_) => None, + }; + + // compute intersections based on overlap of extrusion lines that coalign from + // the GenCurves + let mut out = ExtrusionIntersection::default(); + out.needs_more_intersections = self.intersect_generators_with( + k, + tol, + other_gen_curve.as_ref(), + other_z_axis, + &other_ivl, + &mut out, + OP_CYL, + )?; + + // for every intersection found - finish the outputs + out.finish_null_outputs(); + Ok(out) + } + + // ---- IntersectWithSurfOfExtrusion ------------------------------------------------- + + /// The intersection with the surface of extrusion `other` + /// (`IntersectWithSurfOfExtrusion`): the generators' intersection of + /// [`intersect_generators`] with the other generator swept along its extrusion + /// over its STEP V interval (lines along parallel extrusions); not parallel + /// extrusions need the general intersection. The tolerance is `approx_tol_3d` + /// (`SM_EFF_ZERO_SQRT` without). + /// + /// # Errors + /// + /// `SM_ERR_NULL_POINTER` for parallel extrusions when `other` has no generator + /// (upstream dereferences `NULL`); those of [`intersect_generators`] + /// ([`SolidError::Unported`] for parallel vectors: `SmCurve::GlobalCurveSolve`, + /// unit `curve.curve_p9`). + pub fn intersect_with_surf_of_extrusion( + &self, + k: &Kernel, + other: &Self, + approx_tol_3d: Option, + ) -> Result { + // pick tolerance + let tol = approx_tol_3d.map_or(EFF_ZERO_SQRT, |t| approx_tol3d(k, t)); + + // OtherExtrusionSurface Extrusion Segment + let other_extrusion_vec = other.extrusion_vector(); + let other_ivl = other.step_uv_domain().v_interval(); + let other_gen_curve = other.gen_curve(); + + // compute intersections based on overlap of extrusion lines that coalign from + // the GenCurves + let mut out = ExtrusionIntersection::default(); + out.needs_more_intersections = self.intersect_generators_with( + k, + tol, + other_gen_curve, + other_extrusion_vec, + &other_ivl, + &mut out, + OP_EXT, + )?; + + // for every intersection found - finish the outputs + out.finish_null_outputs(); + Ok(out) + } + + /// `sm_IntersectGenerators(*this, tol, *pOtherGenCurve, ...)` with a generator + /// that may be `NULL`: dereferenced only past the parallel test. + #[allow(clippy::too_many_arguments)] + fn intersect_generators_with( + &self, + k: &Kernel, + tol: f64, + other_gen: Option<&Curve>, + other_vec: Vec3, + other_ivl: &Extent1d, + out: &mut ExtrusionIntersection, + op: &'static str, + ) -> Result { + let Some(other_gen) = other_gen else { + // (sm_IntersectGenerators returns at its parallel test before touching + // the other generator) + if !other_vec.is_parallel_to(self.extrusion_vec, crate::math::EFF_ZERO_RAD) { + return Ok(true); + } + return Err(SolidError::null_pointer(op)); + }; + let r = intersect_generators( + k, + self, + tol, + other_gen, + other_vec, + other_ivl, + Some(&mut out.curves_3d), + Some(&mut out.curve_types), + )?; + Ok(r.needs_more_intersections) + } + + // ---- IsNurbSurfaceSurfOfExtrusion ------------------------------------------------- + + /// The surface of extrusion whose B-spline surface equals `test_surface`, if it is + /// one (`IsNurbSurfaceSurfOfExtrusion`): degree 1 with 2 control points in exactly + /// one direction (the sweep), and the iso curve at the end of the sweep a + /// translation of the one at its start (control points within `tol = + /// tolerance_scale * ANALYTIC_TOL_SCALE * SM_EFF_ZERO * (1 + |min corner| + |max + /// corner|)`, weight ratios too for a rational surface). The generator is the + /// start iso curve (translated to sweep parameter 0); the extrusion vector spans + /// one unit of the sweep parameter; the NURB is reparameterised to the test + /// surface's domain. `None` when the surface is not an extrusion. + /// + /// # Errors + /// + /// Those of the iso curves, their control polygons and the surface evaluations + /// (upstream returns the failing status as its boolean), and of the new surface's + /// construction. + pub fn is_nurb_surface_surf_of_extrusion( + k: &Kernel, + test_surface: &BSplineSurface, + tolerance_scale: f64, + ) -> Result> { + // surface locals + let deg_u = test_surface.degree(SurfParamType::U); + let deg_v = test_surface.degree(SurfParamType::V); + + // check parameterization + // - must be deg 1 in just one direction and + // have more than 2 control points in the other direction + // (both linear: a bilinear or plane; neither linear; or a linear direction with + // more than 2 control points: only 2-CPnt lines) + let (lin_u, lin_v) = (deg_u == 1, deg_v == 1); + if lin_u == lin_v + || (lin_u && test_surface.number_control_points(SurfParamType::U) > 2) + || (lin_v && test_surface.number_control_points(SurfParamType::V) > 2) + { + return Ok(None); + } + + // surface locals + let nurb_uv_domain = test_surface.natural_uv_domain(); + + // get a domain corner surface point to act as the sweep curve's end point + let (surf_param, end_param, start_knot, end_knot, swap_uv) = if deg_u == 1 { + ( + SurfParamType::U, + nurb_uv_domain.evaluate(1.0, 0.0), + nurb_uv_domain.min().x, // begin sweep direction Domain Value + nurb_uv_domain.max().x, // end sweep direction Domain Value + true, // so that the STEP standard of linear in V is maintained. + ) + } else { + ( + SurfParamType::V, + nurb_uv_domain.evaluate(0.0, 1.0), + nurb_uv_domain.min().y, + nurb_uv_domain.max().y, + false, + ) + }; + + // evaluate domain upper and lower corner surface points and sweep end point + // (statuses ignored upstream, which then reads the points) + let mut origin = test_surface.evaluate_point(nurb_uv_domain.min())?; + let max_pnt = test_surface.evaluate_point(nurb_uv_domain.max())?; + let line_end = test_surface.evaluate_point(end_param)?; + + // compute a tolerance + let pt_tol = tolerance_scale + * ANALYTIC_TOL_SCALE + * EFF_ZERO + * (1.0 + origin.max_dimension() + max_pnt.max_dimension()); + + // let extrusion vector = sweep line endPoint - begPoint + let mut extrusion_vec = line_end - origin; + let extrusion_length = extrusion_vec.length(); + + // not an extrusion surface - sweep vector is zero length + if extrusion_length < EFF_ZERO { + return Ok(None); + } + + // build GenCurve = Start of sweep IsoParameter Curve + let iso_opts = IsoCurveOptions { + domain: None, + uv_iso_curve: false, + }; + let mut gen_curve = test_surface + .create_iso_parametric_curve(k, surf_param, start_knot, iso_opts)? + .curve; + + // Get GenCurve locals + let crv_step_ivl = gen_curve.step_interval(); + + // convert GenCurve rational to euclidean + let (start_ctrl_pts, start_weights) = gen_curve.control_polygon()?; + let rational = gen_curve.is_rational()?; + + // build EndCurve = End of Sweep IsoParameter Curve + let end_crv = test_surface + .create_iso_parametric_curve(k, surf_param, end_knot, iso_opts)? + .curve; + + // convert EndCurve rational to euclidean + let (end_ctrl_pts, end_weights) = end_crv.control_polygon()?; + + // test every end curve controlPoint for constant sweep vectors + let weight = |w: &[f64], i: usize| -> Result { + w.get(i).copied().ok_or(SolidError::sm_err(OP_IS_NURB)) + }; + for (i, end_pt) in end_ctrl_pts.iter().enumerate() { + let start_pt = start_ctrl_pts + .get(i) + .ok_or(SolidError::sm_err(OP_IS_NURB))?; + + // get sVec = this controlPoint sweep - sweepVector + let vec = (*end_pt - *start_pt) - extrusion_vec; + + // when any of the EndControlPoints is not a constant sweep of the + // StartControlPoints this is not a SurfOfExtrusion + if vec.length() > pt_tol { + return Ok(None); + } + + // for rational surfaces also test the weights: the ratio between the + // weights must be constant + if rational + && (weight(&start_weights, i)? * weight(&end_weights, 0)? + - weight(&end_weights, i)? * weight(&start_weights, 0)?) + .abs() + > pt_tol + { + return Ok(None); + } + } + + // surface is an extrusion - build the output surface + + // scale extrusion by the sweep range to match ExtrusionLength and domain ranges + extrusion_vec /= end_knot - start_knot; + + // UVDomain is not required to start at 0.0 so GenCurve has to be translated + // to keep AnalUVDomain == NurbUVDomain and to have equivalent evaluations + if !is_zero(start_knot) { + let mut shift_rf = Axis2Placement::IDENTITY; + shift_rf.translate(-start_knot * extrusion_vec); + + // translate (status ignored) + ignore_status(gen_curve.transform(&shift_rf, None))?; + origin -= start_knot * extrusion_vec; + } + + // build new SmSurfOfExtrusion - constructor sets all internal values + let anal_uv_domain = Extent2d::from_points( + Point2::new(crv_step_ivl.min(), start_knot), + Point2::new(crv_step_ivl.max(), end_knot), + ); + let mut surf = Self::new( + k, + Curve::from(gen_curve), + origin, + extrusion_vec, + anal_uv_domain, + swap_uv, + )?; + + // reparameterize the NURB so that AnalyticSurface->NurbDomain == + // InputSurface->NurbDomain (status ignored) + ignore_status(surf.reparameterize(k, &test_surface.natural_uv_domain()))?; + + // all done + Ok(Some(surf)) + } + + // ---- TrimWithDomain --------------------------------------------------------------- + + /// Trims the surface to the NURB domain `new_nurb_uv_domain` (`TrimWithDomain`): + /// the analytic domain and the generator follow + /// ([`Self::update_analytical_domain`], status ignored), then the NURB is rebuilt + /// and reparameterised to the new domain. Nothing changes when the domain is the + /// current one (within `SM_EFF_ZERO_PARAM`). A missing NURB is made first + /// (`GetNaturalUVDomain`, status ignored). + /// + /// # Errors + /// + /// `SM_ERR` when the domain is not inside the natural domain (within + /// `SM_EFF_ZERO_PARAM`); those of [`Self::make_nurb`] and + /// [`Self::reparameterize`]. + pub fn trim_with_domain(&mut self, k: &Kernel, new_nurb_uv_domain: &Extent2d) -> Result<()> { + // locals (GetNaturalUVDomain makes a missing NURB; its status is ignored) + if self.base.gw_nurb().is_none() { + ignore_status(self.make_nurb(k))?; + } + let current_nurb_uv_domain = self.base.natural_uv_domain(); + + // check input - new trim UV domain must be inside current natural UV domain + if !new_nurb_uv_domain.is_contained_by(¤t_nurb_uv_domain, EFF_ZERO_PARAM) { + return Err(SolidError::sm_err(OP_TRIM)); + } + + // no work - new and current domains are same size + if current_nurb_uv_domain.is_contained_by(new_nurb_uv_domain, EFF_ZERO_PARAM) { + return Ok(()); + } + + // Update just the analytic domain and the GenCurve (both analytic and NURB) + // (status ignored) + ignore_status(self.update_analytical_domain(k, new_nurb_uv_domain))?; + + // Now rebuild the Nurbs surface using the updated analytic domain. + self.make_nurb(k)?; + self.reparameterize(k, new_nurb_uv_domain)?; + + // all done + Ok(()) + } + + // ---- ReadFromDB ------------------------------------------------------------------- + + /// Reads a surface of extrusion (`ReadFromDB`): the origin, extrusion vector, + /// analytic domain corners, orientation, swap flag, generator plane point and + /// vector, then the generator curve (its type header and record), then the + /// B-spline surface record. An analytic domain with `min > max` is not set (the + /// empty surface's domain stays). + /// + /// # Errors + /// + /// Those of the stream reads, of `SmCurve::ReadFromDB` and of + /// `SmBSplineSurface::ReadFromDB`; `InvalidInput` for an orientation code outside + /// `SmCurveOrientType`, a generator not derived from `SmBSplineCurve`, or an ASCII + /// curve type header that could not be read. + pub fn read_from_db(k: &Kernel, db: &mut DatabaseReader, version: u64) -> Result { + // init output object + let mut surf = Self::empty(); + + // locals + let mut orig = Vec3::ZERO; + let mut extrusion_vec = Vec3::ZERO; + let mut anal_min = Point2::ZERO; + let mut anal_max = Point2::ZERO; + let mut orientation: u64 = 0; + let mut swap_uv = false; + let mut curve_point = Vec3::ZERO; + let mut curve_vec = Vec3::ZERO; + + // file type + let ascii = db.file_type() == FileType::Ascii; + if ascii { + let dbl = |db: &mut DatabaseReader, slot: &mut f64| { + if let Some(v) = db.in_stream_mut().and_then(InputStream::extract_double) { + *slot = v; + } + }; + dbl(db, &mut orig.x); + dbl(db, &mut orig.y); + dbl(db, &mut orig.z); + db.go_to_next_line(); + dbl(db, &mut extrusion_vec.x); + dbl(db, &mut extrusion_vec.y); + dbl(db, &mut extrusion_vec.z); + db.go_to_next_line(); + + dbl(db, &mut anal_min.x); + dbl(db, &mut anal_min.y); + dbl(db, &mut anal_max.x); + dbl(db, &mut anal_max.y); + db.go_to_next_line(); + + if let Some(v) = db.in_stream_mut().and_then(InputStream::extract_ulong) { + orientation = v; + } + db.go_to_next_line(); + if let Some(v) = db.in_stream_mut().and_then(InputStream::extract_int) { + swap_uv = v != 0; + } + db.go_to_next_line(); + + dbl(db, &mut curve_point.x); + dbl(db, &mut curve_point.y); + dbl(db, &mut curve_point.z); + db.go_to_next_line(); + dbl(db, &mut curve_vec.x); + dbl(db, &mut curve_vec.y); + dbl(db, &mut curve_vec.z); + db.go_to_next_line(); + } else { + orig.x = db.read_double()?; + orig.y = db.read_double()?; + orig.z = db.read_double()?; + + extrusion_vec.x = db.read_double()?; + extrusion_vec.y = db.read_double()?; + extrusion_vec.z = db.read_double()?; + + anal_min.x = db.read_double()?; + anal_min.y = db.read_double()?; + anal_max.x = db.read_double()?; + anal_max.y = db.read_double()?; + + orientation = db.read_ulong()?; + + swap_uv = db.read_boolean()? != 0; + + curve_point.x = db.read_double()?; + curve_point.y = db.read_double()?; + curve_point.z = db.read_double()?; + + curve_vec.x = db.read_double()?; + curve_vec.y = db.read_double()?; + curve_vec.z = db.read_double()?; + } + + // base curve + if ascii { + db.go_to_next_line(); + } + let header = db.read_type(true)?; + let gen_type = header + .type_code + .ok_or(SolidError::invalid_input(OP_READ, "curve type not read"))?; + let gen_dim = header.dim.ok_or(SolidError::invalid_input( + OP_READ, + "curve dimension not read", + ))?; + let gen_curve = Curve::read_from_db(k, gen_type, db, gen_dim, version)?; + if gen_base(&gen_curve).is_err() { + return Err(SolidError::invalid_input( + OP_READ, + "generator is not a kind of SmBSplineCurve", + )); + } + + // load the analytic + surf.gen_curve = Some(gen_curve); + surf.origin = orig; + surf.extrusion_vec = extrusion_vec; + // (SetMinMax's status ignored: an inverted domain is not set) + let _ = surf.anal_uv_domain.set_min_max(anal_min, anal_max); + surf.orientation = orientation_from_code(orientation)?; + surf.swap_uv = swap_uv; + surf.set_curve_point(curve_point); + surf.set_curve_vec(curve_vec); + + // read the parent object + surf.base = BSplineSurface::read_from_db(db, version)?; + + // all done + Ok(surf) + } +} + +/// The `SmCurveOrientType` of a stored code. +fn orientation_from_code(code: u64) -> Result { + Ok(match code { + 0 => CurveOrientType::NotPlanar, + 1 => CurveOrientType::Perpendicular, + 2 => CurveOrientType::Independent, + 3 => CurveOrientType::Coplanar, + 4 => CurveOrientType::Linear, + 5 => CurveOrientType::Undefined, + _ => { + return Err(SolidError::invalid_input( + OP_READ, + "orientation code outside SmCurveOrientType", + )) + } + }) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::curve::line::Line; + use crate::nurbs::b_spline_curve::BSplineCurve; + use crate::nurbs::crv_basic::Curve as NurbCurve; + use crate::topology::database_io::DatabaseReader; + + fn k() -> Kernel { + Kernel::default() + } + + /// A quarter-circle-like quadratic B-spline in the XY plane. + fn arc_gen() -> Curve { + let pw = vec![ + CPoint::new(1.0, 0.0, 0.0, NOW), + CPoint::new(1.0, 1.0, 0.0, NOW), + CPoint::new(0.0, 1.0, 0.0, NOW), + ]; + let cur = NurbCurve::new(pw, 2, vec![0.0, 0.0, 0.0, 1.0, 1.0, 1.0]).unwrap(); + Curve::from(BSplineCurve::from_nurb(cur, 3, false)) + } + + fn extrusion() -> SurfOfExtrusion { + let k = k(); + SurfOfExtrusion::create_canonical(&k, arc_gen(), Vec3::new(0.0, 0.0, 2.0)).unwrap() + } + + #[test] + fn nurb_of_an_extrusion_is_recognised() { + let k = k(); + let s = extrusion(); + let mut found = SurfOfExtrusion::is_nurb_surface_surf_of_extrusion(&k, s.base(), 1.0) + .unwrap() + .unwrap(); + // (the domains already agree: Reparameterize leaves the NURB to be made) + assert!(found.base().gw_nurb().is_none()); + found.make_nurb(&k).unwrap(); + let p = found.base().evaluate_point(Point2::new(0.5, 0.25)).unwrap(); + let q = s.base().evaluate_point(Point2::new(0.5, 0.25)).unwrap(); + assert!(p.distance(q) < 1e-12); + } + + #[test] + fn plane_parallel_to_the_extrusion_gives_directrices() { + let k = k(); + let s = extrusion(); + // the plane x = 0.5 (normal along X) cuts the arc once + let plane = Plane::from_normal(Point3::new(0.5, 0.0, 0.0), Vec3::new(1.0, 0.0, 0.0)); + let mut plane = plane; + plane.make_nurb().unwrap(); + let r = s + .intersect_with_plane( + &k, + &s.base().natural_uv_domain(), + &plane, + &plane.natural_uv_domain(), + None, + ) + .unwrap(); + assert!(!r.needs_more_intersections); + assert_eq!(r.curves_3d.len(), 1); + assert_eq!(r.curve_types, vec![TsectCurveType::Crossing]); + assert_eq!(r.deviations, vec![0.0]); + } + + #[test] + fn oblique_plane_needs_more() { + let k = k(); + let s = extrusion(); + let plane = Plane::from_normal(Point3::ZERO, Vec3::new(1.0, 0.0, 1.0)); + let r = s + .intersect_with_plane( + &k, + &s.base().natural_uv_domain(), + &plane, + &plane.step_uv_domain(), + None, + ) + .unwrap(); + assert!(r.needs_more_intersections); + } + + #[test] + fn non_parallel_extrusions_need_more() { + let k = k(); + let a = extrusion(); + let mut line = Line::from_points(Point3::ZERO, Point3::new(1.0, 1.0, 0.0), 3); + line.make_nurb().unwrap(); + let b = SurfOfExtrusion::create_canonical(&k, Curve::from(line), Vec3::new(1.0, 0.0, 1.0)) + .unwrap(); + let r = a.intersect_with_surf_of_extrusion(&k, &b, None).unwrap(); + assert!(r.needs_more_intersections); + assert!(r.curves_3d.is_empty()); + } + + #[test] + fn trim_rejects_a_larger_domain() { + let k = k(); + let mut s = extrusion(); + let d = s.base().natural_uv_domain(); + let mut big = d; + big.expand_absolute(1.0); + assert!(s.trim_with_domain(&k, &big).is_err()); + assert!(s.trim_with_domain(&k, &d).is_ok()); + } + + #[test] + fn truncated_binary_record_fails() { + let k = k(); + let mut db = DatabaseReader::new(); + db.open_for_read(vec![0u8; 20], FileType::Binary); + assert!(SurfOfExtrusion::read_from_db(&k, &mut db, 30).is_err()); + } + + #[test] + fn orientation_codes() { + assert_eq!(orientation_from_code(4).unwrap(), CurveOrientType::Linear); + assert!(orientation_from_code(6).is_err()); + } +} diff --git a/crates/solidcore/src/surface/surface/p2.rs b/crates/solidcore/src/surface/surface/p2.rs index 97769af9da..494b652fc8 100644 --- a/crates/solidcore/src/surface/surface/p2.rs +++ b/crates/solidcore/src/surface/surface/p2.rs @@ -171,6 +171,7 @@ use crate::nurbs::knots::Side; use crate::surface::cone::Cone; use crate::surface::curve_bounded_surface::CurveBoundedSurface; use crate::surface::plane::Plane; +use crate::surface::surf_of_extrusion::SurfOfExtrusion; use crate::surface::torus::Torus; use crate::topology::database_io::DatabaseReader; @@ -889,11 +890,17 @@ impl Surface { "SmPlane::ReadFromDB", "surface.plane_p2", )), - // UNPORTED(surface.surf_of_extrusion_p2): SmSurfOfExtrusion::ReadFromDB - SURF_OF_EXTRUSION_TYPE => Err(SolidError::unported( - "SmSurfOfExtrusion::ReadFromDB", - "surface.surf_of_extrusion_p2", - )), + SURF_OF_EXTRUSION_TYPE => { + // SmSurfOfExtrusion::ReadFromDB reads the whole record, but the surface + // of extrusion is not a SurfaceKind (its virtuals need a Kernel the + // Surface dispatchers do not take; see plan/findings.md) + let _surf = SurfOfExtrusion::read_from_db(k, db, version)?; + // UNPORTED(surface.surf_of_extrusion_p2): SurfaceKind::SurfOfExtrusion + Err(SolidError::unported( + "SurfaceKind::SurfOfExtrusion", + "surface.surf_of_extrusion_p2", + )) + } // UNPORTED(surface.surf_of_revolution_p3): SmSurfOfRevolution::ReadFromDB SURF_OF_REVOLUTION_TYPE => Err(SolidError::unported( "SmSurfOfRevolution::ReadFromDB", diff --git a/fixtures/surface.surf_of_extrusion_p2/cases.json b/fixtures/surface.surf_of_extrusion_p2/cases.json new file mode 100644 index 0000000000..a4cbd1d315 --- /dev/null +++ b/fixtures/surface.surf_of_extrusion_p2/cases.json @@ -0,0 +1,4878 @@ +{ + "cases": [ + { + "name": "file_eg1_state", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "state" + } + }, + { + "name": "file_eg1_is_nurb", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "is_nurb": { + "source": { + "test": "src", + "of": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38 + } + } + }, + "scale": 1.0 + } + }, + { + "name": "file_eg1_is_nurb_transposed", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "is_nurb": { + "source": { + "test": "src", + "of": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38 + } + }, + "transpose": true + }, + "scale": 1.0 + } + }, + { + "name": "file_eg1_is_nurb_reparam", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "is_nurb": { + "source": { + "test": "src", + "of": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38 + } + }, + "reparam": [ + -1.0, + 2.0, + 3.0, + 7.5 + ] + }, + "scale": 1.0 + } + }, + { + "name": "file_eg1_is_nurb_perturbed", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "is_nurb": { + "source": { + "test": "src", + "of": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38 + } + }, + "perturb": [ + 3, + 1, + [ + 0.0, + 1e-06, + 0.0 + ] + ] + }, + "scale": 1.0 + } + }, + { + "name": "file_blade_state", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/blade_fillet_fails.smb:12143 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/blade_fillet_fails.smb" + }, + "line": 12144, + "version": 38, + "op": "state" + } + }, + { + "name": "file_blade_is_nurb", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/blade_fillet_fails.smb:12143 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "is_nurb": { + "source": { + "test": "src", + "of": { + "src": "file", + "path": { + "$upstream_file": "Fillet/blade_fillet_fails.smb" + }, + "line": 12144, + "version": 38 + } + } + }, + "scale": 1.0 + } + }, + { + "name": "file_blade_is_nurb_transposed", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/blade_fillet_fails.smb:12143 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "is_nurb": { + "source": { + "test": "src", + "of": { + "src": "file", + "path": { + "$upstream_file": "Fillet/blade_fillet_fails.smb" + }, + "line": 12144, + "version": 38 + } + }, + "transpose": true + }, + "scale": 1.0 + } + }, + { + "name": "file_blade_is_nurb_reparam", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/blade_fillet_fails.smb:12143 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "is_nurb": { + "source": { + "test": "src", + "of": { + "src": "file", + "path": { + "$upstream_file": "Fillet/blade_fillet_fails.smb" + }, + "line": 12144, + "version": 38 + } + }, + "reparam": [ + -1.0, + 2.0, + 3.0, + 7.5 + ] + }, + "scale": 1.0 + } + }, + { + "name": "file_blade_is_nurb_perturbed", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/blade_fillet_fails.smb:12143 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "is_nurb": { + "source": { + "test": "src", + "of": { + "src": "file", + "path": { + "$upstream_file": "Fillet/blade_fillet_fails.smb" + }, + "line": 12144, + "version": 38 + } + }, + "perturb": [ + 3, + 1, + [ + 0.0, + 1e-06, + 0.0 + ] + ] + }, + "scale": 1.0 + } + }, + { + "name": "file_eg1_plane_x_cut", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + -30.0, + 0.0, + 25.0 + ], + "x": [ + 0.0, + 1.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "dom": [ + -40.0, + -40.0, + 40.0, + 40.0 + ] + } + } + }, + { + "name": "file_eg1_plane_y_cut_infinite", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 10.0, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + } + } + }, + { + "name": "file_eg1_plane_x_cut_clipped", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + 20.0, + 0.0, + 0.0 + ], + "x": [ + 0.0, + 1.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "dom": [ + -40.0, + 10.0, + 40.0, + 20.0 + ] + } + } + }, + { + "name": "file_eg1_plane_x_miss", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + 100.0, + 0.0, + 0.0 + ], + "x": [ + 0.0, + 1.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "dom": [ + -40.0, + -40.0, + 40.0, + 40.0 + ] + } + } + }, + { + "name": "file_eg1_plane_above", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 60.0 + ], + "n": [ + 0.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "file_eg1_plane_below", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + -0.001 + ], + "n": [ + 0.0, + 0.0, + -1.0 + ] + } + } + }, + { + "name": "file_eg1_plane_inside", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 25.0 + ], + "n": [ + 0.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "file_eg1_plane_top_snapped", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 50.000000001 + ], + "n": [ + 0.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "file_eg1_plane_oblique", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 25.0 + ], + "n": [ + 0.0, + 1.0, + 1.0 + ] + } + } + }, + { + "name": "file_eg1_trim", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "trim", + "dom": [ + 10.0, + 5.0, + 120.0, + 30.0 + ] + } + }, + { + "name": "file_eg1_trim_same", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "trim", + "dom": [ + 0.0, + 0.0, + 150.47392093036677, + 50.0 + ] + } + }, + { + "name": "file_eg1_trim_outside", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "trim", + "dom": [ + -1.0, + 0.0, + 150.0, + 50.0 + ] + } + }, + { + "name": "file_eg1_extrusion_with_blade", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "extrusion", + "other": { + "src": "file", + "path": { + "$upstream_file": "Fillet/blade_fillet_fails.smb" + }, + "line": 12144, + "version": 38 + } + } + }, + { + "name": "file_eg1_global_plane", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/eg1_srf1.smb" + }, + "line": 401, + "version": 38, + "op": "global", + "target": "plane", + "plane": { + "kind": "bounded", + "o": [ + -30.0, + 0.0, + 25.0 + ], + "x": [ + 0.0, + 1.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "dom": [ + -40.0, + -40.0, + 40.0, + 40.0 + ] + }, + "as_surface": true + } + }, + { + "name": "file_blade_plane_inside_param", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/blade_fillet_fails.smb:12143 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/blade_fillet_fails.smb" + }, + "line": 12144, + "version": 38, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 60.0 + ], + "n": [ + 0.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "file_blade_plane_outside", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/blade_fillet_fails.smb:12143 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/blade_fillet_fails.smb" + }, + "line": 12144, + "version": 38, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "n": [ + 0.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "file_blade_plane_side", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/blade_fillet_fails.smb:12143 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/blade_fillet_fails.smb" + }, + "line": 12144, + "version": 38, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 110.0, + 0.0, + 0.0 + ], + "n": [ + 1.0, + 0.0, + 0.0 + ] + } + } + }, + { + "name": "file_blade_trim", + "upstream_ref": "TestFiles/pt_TestFiles/Fillet/blade_fillet_fails.smb:12143 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests)", + "inputs": { + "src": "file", + "path": { + "$upstream_file": "Fillet/blade_fillet_fails.smb" + }, + "line": 12144, + "version": 38, + "op": "trim", + "dom": [ + 0.25, + 0.1, + 0.75, + 0.9 + ] + } + }, + { + "name": "circle_plane_through_seam", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "dom": [ + -3.0, + -3.0, + 3.0, + 3.0 + ] + } + } + }, + { + "name": "circle_plane_through_seam_infinite", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + } + } + }, + { + "name": "circle_plane_tangent", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + 0.0, + 1.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "dom": [ + -3.0, + -3.0, + 3.0, + 3.0 + ] + } + } + }, + { + "name": "circle_plane_tangent_below", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + -1.0, + 0.0 + ], + "n": [ + 0.0, + -1.0, + 0.0 + ] + } + } + }, + { + "name": "circle_plane_near_tangent", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.999999999, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + } + } + }, + { + "name": "circle_plane_miss", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 1.5, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + } + } + }, + { + "name": "circle_plane_clipped_part", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "dom": [ + 0.0, + 0.5, + 3.0, + 1.5 + ] + } + } + }, + { + "name": "circle_plane_scaled_domain", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 2.0, + 3.0 + ], + "dom": [ + -3.0, + 0.1, + 3.0, + 0.6 + ] + } + } + }, + { + "name": "circle_plane_tol_zero", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.5, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + }, + "tol": 0.0 + } + }, + { + "name": "circle_plane_tol_big", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.5, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + }, + "tol": 0.25 + } + }, + { + "name": "circle_plane_domain_half", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + }, + "dom": [ + 0.0, + 0.0, + 0.5, + 1.0 + ] + } + }, + { + "name": "circle_plane_oblique", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "n": [ + 1.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "circle_plane_parallel_inside", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 1.0 + ], + "n": [ + 0.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "circle_plane_parallel_outside", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 2.5 + ], + "n": [ + 0.0, + 0.0, + -1.0 + ] + } + } + }, + { + "name": "circle_plane_parallel_base_tol_zero", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "n": [ + 0.0, + 0.0, + 1.0 + ] + }, + "tol": 0.0 + } + }, + { + "name": "arc_plane_two_hits", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 30.0, + 150.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.7, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + } + } + }, + { + "name": "arc_plane_end_hit", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 30.0, + 150.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.5, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + } + } + }, + { + "name": "independent_plane_parallel_outside", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 1.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 5.0 + ], + "n": [ + 0.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "independent_plane_parallel_inside", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 1.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 0.5 + ], + "n": [ + 0.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "independent_plane_parallel_extrusion", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 1.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.3, + 0.0, + 0.0 + ], + "n": [ + 1.0, + 0.0, + 0.0 + ] + } + } + }, + { + "name": "line_plane_containing", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "line", + "a": [ + 0.0, + 0.0, + 0.0 + ], + "b": [ + 1.0, + 0.0, + 0.0 + ] + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + } + } + }, + { + "name": "line_plane_crossing", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "line", + "a": [ + 0.0, + 0.0, + 0.0 + ], + "b": [ + 1.0, + 0.0, + 0.0 + ] + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.5, + 0.0, + 0.0 + ], + "n": [ + 1.0, + 0.0, + 0.0 + ] + } + } + }, + { + "name": "line_plane_parallel_offset", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "line", + "a": [ + 0.0, + 0.0, + 0.0 + ], + "b": [ + 1.0, + 0.0, + 0.0 + ] + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 1.0, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + } + } + }, + { + "name": "coplanar_plane_crossing", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 1.0, + 0.0, + 0.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "n": [ + 0.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "coplanar_plane_parallel", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 1.0, + 0.0, + 0.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 1.0, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + } + } + }, + { + "name": "cylinder_parallel_axis", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "cylinder", + "cone": { + "cone": { + "kind": "canonical", + "bot": 0.5, + "top": 0.5, + "height": 1.0 + }, + "o": [ + 1.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ] + } + } + }, + { + "name": "cylinder_tilted_axis", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "cylinder", + "cone": { + "cone": { + "kind": "canonical", + "bot": 0.5, + "top": 0.5, + "height": 1.0 + }, + "o": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "cylinder_true_cone", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "cylinder", + "cone": { + "cone": { + "kind": "canonical", + "bot": 0.5, + "top": 0.7, + "height": 1.0 + }, + "o": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ] + } + } + }, + { + "name": "cylinder_radii_within_tol", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "cylinder", + "cone": { + "cone": { + "kind": "canonical", + "bot": 0.5, + "top": 0.5, + "height": 1.0 + }, + "o": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 0.0, + 1.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ] + }, + "tol": 0.001 + } + }, + { + "name": "cylinder_semi_zero_tilted", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "cylinder", + "cone": { + "cone": { + "kind": "semi", + "bot": 0.5, + "semi": 0.0, + "height": 2.0 + }, + "o": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 0.0, + 0.0, + 1.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ] + } + } + }, + { + "name": "global_cone_tilted", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "global", + "target": "cone", + "cone": { + "cone": { + "kind": "canonical", + "bot": 0.5, + "top": 0.5, + "height": 1.0 + }, + "o": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "global_cylinder_class", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "global", + "target": "cone", + "cone": { + "cone": { + "kind": "cylinder", + "radius": 0.5 + }, + "o": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "extrusion_parallel", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "extrusion", + "other": { + "src": "built", + "surf": { + "gen": { + "kind": "line", + "a": [ + -2.0, + 0.5, + 0.0 + ], + "b": [ + 2.0, + 0.5, + 0.0 + ] + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 3.0 + ] + }, + "oob": false, + "swap": false + } + } + } + }, + { + "name": "extrusion_skew", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "extrusion", + "other": { + "src": "built", + "surf": { + "gen": { + "kind": "line", + "a": [ + -2.0, + 0.5, + 0.0 + ], + "b": [ + 2.0, + 0.5, + 0.0 + ] + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 1.0, + 3.0 + ] + }, + "oob": false, + "swap": false + } + } + } + }, + { + "name": "global_extrusion_skew", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "global", + "target": "extrusion", + "other": { + "src": "built", + "surf": { + "gen": { + "kind": "line", + "a": [ + -2.0, + 0.5, + 0.0 + ], + "b": [ + 2.0, + 0.5, + 0.0 + ] + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 1.0, + 3.0 + ] + }, + "oob": false, + "swap": false + } + } + } + }, + { + "name": "global_plane_seam", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "global", + "target": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + } + } + }, + { + "name": "global_plane_seam_as_surface", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "global", + "target": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + }, + "as_surface": true + } + }, + { + "name": "global_plane_oblique", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "global", + "target": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "n": [ + 1.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "global_bspline", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "global", + "target": "bspline", + "other": { + "src": "built", + "surf": { + "gen": { + "kind": "line", + "a": [ + -2.0, + 0.5, + 0.0 + ], + "b": [ + 2.0, + 0.5, + 0.0 + ] + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 1.0, + 3.0 + ] + }, + "oob": false, + "swap": false + } + } + } + }, + { + "name": "trim_inside", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "trim", + "dom": [ + 0.1, + 0.2, + 0.6, + 0.9 + ] + } + }, + { + "name": "trim_same", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "trim", + "dom": [ + 0.0, + 0.0, + 1.0, + 1.0 + ] + } + }, + { + "name": "trim_within_param_tol", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "trim", + "dom": [ + -1e-09, + 0.0, + 1.0, + 1.000000001 + ] + } + }, + { + "name": "trim_outside", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0.0, + 0.0, + 2.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "trim", + "dom": [ + -0.1, + 0.0, + 1.0, + 1.0 + ] + } + }, + { + "name": "is_nurb_bilinear", + "upstream_ref": "edge case", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 1, + "m": 1, + "p": 1, + "q": 1, + "cpts": [ + [ + 0, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ], + [ + 1, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 1, + 1, + 1, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + }, + "scale": 1.0 + } + }, + { + "name": "is_nurb_biquadratic", + "upstream_ref": "edge case", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 2, + "m": 2, + "p": 2, + "q": 2, + "cpts": [ + [ + 0, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0.5, + -1.7976931348623157e+308 + ], + [ + 0, + 2, + 0, + -1.7976931348623157e+308 + ], + [ + 1, + 0, + 0.2, + -1.7976931348623157e+308 + ], + [ + 1, + 1, + 0.9, + -1.7976931348623157e+308 + ], + [ + 1, + 2, + 0.1, + -1.7976931348623157e+308 + ], + [ + 2, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 2, + 1, + 0.3, + -1.7976931348623157e+308 + ], + [ + 2, + 2, + 0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 0, + 1, + 1, + 1 + ] + } + } + }, + "scale": 1.0 + } + }, + { + "name": "is_nurb_linear_three_points", + "upstream_ref": "edge case", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 2, + "m": 2, + "p": 1, + "q": 2, + "cpts": [ + [ + 0, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0.5, + -1.7976931348623157e+308 + ], + [ + 0, + 2, + 0, + -1.7976931348623157e+308 + ], + [ + 1, + 0, + 0.2, + -1.7976931348623157e+308 + ], + [ + 1, + 1, + 0.9, + -1.7976931348623157e+308 + ], + [ + 1, + 2, + 0.1, + -1.7976931348623157e+308 + ], + [ + 2, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 2, + 1, + 0.3, + -1.7976931348623157e+308 + ], + [ + 2, + 2, + 0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0.5, + 1, + 1 + ], + "v": [ + 0, + 0, + 0, + 1, + 1, + 1 + ] + } + } + }, + "scale": 1.0 + } + }, + { + "name": "is_nurb_extrusion_u_linear", + "upstream_ref": "edge case", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 1, + "m": 2, + "p": 1, + "q": 2, + "cpts": [ + [ + 0, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 1, + 1, + 0, + -1.7976931348623157e+308 + ], + [ + 2, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.5, + -1.7976931348623157e+308 + ], + [ + 1, + 1, + 1.5, + -1.7976931348623157e+308 + ], + [ + 2, + 0, + 1.5, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 0, + 1, + 1, + 1 + ] + } + } + }, + "scale": 1.0 + } + }, + { + "name": "is_nurb_extrusion_u_linear_shifted_domain", + "upstream_ref": "edge case", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 1, + "m": 2, + "p": 1, + "q": 2, + "cpts": [ + [ + 0, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 1, + 1, + 0, + -1.7976931348623157e+308 + ], + [ + 2, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.5, + -1.7976931348623157e+308 + ], + [ + 1, + 1, + 1.5, + -1.7976931348623157e+308 + ], + [ + 2, + 0, + 1.5, + -1.7976931348623157e+308 + ] + ], + "u": [ + 2, + 2, + 5, + 5 + ], + "v": [ + -1, + -1, + -1, + 3, + 3, + 3 + ] + } + } + }, + "scale": 1.0 + } + }, + { + "name": "is_nurb_extrusion_v_linear", + "upstream_ref": "edge case", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 2, + "m": 1, + "p": 2, + "q": 1, + "cpts": [ + [ + 0, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 0.5, + 0, + 1.5, + -1.7976931348623157e+308 + ], + [ + 1, + 1, + 0, + -1.7976931348623157e+308 + ], + [ + 1.5, + 1, + 1.5, + -1.7976931348623157e+308 + ], + [ + 2, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 2.5, + 0, + 1.5, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + }, + "scale": 1.0 + } + }, + { + "name": "is_nurb_extrusion_v_linear_scale_zero", + "upstream_ref": "edge case", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 2, + "m": 1, + "p": 2, + "q": 1, + "cpts": [ + [ + 0, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 0.5, + 0, + 1.5, + -1.7976931348623157e+308 + ], + [ + 1, + 1, + 0, + -1.7976931348623157e+308 + ], + [ + 1.5, + 1, + 1.5, + -1.7976931348623157e+308 + ], + [ + 2, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 2.5, + 0, + 1.5, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + }, + "scale": 0.0 + } + }, + { + "name": "is_nurb_extrusion_perturbed_tiny", + "upstream_ref": "edge case", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 2, + "m": 1, + "p": 2, + "q": 1, + "cpts": [ + [ + 0, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 0.5, + 0, + 1.5, + -1.7976931348623157e+308 + ], + [ + 1, + 1, + 0, + -1.7976931348623157e+308 + ], + [ + 1.5, + 1, + 1.5, + -1.7976931348623157e+308 + ], + [ + 2, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 2.5, + 0, + 1.5, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + "perturb": [ + 1, + 1, + [ + 1e-14, + 0.0, + 0.0 + ] + ] + }, + "scale": 1.0 + } + }, + { + "name": "is_nurb_extrusion_perturbed", + "upstream_ref": "edge case", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 2, + "m": 1, + "p": 2, + "q": 1, + "cpts": [ + [ + 0, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 0.5, + 0, + 1.5, + -1.7976931348623157e+308 + ], + [ + 1, + 1, + 0, + -1.7976931348623157e+308 + ], + [ + 1.5, + 1, + 1.5, + -1.7976931348623157e+308 + ], + [ + 2, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 2.5, + 0, + 1.5, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + "perturb": [ + 1, + 1, + [ + 1e-06, + 0.0, + 0.0 + ] + ] + }, + "scale": 1.0 + } + }, + { + "name": "is_nurb_zero_sweep", + "upstream_ref": "edge case", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 2, + "m": 1, + "p": 2, + "q": 1, + "cpts": [ + [ + 0, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 1, + 1, + 0, + -1.7976931348623157e+308 + ], + [ + 1, + 1, + 0, + -1.7976931348623157e+308 + ], + [ + 2, + 0, + 0, + -1.7976931348623157e+308 + ], + [ + 2, + 0, + 0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + }, + "scale": 1.0 + } + }, + { + "name": "is_nurb_rational_constant_ratio", + "upstream_ref": "edge case", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 2, + "m": 1, + "p": 2, + "q": 1, + "cpts": [ + [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 0.0, + 0.0, + 4.0, + 2.0 + ], + [ + 0.7, + 0.7, + 0.0, + 0.7 + ], + [ + 1.4, + 1.4, + 2.8, + 1.4 + ], + [ + 2.0, + 0.0, + 0.0, + 1.0 + ], + [ + 4.0, + 0.0, + 4.0, + 2.0 + ] + ], + "u": [ + 0, + 0, + 0, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + }, + "scale": 1.0 + } + }, + { + "name": "is_nurb_rational_varying_ratio", + "upstream_ref": "edge case", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 2, + "m": 1, + "p": 2, + "q": 1, + "cpts": [ + [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 0.0, + 0.0, + 4.0, + 2.0 + ], + [ + 0.7, + 0.7, + 0.0, + 0.7 + ], + [ + 1.0, + 1.0, + 2.0, + 1.0 + ], + [ + 2.0, + 0.0, + 0.0, + 1.0 + ], + [ + 4.0, + 0.0, + 4.0, + 2.0 + ] + ], + "u": [ + 0, + 0, + 0, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + }, + "scale": 1.0 + } + }, + { + "name": "finite_circle_plane_clipped_degenerate", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "ctor", + "origin": [ + 1.0, + 0.0, + 0.0 + ], + "vec": [ + 0.0, + 0.0, + 2.0 + ], + "domain": [ + 0.0, + 0.0, + 360.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "dom": [ + -3.0, + 1.999999999, + 3.0, + 3.0 + ] + } + } + }, + { + "name": "finite_circle_plane_clipped_touch_end", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "ctor", + "origin": [ + 1.0, + 0.0, + 0.0 + ], + "vec": [ + 0.0, + 0.0, + 2.0 + ], + "domain": [ + 0.0, + 0.0, + 360.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "dom": [ + -3.0, + 2.0, + 3.0, + 3.0 + ] + } + } + }, + { + "name": "finite_circle_plane_clipped_miss", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "ctor", + "origin": [ + 1.0, + 0.0, + 0.0 + ], + "vec": [ + 0.0, + 0.0, + 2.0 + ], + "domain": [ + 0.0, + 0.0, + 360.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 1.0 + ], + "dom": [ + -3.0, + 2.5, + 3.0, + 3.0 + ] + } + } + }, + { + "name": "finite_circle_plane_seam", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "ctor", + "origin": [ + 1.0, + 0.0, + 0.0 + ], + "vec": [ + 0.0, + 0.0, + 2.0 + ], + "domain": [ + 0.0, + 0.0, + 360.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "n": [ + 0.0, + 1.0, + 0.0 + ] + } + } + }, + { + "name": "finite_circle_plane_parallel_top_snap", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "ctor", + "origin": [ + 1.0, + 0.0, + 0.0 + ], + "vec": [ + 0.0, + 0.0, + 2.0 + ], + "domain": [ + 0.0, + 0.0, + 360.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 2.000000001 + ], + "n": [ + 0.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "finite_circle_plane_parallel_top_outside", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "ctor", + "origin": [ + 1.0, + 0.0, + 0.0 + ], + "vec": [ + 0.0, + 0.0, + 2.0 + ], + "domain": [ + 0.0, + 0.0, + 360.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 2.00001 + ], + "n": [ + 0.0, + 0.0, + 1.0 + ] + } + } + }, + { + "name": "finite_circle_plane_parallel_bottom_outside_tol0", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "ctor", + "origin": [ + 1.0, + 0.0, + 0.0 + ], + "vec": [ + 0.0, + 0.0, + 2.0 + ], + "domain": [ + 0.0, + 0.0, + 360.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + -1e-12 + ], + "n": [ + 0.0, + 0.0, + 1.0 + ] + }, + "tol": 0.0 + } + }, + { + "name": "finite_circle_plane_parallel_bottom_exact_tol0", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "ctor", + "origin": [ + 1.0, + 0.0, + 0.0 + ], + "vec": [ + 0.0, + 0.0, + 2.0 + ], + "domain": [ + 0.0, + 0.0, + 360.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.0, + 0.0, + 0.0 + ], + "n": [ + 0.0, + 0.0, + 1.0 + ] + }, + "tol": 0.0 + } + }, + { + "name": "finite_circle_trim", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "ctor", + "origin": [ + 1.0, + 0.0, + 0.0 + ], + "vec": [ + 0.0, + 0.0, + 2.0 + ], + "domain": [ + 0.0, + 0.0, + 360.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "trim", + "dom": [ + 0.0, + 0.25, + 0.5, + 0.75 + ] + } + }, + { + "name": "finite_circle_cylinder_tilted", + "upstream_ref": "edge case", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 1.0, + 0.0 + ], + "d": [ + 0.0, + 360.0 + ], + "r": 1.0 + }, + "build": { + "mode": "ctor", + "origin": [ + 1.0, + 0.0, + 0.0 + ], + "vec": [ + 0.0, + 0.0, + 2.0 + ], + "domain": [ + 0.0, + 0.0, + 360.0, + 1.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "cylinder", + "cone": { + "cone": { + "kind": "canonical", + "bot": 0.5, + "top": 0.5, + "height": 1.0 + }, + "o": [ + 0.0, + 0.0, + 0.0 + ], + "x": [ + 1.0, + 0.0, + 0.0 + ], + "y": [ + 0.0, + 0.0, + 1.0 + ] + } + } + } + ] +} \ No newline at end of file diff --git a/harness/cpp/shim/surface_surf_of_extrusion_p2.cpp b/harness/cpp/shim/surface_surf_of_extrusion_p2.cpp new file mode 100644 index 0000000000..959617a684 --- /dev/null +++ b/harness/cpp/shim/surface_surf_of_extrusion_p2.cpp @@ -0,0 +1,903 @@ +// SPDX-License-Identifier: Apache-2.0 +// difftest shim for unit `surface.surf_of_extrusion_p2`. +// Wraps the SmSurfOfExtrusion members owned by the unit (source/SMLib/src/SmSurfOfExtrusion.cpp): +// GlobalSurfaceIntersect, IntersectWithPlane, IntersectWithCylinder, +// IntersectWithSurfOfExtrusion, IsNurbSurfaceSurfOfExtrusion, TrimWithDomain and ReadFromDB. +// +// One entry point, sc_surface_surf_of_extrusion_p2_eval(op, in, n_in, bytes, n_bytes, out, cap, +// out_len). Layouts are documented in crates/solidcore-ffi/src/units/surface_surf_of_extrusion_p2.rs, +// which validates every input so upstream only touches valid memory. `out` starts with the status +// of the surface construction (or database read), then the op's status and outputs. +// +// The surface blocks of a built surface are those of the `surface.surf_of_extrusion_p1` shim +// (its readers and the state layout are copied below). +#include "sc_shim.h" + +#include "StdAfx.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +namespace +{ +// Ops (keep in sync with crates/solidcore-ffi/src/units/surface_surf_of_extrusion_p2.rs). +enum : int32_t +{ + OP_STATE = 0, + OP_PLANE = 1, + OP_CYLINDER = 2, + OP_EXTRUSION = 3, + OP_GLOBAL = 4, + OP_IS_NURB = 5, + OP_TRIM = 6, +}; + +// Generator kinds. +enum : int32_t +{ + GK_BSPLINE = 0, + GK_LINE = 1, + GK_CIRCLE = 2, + GK_ELLIPSE = 3, + GK_HYPERBOLA = 4, + GK_PARABOLA = 5, +}; + +// Construction modes of a built surface. +enum : int32_t +{ + BM_CANONICAL = 0, + BM_CTOR = 1, + BM_INFINITE = 2, +}; + +// Surface sources. +enum : int32_t +{ + SRC_BUILT = 0, // a p1 surface block + SRC_RECORD = 1, // ReadFromDB of bytes[start .. start + len] +}; + +// Plane kinds. +enum : int32_t +{ + PK_BOUNDED = 0, // SmPlane(O, X, Y, scale, domain) + PK_NORMAL = 1, // SmPlane(O, N) +}; + +// Cone kinds. +enum : int32_t +{ + CK_CANONICAL = 0, // SmCone::CreateCanonical(O, bot, top, height, swap, inside) + CK_CANONICAL_SEMI = 1, // SmCone::CreateCanonical(O, bot, semi, pOptHeight, swap, inside) + CK_CYLINDER = 2, // SmCylinder::CreateCanonical(O, radius) +}; + +// GlobalSurfaceIntersect targets. +enum : int32_t +{ + TG_PLANE = 0, + TG_CONE = 1, + TG_EXTRUSION = 2, + TG_BSPLINE = 3, // the NURB of a surface source, as an SmBSplineSurface +}; + +// A GlobalSurfaceIntersect whose special case needs more (or that has none) would run the +// general intersector (SmAdvSurfaceIntersector, unported): the shim does not run it and +// answers this marker (the Rust side defers those cases). +const double GENERAL = -3.0; + +struct Peek : SmSurfOfExtrusion +{ + static SmCurveOrientType SmSurfOfExtrusion::*orient() { return &Peek::m_eOrientation; } + static SmVector3d SmSurfOfExtrusion::*cpoint() { return &Peek::m_vCurvePoint; } + static SmVector3d SmSurfOfExtrusion::*cvec() { return &Peek::m_vCurveVec; } + Peek(SmBSplineCurve* c, const SmPoint3d& o, const SmVector3d& v, const SmExtent2d& d, + SmBoolean swap) + : SmSurfOfExtrusion(c, o, v, d, swap) + { + } + Peek(SmBSplineCurve* c, const SmVector3d& v, SmBoolean swap) : SmSurfOfExtrusion(c, v, swap) {} +}; + +struct ConePeek : SmCone +{ + static SmPolarConversion SmSurfOfRevolution::*polar() { return &ConePeek::m_vPolarConverter; } +}; + +struct Rd +{ + const double* in; + int64_t at; + double num() { return in[at++]; } + int64_t idx() { return (int64_t)in[at++]; } + bool flag() { return in[at++] != 0.0; } + SmVector3d vec() + { + double x = num(); + double y = num(); + double z = num(); + return SmVector3d(x, y, z); + } + SmExtent2d domain() + { + double a = num(); + double b = num(); + double c = num(); + double d = num(); + return SmExtent2d(a, b, c, d); + } +}; + +double st(SmStatus s) +{ + return s == SM_SUCCESS ? 0.0 : (double)s; +} + +double flg(bool b) +{ + return b ? 1.0 : 0.0; +} + +void put_vec(std::vector& o, const SmVector3d& v) +{ + o.push_back(v.x); + o.push_back(v.y); + o.push_back(v.z); +} + +void put_dom(std::vector& o, const SmExtent2d& d) +{ + o.push_back(d.GetMin().x); + o.push_back(d.GetMin().y); + o.push_back(d.GetMax().x); + o.push_back(d.GetMax().y); +} + +SmBSplineCurve* read_bspline(Rd& rd, const SmContext& ctx) +{ + gw_INDEX n = (gw_INDEX)rd.idx(); + gw_DEGREE p = (gw_DEGREE)rd.idx(); + gw_INDEX m = (gw_INDEX)rd.idx(); + gw_CURVE* cur = sm_AllocateNurbCurve(n, p, m); + for (gw_INDEX i = 0; i <= n; i++) + { + cur->pol->Pw[i].x = rd.num(); + cur->pol->Pw[i].y = rd.num(); + cur->pol->Pw[i].z = rd.num(); + cur->pol->Pw[i].w = rd.num(); + } + for (gw_INDEX i = 0; i <= m; i++) + cur->knt->U[i] = rd.num(); + return new (ctx) SmBSplineCurve(cur, 3, FALSE); +} + +SmBSplineCurve* read_gen(Rd& rd, const SmContext& ctx) +{ + int64_t kind = rd.idx(); + switch (kind) + { + case GK_BSPLINE: return read_bspline(rd, ctx); + case GK_LINE: + { + SmPoint3d a = rd.vec(); + SmPoint3d b = rd.vec(); + SmLine* l = new (ctx) SmLine(a, b, 3, &ctx); + l->GetOrCreateGwNurbPointer(); + return l; + } + case GK_CIRCLE: + { + SmPoint3d c = rd.vec(); + SmVector3d x = rd.vec(); + SmVector3d y = rd.vec(); + double d0 = rd.num(); + double d1 = rd.num(); + double r = rd.num(); + return new (ctx) SmCircle(c, x, y, SmExtent1d(d0, d1), r, 3, &ctx); + } + case GK_ELLIPSE: + { + SmPoint3d c = rd.vec(); + SmVector3d x = rd.vec(); + SmVector3d y = rd.vec(); + double d0 = rd.num(); + double d1 = rd.num(); + double rx = rd.num(); + double ry = rd.num(); + return new (ctx) SmEllipse(c, x, y, SmExtent1d(d0, d1), rx, ry, 3, &ctx); + } + case GK_HYPERBOLA: + { + SmPoint3d c = rd.vec(); + SmVector3d x = rd.vec(); + SmVector3d y = rd.vec(); + double d0 = rd.num(); + double d1 = rd.num(); + double a = rd.num(); + double b = rd.num(); + return new (ctx) SmHyperbola(c, x, y, SmExtent1d(d0, d1), a, b, 3, &ctx); + } + case GK_PARABOLA: + { + SmPoint3d c = rd.vec(); + SmVector3d x = rd.vec(); + SmVector3d y = rd.vec(); + double d0 = rd.num(); + double d1 = rd.num(); + double f = rd.num(); + return new (ctx) SmParabola(c, x, y, SmExtent1d(d0, d1), f, 3, &ctx); + } + default: return NULL; + } +} + +// A p1 surface block `mode gen oob swap ...`; NULL with *status set on failure. +SmSurfOfExtrusion* read_built(Rd& rd, const SmContext& ctx, SmStatus* status) +{ + int64_t mode = rd.idx(); + SmBSplineCurve* gen = read_gen(rd, ctx); + bool oob = rd.flag(); + bool swap = rd.flag(); + SmSurfOfExtrusion* s = NULL; + SmStatus stt = SM_SUCCESS; + if (mode == BM_CANONICAL) + { + SmVector3d e = rd.vec(); + stt = SmSurfOfExtrusion::CreateCanonical(ctx, gen, e, s); + } + else if (mode == BM_CTOR) + { + SmPoint3d org = rd.vec(); + SmVector3d e = rd.vec(); + SmExtent2d d = rd.domain(); + s = new (ctx) Peek(gen, org, e, d, swap ? TRUE : FALSE); + stt = s->MakeNurb(); + } + else + { + SmVector3d e = rd.vec(); + s = new (ctx) Peek(gen, e, swap ? TRUE : FALSE); + stt = s->MakeNurb(); + } + *status = stt; + if (stt != SM_SUCCESS) + { + if (s) + delete s; // owns gen + else + delete gen; + return NULL; + } + s->SetOutOfBoundsEnabled(oob ? TRUE : FALSE); // the surface and its generator + return s; +} + +// A record block `ascii version start len`: SmSurfOfExtrusion::ReadFromDB of those bytes. +// A generator that is not an SmBSplineCurve (upstream only asserts, then casts it) is +// rejected with SC_ERR_ARG. +SmSurfOfExtrusion* read_record(Rd& rd, const SmContext& ctx, const uint8_t* bytes, + SmStatus* status) +{ + bool ascii = rd.flag(); + ULONG version = (ULONG)rd.idx(); + int64_t start = rd.idx(); + int64_t len = rd.idx(); + std::istringstream iss(std::string((const char*)bytes + start, (size_t)len)); + SmDatabaseIOStream db(ascii ? SM_ASCII : SM_BINARY, &iss); + db.SetVersionNum(version); + SmSurface* srf = NULL; + SmStatus stt = + SmSurfOfExtrusion::ReadFromDB(SmSurfOfExtrusion_TYPE, db, ctx, srf, version); + *status = stt; + if (stt != SM_SUCCESS) + { + delete srf; + return NULL; + } + SmSurfOfExtrusion* s = (SmSurfOfExtrusion*)srf; + if (!s->GetGenCurve() || !s->GetGenCurve()->IsKindOf(SmBSplineCurve_TYPE)) + { + delete s; + *status = (SmStatus)SC_ERR_ARG; + return NULL; + } + return s; +} + +SmSurfOfExtrusion* read_src(Rd& rd, const SmContext& ctx, const uint8_t* bytes, + SmStatus* status) +{ + int64_t kind = rd.idx(); + if (kind == SRC_BUILT) + return read_built(rd, ctx, status); + return read_record(rd, ctx, bytes, status); +} + +// `has [type step0 step1 has_nurb [p n cpts(4 n) nk knots]]`. +void put_curve(std::vector& o, const SmCurve* c) +{ + o.push_back(flg(c != NULL)); + if (!c) + return; + o.push_back((double)c->GetType()); + SmExtent1d ivl = c->GetSTEPInterval(); + o.push_back(ivl.GetMin()); + o.push_back(ivl.GetMax()); + const SmBSplineCurve* b = + c->IsKindOf(SmBSplineCurve_TYPE) ? (const SmBSplineCurve*)c : NULL; + const gw_CURVE* cur = b ? b->GetGwNurbPointer() : NULL; + o.push_back(flg(cur != NULL)); + if (!cur) + return; + o.push_back((double)cur->p); + o.push_back((double)(cur->pol->n + 1)); + for (gw_INDEX i = 0; i <= cur->pol->n; i++) + { + o.push_back(cur->pol->Pw[i].x); + o.push_back(cur->pol->Pw[i].y); + o.push_back(cur->pol->Pw[i].z); + o.push_back(cur->pol->Pw[i].w); + } + o.push_back((double)(cur->knt->m + 1)); + for (gw_INDEX i = 0; i <= cur->knt->m; i++) + o.push_back(cur->knt->U[i]); +} + +// The p1 surface state. +void put_state(std::vector& o, SmSurfOfExtrusion* s) +{ + o.push_back(flg(s->IsKindOf(SmSurfOfExtrusion_TYPE))); + o.push_back(flg(s->IsKindOf(SmBSplineSurface_TYPE))); + o.push_back(flg(s->IsKindOf(SmSurface_TYPE))); + o.push_back((double)s->GetType()); + o.push_back(flg(s->GetSwapUVBit())); + o.push_back(flg(s->IsOutOfBoundsEnabled())); + o.push_back((double)(s->*Peek::orient())); + put_vec(o, s->GetOrigin()); + put_vec(o, s->GetExtrusionVector()); + put_vec(o, s->*Peek::cpoint()); + put_vec(o, s->*Peek::cvec()); + put_dom(o, s->GetSTEPUVDomain()); + SmSurfParamType lp = SM_SP_UNKNOWN; + SmExtent1d ld = s->GetSTEPLinearParamExtent(&lp); + o.push_back(ld.GetMin()); + o.push_back(ld.GetMax()); + o.push_back((double)lp); + SmSurfParamType gp = SM_SP_UNKNOWN; + SmExtent1d gd = s->GetGenDirParamExtent(&gp); + o.push_back(gd.GetMin()); + o.push_back(gd.GetMax()); + o.push_back((double)gp); + put_dom(o, s->GetMaxAnalyticDomain()); + SmBSplineCurve* gc = NULL; + SmVector3d ev(0.0, 0.0, 0.0); + s->GetCanonical(gc, ev); + o.push_back(flg(gc == s->GetGenCurve())); + put_vec(o, ev); + put_curve(o, s->GetGenCurve()); + const gw_SURFACE* sur = s->GetGwNurbPointer(); + o.push_back(flg(sur != NULL)); + if (!sur) + return; + o.push_back((double)sur->p); + o.push_back((double)sur->q); + o.push_back((double)(sur->net->n + 1)); + o.push_back((double)(sur->net->m + 1)); + for (gw_INDEX i = 0; i <= sur->net->n; i++) + for (gw_INDEX j = 0; j <= sur->net->m; j++) + { + o.push_back(sur->net->Pw[i][j].x); + o.push_back(sur->net->Pw[i][j].y); + o.push_back(sur->net->Pw[i][j].z); + o.push_back(sur->net->Pw[i][j].w); + } + o.push_back((double)(sur->knu->m + 1)); + for (gw_INDEX i = 0; i <= sur->knu->m; i++) + o.push_back(sur->knu->U[i]); + o.push_back((double)(sur->knv->m + 1)); + for (gw_INDEX i = 0; i <= sur->knv->m; i++) + o.push_back(sur->knv->U[i]); +} + +// A plane block `kind O[3] (X[3] Y[3] scale[2] D[4] | N[3])`. +SmPlane* read_plane(Rd& rd, const SmContext& ctx) +{ + int64_t kind = rd.idx(); + SmPoint3d o = rd.vec(); + if (kind == PK_BOUNDED) + { + SmVector3d x = rd.vec(); + SmVector3d y = rd.vec(); + double su = rd.num(); + double sv = rd.num(); + SmExtent2d d = rd.domain(); + return new (ctx) SmPlane(o, x, y, SmVector2d(su, sv), d, &ctx); + } + SmVector3d nv = rd.vec(); + return new (ctx) SmPlane(o, nv, &ctx); +} + +// A cone block `kind O[3] X[3] Y[3] p[6]`; NULL with *status set on failure. +SmCone* read_cone(Rd& rd, const SmContext& ctx, SmStatus* status) +{ + int64_t kind = rd.idx(); + SmPoint3d org = rd.vec(); + SmVector3d x = rd.vec(); + SmVector3d y = rd.vec(); + double p[6]; + for (int i = 0; i < 6; i++) + p[i] = rd.num(); + SmAxis2Placement a2p(org, x, y); + SmCone* c = NULL; + SmStatus stt = SM_SUCCESS; + switch (kind) + { + case CK_CANONICAL: + stt = SmCone::CreateCanonical(ctx, a2p, p[0], p[1], p[2], c, p[3] != 0.0 ? TRUE : FALSE, + p[4] != 0.0 ? TRUE : FALSE); + break; + case CK_CANONICAL_SEMI: + { + double h = p[3]; + stt = SmCone::CreateCanonical(ctx, a2p, p[0], p[1], c, p[2] != 0.0 ? &h : NULL, + p[4] != 0.0 ? TRUE : FALSE, p[5] != 0.0 ? TRUE : FALSE); + break; + } + default: + { + SmCylinder* cy = NULL; + stt = SmCylinder::CreateCanonical(ctx, a2p, p[0], cy); + c = cy; + break; + } + } + *status = stt; + if (stt != SM_SUCCESS) + { + delete c; + return NULL; + } + return c; +} + +// Whether CreateIsoCircleFromPoint(point, tol) of the cone would read uninitialised values +// (as the `surface.cone_p1` shim tests it): the polar converter's curve is dereferenced +// unchecked, and a STEP inversion or NURB conversion that leaves its outputs unset is read. +bool iso_circle_is_undefined(SmCone* s, const SmPoint3d& p, double tol) +{ + const SmPolarConversion& pc = s->*ConePeek::polar(); + if (pc.GetCurve() == NULL) + return true; + const SmPoint3d& rOrigin = s->GetPosition().GetOriginRef(); + SmVector3d sZAxis = s->GetPosition().GetZAxis(); + SmExtent1d sHeightStepIvl = s->GetSTEPUVDomain().GetVInterval(); + double dParam = 0.0; + smgu_LineClosestPoint(rOrigin, sZAxis, p, dParam); + if (!sHeightStepIvl.ContainsValue(dParam, tol)) + return false; + double dRadius = s->GetRadius(dParam); + SmPoint3d sCenter = rOrigin + dParam * sZAxis; + SmVector3d sVec = p - sCenter; + if (sVec.LengthSquared() < 2 * SM_EFF_ZERO_SQ) + sVec = s->GetPosition().GetXAxis(); + sVec.Unitize(); + SmPoint3d sPointOnSurface = sCenter + dRadius * sVec; + const double nan = std::nan(""); + SmPoint2d suv(nan, nan); + SmLocationType eloc = SM_LT_EXTERIOR; + s->STEPInversion(s->GetSTEPUVDomain(), sPointOnSurface, tol, suv, eloc); + if (std::isnan(suv.x) || std::isnan(suv.y)) + return true; + SmPoint2d nuv(nan, nan); + return s->ConvertUVFromSTEPToNURBS(suv, nuv) != SM_SUCCESS && + (!s->GetSwapUV() || std::isnan(nuv.x)); +} + +// The intersection outputs: `more ncurves curves ntypes types nuv1 has... nuv2 has... ndev devs`. +void put_tsect(std::vector& o, SmBoolean more, SmTArray& curves, + SmTArray& uv1, SmTArray& uv2, + SmTArray& types, SmTArray& devs) +{ + o.push_back(flg(more != FALSE)); + o.push_back((double)curves.GetSize()); + for (ULONG i = 0; i < curves.GetSize(); i++) + put_curve(o, curves[i]); + o.push_back((double)types.GetSize()); + for (ULONG i = 0; i < types.GetSize(); i++) + o.push_back((double)types[i]); + o.push_back((double)uv1.GetSize()); + for (ULONG i = 0; i < uv1.GetSize(); i++) + o.push_back(flg(uv1[i] != NULL)); + o.push_back((double)uv2.GetSize()); + for (ULONG i = 0; i < uv2.GetSize(); i++) + o.push_back(flg(uv2[i] != NULL)); + o.push_back((double)devs.GetSize()); + for (ULONG i = 0; i < devs.GetSize(); i++) + o.push_back(devs[i]); +} + +void free_curves(SmTArray& a) +{ + for (ULONG i = 0; i < a.GetSize(); i++) + delete a[i]; + a.ReSet(); +} + +struct Tsect +{ + SmTArray curves, uv1, uv2; + SmTArray types; + SmTArray devs; + SmBoolean more = FALSE; + ~Tsect() + { + free_curves(curves); + free_curves(uv1); + free_curves(uv2); + } +}; + +// `has_tol tol` -> an optional SmApproxTol3d. +struct OptTol +{ + bool has; + SmApproxTol3d tol; + explicit OptTol(Rd& rd) : has(rd.flag()), tol(rd.num()) {} + const SmApproxTol3d* ptr() const { return has ? &tol : NULL; } +}; + +// The test surface of IsNurbSurfaceSurfOfExtrusion: `raw` then either an inline NURB `n m p q +// cpts(4, v fastest) U V` or the NURB of a surface source; then `transpose`, `reparam D[4]`, +// `perturb i j d[3]` edits (flag-prefixed). +SmBSplineSurface* read_test_surface(Rd& rd, const SmContext& ctx, const uint8_t* bytes, + std::vector& o, bool* guard) +{ + bool raw = rd.flag(); + SmBSplineSurface* t = NULL; + if (raw) + { + gw_INDEX n = (gw_INDEX)rd.idx(); + gw_INDEX m = (gw_INDEX)rd.idx(); + gw_DEGREE p = (gw_DEGREE)rd.idx(); + gw_DEGREE q = (gw_DEGREE)rd.idx(); + gw_INDEX r = n + p + 1; + gw_INDEX s = m + q + 1; + gw_SURFACE* sur = sm_AllocateNurbSurface(n, m, p, q, r, s); + for (gw_INDEX i = 0; i <= n; i++) + for (gw_INDEX j = 0; j <= m; j++) + { + sur->net->Pw[i][j].x = rd.num(); + sur->net->Pw[i][j].y = rd.num(); + sur->net->Pw[i][j].z = rd.num(); + sur->net->Pw[i][j].w = rd.num(); + } + for (gw_INDEX i = 0; i <= r; i++) + sur->knu->U[i] = rd.num(); + for (gw_INDEX i = 0; i <= s; i++) + sur->knv->U[i] = rd.num(); + t = new (ctx) SmBSplineSurface(sur, FALSE, &ctx); + o.push_back(0.0); + } + else + { + SmStatus stt = SM_SUCCESS; + SmSurfOfExtrusion* src = read_src(rd, ctx, bytes, &stt); + o.push_back(st(stt)); + if (!src) + return NULL; + t = new (ctx) SmBSplineSurface(src->GetGwNurbPointer()); + delete src; + } + bool transpose = rd.flag(); + bool reparam = rd.flag(); + SmExtent2d d = rd.domain(); + bool perturb = rd.flag(); + int64_t pi = rd.idx(); + int64_t pj = rd.idx(); + SmVector3d pd = rd.vec(); + if (transpose) + o.push_back(st(t->SwapUV())); + if (reparam) + o.push_back(st(t->Reparameterize(d))); + if (perturb) + { + gw_SURFACE* sur = t->GetOrCreateGwNurbPointer(); + if (!sur || pi < 0 || pj < 0 || pi > sur->net->n || pj > sur->net->m) + { + delete t; + *guard = true; + return NULL; + } + sur->net->Pw[pi][pj].x += pd.x; + sur->net->Pw[pi][pj].y += pd.y; + sur->net->Pw[pi][pj].z += pd.z; + } + return t; +} + +// Runs the op; SC_ERR_ARG when upstream would read undefined values (no output then). +int32_t surface_op(int32_t op, Rd& rd, const SmContext& ctx, const uint8_t* bytes, + SmSurfOfExtrusion* s, std::vector& o) +{ + switch (op) + { + case OP_STATE: + o.push_back(0.0); + put_state(o, s); + break; + case OP_PLANE: + { + SmPlane* pl = read_plane(rd, ctx); + bool has_dom = rd.flag(); + SmExtent2d dom = rd.domain(); + bool has_odom = rd.flag(); + SmExtent2d odom = rd.domain(); + OptTol tol(rd); + if (!has_dom) + dom = s->GetNaturalUVDomain(); + if (!has_odom) + odom = pl->GetNaturalUVDomain(); + Tsect t; + SmBoolean edges[2] = {TRUE, TRUE}; + SmStatus stt = s->IntersectWithPlane(ctx, dom, *pl, odom, edges, tol.ptr(), NULL, t.more, + &t.curves, &t.uv1, &t.uv2, &t.types, &t.devs); + o.push_back(st(stt)); + if (stt == SM_SUCCESS) + put_tsect(o, t.more, t.curves, t.uv1, t.uv2, t.types, t.devs); + delete pl; + break; + } + case OP_CYLINDER: + { + SmStatus cst = SM_SUCCESS; + SmCone* c = read_cone(rd, ctx, &cst); + OptTol tol(rd); + o.push_back(st(cst)); + if (!c) + break; + // the bottom iso circle IntersectWithCylinder makes (with its tolerance) + double dtol = tol.has ? (double)tol.tol : SM_EFF_ZERO_SQRT; + SmPoint3d start = c->GetPosition().GetOriginRef() + + smos_Min(c->GetBotHeight(), c->GetTopHeight()) * + c->GetPosition().GetZAxis(); + double dr = SM_EFF_ZERO * (1.0 + smos_Max(c->GetBotRadius(), c->GetTopRadius())); + if (smos_Fabs(c->GetBotRadius() - c->GetTopRadius()) <= dr && + iso_circle_is_undefined(c, start, dtol)) + { + delete c; + return SC_ERR_ARG; + } + Tsect t; + SmBoolean edges[2] = {TRUE, TRUE}; + SmStatus stt = + s->IntersectWithCylinder(ctx, s->GetNaturalUVDomain(), *c, c->GetNaturalUVDomain(), + edges, tol.ptr(), NULL, t.more, &t.curves, &t.uv1, &t.uv2, + &t.types, &t.devs); + o.push_back(st(stt)); + if (stt == SM_SUCCESS) + put_tsect(o, t.more, t.curves, t.uv1, t.uv2, t.types, t.devs); + delete c; + break; + } + case OP_EXTRUSION: + { + SmStatus ost = SM_SUCCESS; + SmSurfOfExtrusion* other = read_src(rd, ctx, bytes, &ost); + OptTol tol(rd); + o.push_back(st(ost)); + if (!other) + break; + Tsect t; + SmBoolean edges[2] = {TRUE, TRUE}; + SmStatus stt = s->IntersectWithSurfOfExtrusion( + ctx, s->GetNaturalUVDomain(), *other, other->GetNaturalUVDomain(), edges, tol.ptr(), + NULL, t.more, &t.curves, &t.uv1, &t.uv2, &t.types, &t.devs); + o.push_back(st(stt)); + if (stt == SM_SUCCESS) + put_tsect(o, t.more, t.curves, t.uv1, t.uv2, t.types, t.devs); + delete other; + break; + } + case OP_GLOBAL: + { + int64_t kind = rd.idx(); + SmSurface* other = NULL; + SmStatus ost = SM_SUCCESS; + if (kind == TG_PLANE) + other = read_plane(rd, ctx); + else if (kind == TG_CONE) + other = read_cone(rd, ctx, &ost); + else + { + SmSurfOfExtrusion* e = read_src(rd, ctx, bytes, &ost); + if (e && kind == TG_BSPLINE) + { + other = new (ctx) SmBSplineSurface(e->GetGwNurbPointer()); + delete e; + } + else + other = e; + } + bool has_dom = rd.flag(); + SmExtent2d dom = rd.domain(); + bool has_odom = rd.flag(); + SmExtent2d odom = rd.domain(); + OptTol tol(rd); + bool has_ang = rd.flag(); + double ang = rd.num(); + o.push_back(st(ost)); + if (!other) + break; + if (!has_dom) + dom = s->GetNaturalUVDomain(); + if (!has_odom) + odom = other->GetNaturalUVDomain(); + SmBoolean edges[2] = {TRUE, TRUE}; + + // the special case GlobalSurfaceIntersect tries (same dispatch) + bool special = false; + { + Tsect t; + SmStatus pst = SM_SUCCESS; + switch (other->GetType()) + { + case SmPlane_TYPE: + special = true; + pst = s->IntersectWithPlane(ctx, dom, *(SmPlane*)other, odom, edges, tol.ptr(), + has_ang ? &ang : NULL, t.more, &t.curves, &t.uv1, + &t.uv2, &t.types, &t.devs); + break; + case SmCone_TYPE: + { + special = true; + SmCone* c = (SmCone*)other; + double dtol = tol.has ? (double)tol.tol : SM_EFF_ZERO_SQRT; + double dr = + SM_EFF_ZERO * (1.0 + smos_Max(c->GetBotRadius(), c->GetTopRadius())); + SmPoint3d start = c->GetPosition().GetOriginRef() + + smos_Min(c->GetBotHeight(), c->GetTopHeight()) * + c->GetPosition().GetZAxis(); + if (smos_Fabs(c->GetBotRadius() - c->GetTopRadius()) <= dr && + iso_circle_is_undefined(c, start, dtol)) + { + delete other; + return SC_ERR_ARG; + } + pst = s->IntersectWithCylinder(ctx, dom, *c, odom, edges, tol.ptr(), + has_ang ? &ang : NULL, t.more, &t.curves, &t.uv1, + &t.uv2, &t.types, &t.devs); + break; + } + case SmSurfOfExtrusion_TYPE: + special = true; + pst = s->IntersectWithSurfOfExtrusion( + ctx, dom, *(SmSurfOfExtrusion*)other, odom, edges, tol.ptr(), + has_ang ? &ang : NULL, t.more, &t.curves, &t.uv1, &t.uv2, &t.types, &t.devs); + break; + default: break; + } + if (special && pst != SM_SUCCESS) + { + o.push_back(st(pst)); + delete other; + break; + } + if (!special || t.more) + { + o.push_back(GENERAL); + delete other; + break; + } + } + Tsect t; + SmStatus stt = s->GlobalSurfaceIntersect(ctx, dom, *other, odom, edges, tol.ptr(), + has_ang ? &ang : NULL, &t.curves, &t.uv1, &t.uv2, + &t.types, &t.devs); + o.push_back(st(stt)); + if (stt == SM_SUCCESS) + put_tsect(o, FALSE, t.curves, t.uv1, t.uv2, t.types, t.devs); + delete other; + break; + } + case OP_TRIM: + { + SmExtent2d d = rd.domain(); + SmStatus stt = s->TrimWithDomain(d); + o.push_back(st(stt)); + if (stt == SM_SUCCESS) + put_state(o, s); + break; + } + default: return SC_ERR_ARG; + } + return SC_OK; +} +} // namespace + +SC_EXPORT int32_t sc_surface_surf_of_extrusion_p2_eval(int32_t op, const double* in, int64_t n_in, + const uint8_t* bytes, int64_t n_bytes, + double* out, int64_t cap, int64_t* out_len) +{ + (void)n_in; + (void)n_bytes; + SC_TRY + SmContext ctx; + std::vector o; + Rd rd{in, 0}; + if (op == OP_IS_NURB) + { + bool guard = false; + SmBSplineSurface* t = read_test_surface(rd, ctx, bytes, o, &guard); + if (guard) + return SC_ERR_ARG; + double scale = rd.num(); + if (t) + { + SmSurfOfExtrusion* r = NULL; + SmBoolean ret = SmSurfOfExtrusion::IsNurbSurfaceSurfOfExtrusion(ctx, t, r, scale); + // TRUE with a surface, FALSE, or a failing SER status returned as the boolean + if (ret == TRUE && r) + { + // whether the NURB was made, then the state with it made (the state's + // GetGenDirParamExtent would make it lazily) + o.push_back(0.0); + o.push_back(1.0); + o.push_back(flg(r->GetGwNurbPointer() != NULL)); + SmStatus mst = r->GetGwNurbPointer() ? SM_SUCCESS : r->MakeNurb(); + o.push_back(st(mst)); + if (mst == SM_SUCCESS) + put_state(o, r); + } + else if (ret == FALSE) + { + o.push_back(0.0); + o.push_back(0.0); + } + else + o.push_back((double)ret); + delete r; + delete t; + } + return sc_copy_out(o.data(), (int64_t)o.size(), out, cap, out_len); + } + SmStatus stt = SM_SUCCESS; + SmSurfOfExtrusion* s = read_src(rd, ctx, bytes, &stt); + o.push_back(st(stt)); + if (s) + { + int32_t r = surface_op(op, rd, ctx, bytes, s, o); + delete s; + if (r != SC_OK) + return r; + } + return sc_copy_out(o.data(), (int64_t)o.size(), out, cap, out_len); + SC_CATCH +} From b6f63658bc3d56a787f8bcfc3958b27af5aa1184 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 13:16:29 -0400 Subject: [PATCH 37/54] intersect.surface_intersector_p3: fetch caches with smsurf_GetSurfaceCache, report, status partial Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm --- .../units/intersect_surface_intersector_p3.rs | 46 +- .../src/intersect/surface_intersector/p3.rs | 81 +- plan/modules.toml | 4 +- .../intersect.surface_intersector_p3.json | 14945 ++++++++++++++++ 4 files changed, 15033 insertions(+), 43 deletions(-) create mode 100644 reports/difftest/intersect.surface_intersector_p3.json diff --git a/crates/difftest/src/units/intersect_surface_intersector_p3.rs b/crates/difftest/src/units/intersect_surface_intersector_p3.rs index 88d1ffcfbc..472c7145a7 100644 --- a/crates/difftest/src/units/intersect_surface_intersector_p3.rs +++ b/crates/difftest/src/units/intersect_surface_intersector_p3.rs @@ -20,12 +20,17 @@ //! curve-bounded surfaces; `FindBoundaryStartPoints` of B-spline bumps and planes with //! intersection boxes that miss or meet the boundaries; `SplitSpan`. //! +//! `FindBoundaryStartPoints` of planes and B-spline surfaces runs with fresh surface +//! caches (`find_boundary_start_points_with_caches`, see `Run::caches`); with a +//! curve-bounded surface it fetches them (`smsurf_GetSurfaceCache`). +//! //! Deferred cases: `ComputeNextPoint` refining a crossing, tangent-curve or singular //! point (`SmSurface::LocalSurfaceIntersect`), `ComputePointValues` on a B-spline or -//! curve-bounded surface (`SmSurface::IsSingularity`), `FindBoundaryStartPoints` with a -//! curve-bounded surface (`smsurf_GetSurfaceCache`, see `Run::caches`) or with -//! a boundary box meeting the intersection box (`SmSurface::GlobalCurveIntersect`) or -//! on a plane (`SmPlane::CreateIsoParametricCurve`), and `SplitSpan` with a valid plane +//! curve-bounded surface (`SmSurface::IsSingularity`) or near a tangency +//! (`SmSurface::LocalSurfaceSolve`), `FindBoundaryStartPoints` with a boundary box +//! meeting the intersection box (`SmSurface::GlobalCurveIntersect`), on a plane +//! (`SmPlane::CreateIsoParametricCurve`) or with a curve-bounded surface (the cache +//! build's `CalculateContinuities`), and `SplitSpan` with a valid plane //! (`SmFilletLaw::Evaluate`). use serde::{Deserialize, Serialize}; @@ -1039,24 +1044,23 @@ struct Run<'a> { } impl Run<'_> { - /// The surface caches (made on first use, kept as upstream keeps them on the - /// surfaces): `smsurf_GetSurfaceCache` (`surface.surface_p1`, not ported) stood in - /// for by a fresh cache of a plane or B-spline surface. For a curve-bounded - /// surface upstream builds (and here fails to build) a trimmed-surface cache, which - /// has no stand-in: the case is deferred. - fn caches(&mut self) -> Result<&mut Vec>, Fail> { + /// The surface caches for `FindBoundaryStartPoints` of planes and B-spline + /// surfaces: fresh caches without a tree (kept as upstream keeps them on the + /// surfaces). `smsurf_GetSurfaceCache` builds the tree, which reaches the unported + /// `CalculateContinuities` (`surface.surface_p6`), but `FindBoundaryStartPoints` + /// reads only the cache's iso boundary curves, which are the same either way. + /// `None` (the real `smsurf_GetSurfaceCache`) for a curve-bounded surface, whose + /// trimmed-surface cache build fails upstream. + fn caches(&mut self) -> Option<&mut Vec>> { let surfaces = self.surfaces; if surfaces .iter() .any(|s| matches!(s.kind(), SurfaceKind::CurveBounded(_))) { - return Err(Fail::Deferred(Box::new(Output::deferred( - "surface.surface_p1", - "smsurf_GetSurfaceCache", - )))); + return None; } let same = self.same; - Ok(self.caches.get_or_insert_with(|| { + Some(self.caches.get_or_insert_with(|| { let make = |s: &Surface| { SurfaceCache::new(s.clone(), s.natural_uv_domain(), SurfaceCacheOptions::default()) }; @@ -1201,16 +1205,12 @@ fn run_op(run: &mut Run<'_>, si: &mut SurfaceIntersector<'_>, op: &OpIn, o: &mut let bx = Extent3d::from_bounds( bbox[0][0], bbox[0][1], bbox[0][2], bbox[1][0], bbox[1][1], bbox[1][2], ); - let mut outs = core::mem::take(&mut run.outs); let k = Kernel::default(); - let caches = match run.caches() { - Ok(c) => c, - Err(e) => { - run.outs = outs; - return Err(e); - } + let mut outs = core::mem::take(&mut run.outs); + let r = match run.caches() { + Some(caches) => si.find_boundary_start_points_with_caches(&k, caches, &bx, &mut outs), + None => si.find_boundary_start_points(&k, &bx, &mut outs), }; - let r = si.find_boundary_start_points(&k, caches, &bx, &mut outs); run.outs = outs; st(o, r)?; put_outs(o, &run.outs, run.curves.len())?; diff --git a/crates/solidcore/src/intersect/surface_intersector/p3.rs b/crates/solidcore/src/intersect/surface_intersector/p3.rs index ebfd71b185..26af7c2bf5 100644 --- a/crates/solidcore/src/intersect/surface_intersector/p3.rs +++ b/crates/solidcore/src/intersect/surface_intersector/p3.rs @@ -9,7 +9,7 @@ //! //! | Rust | Upstream | //! |-------------------------------------------------------|--------------------------------------------| -//! | [`SurfaceIntersector::find_boundary_start_points`] | `FindBoundaryStartPoints` | +//! | [`SurfaceIntersector::find_boundary_start_points`], [`SurfaceIntersector::find_boundary_start_points_with_caches`] | `FindBoundaryStartPoints` | //! | [`SurfaceIntersector::compute_next_point`], [`NextPoint`] | `ComputeNextPoint` | //! | [`SurfaceIntersector::update_tsect_point`] | `sm_UpdateTsectPoint` (static) | //! | [`SurfaceIntersector::test_point`] | `TestPoint` | @@ -33,12 +33,15 @@ //! `ComputeNextPoint`'s deviation and angle are `None` when upstream leaves them //! unset. `SplitSpan` returns the new point's id. `FindBoundaryStartPoints`' //! output arrays are a [`TsectCurves`] (part 2). -//! - **Surface caches.** `smsurf_GetSurfaceCache` (`surface.surface_p1`) cannot -//! hand out caches yet, so [`SurfaceIntersector::find_boundary_start_points`] -//! takes the caches of the surfaces as an argument, as the surface tracer does. -//! Their `process_boundary_curves` flags are set for the call and restored on every -//! exit (`SmTemporaryChangeValue`). The temporary removal of the other surface's -//! owner (point validation) has no counterpart: Rust surfaces have no owner. +//! - **Surface caches.** `smsurf_GetSurfaceCache` ([`surface_cache`]) builds a +//! fresh cache per call (the cache store keeps none), so the one of each surface +//! is fetched once per call (once for a self intersection, where upstream gets +//! the same cache twice); a surface without one is `SM_ERR_NULL_POINTER` (`NER`). +//! Their `process_boundary_curves` flags are set as upstream's +//! `SmTemporaryChangeValue`s set them; a callee that fetches its own cache does not +//! see them. [`SurfaceIntersector::find_boundary_start_points_with_caches`] takes +//! the caches from the caller instead (only their iso boundary curves are read). The temporary removal of the other surface's owner (point validation) +//! has no counterpart: Rust surfaces have no owner. //! - **Points of `FindBoundaryStartPoints`.** Upstream takes a point from the block //! manager for every solution and leaks those it does not keep; here a solution's //! point is a local [`TsectPnt::zeroed`] value that gets its arena slot when it @@ -78,6 +81,7 @@ use crate::math::{max2, EFF_ZERO, EFF_ZERO_SQRT}; use crate::nurbs::b_spline_curve::p2::BoundingBoxRequest; use crate::nurbs::b_spline_curve::BSplineCurve; use crate::nurbs::b_spline_curve_n_lib::TrimMode; +use crate::surface::surface::p2::surface_cache; use crate::surface::surface::p2::TsectCurveType; use crate::surface::surface::{Surface, SurfaceKind}; use crate::surface::surface_cache::SurfaceCache; @@ -226,16 +230,46 @@ impl SurfaceIntersector<'_> { /// dropped onto both surfaces, kept when within `this_approx_tol_3d` of both, with /// its type; start points and crossings on it are then dropped. /// - /// `caches` are the surface caches (`smsurf_GetSurfaceCache`): `caches[0]` of the - /// first surface, `caches[1]` (or `caches[0]` when only one is given, as for a - /// self intersection) of the second. + /// # Errors + /// + /// `SM_ERR_NULL_POINTER` for a surface without a surface cache; those of the iso + /// curves, the bounding boxes, the evaluations, the trims and the curve solves; + /// [`SolidError::Unported`] from unported callees. + pub fn find_boundary_start_points( + &mut self, + k: &Kernel, + intersection_box: &Extent3d, + out: &mut TsectCurves, + ) -> Result<()> { + // get surface caches (NER: no cache is SM_ERR_NULL_POINTER) + let get = |s: &Surface| match surface_cache::<()>(k, s, None) { + Ok(c) => Ok(c), + Err(e) if e.is_unported() => Err(e), + Err(_) => Err(SolidError::Upstream { + operation: OP_FBSP, + code: SM_ERR_NULL_POINTER, + entity: None, + }), + }; + let mut caches = vec![get(self.surface(SrfIndex::First))?]; + if !self.doing_self_intersection { + caches.push(get(self.surface(SrfIndex::Second))?); + } + + self.find_boundary_start_points_with_caches(k, &mut caches, intersection_box, out) + } + + /// [`SurfaceIntersector::find_boundary_start_points`] with the given surface + /// caches: `caches[0]` of the first surface, `caches[1]` (or `caches[0]` when only + /// one is given, as for a self intersection) of the second. Only their iso boundary + /// curves are used; their `process_boundary_curves` flags are set for the call and + /// restored on every exit (`SmTemporaryChangeValue`). /// /// # Errors /// - /// `SM_ERR_NULL_POINTER` without a cache; those of the iso curves, the bounding - /// boxes, the evaluations, the trims and the curve solves; - /// [`SolidError::Unported`] from unported callees. - pub fn find_boundary_start_points( + /// `SM_ERR_NULL_POINTER` without a cache; else as + /// [`SurfaceIntersector::find_boundary_start_points`]. + pub fn find_boundary_start_points_with_caches( &mut self, k: &Kernel, caches: &mut [SurfaceCache], @@ -1278,7 +1312,7 @@ impl SurfaceIntersector<'_> { fn surface_is_singularity(surface: &Surface, _uv: Point2) -> Result { match surface.kind() { SurfaceKind::Plane(p) => Ok(p.is_singularity().0), - SurfaceKind::BSpline(_) | SurfaceKind::CurveBounded(_) => { + SurfaceKind::BSpline(_) | SurfaceKind::CurveBounded(_) | SurfaceKind::Step(_) => { // UNPORTED(surface.surface_p5): SmSurface::IsSingularity Err(SolidError::unported( "SmSurface::IsSingularity", @@ -1514,14 +1548,25 @@ mod tests { } #[test] - fn find_boundary_start_points_needs_a_cache() { + fn find_boundary_start_points_with_a_far_box_finds_nothing() { let (a, b) = two_planes(); let mut si = intersector(&a, &b); + si.set_use_surface_edges(false, false); let k = Kernel::default(); let mut out = TsectCurves::default(); - let mut caches: Vec> = Vec::new(); + let far = Extent3d::from_bounds(50.0, 50.0, 50.0, 51.0, 51.0, 51.0); + // (the surface cache tree build is not ported: no fetched cache) + let mut caches = vec![SurfaceCache::<()>::new( + a.clone(), + a.natural_uv_domain(), + crate::surface::surface_cache::SurfaceCacheOptions::default(), + )]; + si.find_boundary_start_points_with_caches(&k, &mut caches, &far, &mut out) + .expect("fbsp"); assert!(si - .find_boundary_start_points(&k, &mut caches, &Extent3d::new(), &mut out) + .find_boundary_start_points_with_caches::<()>(&k, &mut [], &far, &mut out) .is_err()); + assert!(out.curves_3d.is_empty()); + assert!(si.start_points().is_empty()); } } diff --git a/plan/modules.toml b/plan/modules.toml index 9d69435fe4..2d6024fc16 100644 --- a/plan/modules.toml +++ b/plan/modules.toml @@ -2307,10 +2307,10 @@ soft_depends_on = ["curve.curve_p1", "curve.curve_p4", "curve.curve_p6", "geom.g est_lines = 1932 layer = 34 tests = ["prog_test:my_test_parallel_projection", "prog_test:my_test_tsurf_projection", "prog_test:my_test_surface_interface", "prog_test:my_test_ssi", "prog_test:my_test_tsurf_section", "prog_test:my_test_planar_section"] -status = "todo" +status = "partial" claimed_by = "" claimed_at = "" -notes = "5 fns; largest: SmSurfaceIntersector::FindBoundaryStartPoints, SmSurfaceIntersector::TestPoint, SmSurfaceIntersector::ComputeNextPoint, sm_UpdateTsectPoint; cycle back-edges (call into later units; stub or co-port): topology.edge(2), topology.edgeuse_p1(1), topology.edgeuse_p3(1), topology.face_p4(1); unit-SCC #22 (220 units); 150 upstream test entry points reach this unit" +notes = "5 fns; largest: SmSurfaceIntersector::FindBoundaryStartPoints, SmSurfaceIntersector::TestPoint, SmSurfaceIntersector::ComputeNextPoint, sm_UpdateTsectPoint; unit-SCC #22 (220 units); 150 upstream test entry points reach this unit; PARTIAL (PR #56): difftest 1527 cases (17 inline edge cases, 10 fixture cases from my_test_planar_section on shovel.srf, 1500 generated programs: plane/plane traces at angles down to 1e-6 with through, start and end points, random programs on planes, B-spline and curve-bounded surfaces, boundary start point searches, scales 1e-6..1e5), 851 pass bit-identical (max_rel_err 0), 676 deferred (surface.surface_p11 353, surface.surface_p3 135, surface.surface_p8 79, surface.plane_p1 64, surface.surface_p5 28, blend.fillet_executive_p1 13, surface.surface_p6 4); --perturb SENSITIVE 851/851. UNPORTED stubs: SmSurface::GlobalCurveIntersect (surface.surface_p8), SmSurface::DropAndTrimCurve (intersect.surface_drop_lib_p1), SmSurface::IsSingularity of non-planes (surface.surface_p5). The face edge branch (static constexpr bGWCAddEdgeThroughPoints = FALSE) and the bStopAtSingularity = FALSE code are dead upstream and not ported, so the planned topology back-edges (topology.edge, topology.edgeuse_p1, topology.edgeuse_p3, topology.face_p4) are not needed. find_boundary_start_points fetches caches with smsurf_GetSurfaceCache (tree build reaches surface.surface_p6); find_boundary_start_points_with_caches takes them from the caller." [[unit]] id = "surface.surface_point_solve_p3" diff --git a/reports/difftest/intersect.surface_intersector_p3.json b/reports/difftest/intersect.surface_intersector_p3.json new file mode 100644 index 0000000000..3dd13821c8 --- /dev/null +++ b/reports/difftest/intersect.surface_intersector_p3.json @@ -0,0 +1,14945 @@ +{ + "abs_floors": [], + "cases": [ + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "shovel_plane_section_05", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.surface_intersector_p3/planar_section.json#0 (upstream tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "plane_shovel_section_05", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.surface_intersector_p3/planar_section.json#1 (upstream tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "shovel_plane_section_12", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.surface_intersector_p3/planar_section.json#2 (upstream tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "plane_shovel_section_12", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.surface_intersector_p3/planar_section.json#3 (upstream tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "shovel_plane_section_20", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.surface_intersector_p3/planar_section.json#4 (upstream tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "plane_shovel_section_20", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.surface_intersector_p3/planar_section.json#5 (upstream tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "shovel_plane_section_27", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.surface_intersector_p3/planar_section.json#6 (upstream tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "plane_shovel_section_27", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.surface_intersector_p3/planar_section.json#7 (upstream tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "shovel_bpt_translated", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.surface_intersector_p3/planar_section.json#8 (upstream tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf))", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "shovel_bpt_self", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.surface_intersector_p3/planar_section.json#9 (upstream tests/prog_test/src/smSurfaceTest.cpp:667 (my_test_planar_section, from my_test_section :4447, shovel.srf))", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0000", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538612", + "values_compared": 1413 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0001", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538613", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0002", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538614", + "values_compared": 2019 + }, + { + "max_rel_err": 0.0, + "name": "gen0003", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538615", + "values_compared": 600 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0004", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538616", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0005", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538617", + "values_compared": 1172 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0006", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538618", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0007", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538619", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0008", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538620", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0009", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538621", + "values_compared": 1163 + }, + { + "max_rel_err": 0.0, + "name": "gen0010", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538622", + "values_compared": 1906 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0011", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538623", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0012", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538624", + "values_compared": 1992 + }, + { + "max_rel_err": 0.0, + "name": "gen0013", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538625", + "values_compared": 1911 + }, + { + "max_rel_err": 0.0, + "name": "gen0014", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538626", + "values_compared": 2155 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0015", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538627", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0016", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538628", + "values_compared": 1666 + }, + { + "max_rel_err": 0.0, + "name": "gen0017", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538629", + "values_compared": 2641 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0018", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538630", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0019", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538631", + "values_compared": 1994 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0020", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538632", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0021", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538633", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0022", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538634", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0023", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538635", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0024", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538636", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0025", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538637", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0026", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538638", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0027", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538639", + "values_compared": 2563 + }, + { + "max_rel_err": 0.0, + "name": "gen0028", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538640", + "values_compared": 520 + }, + { + "max_rel_err": 0.0, + "name": "gen0029", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538641", + "values_compared": 1745 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0030", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538642", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0031", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538643", + "values_compared": 2403 + }, + { + "max_rel_err": 0.0, + "name": "gen0032", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538644", + "values_compared": 2157 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0033", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538645", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0034", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538646", + "values_compared": 1323 + }, + { + "max_rel_err": 0.0, + "name": "gen0035", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538647", + "values_compared": 1607 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0036", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538648", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0037", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538649", + "values_compared": 1676 + }, + { + "max_rel_err": 0.0, + "name": "gen0038", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538650", + "values_compared": 1663 + }, + { + "max_rel_err": 0.0, + "name": "gen0039", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538651", + "values_compared": 2151 + }, + { + "max_rel_err": 0.0, + "name": "gen0040", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538652", + "values_compared": 1175 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0041", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538653", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0042", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538654", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0043", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538655", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0044", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538656", + "values_compared": 1748 + }, + { + "max_rel_err": 0.0, + "name": "gen0045", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538657", + "values_compared": 2242 + }, + { + "max_rel_err": 0.0, + "name": "gen0046", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538658", + "values_compared": 1163 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0047", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538659", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0048", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538660", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0049", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538661", + "values_compared": 1597 + }, + { + "max_rel_err": 0.0, + "name": "gen0050", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538662", + "values_compared": 1663 + }, + { + "max_rel_err": 0.0, + "name": "gen0051", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538663", + "values_compared": 833 + }, + { + "max_rel_err": 0.0, + "name": "gen0052", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538664", + "values_compared": 1175 + }, + { + "max_rel_err": 0.0, + "name": "gen0053", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538665", + "values_compared": 2246 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0054", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538666", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0055", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538667", + "values_compared": 1990 + }, + { + "max_rel_err": 0.0, + "name": "gen0056", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538668", + "values_compared": 1910 + }, + { + "max_rel_err": 0.0, + "name": "gen0057", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538669", + "values_compared": 2335 + }, + { + "max_rel_err": 0.0, + "name": "gen0058", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538670", + "values_compared": 1248 + }, + { + "max_rel_err": 0.0, + "name": "gen0059", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538671", + "values_compared": 1744 + }, + { + "max_rel_err": 0.0, + "name": "gen0060", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538672", + "values_compared": 1417 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0061", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538673", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0062", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538674", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0063", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538675", + "values_compared": 2647 + }, + { + "max_rel_err": 0.0, + "name": "gen0064", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538676", + "values_compared": 1916 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0065", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538677", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0066", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538678", + "values_compared": 1911 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0067", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538679", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0068", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538680", + "values_compared": 1907 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0069", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538681", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0070", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538682", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0071", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538683", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0072", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538684", + "values_compared": 1667 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0073", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538685", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0074", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538686", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0075", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538687", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0076", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538688", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0077", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538689", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0078", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538690", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0079", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538691", + "values_compared": 1926 + }, + { + "max_rel_err": 0.0, + "name": "gen0080", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538692", + "values_compared": 1750 + }, + { + "max_rel_err": 0.0, + "name": "gen0081", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538693", + "values_compared": 2161 + }, + { + "max_rel_err": 0.0, + "name": "gen0082", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538694", + "values_compared": 2484 + }, + { + "max_rel_err": 0.0, + "name": "gen0083", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538695", + "values_compared": 1165 + }, + { + "max_rel_err": 0.0, + "name": "gen0084", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538696", + "values_compared": 2732 + }, + { + "max_rel_err": 0.0, + "name": "gen0085", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538697", + "values_compared": 761 + }, + { + "max_rel_err": 0.0, + "name": "gen0086", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538698", + "values_compared": 926 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0087", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538699", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0088", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538700", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0089", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538701", + "values_compared": 2730 + }, + { + "max_rel_err": 0.0, + "name": "gen0090", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538702", + "values_compared": 523 + }, + { + "max_rel_err": 0.0, + "name": "gen0091", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538703", + "values_compared": 2155 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0092", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538704", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0093", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538705", + "values_compared": 1419 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0094", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538706", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0095", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538707", + "values_compared": 1943 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0096", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538708", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0097", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538709", + "values_compared": 1911 + }, + { + "max_rel_err": 0.0, + "name": "gen0098", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538710", + "values_compared": 1012 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0099", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538711", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0100", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538712", + "values_compared": 530 + }, + { + "max_rel_err": 0.0, + "name": "gen0101", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538713", + "values_compared": 530 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0102", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538714", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0103", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538715", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0104", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538716", + "values_compared": 931 + }, + { + "max_rel_err": 0.0, + "name": "gen0105", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538717", + "values_compared": 1742 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0106", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538718", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0107", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538719", + "values_compared": 1175 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0108", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538720", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0109", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538721", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0110", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538722", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0111", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538723", + "values_compared": 1010 + }, + { + "max_rel_err": 0.0, + "name": "gen0112", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538724", + "values_compared": 1667 + }, + { + "max_rel_err": 0.0, + "name": "gen0113", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538725", + "values_compared": 1417 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0114", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538726", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0115", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538727", + "values_compared": 2566 + }, + { + "max_rel_err": 0.0, + "name": "gen0116", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538728", + "values_compared": 2644 + }, + { + "max_rel_err": 0.0, + "name": "gen0117", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538729", + "values_compared": 1913 + }, + { + "max_rel_err": 0.0, + "name": "gen0118", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538730", + "values_compared": 1177 + }, + { + "max_rel_err": 0.0, + "name": "gen0119", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538731", + "values_compared": 1595 + }, + { + "max_rel_err": 0.0, + "name": "gen0120", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538732", + "values_compared": 1913 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0121", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538733", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0122", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538734", + "values_compared": 608 + }, + { + "max_rel_err": 0.0, + "name": "gen0123", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538735", + "values_compared": 1421 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0124", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538736", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0125", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538737", + "values_compared": 921 + }, + { + "max_rel_err": 0.0, + "name": "gen0126", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538738", + "values_compared": 1325 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0127", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538739", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0128", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538740", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0129", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538741", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0130", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538742", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0131", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538743", + "values_compared": 2397 + }, + { + "max_rel_err": 0.0, + "name": "gen0132", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538744", + "values_compared": 2153 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0133", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538745", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0134", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538746", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0135", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538747", + "values_compared": 1843 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0136", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538748", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0137", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538749", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0138", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538750", + "values_compared": 1417 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0139", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538751", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0140", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538752", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0141", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538753", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0142", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538754", + "values_compared": 2832 + }, + { + "max_rel_err": 0.0, + "name": "gen0143", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538755", + "values_compared": 2397 + }, + { + "deferred": { + "symbol": "SmFilletLaw::Evaluate", + "unit": "blend.fillet_executive_p1" + }, + "max_rel_err": 0.0, + "name": "gen0144", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538756", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0145", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538757", + "values_compared": 1750 + }, + { + "max_rel_err": 0.0, + "name": "gen0146", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538758", + "values_compared": 683 + }, + { + "max_rel_err": 0.0, + "name": "gen0147", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538759", + "values_compared": 2726 + }, + { + "max_rel_err": 0.0, + "name": "gen0148", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538760", + "values_compared": 1911 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0149", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538761", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0150", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538762", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0151", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538763", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0152", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538764", + "values_compared": 599 + }, + { + "max_rel_err": 0.0, + "name": "gen0153", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538765", + "values_compared": 1663 + }, + { + "max_rel_err": 0.0, + "name": "gen0154", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538766", + "values_compared": 597 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0155", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538767", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0156", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538768", + "values_compared": 435 + }, + { + "max_rel_err": 0.0, + "name": "gen0157", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538769", + "values_compared": 2658 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0158", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538770", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0159", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538771", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0160", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538772", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0161", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538773", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0162", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538774", + "values_compared": 1665 + }, + { + "max_rel_err": 0.0, + "name": "gen0163", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538775", + "values_compared": 1170 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0164", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538776", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0165", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538777", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0166", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538778", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0167", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538779", + "values_compared": 2728 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0168", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538780", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0169", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538781", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0170", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538782", + "values_compared": 934 + }, + { + "max_rel_err": 0.0, + "name": "gen0171", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538783", + "values_compared": 2394 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0172", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538784", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0173", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538785", + "values_compared": 2244 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0174", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538786", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::CalculateContinuities", + "unit": "surface.surface_p6" + }, + "max_rel_err": 0.0, + "name": "gen0175", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538787", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0176", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538788", + "values_compared": 2153 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0177", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538789", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0178", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538790", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0179", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538791", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0180", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538792", + "values_compared": 1163 + }, + { + "max_rel_err": 0.0, + "name": "gen0181", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538793", + "values_compared": 2246 + }, + { + "max_rel_err": 0.0, + "name": "gen0182", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538794", + "values_compared": 2153 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0183", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538795", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0184", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538796", + "values_compared": 2236 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0185", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538797", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0186", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538798", + "values_compared": 1667 + }, + { + "max_rel_err": 0.0, + "name": "gen0187", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538799", + "values_compared": 2412 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0188", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538800", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0189", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538801", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0190", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538802", + "values_compared": 512 + }, + { + "max_rel_err": 0.0, + "name": "gen0191", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538803", + "values_compared": 1666 + }, + { + "max_rel_err": 0.0, + "name": "gen0192", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538804", + "values_compared": 1182 + }, + { + "max_rel_err": 0.0, + "name": "gen0193", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538805", + "values_compared": 1667 + }, + { + "max_rel_err": 0.0, + "name": "gen0194", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538806", + "values_compared": 1909 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0195", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538807", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0196", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538808", + "values_compared": 1170 + }, + { + "max_rel_err": 0.0, + "name": "gen0197", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538809", + "values_compared": 2323 + }, + { + "max_rel_err": 0.0, + "name": "gen0198", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538810", + "values_compared": 1338 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0199", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538811", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0200", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538812", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0201", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538813", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0202", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538814", + "values_compared": 523 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0203", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538815", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0204", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538816", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0205", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538817", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0206", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538818", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0207", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538819", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0208", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538820", + "values_compared": 1915 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0209", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538821", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0210", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538822", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0211", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538823", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0212", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538824", + "values_compared": 615 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0213", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538825", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0214", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538826", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0215", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538827", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0216", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538828", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0217", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538829", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0218", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538830", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0219", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538831", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0220", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538832", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0221", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538833", + "values_compared": 2399 + }, + { + "max_rel_err": 0.0, + "name": "gen0222", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538834", + "values_compared": 1909 + }, + { + "max_rel_err": 0.0, + "name": "gen0223", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538835", + "values_compared": 1911 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0224", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538836", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0225", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538837", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0226", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538838", + "values_compared": 1015 + }, + { + "max_rel_err": 0.0, + "name": "gen0227", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538839", + "values_compared": 2666 + }, + { + "max_rel_err": 0.0, + "name": "gen0228", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538840", + "values_compared": 512 + }, + { + "max_rel_err": 0.0, + "name": "gen0229", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538841", + "values_compared": 1996 + }, + { + "max_rel_err": 0.0, + "name": "gen0230", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538842", + "values_compared": 1418 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0231", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538843", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0232", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538844", + "values_compared": 1170 + }, + { + "max_rel_err": 0.0, + "name": "gen0233", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538845", + "values_compared": 2240 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0234", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538846", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0235", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538847", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0236", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538848", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0237", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538849", + "values_compared": 1913 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0238", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538850", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0239", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538851", + "values_compared": 1332 + }, + { + "max_rel_err": 0.0, + "name": "gen0240", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538852", + "values_compared": 1665 + }, + { + "max_rel_err": 0.0, + "name": "gen0241", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538853", + "values_compared": 1163 + }, + { + "max_rel_err": 0.0, + "name": "gen0242", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538854", + "values_compared": 2159 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0243", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538855", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0244", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538856", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0245", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538857", + "values_compared": 1748 + }, + { + "max_rel_err": 0.0, + "name": "gen0246", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538858", + "values_compared": 1242 + }, + { + "max_rel_err": 0.0, + "name": "gen0247", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538859", + "values_compared": 785 + }, + { + "max_rel_err": 0.0, + "name": "gen0248", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538860", + "values_compared": 1913 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0249", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538861", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0250", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538862", + "values_compared": 523 + }, + { + "max_rel_err": 0.0, + "name": "gen0251", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538863", + "values_compared": 2401 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0252", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538864", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0253", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538865", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0254", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538866", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0255", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538867", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0256", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538868", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0257", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538869", + "values_compared": 1667 + }, + { + "max_rel_err": 0.0, + "name": "gen0258", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538870", + "values_compared": 2162 + }, + { + "max_rel_err": 0.0, + "name": "gen0259", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538871", + "values_compared": 2485 + }, + { + "max_rel_err": 0.0, + "name": "gen0260", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538872", + "values_compared": 2157 + }, + { + "max_rel_err": 0.0, + "name": "gen0261", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538873", + "values_compared": 1946 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0262", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538874", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0263", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538875", + "values_compared": 1907 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0264", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538876", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0265", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538877", + "values_compared": 690 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0266", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538878", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0267", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538879", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0268", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538880", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0269", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538881", + "values_compared": 2484 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0270", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538882", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0271", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538883", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0272", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538884", + "values_compared": 1593 + }, + { + "max_rel_err": 0.0, + "name": "gen0273", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538885", + "values_compared": 1268 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0274", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538886", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0275", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538887", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0276", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538888", + "values_compared": 1425 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0277", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538889", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0278", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538890", + "values_compared": 2648 + }, + { + "max_rel_err": 0.0, + "name": "gen0279", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538891", + "values_compared": 1003 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0280", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538892", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0281", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538893", + "values_compared": 2079 + }, + { + "max_rel_err": 0.0, + "name": "gen0282", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538894", + "values_compared": 1988 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0283", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538895", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0284", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538896", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0285", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538897", + "values_compared": 1010 + }, + { + "max_rel_err": 0.0, + "name": "gen0286", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538898", + "values_compared": 1909 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0287", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538899", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0288", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538900", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0289", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538901", + "values_compared": 2244 + }, + { + "max_rel_err": 0.0, + "name": "gen0290", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538902", + "values_compared": 2347 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0291", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538903", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0292", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538904", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0293", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538905", + "values_compared": 1423 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0294", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538906", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0295", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538907", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0296", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538908", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0297", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538909", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0298", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538910", + "values_compared": 2153 + }, + { + "max_rel_err": 0.0, + "name": "gen0299", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538911", + "values_compared": 1665 + }, + { + "deferred": { + "symbol": "SmFilletLaw::Evaluate", + "unit": "blend.fillet_executive_p1" + }, + "max_rel_err": 0.0, + "name": "gen0300", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538912", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0301", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538913", + "values_compared": 1667 + }, + { + "max_rel_err": 0.0, + "name": "gen0302", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538914", + "values_compared": 1911 + }, + { + "max_rel_err": 0.0, + "name": "gen0303", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538915", + "values_compared": 2649 + }, + { + "max_rel_err": 0.0, + "name": "gen0304", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538916", + "values_compared": 517 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0305", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538917", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0306", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538918", + "values_compared": 996 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0307", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538919", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0308", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538920", + "values_compared": 1913 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0309", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538921", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0310", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538922", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0311", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538923", + "values_compared": 1986 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0312", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538924", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0313", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538925", + "values_compared": 1754 + }, + { + "max_rel_err": 0.0, + "name": "gen0314", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538926", + "values_compared": 1502 + }, + { + "max_rel_err": 0.0, + "name": "gen0315", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538927", + "values_compared": 673 + }, + { + "max_rel_err": 0.0, + "name": "gen0316", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538928", + "values_compared": 1995 + }, + { + "max_rel_err": 0.0, + "name": "gen0317", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538929", + "values_compared": 613 + }, + { + "max_rel_err": 0.0, + "name": "gen0318", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538930", + "values_compared": 2405 + }, + { + "max_rel_err": 0.0, + "name": "gen0319", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538931", + "values_compared": 1597 + }, + { + "max_rel_err": 0.0, + "name": "gen0320", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538932", + "values_compared": 2242 + }, + { + "max_rel_err": 0.0, + "name": "gen0321", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538933", + "values_compared": 1196 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0322", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538934", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0323", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538935", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0324", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538936", + "values_compared": 2591 + }, + { + "max_rel_err": 0.0, + "name": "gen0325", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538937", + "values_compared": 768 + }, + { + "max_rel_err": 0.0, + "name": "gen0326", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538938", + "values_compared": 1163 + }, + { + "max_rel_err": 0.0, + "name": "gen0327", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538939", + "values_compared": 2240 + }, + { + "max_rel_err": 0.0, + "name": "gen0328", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538940", + "values_compared": 1173 + }, + { + "max_rel_err": 0.0, + "name": "gen0329", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538941", + "values_compared": 1911 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0330", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538942", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0331", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538943", + "values_compared": 2077 + }, + { + "max_rel_err": 0.0, + "name": "gen0332", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538944", + "values_compared": 1667 + }, + { + "max_rel_err": 0.0, + "name": "gen0333", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538945", + "values_compared": 1419 + }, + { + "max_rel_err": 0.0, + "name": "gen0334", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538946", + "values_compared": 2244 + }, + { + "max_rel_err": 0.0, + "name": "gen0335", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538947", + "values_compared": 2403 + }, + { + "max_rel_err": 0.0, + "name": "gen0336", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538948", + "values_compared": 1905 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0337", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538949", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0338", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538950", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0339", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538951", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0340", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538952", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0341", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538953", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0342", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538954", + "values_compared": 1994 + }, + { + "max_rel_err": 0.0, + "name": "gen0343", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538955", + "values_compared": 772 + }, + { + "max_rel_err": 0.0, + "name": "gen0344", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538956", + "values_compared": 1421 + }, + { + "max_rel_err": 0.0, + "name": "gen0345", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538957", + "values_compared": 1990 + }, + { + "max_rel_err": 0.0, + "name": "gen0346", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538958", + "values_compared": 1416 + }, + { + "max_rel_err": 0.0, + "name": "gen0347", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538959", + "values_compared": 2159 + }, + { + "max_rel_err": 0.0, + "name": "gen0348", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538960", + "values_compared": 1746 + }, + { + "max_rel_err": 0.0, + "name": "gen0349", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538961", + "values_compared": 2484 + }, + { + "max_rel_err": 0.0, + "name": "gen0350", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538962", + "values_compared": 2396 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0351", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538963", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0352", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538964", + "values_compared": 2157 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0353", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538965", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0354", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538966", + "values_compared": 2402 + }, + { + "max_rel_err": 0.0, + "name": "gen0355", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538967", + "values_compared": 1664 + }, + { + "max_rel_err": 0.0, + "name": "gen0356", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538968", + "values_compared": 2236 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0357", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538969", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0358", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538970", + "values_compared": 523 + }, + { + "max_rel_err": 0.0, + "name": "gen0359", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538971", + "values_compared": 2155 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0360", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538972", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0361", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538973", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0362", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538974", + "values_compared": 1450 + }, + { + "max_rel_err": 0.0, + "name": "gen0363", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538975", + "values_compared": 1506 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0364", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538976", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0365", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538977", + "values_compared": 1581 + }, + { + "max_rel_err": 0.0, + "name": "gen0366", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538978", + "values_compared": 1661 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0367", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538979", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0368", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538980", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0369", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538981", + "values_compared": 1421 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0370", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538982", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0371", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538983", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0372", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538984", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0373", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538985", + "values_compared": 2500 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0374", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538986", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0375", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538987", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0376", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538988", + "values_compared": 2321 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0377", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538989", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmFilletLaw::Evaluate", + "unit": "blend.fillet_executive_p1" + }, + "max_rel_err": 0.0, + "name": "gen0378", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538990", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0379", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538991", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0380", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538992", + "values_compared": 2085 + }, + { + "max_rel_err": 0.0, + "name": "gen0381", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868538993", + "values_compared": 1521 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0382", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538994", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0383", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538995", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0384", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538996", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0385", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538997", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0386", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538998", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0387", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868538999", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0388", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539000", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0389", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539001", + "values_compared": 673 + }, + { + "max_rel_err": 0.0, + "name": "gen0390", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539002", + "values_compared": 2147 + }, + { + "max_rel_err": 0.0, + "name": "gen0391", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539003", + "values_compared": 1928 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0392", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539004", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0393", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539005", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0394", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539006", + "values_compared": 1585 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0395", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539007", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0396", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539008", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0397", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539009", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0398", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539010", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0399", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539011", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0400", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539012", + "values_compared": 2153 + }, + { + "max_rel_err": 0.0, + "name": "gen0401", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539013", + "values_compared": 1905 + }, + { + "max_rel_err": 0.0, + "name": "gen0402", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539014", + "values_compared": 1175 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0403", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539015", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0404", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539016", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0405", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539017", + "values_compared": 2397 + }, + { + "max_rel_err": 0.0, + "name": "gen0406", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539018", + "values_compared": 683 + }, + { + "max_rel_err": 0.0, + "name": "gen0407", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539019", + "values_compared": 1907 + }, + { + "max_rel_err": 0.0, + "name": "gen0408", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539020", + "values_compared": 523 + }, + { + "max_rel_err": 0.0, + "name": "gen0409", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539021", + "values_compared": 1992 + }, + { + "max_rel_err": 0.0, + "name": "gen0410", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539022", + "values_compared": 1663 + }, + { + "max_rel_err": 0.0, + "name": "gen0411", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539023", + "values_compared": 2231 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0412", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539024", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0413", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539025", + "values_compared": 2726 + }, + { + "max_rel_err": 0.0, + "name": "gen0414", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539026", + "values_compared": 843 + }, + { + "max_rel_err": 0.0, + "name": "gen0415", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539027", + "values_compared": 1667 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0416", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539028", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0417", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539029", + "values_compared": 691 + }, + { + "max_rel_err": 0.0, + "name": "gen0418", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539030", + "values_compared": 923 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0419", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539031", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0420", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539032", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0421", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539033", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0422", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539034", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0423", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539035", + "values_compared": 1506 + }, + { + "max_rel_err": 0.0, + "name": "gen0424", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539036", + "values_compared": 2393 + }, + { + "max_rel_err": 0.0, + "name": "gen0425", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539037", + "values_compared": 773 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0426", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539038", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0427", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539039", + "values_compared": 1748 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0428", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539040", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0429", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539041", + "values_compared": 1667 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0430", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539042", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0431", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539043", + "values_compared": 2393 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0432", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539044", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0433", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539045", + "values_compared": 933 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0434", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539046", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0435", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539047", + "values_compared": 598 + }, + { + "max_rel_err": 0.0, + "name": "gen0436", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539048", + "values_compared": 1087 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0437", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539049", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0438", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539050", + "values_compared": 1018 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0439", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539051", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0440", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539052", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0441", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539053", + "values_compared": 1502 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0442", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539054", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0443", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539055", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0444", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539056", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0445", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539057", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0446", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539058", + "values_compared": 1421 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0447", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539059", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0448", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539060", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0449", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539061", + "values_compared": 2110 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0450", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539062", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0451", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539063", + "values_compared": 1406 + }, + { + "max_rel_err": 0.0, + "name": "gen0452", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539064", + "values_compared": 2256 + }, + { + "max_rel_err": 0.0, + "name": "gen0453", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539065", + "values_compared": 1246 + }, + { + "max_rel_err": 0.0, + "name": "gen0454", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539066", + "values_compared": 2075 + }, + { + "max_rel_err": 0.0, + "name": "gen0455", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539067", + "values_compared": 1671 + }, + { + "max_rel_err": 0.0, + "name": "gen0456", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539068", + "values_compared": 2485 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0457", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539069", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0458", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539070", + "values_compared": 1996 + }, + { + "max_rel_err": 0.0, + "name": "gen0459", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539071", + "values_compared": 1754 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0460", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539072", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0461", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539073", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0462", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539074", + "values_compared": 2805 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0463", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539075", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0464", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539076", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0465", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539077", + "values_compared": 1671 + }, + { + "max_rel_err": 0.0, + "name": "gen0466", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539078", + "values_compared": 862 + }, + { + "max_rel_err": 0.0, + "name": "gen0467", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539079", + "values_compared": 1913 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0468", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539080", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0469", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539081", + "values_compared": 947 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0470", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539082", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0471", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539083", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0472", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539084", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0473", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539085", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0474", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539086", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0475", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539087", + "values_compared": 1173 + }, + { + "max_rel_err": 0.0, + "name": "gen0476", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539088", + "values_compared": 2168 + }, + { + "max_rel_err": 0.0, + "name": "gen0477", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539089", + "values_compared": 1837 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0478", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539090", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0479", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539091", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0480", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539092", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0481", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539093", + "values_compared": 1996 + }, + { + "max_rel_err": 0.0, + "name": "gen0482", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539094", + "values_compared": 602 + }, + { + "max_rel_err": 0.0, + "name": "gen0483", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539095", + "values_compared": 1403 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0484", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539096", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0485", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539097", + "values_compared": 1177 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0486", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539098", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0487", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539099", + "values_compared": 1750 + }, + { + "max_rel_err": 0.0, + "name": "gen0488", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539100", + "values_compared": 1910 + }, + { + "max_rel_err": 0.0, + "name": "gen0489", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539101", + "values_compared": 2647 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0490", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539102", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0491", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539103", + "values_compared": 1045 + }, + { + "max_rel_err": 0.0, + "name": "gen0492", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539104", + "values_compared": 523 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0493", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539105", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0494", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539106", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0495", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539107", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0496", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539108", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0497", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539109", + "values_compared": 2896 + }, + { + "max_rel_err": 0.0, + "name": "gen0498", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539110", + "values_compared": 2085 + }, + { + "max_rel_err": 0.0, + "name": "gen0499", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539111", + "values_compared": 523 + }, + { + "max_rel_err": 0.0, + "name": "gen0500", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539112", + "values_compared": 2673 + }, + { + "max_rel_err": 0.0, + "name": "gen0501", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539113", + "values_compared": 1984 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0502", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539114", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0503", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539115", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0504", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539116", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0505", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539117", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0506", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539118", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0507", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539119", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0508", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539120", + "values_compared": 523 + }, + { + "max_rel_err": 0.0, + "name": "gen0509", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539121", + "values_compared": 845 + }, + { + "max_rel_err": 0.0, + "name": "gen0510", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539122", + "values_compared": 1423 + }, + { + "max_rel_err": 0.0, + "name": "gen0511", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539123", + "values_compared": 688 + }, + { + "max_rel_err": 0.0, + "name": "gen0512", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539124", + "values_compared": 1907 + }, + { + "max_rel_err": 0.0, + "name": "gen0513", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539125", + "values_compared": 1172 + }, + { + "max_rel_err": 0.0, + "name": "gen0514", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539126", + "values_compared": 2149 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0515", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539127", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0516", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539128", + "values_compared": 773 + }, + { + "max_rel_err": 0.0, + "name": "gen0517", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539129", + "values_compared": 1253 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0518", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539130", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0519", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539131", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0520", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539132", + "values_compared": 769 + }, + { + "max_rel_err": 0.0, + "name": "gen0521", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539133", + "values_compared": 449 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0522", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539134", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0523", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539135", + "values_compared": 2155 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0524", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539136", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0525", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539137", + "values_compared": 1665 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0526", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539138", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0527", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539139", + "values_compared": 845 + }, + { + "max_rel_err": 0.0, + "name": "gen0528", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539140", + "values_compared": 2239 + }, + { + "max_rel_err": 0.0, + "name": "gen0529", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539141", + "values_compared": 1998 + }, + { + "max_rel_err": 0.0, + "name": "gen0530", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539142", + "values_compared": 434 + }, + { + "max_rel_err": 0.0, + "name": "gen0531", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539143", + "values_compared": 1330 + }, + { + "max_rel_err": 0.0, + "name": "gen0532", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539144", + "values_compared": 513 + }, + { + "max_rel_err": 0.0, + "name": "gen0533", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539145", + "values_compared": 2575 + }, + { + "max_rel_err": 0.0, + "name": "gen0534", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539146", + "values_compared": 2244 + }, + { + "max_rel_err": 0.0, + "name": "gen0535", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539147", + "values_compared": 2986 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0536", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539148", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0537", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539149", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0538", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539150", + "values_compared": 1421 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0539", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539151", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0540", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539152", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0541", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539153", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0542", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539154", + "values_compared": 1423 + }, + { + "max_rel_err": 0.0, + "name": "gen0543", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539155", + "values_compared": 2148 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0544", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539156", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0545", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539157", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0546", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539158", + "values_compared": 1907 + }, + { + "max_rel_err": 0.0, + "name": "gen0547", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539159", + "values_compared": 356 + }, + { + "max_rel_err": 0.0, + "name": "gen0548", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539160", + "values_compared": 760 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0549", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539161", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0550", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539162", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0551", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539163", + "values_compared": 1828 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0552", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539164", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0553", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539165", + "values_compared": 1173 + }, + { + "max_rel_err": 0.0, + "name": "gen0554", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539166", + "values_compared": 2395 + }, + { + "max_rel_err": 0.0, + "name": "gen0555", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539167", + "values_compared": 2400 + }, + { + "max_rel_err": 0.0, + "name": "gen0556", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539168", + "values_compared": 933 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0557", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539169", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0558", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539170", + "values_compared": 2752 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0559", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539171", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0560", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539172", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0561", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539173", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0562", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539174", + "values_compared": 1665 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0563", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539175", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0564", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539176", + "values_compared": 1500 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0565", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539177", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0566", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539178", + "values_compared": 2403 + }, + { + "max_rel_err": 0.0, + "name": "gen0567", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539179", + "values_compared": 1162 + }, + { + "max_rel_err": 0.0, + "name": "gen0568", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539180", + "values_compared": 696 + }, + { + "max_rel_err": 0.0, + "name": "gen0569", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539181", + "values_compared": 1911 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0570", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539182", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0571", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539183", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0572", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539184", + "values_compared": 1504 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0573", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539185", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0574", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539186", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0575", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539187", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0576", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539188", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0577", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539189", + "values_compared": 1413 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0578", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539190", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0579", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539191", + "values_compared": 1904 + }, + { + "max_rel_err": 0.0, + "name": "gen0580", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539192", + "values_compared": 1840 + }, + { + "max_rel_err": 0.0, + "name": "gen0581", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539193", + "values_compared": 845 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0582", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539194", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0583", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539195", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0584", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539196", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0585", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539197", + "values_compared": 1667 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0586", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539198", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0587", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539199", + "values_compared": 1838 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0588", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539200", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0589", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539201", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0590", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539202", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0591", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539203", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0592", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539204", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0593", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539205", + "values_compared": 1216 + }, + { + "deferred": { + "symbol": "SmFilletLaw::Evaluate", + "unit": "blend.fillet_executive_p1" + }, + "max_rel_err": 0.0, + "name": "gen0594", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539206", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0595", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539207", + "values_compared": 523 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0596", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539208", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0597", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539209", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0598", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539210", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0599", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539211", + "values_compared": 1913 + }, + { + "max_rel_err": 0.0, + "name": "gen0600", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539212", + "values_compared": 1909 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0601", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539213", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0602", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539214", + "values_compared": 1660 + }, + { + "max_rel_err": 0.0, + "name": "gen0603", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539215", + "values_compared": 2157 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0604", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539216", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0605", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539217", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0606", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539218", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0607", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539219", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0608", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539220", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0609", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539221", + "values_compared": 1175 + }, + { + "max_rel_err": 0.0, + "name": "gen0610", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539222", + "values_compared": 1175 + }, + { + "max_rel_err": 0.0, + "name": "gen0611", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539223", + "values_compared": 1669 + }, + { + "deferred": { + "symbol": "SmFilletLaw::Evaluate", + "unit": "blend.fillet_executive_p1" + }, + "max_rel_err": 0.0, + "name": "gen0612", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539224", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0613", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539225", + "values_compared": 1423 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0614", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539226", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0615", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539227", + "values_compared": 1838 + }, + { + "max_rel_err": 0.0, + "name": "gen0616", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539228", + "values_compared": 1177 + }, + { + "max_rel_err": 0.0, + "name": "gen0617", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539229", + "values_compared": 1175 + }, + { + "max_rel_err": 0.0, + "name": "gen0618", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539230", + "values_compared": 1746 + }, + { + "max_rel_err": 0.0, + "name": "gen0619", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539231", + "values_compared": 2647 + }, + { + "max_rel_err": 0.0, + "name": "gen0620", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539232", + "values_compared": 523 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0621", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539233", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0622", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539234", + "values_compared": 1005 + }, + { + "max_rel_err": 0.0, + "name": "gen0623", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539235", + "values_compared": 2392 + }, + { + "max_rel_err": 0.0, + "name": "gen0624", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539236", + "values_compared": 1744 + }, + { + "max_rel_err": 0.0, + "name": "gen0625", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539237", + "values_compared": 525 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0626", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539238", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0627", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539239", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0628", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539240", + "values_compared": 2236 + }, + { + "max_rel_err": 0.0, + "name": "gen0629", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539241", + "values_compared": 1506 + }, + { + "max_rel_err": 0.0, + "name": "gen0630", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539242", + "values_compared": 1663 + }, + { + "max_rel_err": 0.0, + "name": "gen0631", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539243", + "values_compared": 2083 + }, + { + "max_rel_err": 0.0, + "name": "gen0632", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539244", + "values_compared": 1347 + }, + { + "max_rel_err": 0.0, + "name": "gen0633", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539245", + "values_compared": 1988 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0634", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539246", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::CalculateContinuities", + "unit": "surface.surface_p6" + }, + "max_rel_err": 0.0, + "name": "gen0635", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539247", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0636", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539248", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0637", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539249", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0638", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539250", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0639", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539251", + "values_compared": 2810 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0640", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539252", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0641", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539253", + "values_compared": 603 + }, + { + "max_rel_err": 0.0, + "name": "gen0642", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539254", + "values_compared": 1915 + }, + { + "max_rel_err": 0.0, + "name": "gen0643", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539255", + "values_compared": 1003 + }, + { + "max_rel_err": 0.0, + "name": "gen0644", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539256", + "values_compared": 1994 + }, + { + "max_rel_err": 0.0, + "name": "gen0645", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539257", + "values_compared": 1423 + }, + { + "max_rel_err": 0.0, + "name": "gen0646", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539258", + "values_compared": 1917 + }, + { + "max_rel_err": 0.0, + "name": "gen0647", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539259", + "values_compared": 846 + }, + { + "max_rel_err": 0.0, + "name": "gen0648", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539260", + "values_compared": 2402 + }, + { + "max_rel_err": 0.0, + "name": "gen0649", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539261", + "values_compared": 1414 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0650", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539262", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0651", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539263", + "values_compared": 2234 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0652", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539264", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0653", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539265", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0654", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539266", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0655", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539267", + "values_compared": 2493 + }, + { + "max_rel_err": 0.0, + "name": "gen0656", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539268", + "values_compared": 1661 + }, + { + "max_rel_err": 0.0, + "name": "gen0657", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539269", + "values_compared": 598 + }, + { + "max_rel_err": 0.0, + "name": "gen0658", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539270", + "values_compared": 2151 + }, + { + "max_rel_err": 0.0, + "name": "gen0659", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539271", + "values_compared": 2155 + }, + { + "max_rel_err": 0.0, + "name": "gen0660", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539272", + "values_compared": 766 + }, + { + "max_rel_err": 0.0, + "name": "gen0661", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539273", + "values_compared": 1994 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0662", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539274", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0663", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539275", + "values_compared": 1917 + }, + { + "max_rel_err": 0.0, + "name": "gen0664", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539276", + "values_compared": 1930 + }, + { + "max_rel_err": 0.0, + "name": "gen0665", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539277", + "values_compared": 1911 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0666", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539278", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0667", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539279", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0668", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539280", + "values_compared": 1165 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0669", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539281", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0670", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539282", + "values_compared": 2724 + }, + { + "max_rel_err": 0.0, + "name": "gen0671", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539283", + "values_compared": 2232 + }, + { + "max_rel_err": 0.0, + "name": "gen0672", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539284", + "values_compared": 1813 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0673", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539285", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0674", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539286", + "values_compared": 1907 + }, + { + "max_rel_err": 0.0, + "name": "gen0675", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539287", + "values_compared": 2638 + }, + { + "max_rel_err": 0.0, + "name": "gen0676", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539288", + "values_compared": 2420 + }, + { + "max_rel_err": 0.0, + "name": "gen0677", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539289", + "values_compared": 1417 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0678", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539290", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0679", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539291", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0680", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539292", + "values_compared": 2153 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0681", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539293", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0682", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539294", + "values_compared": 1911 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0683", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539295", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0684", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539296", + "values_compared": 2245 + }, + { + "max_rel_err": 0.0, + "name": "gen0685", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539297", + "values_compared": 2324 + }, + { + "max_rel_err": 0.0, + "name": "gen0686", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539298", + "values_compared": 1667 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0687", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539299", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0688", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539300", + "values_compared": 1508 + }, + { + "max_rel_err": 0.0, + "name": "gen0689", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539301", + "values_compared": 1631 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0690", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539302", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0691", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539303", + "values_compared": 1421 + }, + { + "max_rel_err": 0.0, + "name": "gen0692", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539304", + "values_compared": 2411 + }, + { + "max_rel_err": 0.0, + "name": "gen0693", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539305", + "values_compared": 1125 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0694", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539306", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0695", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539307", + "values_compared": 1920 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0696", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539308", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0697", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539309", + "values_compared": 2484 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0698", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539310", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0699", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539311", + "values_compared": 1841 + }, + { + "max_rel_err": 0.0, + "name": "gen0700", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539312", + "values_compared": 2081 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0701", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539313", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0702", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539314", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0703", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539315", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmFilletLaw::Evaluate", + "unit": "blend.fillet_executive_p1" + }, + "max_rel_err": 0.0, + "name": "gen0704", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539316", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0705", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539317", + "values_compared": 1750 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0706", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539318", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0707", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539319", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0708", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539320", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0709", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539321", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0710", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539322", + "values_compared": 1086 + }, + { + "max_rel_err": 0.0, + "name": "gen0711", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539323", + "values_compared": 2149 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0712", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539324", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0713", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539325", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0714", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539326", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0715", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539327", + "values_compared": 1913 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0716", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539328", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0717", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539329", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0718", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539330", + "values_compared": 1994 + }, + { + "max_rel_err": 0.0, + "name": "gen0719", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539331", + "values_compared": 1258 + }, + { + "max_rel_err": 0.0, + "name": "gen0720", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539332", + "values_compared": 1177 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0721", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539333", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmFilletLaw::Evaluate", + "unit": "blend.fillet_executive_p1" + }, + "max_rel_err": 0.0, + "name": "gen0722", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539334", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0723", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539335", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::CalculateContinuities", + "unit": "surface.surface_p6" + }, + "max_rel_err": 0.0, + "name": "gen0724", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539336", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0725", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539337", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0726", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539338", + "values_compared": 1663 + }, + { + "max_rel_err": 0.0, + "name": "gen0727", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539339", + "values_compared": 935 + }, + { + "max_rel_err": 0.0, + "name": "gen0728", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539340", + "values_compared": 1903 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0729", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539341", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0730", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539342", + "values_compared": 854 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0731", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539343", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0732", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539344", + "values_compared": 1595 + }, + { + "max_rel_err": 0.0, + "name": "gen0733", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539345", + "values_compared": 1913 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0734", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539346", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0735", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539347", + "values_compared": 683 + }, + { + "max_rel_err": 0.0, + "name": "gen0736", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539348", + "values_compared": 1917 + }, + { + "max_rel_err": 0.0, + "name": "gen0737", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539349", + "values_compared": 1996 + }, + { + "max_rel_err": 0.0, + "name": "gen0738", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539350", + "values_compared": 2155 + }, + { + "max_rel_err": 0.0, + "name": "gen0739", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539351", + "values_compared": 1671 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0740", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539352", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0741", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539353", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0742", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539354", + "values_compared": 1665 + }, + { + "max_rel_err": 0.0, + "name": "gen0743", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539355", + "values_compared": 1909 + }, + { + "max_rel_err": 0.0, + "name": "gen0744", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539356", + "values_compared": 1843 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0745", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539357", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0746", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539358", + "values_compared": 843 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0747", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539359", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0748", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539360", + "values_compared": 1915 + }, + { + "max_rel_err": 0.0, + "name": "gen0749", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539361", + "values_compared": 2075 + }, + { + "max_rel_err": 0.0, + "name": "gen0750", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539362", + "values_compared": 1093 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0751", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539363", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0752", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539364", + "values_compared": 1748 + }, + { + "max_rel_err": 0.0, + "name": "gen0753", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539365", + "values_compared": 1661 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0754", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539366", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0755", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539367", + "values_compared": 1911 + }, + { + "max_rel_err": 0.0, + "name": "gen0756", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539368", + "values_compared": 1992 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0757", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539369", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0758", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539370", + "values_compared": 1667 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0759", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539371", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0760", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539372", + "values_compared": 1909 + }, + { + "max_rel_err": 0.0, + "name": "gen0761", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539373", + "values_compared": 2153 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0762", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539374", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0763", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539375", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0764", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539376", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0765", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539377", + "values_compared": 2098 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0766", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539378", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0767", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539379", + "values_compared": 1665 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0768", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539380", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0769", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539381", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0770", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539382", + "values_compared": 1992 + }, + { + "max_rel_err": 0.0, + "name": "gen0771", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539383", + "values_compared": 1921 + }, + { + "max_rel_err": 0.0, + "name": "gen0772", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539384", + "values_compared": 1994 + }, + { + "max_rel_err": 0.0, + "name": "gen0773", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539385", + "values_compared": 1914 + }, + { + "max_rel_err": 0.0, + "name": "gen0774", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539386", + "values_compared": 1909 + }, + { + "max_rel_err": 0.0, + "name": "gen0775", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539387", + "values_compared": 1175 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0776", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539388", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0777", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539389", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0778", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539390", + "values_compared": 1503 + }, + { + "max_rel_err": 0.0, + "name": "gen0779", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539391", + "values_compared": 1667 + }, + { + "max_rel_err": 0.0, + "name": "gen0780", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539392", + "values_compared": 1835 + }, + { + "max_rel_err": 0.0, + "name": "gen0781", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539393", + "values_compared": 1661 + }, + { + "max_rel_err": 0.0, + "name": "gen0782", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539394", + "values_compared": 2151 + }, + { + "max_rel_err": 0.0, + "name": "gen0783", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539395", + "values_compared": 2154 + }, + { + "max_rel_err": 0.0, + "name": "gen0784", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539396", + "values_compared": 2488 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0785", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539397", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0786", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539398", + "values_compared": 1097 + }, + { + "max_rel_err": 0.0, + "name": "gen0787", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539399", + "values_compared": 2478 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0788", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539400", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0789", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539401", + "values_compared": 1417 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0790", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539402", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0791", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539403", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0792", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539404", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0793", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539405", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0794", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539406", + "values_compared": 1907 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0795", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539407", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0796", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539408", + "values_compared": 1165 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0797", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539409", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0798", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539410", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0799", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539411", + "values_compared": 844 + }, + { + "max_rel_err": 0.0, + "name": "gen0800", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539412", + "values_compared": 1254 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0801", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539413", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0802", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539414", + "values_compared": 2406 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0803", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539415", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0804", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539416", + "values_compared": 1994 + }, + { + "max_rel_err": 0.0, + "name": "gen0805", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539417", + "values_compared": 1087 + }, + { + "max_rel_err": 0.0, + "name": "gen0806", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539418", + "values_compared": 1665 + }, + { + "max_rel_err": 0.0, + "name": "gen0807", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539419", + "values_compared": 1663 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0808", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539420", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0809", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539421", + "values_compared": 2236 + }, + { + "max_rel_err": 0.0, + "name": "gen0810", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539422", + "values_compared": 2333 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0811", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539423", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0812", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539424", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0813", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539425", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0814", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539426", + "values_compared": 1323 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0815", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539427", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0816", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539428", + "values_compared": 2488 + }, + { + "max_rel_err": 0.0, + "name": "gen0817", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539429", + "values_compared": 1163 + }, + { + "max_rel_err": 0.0, + "name": "gen0818", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539430", + "values_compared": 1994 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0819", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539431", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0820", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539432", + "values_compared": 1996 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0821", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539433", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0822", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539434", + "values_compared": 2643 + }, + { + "max_rel_err": 0.0, + "name": "gen0823", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539435", + "values_compared": 1667 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0824", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539436", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0825", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539437", + "values_compared": 1691 + }, + { + "max_rel_err": 0.0, + "name": "gen0826", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539438", + "values_compared": 1688 + }, + { + "max_rel_err": 0.0, + "name": "gen0827", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539439", + "values_compared": 1419 + }, + { + "max_rel_err": 0.0, + "name": "gen0828", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539440", + "values_compared": 1686 + }, + { + "max_rel_err": 0.0, + "name": "gen0829", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539441", + "values_compared": 1787 + }, + { + "max_rel_err": 0.0, + "name": "gen0830", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539442", + "values_compared": 523 + }, + { + "max_rel_err": 0.0, + "name": "gen0831", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539443", + "values_compared": 2240 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0832", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539444", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0833", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539445", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0834", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539446", + "values_compared": 1158 + }, + { + "max_rel_err": 0.0, + "name": "gen0835", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539447", + "values_compared": 606 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0836", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539448", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0837", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539449", + "values_compared": 1589 + }, + { + "max_rel_err": 0.0, + "name": "gen0838", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539450", + "values_compared": 845 + }, + { + "max_rel_err": 0.0, + "name": "gen0839", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539451", + "values_compared": 1663 + }, + { + "max_rel_err": 0.0, + "name": "gen0840", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539452", + "values_compared": 2397 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0841", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539453", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0842", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539454", + "values_compared": 1913 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0843", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539455", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0844", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539456", + "values_compared": 2238 + }, + { + "max_rel_err": 0.0, + "name": "gen0845", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539457", + "values_compared": 1906 + }, + { + "max_rel_err": 0.0, + "name": "gen0846", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539458", + "values_compared": 1406 + }, + { + "max_rel_err": 0.0, + "name": "gen0847", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539459", + "values_compared": 1423 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0848", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539460", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0849", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539461", + "values_compared": 1839 + }, + { + "max_rel_err": 0.0, + "name": "gen0850", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539462", + "values_compared": 768 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0851", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539463", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0852", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539464", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0853", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539465", + "values_compared": 1750 + }, + { + "max_rel_err": 0.0, + "name": "gen0854", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539466", + "values_compared": 2159 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0855", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539467", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0856", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539468", + "values_compared": 1667 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0857", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539469", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0858", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539470", + "values_compared": 1684 + }, + { + "max_rel_err": 0.0, + "name": "gen0859", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539471", + "values_compared": 1088 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0860", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539472", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0861", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539473", + "values_compared": 1421 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0862", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539474", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0863", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539475", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0864", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539476", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0865", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539477", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0866", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539478", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0867", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539479", + "values_compared": 2152 + }, + { + "max_rel_err": 0.0, + "name": "gen0868", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539480", + "values_compared": 1667 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0869", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539481", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0870", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539482", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0871", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539483", + "values_compared": 2733 + }, + { + "max_rel_err": 0.0, + "name": "gen0872", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539484", + "values_compared": 3064 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0873", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539485", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0874", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539486", + "values_compared": 1858 + }, + { + "max_rel_err": 0.0, + "name": "gen0875", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539487", + "values_compared": 1904 + }, + { + "max_rel_err": 0.0, + "name": "gen0876", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539488", + "values_compared": 1996 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0877", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539489", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0878", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539490", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen0879", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539491", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0880", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539492", + "values_compared": 1936 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0881", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539493", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0882", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539494", + "values_compared": 2153 + }, + { + "max_rel_err": 0.0, + "name": "gen0883", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539495", + "values_compared": 2824 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0884", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539496", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0885", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539497", + "values_compared": 1163 + }, + { + "max_rel_err": 0.0, + "name": "gen0886", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539498", + "values_compared": 1170 + }, + { + "max_rel_err": 0.0, + "name": "gen0887", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539499", + "values_compared": 1417 + }, + { + "max_rel_err": 0.0, + "name": "gen0888", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539500", + "values_compared": 1833 + }, + { + "max_rel_err": 0.0, + "name": "gen0889", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539501", + "values_compared": 1421 + }, + { + "max_rel_err": 0.0, + "name": "gen0890", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539502", + "values_compared": 1667 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0891", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539503", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0892", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539504", + "values_compared": 1915 + }, + { + "max_rel_err": 0.0, + "name": "gen0893", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539505", + "values_compared": 1906 + }, + { + "max_rel_err": 0.0, + "name": "gen0894", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539506", + "values_compared": 2639 + }, + { + "max_rel_err": 0.0, + "name": "gen0895", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539507", + "values_compared": 1246 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0896", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539508", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0897", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539509", + "values_compared": 1110 + }, + { + "max_rel_err": 0.0, + "name": "gen0898", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539510", + "values_compared": 1754 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0899", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539511", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0900", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539512", + "values_compared": 2651 + }, + { + "max_rel_err": 0.0, + "name": "gen0901", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539513", + "values_compared": 1667 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0902", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539514", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0903", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539515", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0904", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539516", + "values_compared": 1909 + }, + { + "max_rel_err": 0.0, + "name": "gen0905", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539517", + "values_compared": 2155 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0906", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539518", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0907", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539519", + "values_compared": 1908 + }, + { + "max_rel_err": 0.0, + "name": "gen0908", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539520", + "values_compared": 1748 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0909", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539521", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0910", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539522", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0911", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539523", + "values_compared": 1748 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0912", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539524", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0913", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539525", + "values_compared": 1177 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0914", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539526", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0915", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539527", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmFilletLaw::Evaluate", + "unit": "blend.fillet_executive_p1" + }, + "max_rel_err": 0.0, + "name": "gen0916", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539528", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0917", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539529", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0918", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539530", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0919", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539531", + "values_compared": 1992 + }, + { + "max_rel_err": 0.0, + "name": "gen0920", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539532", + "values_compared": 1323 + }, + { + "max_rel_err": 0.0, + "name": "gen0921", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539533", + "values_compared": 1748 + }, + { + "max_rel_err": 0.0, + "name": "gen0922", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539534", + "values_compared": 1366 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0923", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539535", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0924", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539536", + "values_compared": 1752 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0925", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539537", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0926", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539538", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0927", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539539", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0928", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539540", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0929", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539541", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0930", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539542", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0931", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539543", + "values_compared": 1843 + }, + { + "max_rel_err": 0.0, + "name": "gen0932", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539544", + "values_compared": 2240 + }, + { + "max_rel_err": 0.0, + "name": "gen0933", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539545", + "values_compared": 1163 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0934", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539546", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0935", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539547", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0936", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539548", + "values_compared": 1753 + }, + { + "max_rel_err": 0.0, + "name": "gen0937", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539549", + "values_compared": 683 + }, + { + "max_rel_err": 0.0, + "name": "gen0938", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539550", + "values_compared": 2153 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0939", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539551", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0940", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539552", + "values_compared": 1086 + }, + { + "max_rel_err": 0.0, + "name": "gen0941", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539553", + "values_compared": 1680 + }, + { + "max_rel_err": 0.0, + "name": "gen0942", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539554", + "values_compared": 1845 + }, + { + "max_rel_err": 0.0, + "name": "gen0943", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539555", + "values_compared": 1513 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0944", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539556", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0945", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539557", + "values_compared": 2643 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0946", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539558", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0947", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539559", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0948", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539560", + "values_compared": 1170 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0949", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539561", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0950", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539562", + "values_compared": 2242 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0951", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539563", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0952", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539564", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0953", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539565", + "values_compared": 2159 + }, + { + "max_rel_err": 0.0, + "name": "gen0954", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539566", + "values_compared": 1908 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0955", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539567", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0956", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539568", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0957", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539569", + "values_compared": 1752 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0958", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539570", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0959", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539571", + "values_compared": 2409 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0960", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539572", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0961", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539573", + "values_compared": 1911 + }, + { + "max_rel_err": 0.0, + "name": "gen0962", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539574", + "values_compared": 2153 + }, + { + "max_rel_err": 0.0, + "name": "gen0963", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539575", + "values_compared": 1494 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0964", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539576", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0965", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539577", + "values_compared": 1916 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0966", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539578", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0967", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539579", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0968", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539580", + "values_compared": 2079 + }, + { + "max_rel_err": 0.0, + "name": "gen0969", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539581", + "values_compared": 2398 + }, + { + "max_rel_err": 0.0, + "name": "gen0970", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539582", + "values_compared": 2238 + }, + { + "max_rel_err": 0.0, + "name": "gen0971", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539583", + "values_compared": 2486 + }, + { + "max_rel_err": 0.0, + "name": "gen0972", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539584", + "values_compared": 2175 + }, + { + "max_rel_err": 0.0, + "name": "gen0973", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539585", + "values_compared": 609 + }, + { + "max_rel_err": 0.0, + "name": "gen0974", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539586", + "values_compared": 933 + }, + { + "max_rel_err": 0.0, + "name": "gen0975", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539587", + "values_compared": 2486 + }, + { + "max_rel_err": 0.0, + "name": "gen0976", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539588", + "values_compared": 1714 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0977", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539589", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0978", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539590", + "values_compared": 1750 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0979", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539591", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0980", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539592", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0981", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539593", + "values_compared": 1915 + }, + { + "max_rel_err": 0.0, + "name": "gen0982", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539594", + "values_compared": 1669 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0983", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539595", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0984", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539596", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen0985", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539597", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0986", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539598", + "values_compared": 1008 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0987", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539599", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0988", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539600", + "values_compared": 683 + }, + { + "max_rel_err": 0.0, + "name": "gen0989", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539601", + "values_compared": 2405 + }, + { + "max_rel_err": 0.0, + "name": "gen0990", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539602", + "values_compared": 1669 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0991", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539603", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0992", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539604", + "values_compared": 1415 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen0993", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539605", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0994", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539606", + "values_compared": 1913 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen0995", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539607", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0996", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539608", + "values_compared": 1419 + }, + { + "max_rel_err": 0.0, + "name": "gen0997", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539609", + "values_compared": 1994 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen0998", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539610", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen0999", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539611", + "values_compared": 1175 + }, + { + "max_rel_err": 0.0, + "name": "gen1000", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539612", + "values_compared": 850 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1001", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539613", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1002", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539614", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1003", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539615", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1004", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539616", + "values_compared": 1179 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1005", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539617", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1006", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539618", + "values_compared": 1748 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1007", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539619", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen1008", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539620", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1009", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539621", + "values_compared": 1027 + }, + { + "max_rel_err": 0.0, + "name": "gen1010", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539622", + "values_compared": 679 + }, + { + "max_rel_err": 0.0, + "name": "gen1011", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539623", + "values_compared": 1172 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1012", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539624", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1013", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539625", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1014", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539626", + "values_compared": 1421 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1015", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539627", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1016", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539628", + "values_compared": 1837 + }, + { + "max_rel_err": 0.0, + "name": "gen1017", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539629", + "values_compared": 2568 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1018", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539630", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1019", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539631", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1020", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539632", + "values_compared": 2647 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1021", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539633", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1022", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539634", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1023", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539635", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1024", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539636", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1025", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539637", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1026", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539638", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1027", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539639", + "values_compared": 1752 + }, + { + "max_rel_err": 0.0, + "name": "gen1028", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539640", + "values_compared": 1093 + }, + { + "max_rel_err": 0.0, + "name": "gen1029", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539641", + "values_compared": 1748 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1030", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539642", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1031", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539643", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1032", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539644", + "values_compared": 2404 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1033", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539645", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1034", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539646", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1035", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539647", + "values_compared": 2154 + }, + { + "max_rel_err": 0.0, + "name": "gen1036", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539648", + "values_compared": 911 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1037", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539649", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1038", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539650", + "values_compared": 1667 + }, + { + "max_rel_err": 0.0, + "name": "gen1039", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539651", + "values_compared": 845 + }, + { + "max_rel_err": 0.0, + "name": "gen1040", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539652", + "values_compared": 1325 + }, + { + "max_rel_err": 0.0, + "name": "gen1041", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539653", + "values_compared": 2323 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1042", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539654", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1043", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539655", + "values_compared": 1665 + }, + { + "max_rel_err": 0.0, + "name": "gen1044", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539656", + "values_compared": 2151 + }, + { + "max_rel_err": 0.0, + "name": "gen1045", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539657", + "values_compared": 1423 + }, + { + "max_rel_err": 0.0, + "name": "gen1046", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539658", + "values_compared": 1417 + }, + { + "max_rel_err": 0.0, + "name": "gen1047", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539659", + "values_compared": 2159 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1048", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539660", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen1049", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539661", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1050", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539662", + "values_compared": 1330 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1051", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539663", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1052", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539664", + "values_compared": 1667 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1053", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539665", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1054", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539666", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1055", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539667", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1056", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539668", + "values_compared": 1667 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1057", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539669", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1058", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539670", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1059", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539671", + "values_compared": 1909 + }, + { + "max_rel_err": 0.0, + "name": "gen1060", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539672", + "values_compared": 753 + }, + { + "max_rel_err": 0.0, + "name": "gen1061", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539673", + "values_compared": 1086 + }, + { + "max_rel_err": 0.0, + "name": "gen1062", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539674", + "values_compared": 1247 + }, + { + "max_rel_err": 0.0, + "name": "gen1063", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539675", + "values_compared": 1663 + }, + { + "deferred": { + "symbol": "SmFilletLaw::Evaluate", + "unit": "blend.fillet_executive_p1" + }, + "max_rel_err": 0.0, + "name": "gen1064", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539676", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1065", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539677", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1066", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539678", + "values_compared": 1988 + }, + { + "max_rel_err": 0.0, + "name": "gen1067", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539679", + "values_compared": 1406 + }, + { + "max_rel_err": 0.0, + "name": "gen1068", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539680", + "values_compared": 1915 + }, + { + "max_rel_err": 0.0, + "name": "gen1069", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539681", + "values_compared": 2005 + }, + { + "max_rel_err": 0.0, + "name": "gen1070", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539682", + "values_compared": 843 + }, + { + "max_rel_err": 0.0, + "name": "gen1071", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539683", + "values_compared": 2395 + }, + { + "max_rel_err": 0.0, + "name": "gen1072", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539684", + "values_compared": 1421 + }, + { + "max_rel_err": 0.0, + "name": "gen1073", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539685", + "values_compared": 843 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1074", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539686", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1075", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539687", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1076", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539688", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1077", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539689", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1078", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539690", + "values_compared": 1419 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1079", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539691", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1080", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539692", + "values_compared": 2153 + }, + { + "max_rel_err": 0.0, + "name": "gen1081", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539693", + "values_compared": 2651 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1082", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539694", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1083", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539695", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1084", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539696", + "values_compared": 1903 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1085", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539697", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1086", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539698", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1087", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539699", + "values_compared": 1663 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1088", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539700", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1089", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539701", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1090", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539702", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1091", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539703", + "values_compared": 1992 + }, + { + "max_rel_err": 0.0, + "name": "gen1092", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539704", + "values_compared": 2490 + }, + { + "deferred": { + "symbol": "SmFilletLaw::Evaluate", + "unit": "blend.fillet_executive_p1" + }, + "max_rel_err": 0.0, + "name": "gen1093", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539705", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1094", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539706", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1095", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539707", + "values_compared": 1665 + }, + { + "max_rel_err": 0.0, + "name": "gen1096", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539708", + "values_compared": 2481 + }, + { + "max_rel_err": 0.0, + "name": "gen1097", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539709", + "values_compared": 1841 + }, + { + "max_rel_err": 0.0, + "name": "gen1098", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539710", + "values_compared": 1667 + }, + { + "max_rel_err": 0.0, + "name": "gen1099", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539711", + "values_compared": 1913 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1100", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539712", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1101", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539713", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1102", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539714", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1103", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539715", + "values_compared": 1669 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1104", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539716", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1105", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539717", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1106", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539718", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1107", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539719", + "values_compared": 2240 + }, + { + "max_rel_err": 0.0, + "name": "gen1108", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539720", + "values_compared": 2076 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1109", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539721", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1110", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539722", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1111", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539723", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1112", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539724", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1113", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539725", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1114", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539726", + "values_compared": 2487 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1115", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539727", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1116", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539728", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1117", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539729", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1118", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539730", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1119", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539731", + "values_compared": 1423 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1120", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539732", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1121", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539733", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1122", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539734", + "values_compared": 1091 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1123", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539735", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1124", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539736", + "values_compared": 1190 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen1125", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539737", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1126", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539738", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1127", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539739", + "values_compared": 1259 + }, + { + "max_rel_err": 0.0, + "name": "gen1128", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539740", + "values_compared": 1170 + }, + { + "max_rel_err": 0.0, + "name": "gen1129", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539741", + "values_compared": 1836 + }, + { + "max_rel_err": 0.0, + "name": "gen1130", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539742", + "values_compared": 2159 + }, + { + "max_rel_err": 0.0, + "name": "gen1131", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539743", + "values_compared": 683 + }, + { + "max_rel_err": 0.0, + "name": "gen1132", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539744", + "values_compared": 1663 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1133", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539745", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1134", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539746", + "values_compared": 1663 + }, + { + "max_rel_err": 0.0, + "name": "gen1135", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539747", + "values_compared": 1281 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1136", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539748", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1137", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539749", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1138", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539750", + "values_compared": 2151 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1139", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539751", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1140", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539752", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1141", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539753", + "values_compared": 1909 + }, + { + "max_rel_err": 0.0, + "name": "gen1142", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539754", + "values_compared": 1928 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1143", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539755", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1144", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539756", + "values_compared": 692 + }, + { + "max_rel_err": 0.0, + "name": "gen1145", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539757", + "values_compared": 530 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1146", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539758", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1147", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539759", + "values_compared": 523 + }, + { + "deferred": { + "symbol": "SmFilletLaw::Evaluate", + "unit": "blend.fillet_executive_p1" + }, + "max_rel_err": 0.0, + "name": "gen1148", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539760", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1149", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539761", + "values_compared": 1504 + }, + { + "max_rel_err": 0.0, + "name": "gen1150", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539762", + "values_compared": 1999 + }, + { + "max_rel_err": 0.0, + "name": "gen1151", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539763", + "values_compared": 1419 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1152", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539764", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1153", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539765", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1154", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539766", + "values_compared": 2262 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1155", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539767", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1156", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539768", + "values_compared": 2155 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1157", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539769", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1158", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539770", + "values_compared": 2403 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen1159", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539771", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmFilletLaw::Evaluate", + "unit": "blend.fillet_executive_p1" + }, + "max_rel_err": 0.0, + "name": "gen1160", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539772", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1161", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539773", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1162", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539774", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1163", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539775", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1164", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539776", + "values_compared": 1746 + }, + { + "max_rel_err": 0.0, + "name": "gen1165", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539777", + "values_compared": 2077 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1166", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539778", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen1167", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539779", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1168", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539780", + "values_compared": 2319 + }, + { + "max_rel_err": 0.0, + "name": "gen1169", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539781", + "values_compared": 2488 + }, + { + "max_rel_err": 0.0, + "name": "gen1170", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539782", + "values_compared": 1212 + }, + { + "max_rel_err": 0.0, + "name": "gen1171", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539783", + "values_compared": 2811 + }, + { + "max_rel_err": 0.0, + "name": "gen1172", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539784", + "values_compared": 2745 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1173", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539785", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1174", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539786", + "values_compared": 1665 + }, + { + "max_rel_err": 0.0, + "name": "gen1175", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539787", + "values_compared": 766 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1176", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539788", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1177", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539789", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1178", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539790", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1179", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539791", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1180", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539792", + "values_compared": 1663 + }, + { + "max_rel_err": 0.0, + "name": "gen1181", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539793", + "values_compared": 1165 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1182", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539794", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1183", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539795", + "values_compared": 1667 + }, + { + "max_rel_err": 0.0, + "name": "gen1184", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539796", + "values_compared": 2159 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1185", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539797", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1186", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539798", + "values_compared": 1607 + }, + { + "max_rel_err": 0.0, + "name": "gen1187", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539799", + "values_compared": 1552 + }, + { + "max_rel_err": 0.0, + "name": "gen1188", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539800", + "values_compared": 1913 + }, + { + "max_rel_err": 0.0, + "name": "gen1189", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539801", + "values_compared": 1175 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1190", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539802", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1191", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539803", + "values_compared": 1911 + }, + { + "max_rel_err": 0.0, + "name": "gen1192", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539804", + "values_compared": 792 + }, + { + "max_rel_err": 0.0, + "name": "gen1193", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539805", + "values_compared": 1423 + }, + { + "max_rel_err": 0.0, + "name": "gen1194", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539806", + "values_compared": 1661 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1195", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539807", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1196", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539808", + "values_compared": 1616 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1197", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539809", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1198", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539810", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1199", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539811", + "values_compared": 1503 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1200", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539812", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1201", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539813", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1202", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539814", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1203", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539815", + "values_compared": 933 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1204", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539816", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1205", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539817", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1206", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539818", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1207", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539819", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1208", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539820", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1209", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539821", + "values_compared": 2166 + }, + { + "max_rel_err": 0.0, + "name": "gen1210", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539822", + "values_compared": 1172 + }, + { + "max_rel_err": 0.0, + "name": "gen1211", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539823", + "values_compared": 1325 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1212", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539824", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1213", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539825", + "values_compared": 1682 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1214", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539826", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1215", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539827", + "values_compared": 2643 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1216", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539828", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1217", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539829", + "values_compared": 1535 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1218", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539830", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1219", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539831", + "values_compared": 845 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1220", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539832", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1221", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539833", + "values_compared": 1839 + }, + { + "max_rel_err": 0.0, + "name": "gen1222", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539834", + "values_compared": 1907 + }, + { + "max_rel_err": 0.0, + "name": "gen1223", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539835", + "values_compared": 1163 + }, + { + "max_rel_err": 0.0, + "name": "gen1224", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539836", + "values_compared": 1413 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1225", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539837", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1226", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539838", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1227", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539839", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1228", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539840", + "values_compared": 1986 + }, + { + "max_rel_err": 0.0, + "name": "gen1229", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539841", + "values_compared": 1658 + }, + { + "max_rel_err": 0.0, + "name": "gen1230", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539842", + "values_compared": 829 + }, + { + "max_rel_err": 0.0, + "name": "gen1231", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539843", + "values_compared": 2157 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1232", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539844", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1233", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539845", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1234", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539846", + "values_compared": 609 + }, + { + "max_rel_err": 0.0, + "name": "gen1235", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539847", + "values_compared": 2157 + }, + { + "max_rel_err": 0.0, + "name": "gen1236", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539848", + "values_compared": 1353 + }, + { + "max_rel_err": 0.0, + "name": "gen1237", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539849", + "values_compared": 1665 + }, + { + "max_rel_err": 0.0, + "name": "gen1238", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539850", + "values_compared": 1165 + }, + { + "max_rel_err": 0.0, + "name": "gen1239", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539851", + "values_compared": 523 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1240", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539852", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1241", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539853", + "values_compared": 1010 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1242", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539854", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1243", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539855", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1244", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539856", + "values_compared": 2240 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1245", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539857", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1246", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539858", + "values_compared": 523 + }, + { + "max_rel_err": 0.0, + "name": "gen1247", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539859", + "values_compared": 1992 + }, + { + "max_rel_err": 0.0, + "name": "gen1248", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539860", + "values_compared": 1667 + }, + { + "max_rel_err": 0.0, + "name": "gen1249", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539861", + "values_compared": 1911 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1250", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539862", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1251", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539863", + "values_compared": 840 + }, + { + "max_rel_err": 0.0, + "name": "gen1252", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539864", + "values_compared": 2397 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1253", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539865", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1254", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539866", + "values_compared": 2230 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1255", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539867", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1256", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539868", + "values_compared": 1106 + }, + { + "max_rel_err": 0.0, + "name": "gen1257", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539869", + "values_compared": 1665 + }, + { + "max_rel_err": 0.0, + "name": "gen1258", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539870", + "values_compared": 2401 + }, + { + "max_rel_err": 0.0, + "name": "gen1259", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539871", + "values_compared": 1911 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1260", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539872", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1261", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539873", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1262", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539874", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1263", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539875", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1264", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539876", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1265", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539877", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1266", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539878", + "values_compared": 1748 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1267", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539879", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1268", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539880", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1269", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539881", + "values_compared": 1334 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1270", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539882", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1271", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539883", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1272", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539884", + "values_compared": 1408 + }, + { + "max_rel_err": 0.0, + "name": "gen1273", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539885", + "values_compared": 679 + }, + { + "max_rel_err": 0.0, + "name": "gen1274", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539886", + "values_compared": 1746 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1275", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539887", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1276", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539888", + "values_compared": 2084 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1277", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539889", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1278", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539890", + "values_compared": 2086 + }, + { + "max_rel_err": 0.0, + "name": "gen1279", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539891", + "values_compared": 2574 + }, + { + "max_rel_err": 0.0, + "name": "gen1280", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539892", + "values_compared": 1170 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1281", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539893", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1282", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539894", + "values_compared": 1910 + }, + { + "max_rel_err": 0.0, + "name": "gen1283", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539895", + "values_compared": 837 + }, + { + "max_rel_err": 0.0, + "name": "gen1284", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539896", + "values_compared": 1752 + }, + { + "max_rel_err": 0.0, + "name": "gen1285", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539897", + "values_compared": 523 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1286", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539898", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1287", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539899", + "values_compared": 1097 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1288", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539900", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1289", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539901", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1290", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539902", + "values_compared": 1330 + }, + { + "max_rel_err": 0.0, + "name": "gen1291", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539903", + "values_compared": 684 + }, + { + "max_rel_err": 0.0, + "name": "gen1292", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539904", + "values_compared": 752 + }, + { + "max_rel_err": 0.0, + "name": "gen1293", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539905", + "values_compared": 2401 + }, + { + "max_rel_err": 0.0, + "name": "gen1294", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539906", + "values_compared": 1915 + }, + { + "max_rel_err": 0.0, + "name": "gen1295", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539907", + "values_compared": 608 + }, + { + "max_rel_err": 0.0, + "name": "gen1296", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539908", + "values_compared": 845 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1297", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539909", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1298", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539910", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1299", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539911", + "values_compared": 1996 + }, + { + "max_rel_err": 0.0, + "name": "gen1300", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539912", + "values_compared": 1665 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1301", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539913", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1302", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539914", + "values_compared": 1665 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1303", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539915", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1304", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539916", + "values_compared": 2642 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1305", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539917", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen1306", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539918", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1307", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539919", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1308", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539920", + "values_compared": 1504 + }, + { + "max_rel_err": 0.0, + "name": "gen1309", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539921", + "values_compared": 2168 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1310", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539922", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1311", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539923", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1312", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539924", + "values_compared": 1413 + }, + { + "max_rel_err": 0.0, + "name": "gen1313", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539925", + "values_compared": 2656 + }, + { + "max_rel_err": 0.0, + "name": "gen1314", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539926", + "values_compared": 1913 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1315", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539927", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1316", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539928", + "values_compared": 1913 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1317", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539929", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1318", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539930", + "values_compared": 2158 + }, + { + "max_rel_err": 0.0, + "name": "gen1319", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539931", + "values_compared": 673 + }, + { + "max_rel_err": 0.0, + "name": "gen1320", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539932", + "values_compared": 2399 + }, + { + "max_rel_err": 0.0, + "name": "gen1321", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539933", + "values_compared": 1332 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1322", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539934", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1323", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539935", + "values_compared": 1246 + }, + { + "max_rel_err": 0.0, + "name": "gen1324", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539936", + "values_compared": 2645 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1325", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539937", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1326", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539938", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1327", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539939", + "values_compared": 2153 + }, + { + "max_rel_err": 0.0, + "name": "gen1328", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539940", + "values_compared": 2401 + }, + { + "max_rel_err": 0.0, + "name": "gen1329", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539941", + "values_compared": 1839 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1330", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539942", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1331", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539943", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1332", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539944", + "values_compared": 2732 + }, + { + "max_rel_err": 0.0, + "name": "gen1333", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539945", + "values_compared": 1170 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1334", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539946", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1335", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539947", + "values_compared": 1907 + }, + { + "max_rel_err": 0.0, + "name": "gen1336", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539948", + "values_compared": 843 + }, + { + "max_rel_err": 0.0, + "name": "gen1337", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539949", + "values_compared": 2401 + }, + { + "max_rel_err": 0.0, + "name": "gen1338", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539950", + "values_compared": 1723 + }, + { + "max_rel_err": 0.0, + "name": "gen1339", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539951", + "values_compared": 952 + }, + { + "max_rel_err": 0.0, + "name": "gen1340", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539952", + "values_compared": 1750 + }, + { + "max_rel_err": 0.0, + "name": "gen1341", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539953", + "values_compared": 1087 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1342", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539954", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1343", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539955", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1344", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539956", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1345", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539957", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1346", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539958", + "values_compared": 2155 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1347", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539959", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1348", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539960", + "values_compared": 1170 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1349", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539961", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1350", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539962", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1351", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539963", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1352", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539964", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1353", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539965", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1354", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539966", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1355", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539967", + "values_compared": 1913 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1356", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539968", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1357", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539969", + "values_compared": 2079 + }, + { + "max_rel_err": 0.0, + "name": "gen1358", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539970", + "values_compared": 683 + }, + { + "max_rel_err": 0.0, + "name": "gen1359", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539971", + "values_compared": 1086 + }, + { + "max_rel_err": 0.0, + "name": "gen1360", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539972", + "values_compared": 1342 + }, + { + "max_rel_err": 0.0, + "name": "gen1361", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539973", + "values_compared": 2403 + }, + { + "max_rel_err": 0.0, + "name": "gen1362", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539974", + "values_compared": 1996 + }, + { + "max_rel_err": 0.0, + "name": "gen1363", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539975", + "values_compared": 2002 + }, + { + "deferred": { + "symbol": "SmFilletLaw::Evaluate", + "unit": "blend.fillet_executive_p1" + }, + "max_rel_err": 0.0, + "name": "gen1364", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539976", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1365", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539977", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1366", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539978", + "values_compared": 2157 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1367", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539979", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1368", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539980", + "values_compared": 2484 + }, + { + "max_rel_err": 0.0, + "name": "gen1369", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539981", + "values_compared": 766 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1370", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539982", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1371", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539983", + "values_compared": 2149 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1372", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539984", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1373", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539985", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1374", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539986", + "values_compared": 1909 + }, + { + "max_rel_err": 0.0, + "name": "gen1375", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539987", + "values_compared": 679 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen1376", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539988", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1377", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539989", + "values_compared": 1325 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1378", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539990", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1379", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539991", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1380", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539992", + "values_compared": 2399 + }, + { + "max_rel_err": 0.0, + "name": "gen1381", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539993", + "values_compared": 1597 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1382", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539994", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1383", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868539995", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1384", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539996", + "values_compared": 1833 + }, + { + "max_rel_err": 0.0, + "name": "gen1385", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539997", + "values_compared": 1172 + }, + { + "max_rel_err": 0.0, + "name": "gen1386", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539998", + "values_compared": 784 + }, + { + "max_rel_err": 0.0, + "name": "gen1387", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868539999", + "values_compared": 1669 + }, + { + "max_rel_err": 0.0, + "name": "gen1388", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540000", + "values_compared": 1205 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1389", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540001", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1390", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540002", + "values_compared": 1909 + }, + { + "max_rel_err": 0.0, + "name": "gen1391", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540003", + "values_compared": 1421 + }, + { + "max_rel_err": 0.0, + "name": "gen1392", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540004", + "values_compared": 3476 + }, + { + "max_rel_err": 0.0, + "name": "gen1393", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540005", + "values_compared": 1006 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1394", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540006", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1395", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540007", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1396", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540008", + "values_compared": 1508 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen1397", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540009", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1398", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540010", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1399", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540011", + "values_compared": 1419 + }, + { + "max_rel_err": 0.0, + "name": "gen1400", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540012", + "values_compared": 1661 + }, + { + "max_rel_err": 0.0, + "name": "gen1401", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540013", + "values_compared": 1766 + }, + { + "max_rel_err": 0.0, + "name": "gen1402", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540014", + "values_compared": 1253 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1403", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540015", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1404", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540016", + "values_compared": 2161 + }, + { + "max_rel_err": 0.0, + "name": "gen1405", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540017", + "values_compared": 1011 + }, + { + "max_rel_err": 0.0, + "name": "gen1406", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540018", + "values_compared": 851 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1407", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540019", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1408", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540020", + "values_compared": 1275 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1409", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540021", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1410", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540022", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1411", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540023", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1412", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540024", + "values_compared": 1663 + }, + { + "max_rel_err": 0.0, + "name": "gen1413", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540025", + "values_compared": 1175 + }, + { + "max_rel_err": 0.0, + "name": "gen1414", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540026", + "values_compared": 1912 + }, + { + "max_rel_err": 0.0, + "name": "gen1415", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540027", + "values_compared": 1909 + }, + { + "max_rel_err": 0.0, + "name": "gen1416", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540028", + "values_compared": 1264 + }, + { + "max_rel_err": 0.0, + "name": "gen1417", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540029", + "values_compared": 1751 + }, + { + "max_rel_err": 0.0, + "name": "gen1418", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540030", + "values_compared": 1677 + }, + { + "max_rel_err": 0.0, + "name": "gen1419", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540031", + "values_compared": 775 + }, + { + "max_rel_err": 0.0, + "name": "gen1420", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540032", + "values_compared": 1663 + }, + { + "max_rel_err": 0.0, + "name": "gen1421", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540033", + "values_compared": 1686 + }, + { + "max_rel_err": 0.0, + "name": "gen1422", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540034", + "values_compared": 1248 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1423", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540035", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1424", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540036", + "values_compared": 1165 + }, + { + "max_rel_err": 0.0, + "name": "gen1425", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540037", + "values_compared": 1323 + }, + { + "max_rel_err": 0.0, + "name": "gen1426", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540038", + "values_compared": 1421 + }, + { + "deferred": { + "symbol": "SmSurface::CalculateContinuities", + "unit": "surface.surface_p6" + }, + "max_rel_err": 0.0, + "name": "gen1427", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540039", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1428", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540040", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1429", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540041", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1430", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540042", + "values_compared": 1506 + }, + { + "max_rel_err": 0.0, + "name": "gen1431", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540043", + "values_compared": 2151 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen1432", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540044", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1433", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540045", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1434", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540046", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1435", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540047", + "values_compared": 1669 + }, + { + "max_rel_err": 0.0, + "name": "gen1436", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540048", + "values_compared": 530 + }, + { + "max_rel_err": 0.0, + "name": "gen1437", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540049", + "values_compared": 768 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1438", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540050", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1439", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540051", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1440", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540052", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1441", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540053", + "values_compared": 756 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1442", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540054", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1443", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540055", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1444", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540056", + "values_compared": 1521 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1445", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540057", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1446", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540058", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1447", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540059", + "values_compared": 843 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1448", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540060", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1449", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540061", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1450", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540062", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1451", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540063", + "values_compared": 773 + }, + { + "max_rel_err": 0.0, + "name": "gen1452", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540064", + "values_compared": 926 + }, + { + "max_rel_err": 0.0, + "name": "gen1453", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540065", + "values_compared": 2153 + }, + { + "max_rel_err": 0.0, + "name": "gen1454", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540066", + "values_compared": 1766 + }, + { + "max_rel_err": 0.0, + "name": "gen1455", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540067", + "values_compared": 853 + }, + { + "max_rel_err": 0.0, + "name": "gen1456", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540068", + "values_compared": 2405 + }, + { + "max_rel_err": 0.0, + "name": "gen1457", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540069", + "values_compared": 1163 + }, + { + "max_rel_err": 0.0, + "name": "gen1458", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540070", + "values_compared": 1163 + }, + { + "max_rel_err": 0.0, + "name": "gen1459", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540071", + "values_compared": 683 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1460", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540072", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1461", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540073", + "values_compared": 1114 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1462", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540074", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::IsSingularity", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "gen1463", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540075", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1464", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540076", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1465", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540077", + "values_compared": 1996 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1466", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540078", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1467", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540079", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1468", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540080", + "values_compared": 2401 + }, + { + "max_rel_err": 0.0, + "name": "gen1469", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540081", + "values_compared": 1911 + }, + { + "max_rel_err": 0.0, + "name": "gen1470", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540082", + "values_compared": 1662 + }, + { + "max_rel_err": 0.0, + "name": "gen1471", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540083", + "values_compared": 2332 + }, + { + "max_rel_err": 0.0, + "name": "gen1472", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540084", + "values_compared": 1163 + }, + { + "max_rel_err": 0.0, + "name": "gen1473", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540085", + "values_compared": 1422 + }, + { + "max_rel_err": 0.0, + "name": "gen1474", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540086", + "values_compared": 2569 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1475", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540087", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1476", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540088", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1477", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540089", + "values_compared": 1246 + }, + { + "max_rel_err": 0.0, + "name": "gen1478", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540090", + "values_compared": 1421 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "gen1479", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540091", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1480", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540092", + "values_compared": 1504 + }, + { + "max_rel_err": 0.0, + "name": "gen1481", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540093", + "values_compared": 2244 + }, + { + "max_rel_err": 0.0, + "name": "gen1482", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540094", + "values_compared": 2000 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1483", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540095", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1484", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540096", + "values_compared": 1278 + }, + { + "max_rel_err": 0.0, + "name": "gen1485", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540097", + "values_compared": 2360 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1486", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540098", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1487", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540099", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceSolve", + "unit": "surface.surface_p3" + }, + "max_rel_err": 0.0, + "name": "gen1488", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540100", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1489", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540101", + "values_compared": 1911 + }, + { + "max_rel_err": 0.0, + "name": "gen1490", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540102", + "values_compared": 3006 + }, + { + "max_rel_err": 0.0, + "name": "gen1491", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540103", + "values_compared": 532 + }, + { + "max_rel_err": 0.0, + "name": "gen1492", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540104", + "values_compared": 922 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1493", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540105", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1494", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540106", + "values_compared": 606 + }, + { + "deferred": { + "symbol": "SmSurface::LocalSurfaceIntersect", + "unit": "surface.surface_p11" + }, + "max_rel_err": 0.0, + "name": "gen1495", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540107", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1496", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540108", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "gen1497", + "outcome": "deferred", + "pass": false, + "source": "generated:seed=6023563590868540109", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "gen1498", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540110", + "values_compared": 1913 + }, + { + "max_rel_err": 0.0, + "name": "gen1499", + "outcome": "pass", + "pass": true, + "source": "generated:seed=6023563590868540111", + "values_compared": 1017 + }, + { + "max_rel_err": 0.0, + "name": "edge_end_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2143 + }, + { + "max_rel_err": 0.0, + "name": "edge_through_points_extension", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2398 + }, + { + "max_rel_err": 0.0, + "name": "edge_extension_clip_past_last_through", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2061 + }, + { + "max_rel_err": 0.0, + "name": "edge_start_points", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2315 + }, + { + "max_rel_err": 0.0, + "name": "edge_closed_curve", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2143 + }, + { + "max_rel_err": 0.0, + "name": "edge_end_point_single_span_seam", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 1971 + }, + { + "max_rel_err": 0.0, + "name": "edge_boundary_exit", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 1971 + }, + { + "max_rel_err": 0.0, + "name": "edge_start_on_boundary_along", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2057 + }, + { + "max_rel_err": 0.0, + "name": "edge_rejected_tests", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 995 + }, + { + "max_rel_err": 0.0, + "name": "edge_next_points", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2061 + }, + { + "max_rel_err": 0.0, + "name": "edge_next_good_from_tangent_point", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 2803 + }, + { + "max_rel_err": 0.0, + "name": "edge_next_tangent_point_tight_angle", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 1986 + }, + { + "max_rel_err": 0.0, + "name": "edge_split_zero_normals", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 983 + }, + { + "max_rel_err": 0.0, + "name": "edge_fbsp_far_box", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 1643 + }, + { + "max_rel_err": 0.0, + "name": "edge_fbsp_no_edges", + "outcome": "pass", + "pass": true, + "source": "inline", + "values_compared": 1643 + }, + { + "deferred": { + "symbol": "SmSurface::GlobalCurveIntersect", + "unit": "surface.surface_p8" + }, + "max_rel_err": 0.0, + "name": "edge_fbsp_meeting", + "outcome": "deferred", + "pass": false, + "source": "inline", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::CreateIsoParametricCurve", + "unit": "surface.plane_p1" + }, + "max_rel_err": 0.0, + "name": "edge_fbsp_plane_edges", + "outcome": "deferred", + "pass": false, + "source": "inline", + "values_compared": 0 + } + ], + "cases_both_errored": 0, + "cases_deferred": 676, + "cases_failed": 0, + "cases_passed": 851, + "cases_total": 1527, + "deferred_by_unit": { + "blend.fillet_executive_p1": 13, + "surface.plane_p1": 64, + "surface.surface_p11": 353, + "surface.surface_p3": 135, + "surface.surface_p5": 28, + "surface.surface_p6": 4, + "surface.surface_p8": 79 + }, + "max_rel_err": 0.0, + "pass": true, + "rel_tol": 1e-9, + "seeds": 16, + "status": "partial", + "unit": "intersect.surface_intersector_p3" +} From 2afdcdb1fe3aaea2b31a23aa55bc90baec290b2c Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 13:19:38 -0400 Subject: [PATCH 38/54] intersect.curve_class_p1: review fixes (clippy with cpp, adversarial fixtures) Fix the 11 clippy errors in the runner that the CI "Clippy with the C++ feature" step reports (identical match arms, needless range loop, unchecked indexing, range_plus_one, default_trait_access) without changing the RNG call order, so the generated cases are unchanged. Add the reviewer's 75 adversarial cases as fixtures (UV trim curves, huge/tiny scale, analytic source curves, containers past MIN_ARRAY_SIZE). Tidy a comment rustfmt had misindented in get_cci_surface_gaps. PARTIAL cases=2088 passed=1908 failed=0 deferred=180; --perturb 1908/1908. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm --- .../src/units/intersect_curve_class_p1.rs | 35 +- .../solidcore/src/intersect/curve_class/p1.rs | 5 +- .../intersect.curve_class_p1/adversarial.json | 19699 ++++++++++++++++ plan/findings.md | 17 + plan/modules.toml | 2 +- .../difftest/intersect.curve_class_p1.json | 687 +- 6 files changed, 20426 insertions(+), 19 deletions(-) create mode 100644 fixtures/intersect.curve_class_p1/adversarial.json diff --git a/crates/difftest/src/units/intersect_curve_class_p1.rs b/crates/difftest/src/units/intersect_curve_class_p1.rs index c994de8b06..e900d1b63e 100644 --- a/crates/difftest/src/units/intersect_curve_class_p1.rs +++ b/crates/difftest/src/units/intersect_curve_class_p1.rs @@ -1757,7 +1757,6 @@ fn gen_objects(rng: &mut Rng) -> Vec { fn gen_tol(rng: &mut Rng) -> f64 { match rng.below(8) { 0 => USE_DEFAULT, - 1 => 1e-5, 2 => 1e-3, 3 => 1e-8, 4 => 0.0, @@ -1933,11 +1932,11 @@ fn gen_script(rng: &mut Rng) -> Script { let mut sizes = [0usize; 2]; let topo = rng.chance(0.15); // set up both classifications most of the time - for t in 0..2 { + for (t, size) in sizes.iter_mut().enumerate() { if rng.chance(0.8) { let n = 1 + rng.below(4) as usize; ops.push(OpIn::SetSize { t, n }); - sizes[t] = n; + *size = n; let curves = of_kind(&objects, kind::CURVE); ops.push(OpIn::SetCurve { t, obj: pick(rng, &curves), owned: rng.chance(0.2) }); if rng.chance(0.7) { @@ -1962,11 +1961,14 @@ fn gen_script(rng: &mut Rng) -> Script { 0..=9 => { for _ in 0..(2 + rng.below(14)) { let t = rng.below(2) as usize; - let op = gen_container_op(rng, &objects, t, sizes[t], topo); - match &op { - OpIn::SetSize { n, .. } => sizes[t] = *n, - OpIn::RemoveAt { .. } => sizes[t] = sizes[t].saturating_sub(1), - _ => {} + let size = sizes.get(t).copied().unwrap_or(0); + let op = gen_container_op(rng, &objects, t, size, topo); + if let Some(slot) = sizes.get_mut(t) { + match &op { + OpIn::SetSize { n, .. } => *slot = *n, + OpIn::RemoveAt { .. } => *slot = slot.saturating_sub(1), + _ => {} + } } ops.push(op); } @@ -1991,9 +1993,15 @@ fn gen_script(rng: &mut Rng) -> Script { 2 => uvs.push(uv[1]), 3 => { // the B-spline surface of the pool as a second surface - if let Some(b) = of_kind(&objects, kind::BSURF).first() { - srf[1] = Some(*b); - uvs[1] = surf_uv(rng, &objects[*b]); + let bsurf = of_kind(&objects, kind::BSURF).first().copied(); + if let Some((b, obj)) = bsurf.and_then(|b| Some((b, objects.get(b)?))) { + if let Some(slot) = srf.get_mut(1) { + *slot = Some(b); + } + let q = surf_uv(rng, obj); + if let Some(slot) = uvs.get_mut(1) { + *slot = q; + } } } _ => {} @@ -2051,7 +2059,7 @@ fn gen_script(rng: &mut Rng) -> Script { .chain(of_kind(&objects, kind::BSURF)) .collect(); let all: Vec = (0..objects.len()).collect(); - for _ in 0..(1 + rng.below(6)) { + for _ in 0..=rng.below(6) { let t = rng.below(2) as usize; let op = match rng.below(5) { 0 | 1 => { @@ -2423,7 +2431,8 @@ mod dump { #[ignore = "debugging aid"] fn coverage_stats() { let k = Kernel::default(); - let mut stats: std::collections::BTreeMap = Default::default(); + let mut stats: std::collections::BTreeMap = + std::collections::BTreeMap::default(); let mut bump = |s: String| *stats.entry(s).or_default() += 1; for i in 0..MIN_GENERATED { let mut rng = Rng::new(CaseContext::seed_for("intersect.curve_class_p1", i)); diff --git a/crates/solidcore/src/intersect/curve_class/p1.rs b/crates/solidcore/src/intersect/curve_class/p1.rs index fca059f0d0..a357519e09 100644 --- a/crates/solidcore/src/intersect/curve_class/p1.rs +++ b/crates/solidcore/src/intersect/curve_class/p1.rs @@ -1413,8 +1413,9 @@ pub fn get_cci_surface_gaps( uv_curves: &[Option<&Curve>], edge_surface_count: usize, ) -> Result { - let _ = edge_surface_count; // NotUsed - // init output + // NotUsed + let _ = edge_surface_count; + // init output let mut out = CciSurfaceGaps { success: false, curve_edge_gap: class_curve_point.distance(edge_curve_point), diff --git a/fixtures/intersect.curve_class_p1/adversarial.json b/fixtures/intersect.curve_class_p1/adversarial.json new file mode 100644 index 0000000000..64429e635f --- /dev/null +++ b/fixtures/intersect.curve_class_p1/adversarial.json @@ -0,0 +1,19699 @@ +{ + "cases": [ + { + "name": "adv_xsect_unit_uv0_p0.5", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "prm": 0.5, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.5 + } + ] + } + }, + { + "name": "adv_xsect_unit_uv0_p0.37", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.37, + 0.5 + ], + [ + 0.37, + 0.5 + ] + ], + "prm": 0.37, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.37 + } + ] + } + }, + { + "name": "adv_xsect_unit_uv0_p0.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.0, + 0.5 + ], + [ + 0.0, + 0.5 + ] + ], + "prm": 0.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.0 + } + ] + } + }, + { + "name": "adv_xsect_unit_uv0_p1.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1.0, + 0.5 + ], + [ + 1.0, + 0.5 + ] + ], + "prm": 1.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.0 + } + ] + } + }, + { + "name": "adv_xsect_unit_uv0_p1.7", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1, + 0.5 + ], + [ + 1, + 0.5 + ] + ], + "prm": 1.7, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.7 + } + ] + } + }, + { + "name": "adv_xsect_unit_uv1_p0.5", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "prm": 0.5, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.5 + } + ] + } + }, + { + "name": "adv_xsect_unit_uv1_p0.37", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.37, + 0.5 + ], + [ + 0.37, + 0.5 + ] + ], + "prm": 0.37, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.37 + } + ] + } + }, + { + "name": "adv_xsect_unit_uv1_p0.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.0, + 0.5 + ], + [ + 0.0, + 0.5 + ] + ], + "prm": 0.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.0 + } + ] + } + }, + { + "name": "adv_xsect_unit_uv1_p1.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1.0, + 0.5 + ], + [ + 1.0, + 0.5 + ] + ], + "prm": 1.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.0 + } + ] + } + }, + { + "name": "adv_xsect_unit_uv1_p1.7", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1, + 0.5 + ], + [ + 1, + 0.5 + ] + ], + "prm": 1.7, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.7 + } + ] + } + }, + { + "name": "adv_xsect_unit_uv2_p0.5", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "prm": 0.5, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.5 + } + ] + } + }, + { + "name": "adv_xsect_unit_uv2_p0.37", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.37, + 0.5 + ], + [ + 0.37, + 0.5 + ] + ], + "prm": 0.37, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.37 + } + ] + } + }, + { + "name": "adv_xsect_unit_uv2_p0.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.0, + 0.5 + ], + [ + 0.0, + 0.5 + ] + ], + "prm": 0.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.0 + } + ] + } + }, + { + "name": "adv_xsect_unit_uv2_p1.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1.0, + 0.5 + ], + [ + 1.0, + 0.5 + ] + ], + "prm": 1.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.0 + } + ] + } + }, + { + "name": "adv_xsect_unit_uv2_p1.7", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1, + 0.5 + ], + [ + 1, + 0.5 + ] + ], + "prm": 1.7, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.7 + } + ] + } + }, + { + "name": "adv_apply_unit_uv1.2", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_src_tol", + "t": 0, + "tol": 1e-05 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 1.2, + 0.5 + ], + [ + 1.2, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 1.2, + 0.25, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + } + ] + } + }, + { + "name": "adv_apply_unit_uv-0.3", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_src_tol", + "t": 0, + "tol": 1e-05 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + -0.3, + 0.5 + ], + [ + -0.3, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + -0.3, + 0.25, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + } + ] + } + }, + { + "name": "adv_apply_unit_uv0.5", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 0.001, + -1.7976931348623157e+308 + ], + [ + 3.3333333333333335, + 0, + 0.0013000000000000002, + -1.7976931348623157e+308 + ], + [ + 6.666666666666667, + 0, + 0.0007, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 0.001, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + -1.0, + 0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 1.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10.0, + 0, + -1.0, + -1.7976931348623157e+308 + ], + [ + 10.0, + 0, + 1.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_src_tol", + "t": 0, + "tol": 1e-05 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 0.5, + 0.25, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + } + ] + } + }, + { + "name": "adv_xsect_huge_uv0_p0.5", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "prm": 0.5, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.5 + } + ] + } + }, + { + "name": "adv_xsect_huge_uv0_p0.37", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.37, + 0.5 + ], + [ + 0.37, + 0.5 + ] + ], + "prm": 0.37, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.37 + } + ] + } + }, + { + "name": "adv_xsect_huge_uv0_p0.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.0, + 0.5 + ], + [ + 0.0, + 0.5 + ] + ], + "prm": 0.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.0 + } + ] + } + }, + { + "name": "adv_xsect_huge_uv0_p1.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1.0, + 0.5 + ], + [ + 1.0, + 0.5 + ] + ], + "prm": 1.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.0 + } + ] + } + }, + { + "name": "adv_xsect_huge_uv0_p1.7", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1, + 0.5 + ], + [ + 1, + 0.5 + ] + ], + "prm": 1.7, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.7 + } + ] + } + }, + { + "name": "adv_xsect_huge_uv1_p0.5", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "prm": 0.5, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.5 + } + ] + } + }, + { + "name": "adv_xsect_huge_uv1_p0.37", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.37, + 0.5 + ], + [ + 0.37, + 0.5 + ] + ], + "prm": 0.37, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.37 + } + ] + } + }, + { + "name": "adv_xsect_huge_uv1_p0.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.0, + 0.5 + ], + [ + 0.0, + 0.5 + ] + ], + "prm": 0.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.0 + } + ] + } + }, + { + "name": "adv_xsect_huge_uv1_p1.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1.0, + 0.5 + ], + [ + 1.0, + 0.5 + ] + ], + "prm": 1.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.0 + } + ] + } + }, + { + "name": "adv_xsect_huge_uv1_p1.7", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1, + 0.5 + ], + [ + 1, + 0.5 + ] + ], + "prm": 1.7, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.7 + } + ] + } + }, + { + "name": "adv_xsect_huge_uv2_p0.5", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "prm": 0.5, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.5 + } + ] + } + }, + { + "name": "adv_xsect_huge_uv2_p0.37", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.37, + 0.5 + ], + [ + 0.37, + 0.5 + ] + ], + "prm": 0.37, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.37 + } + ] + } + }, + { + "name": "adv_xsect_huge_uv2_p0.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.0, + 0.5 + ], + [ + 0.0, + 0.5 + ] + ], + "prm": 0.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.0 + } + ] + } + }, + { + "name": "adv_xsect_huge_uv2_p1.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1.0, + 0.5 + ], + [ + 1.0, + 0.5 + ] + ], + "prm": 1.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.0 + } + ] + } + }, + { + "name": "adv_xsect_huge_uv2_p1.7", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1, + 0.5 + ], + [ + 1, + 0.5 + ] + ], + "prm": 1.7, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.7 + } + ] + } + }, + { + "name": "adv_apply_huge_uv1.2", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_src_tol", + "t": 0, + "tol": 1e-05 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 1.2, + 0.5 + ], + [ + 1.2, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 1.2, + 0.25, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + } + ] + } + }, + { + "name": "adv_apply_huge_uv-0.3", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_src_tol", + "t": 0, + "tol": 1e-05 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + -0.3, + 0.5 + ], + [ + -0.3, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + -0.3, + 0.25, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + } + ] + } + }, + { + "name": "adv_apply_huge_uv0.5", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 100.0, + -1.7976931348623157e+308 + ], + [ + 333333.3333333333, + 0, + 130.0, + -1.7976931348623157e+308 + ], + [ + 666666.6666666666, + 0, + 70.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100.0, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + -100000.0, + 0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 100000.0, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 1000000.0, + 0, + -100000.0, + -1.7976931348623157e+308 + ], + [ + 1000000.0, + 0, + 100000.0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_src_tol", + "t": 0, + "tol": 1e-05 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 0.5, + 0.25, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv0_p0.5", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "prm": 0.5, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.5 + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv0_p0.37", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.37, + 0.5 + ], + [ + 0.37, + 0.5 + ] + ], + "prm": 0.37, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.37 + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv0_p0.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.0, + 0.5 + ], + [ + 0.0, + 0.5 + ] + ], + "prm": 0.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.0 + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv0_p1.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1.0, + 0.5 + ], + [ + 1.0, + 0.5 + ] + ], + "prm": 1.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.0 + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv0_p1.7", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1, + 0.5 + ], + [ + 1, + 0.5 + ] + ], + "prm": 1.7, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.7 + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv1_p0.5", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "prm": 0.5, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.5 + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv1_p0.37", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.37, + 0.5 + ], + [ + 0.37, + 0.5 + ] + ], + "prm": 0.37, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.37 + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv1_p0.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.0, + 0.5 + ], + [ + 0.0, + 0.5 + ] + ], + "prm": 0.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.0 + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv1_p1.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1.0, + 0.5 + ], + [ + 1.0, + 0.5 + ] + ], + "prm": 1.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.0 + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv1_p1.7", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [ + 3 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1, + 0.5 + ], + [ + 1, + 0.5 + ] + ], + "prm": 1.7, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.7 + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv2_p0.5", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "prm": 0.5, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.5 + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv2_p0.37", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.37, + 0.5 + ], + [ + 0.37, + 0.5 + ] + ], + "prm": 0.37, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.37 + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv2_p0.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.0, + 0.5 + ], + [ + 0.0, + 0.5 + ] + ], + "prm": 0.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 0.0 + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv2_p1.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1.0, + 0.5 + ], + [ + 1.0, + 0.5 + ] + ], + "prm": 1.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.0 + } + ] + } + }, + { + "name": "adv_xsect_tiny_uv2_p1.7", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-09, + "uvc": [ + 3, + 4 + ], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 1, + 0.5 + ], + [ + 1, + 0.5 + ] + ], + "prm": 1.7, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "classify_crv_loc", + "t": 0, + "j": 0, + "w": 0, + "prm": 1.7 + } + ] + } + }, + { + "name": "adv_apply_tiny_uv1.2", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_src_tol", + "t": 0, + "tol": 1e-05 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 1.2, + 0.5 + ], + [ + 1.2, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 1.2, + 0.25, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + } + ] + } + }, + { + "name": "adv_apply_tiny_uv-0.3", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_src_tol", + "t": 0, + "tol": 1e-05 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + -0.3, + 0.5 + ], + [ + -0.3, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + -0.3, + 0.25, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + } + ] + } + }, + { + "name": "adv_apply_tiny_uv0.5", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "bspline": { + "dim": 3, + "p": 3, + "cpts": [ + [ + 0, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ], + [ + 0.0003333333333333333, + 0, + 1.3000000000000003e-07, + -1.7976931348623157e+308 + ], + [ + 0.0006666666666666666, + 0, + 7e-08, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 1.0000000000000001e-07, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + -0.0001, + 0, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0.0001, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ], + [ + [ + 0.001, + 0, + -0.0001, + -1.7976931348623157e+308 + ], + [ + 0.001, + 0, + 0.0001, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.5001, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.4999, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + }, + { + "curve": { + "bspline": { + "dim": 2, + "p": 3, + "cpts": [ + [ + 0, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.3333333333333333, + 0.50065, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 0.6666666666666666, + 0.50035, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ], + [ + 1, + 0.5005, + 1.7976931348623157e+308, + -1.7976931348623157e+308 + ] + ], + "u": [ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + } + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "set_src_tol", + "t": 0, + "tol": 1e-05 + }, + { + "op": "ivl_set", + "t": 0, + "j": 0, + "a": 0.0, + "b": 1.0 + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 0.5, + 0.25, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + } + ] + } + }, + { + "name": "adv_xsect_line_x5.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "line": { + "p": [ + 0, + 0, + 0.001 + ], + "v": [ + 1, + 0, + 0 + ], + "domain": [ + 0.0, + 10.0 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "prm": 5.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "angle", + "t": 0, + "c1": 0, + "t1": 5.0, + "c2": 0, + "t2": 5.0, + "dev": 0.0 + } + ] + } + }, + { + "name": "adv_apply_line_x5.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "line": { + "p": [ + 0, + 0, + 0.001 + ], + "v": [ + 1, + 0, + 0 + ], + "domain": [ + 0.0, + 10.0 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 5.0, + 0.0, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_pc_params", + "t": 0, + "mids": true + } + ] + } + }, + { + "name": "adv_xsect_line_x3.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "line": { + "p": [ + 0, + 0, + 0.001 + ], + "v": [ + 1, + 0, + 0 + ], + "domain": [ + 0.0, + 10.0 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.3, + 0.5 + ], + [ + 0.3, + 0.5 + ] + ], + "prm": 5.0, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "angle", + "t": 0, + "c1": 0, + "t1": 5.0, + "c2": 0, + "t2": 5.0, + "dev": 0.0 + } + ] + } + }, + { + "name": "adv_apply_line_x3.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "line": { + "p": [ + 0, + 0, + 0.001 + ], + "v": [ + 1, + 0, + 0 + ], + "domain": [ + 0.0, + 10.0 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 0.3, + 0.5 + ], + [ + 0.3, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 5.0, + 0.0, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_pc_params", + "t": 0, + "mids": true + } + ] + } + }, + { + "name": "adv_xsect_line_scaled_x5.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "line": { + "p": [ + 0, + 0, + 0.001 + ], + "v": [ + 2, + 0, + 0 + ], + "domain": [ + -1.0, + 7.0 + ], + "scale": 2.0 + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "prm": 2.5, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "angle", + "t": 0, + "c1": 0, + "t1": 2.5, + "c2": 0, + "t2": 2.5, + "dev": 0.0 + } + ] + } + }, + { + "name": "adv_apply_line_scaled_x5.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "line": { + "p": [ + 0, + 0, + 0.001 + ], + "v": [ + 2, + 0, + 0 + ], + "domain": [ + -1.0, + 7.0 + ], + "scale": 2.0 + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 2.5, + 0.0, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_pc_params", + "t": 0, + "mids": true + } + ] + } + }, + { + "name": "adv_xsect_line_scaled_x3.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "line": { + "p": [ + 0, + 0, + 0.001 + ], + "v": [ + 2, + 0, + 0 + ], + "domain": [ + -1.0, + 7.0 + ], + "scale": 2.0 + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.3, + 0.5 + ], + [ + 0.3, + 0.5 + ] + ], + "prm": 2.5, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "angle", + "t": 0, + "c1": 0, + "t1": 2.5, + "c2": 0, + "t2": 2.5, + "dev": 0.0 + } + ] + } + }, + { + "name": "adv_apply_line_scaled_x3.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "line": { + "p": [ + 0, + 0, + 0.001 + ], + "v": [ + 2, + 0, + 0 + ], + "domain": [ + -1.0, + 7.0 + ], + "scale": 2.0 + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 0.3, + 0.5 + ], + [ + 0.3, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 2.5, + 0.0, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_pc_params", + "t": 0, + "mids": true + } + ] + } + }, + { + "name": "adv_xsect_circle_x5.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "conic": { + "center": [ + 5, + 0, + -1000.0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "domain": [ + 1.5667963267948966, + 1.5747963267948966 + ], + "rx": 999.999, + "ry": null + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "prm": 1.5707963267948966, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "angle", + "t": 0, + "c1": 0, + "t1": 1.5707963267948966, + "c2": 0, + "t2": 1.5707963267948966, + "dev": 0.0 + } + ] + } + }, + { + "name": "adv_apply_circle_x5.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "conic": { + "center": [ + 5, + 0, + -1000.0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "domain": [ + 1.5667963267948966, + 1.5747963267948966 + ], + "rx": 999.999, + "ry": null + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 1.5707963267948966, + 0.0, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_pc_params", + "t": 0, + "mids": true + } + ] + } + }, + { + "name": "adv_xsect_circle_x3.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "conic": { + "center": [ + 5, + 0, + -1000.0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "domain": [ + 1.5667963267948966, + 1.5747963267948966 + ], + "rx": 999.999, + "ry": null + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.3, + 0.5 + ], + [ + 0.3, + 0.5 + ] + ], + "prm": 1.5707963267948966, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "angle", + "t": 0, + "c1": 0, + "t1": 1.5707963267948966, + "c2": 0, + "t2": 1.5707963267948966, + "dev": 0.0 + } + ] + } + }, + { + "name": "adv_apply_circle_x3.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "conic": { + "center": [ + 5, + 0, + -1000.0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "domain": [ + 1.5667963267948966, + 1.5747963267948966 + ], + "rx": 999.999, + "ry": null + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 0.3, + 0.5 + ], + [ + 0.3, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 1.5707963267948966, + 0.0, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_pc_params", + "t": 0, + "mids": true + } + ] + } + }, + { + "name": "adv_xsect_ellipse_x5.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "conic": { + "center": [ + 5, + 0, + -1000.0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "domain": [ + 1.5667963267948966, + 1.5747963267948966 + ], + "rx": 2000.0, + "ry": 999.999 + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "prm": 1.5707963267948966, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "angle", + "t": 0, + "c1": 0, + "t1": 1.5707963267948966, + "c2": 0, + "t2": 1.5707963267948966, + "dev": 0.0 + } + ] + } + }, + { + "name": "adv_apply_ellipse_x5.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "conic": { + "center": [ + 5, + 0, + -1000.0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "domain": [ + 1.5667963267948966, + 1.5747963267948966 + ], + "rx": 2000.0, + "ry": 999.999 + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 1.5707963267948966, + 0.0, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_pc_params", + "t": 0, + "mids": true + } + ] + } + }, + { + "name": "adv_xsect_ellipse_x3.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "conic": { + "center": [ + 5, + 0, + -1000.0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "domain": [ + 1.5667963267948966, + 1.5747963267948966 + ], + "rx": 2000.0, + "ry": 999.999 + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.3, + 0.5 + ], + [ + 0.3, + 0.5 + ] + ], + "prm": 1.5707963267948966, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "angle", + "t": 0, + "c1": 0, + "t1": 1.5707963267948966, + "c2": 0, + "t2": 1.5707963267948966, + "dev": 0.0 + } + ] + } + }, + { + "name": "adv_apply_ellipse_x3.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "conic": { + "center": [ + 5, + 0, + -1000.0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "domain": [ + 1.5667963267948966, + 1.5747963267948966 + ], + "rx": 2000.0, + "ry": 999.999 + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 0.3, + 0.5 + ], + [ + 0.3, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 1.5707963267948966, + 0.0, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_pc_params", + "t": 0, + "mids": true + } + ] + } + }, + { + "name": "adv_xsect_hermite_x5.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "hermite": { + "dim": 3, + "p1": [ + 0, + 0, + 0.001 + ], + "d1": [ + 10, + 0, + 0 + ], + "p2": [ + 10, + 0, + 0.001 + ], + "d2": [ + 10, + 0, + 0 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ], + "prm": 0.5, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "angle", + "t": 0, + "c1": 0, + "t1": 0.5, + "c2": 0, + "t2": 0.5, + "dev": 0.0 + } + ] + } + }, + { + "name": "adv_apply_hermite_x5.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "hermite": { + "dim": 3, + "p1": [ + 0, + 0, + 0.001 + ], + "d1": [ + 10, + 0, + 0 + ], + "p2": [ + 10, + 0, + 0.001 + ], + "d2": [ + 10, + 0, + 0 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 0.5, + 0.0, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_pc_params", + "t": 0, + "mids": true + } + ] + } + }, + { + "name": "adv_xsect_hermite_x3.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "hermite": { + "dim": 3, + "p1": [ + 0, + 0, + 0.001 + ], + "d1": [ + 10, + 0, + 0 + ], + "p2": [ + 10, + 0, + 0.001 + ], + "d2": [ + 10, + 0, + 0 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "xsect_curve", + "t": 0, + "c": 0, + "tol": 1e-05, + "uvc": [], + "srf": [ + 1, + 2 + ], + "uv": [ + [ + 0.3, + 0.5 + ], + [ + 0.3, + 0.5 + ] + ], + "prm": 0.5, + "dev": -7.0, + "p": [ + 0, + 0, + 0 + ] + }, + { + "op": "angle", + "t": 0, + "c1": 0, + "t1": 0.5, + "c2": 0, + "t2": 0.5, + "dev": 0.0 + } + ] + } + }, + { + "name": "adv_apply_hermite_x3.0", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case", + "inputs": { + "objects": [ + { + "curve": { + "hermite": { + "dim": 3, + "p1": [ + 0, + 0, + 0.001 + ], + "d1": [ + 10, + 0, + 0 + ], + "p2": [ + 10, + 0, + 0.001 + ], + "d2": [ + 10, + 0, + 0 + ] + } + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 0, + 1, + 0, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + -1, + 0, + -1.7976931348623157e+308 + ], + [ + 10, + 1, + 0, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + }, + { + "bsurf": { + "oob": false, + "net": [ + [ + [ + 0, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 0, + 0, + 1, + -1.7976931348623157e+308 + ] + ], + [ + [ + 10, + 0, + -1, + -1.7976931348623157e+308 + ], + [ + 10, + 0, + 1, + -1.7976931348623157e+308 + ] + ] + ], + "p": 1, + "q": 1, + "u": [ + 0, + 0, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 1 + }, + { + "op": "set_curve", + "t": 0, + "obj": 0, + "owned": false + }, + { + "op": "apply", + "t": 0, + "use_cc": true, + "edge": null, + "emate": null, + "srf": [ + 1, + 2, + null, + null + ], + "uv": [ + [ + 0.3, + 0.5 + ], + [ + 0.3, + 0.5 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "sol": [ + 0.5, + 0.0, + 0.0001 + ], + "sss": [ + 0, + 0, + 0 + ] + }, + { + "op": "set_pc_params", + "t": 0, + "mids": true + } + ] + } + }, + { + "name": "adv_containers_grow", + "upstream_ref": "source/SMLib/src/SmCurveClass.cpp:5378,5409 (SmCurveClassification::RemoveAt/SetSize past MIN_ARRAY_SIZE); review adversarial case", + "inputs": { + "objects": [ + { + "point": [ + 0, + 0, + 0 + ] + } + ], + "ops": [ + { + "op": "set_size", + "t": 0, + "n": 3 + }, + { + "op": "set_src_tol", + "t": 0, + "tol": 3e-05 + }, + { + "op": "ivl_new", + "t": 0, + "j": 1, + "with": true, + "owner": true, + "a": 0.1, + "b": 0.2 + }, + { + "op": "set_size", + "t": 0, + "n": 20 + }, + { + "op": "ivl_tols", + "t": 0, + "j": 19 + }, + { + "op": "ivl_tols", + "t": 0, + "j": 1 + }, + { + "op": "set_size", + "t": 0, + "n": 2 + }, + { + "op": "set_size", + "t": 0, + "n": 17 + }, + { + "op": "ivl_tols", + "t": 0, + "j": 16 + }, + { + "op": "remove_at", + "t": 0, + "j": 40 + }, + { + "op": "remove_at", + "t": 0, + "j": 0 + }, + { + "op": "set_size", + "t": 0, + "n": 40 + }, + { + "op": "ivl_tols", + "t": 0, + "j": 39 + }, + { + "op": "squeeze_end", + "t": 0, + "j": 38 + }, + { + "op": "set_size", + "t": 0, + "n": 0 + }, + { + "op": "set_size", + "t": 0, + "n": 5 + }, + { + "op": "ivl_tols", + "t": 0, + "j": 4 + }, + { + "op": "sub_interval", + "t": 0, + "j": 4 + } + ] + } + } + ] +} diff --git a/plan/findings.md b/plan/findings.md index c71bad74ff..84ad9f99c4 100644 --- a/plan/findings.md +++ b/plan/findings.md @@ -3165,3 +3165,20 @@ cases, 169 deferred; `SmSurface::EvaluateNormal` and `DropVectors` now call the plane's NURB (`GetGwNurbPointer` on an `SmBSplineSurface`); the port's plane makes its NURB lazily, so the test uses `Plane::base_for_query`. Found once the generator put planes on aux start nodes (the FFI had rejected them; upstream handles them). + +## intersect.curve_class_p1 (`SmCurveClassification`, part 1, PR #47 review, 2026-10-14) + +- **CI red on clippy with the C++ feature.** `cargo clippy --workspace --all-targets + --features difftest/cpp -- -D warnings` reported 11 errors in the runner + (`crates/difftest/src/units/intersect_curve_class_p1.rs`: identical match arms in + `gen_tol`, needless range loop and unchecked indexing in `gen_script`, `range_plus_one`, + `default_trait_access`). A plain `cargo clippy` does not build the `cpp`-gated + runner, so run clippy with `--features difftest/cpp` too. Fixed without changing the RNG call order: the + generated cases are identical in name, value count and outcome. +- **UV trim curves only reached by fixtures.** The generator always passes `uvc: []` to + `xsect_curve`, so `SetIntersectionCurveThroughPoint` with UV trim curves is covered + only by `fixtures/intersect.curve_class_p1/adversarial.json` (75 cases: UV-curve, + huge/tiny-scale and out-of-range-UV xsect/apply cases, analytic Line/Circle/Ellipse/ + Hermite source curves, a container case past `MIN_ARRAY_SIZE`). At unit and huge scale + the UV-curve cases defer on `SmSurface::LocalPointSolve` (`surface.surface_p5`, 20 + cases); only the tiny-scale ones are compared until that unit lands. diff --git a/plan/modules.toml b/plan/modules.toml index c2be3bcee7..d90c1986a7 100644 --- a/plan/modules.toml +++ b/plan/modules.toml @@ -1988,7 +1988,7 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test: status = "partial" claimed_by = "" claimed_at = "" -notes = "partial (PR #47): difftest 2013 cases, 1853 pass, 160 deferred (surface.surface_p1 79, surface.surface_p4 54, topology.face_p2 10, topology.edge 9, intersect.curve_class_p4 6, topology.vertex 2), max_rel_err 0; 71 fns; largest: sm_ApplyPointSolution, sm_SetXSectEdgeThroughPoint, sm_MakeConsistentClassifications, sm_SetXSectCurveThroughPoint; cycle back-edges (call into later units; stub or co-port): topology.edge(14), topology.face_p2(4), topology.edgeuse_p1(3), boolean.topology_intersector_p1(2), topology.vertex(2), query.face_p2(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit" +notes = "partial (PR #47): difftest 2088 cases (2013 generated/usage + 75 adversarial review fixtures), 1908 pass, 0 fail, 180 deferred (surface.surface_p1 79, surface.surface_p4 54, surface.surface_p5 20, topology.face_p2 10, topology.edge 9, intersect.curve_class_p4 6, topology.vertex 2), max_rel_err 0; --perturb 1908/1908 detected; 71 fns; largest: sm_ApplyPointSolution, sm_SetXSectEdgeThroughPoint, sm_MakeConsistentClassifications, sm_SetXSectCurveThroughPoint; cycle back-edges (call into later units; stub or co-port): topology.edge(14), topology.face_p2(4), topology.edgeuse_p1(3), boolean.topology_intersector_p1(2), topology.vertex(2), query.face_p2(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit" [[unit]] id = "intersect.surface_drop_lib_p1" diff --git a/reports/difftest/intersect.curve_class_p1.json b/reports/difftest/intersect.curve_class_p1.json index a65d9dc90e..9d829abd83 100644 --- a/reports/difftest/intersect.curve_class_p1.json +++ b/reports/difftest/intersect.curve_class_p1.json @@ -1,6 +1,686 @@ { "abs_floors": [], "cases": [ + { + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv0_p0.5", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#0 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv0_p0.37", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#1 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv0_p0.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#2 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv0_p1.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#3 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv0_p1.7", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#4 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv1_p0.5", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#5 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv1_p0.37", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#6 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv1_p0.0", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#7 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv1_p1.0", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#8 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv1_p1.7", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#9 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv2_p0.5", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#10 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv2_p0.37", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#11 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv2_p0.0", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#12 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv2_p1.0", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#13 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_unit_uv2_p1.7", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#14 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_unit_uv1.2", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#15 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 427 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_unit_uv-0.3", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#16 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 427 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_unit_uv0.5", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#17 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 427 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv0_p0.5", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#18 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv0_p0.37", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#19 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv0_p0.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#20 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv0_p1.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#21 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv0_p1.7", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#22 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv1_p0.5", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#23 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv1_p0.37", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#24 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv1_p0.0", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#25 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv1_p1.0", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#26 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv1_p1.7", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#27 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv2_p0.5", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#28 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv2_p0.37", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#29 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv2_p0.0", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#30 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv2_p1.0", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#31 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmSurface::LocalPointSolve", + "unit": "surface.surface_p5" + }, + "max_rel_err": 0.0, + "name": "adv_xsect_huge_uv2_p1.7", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#32 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_huge_uv1.2", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#33 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 427 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_huge_uv-0.3", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#34 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 427 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_huge_uv0.5", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#35 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 427 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv0_p0.5", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#36 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv0_p0.37", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#37 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv0_p0.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#38 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv0_p1.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#39 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv0_p1.7", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#40 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 321 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv1_p0.5", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#41 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 353 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv1_p0.37", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#42 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 353 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv1_p0.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#43 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 353 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv1_p1.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#44 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 353 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv1_p1.7", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#45 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 353 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv2_p0.5", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#46 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 385 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv2_p0.37", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#47 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 385 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv2_p0.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#48 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 385 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv2_p1.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#49 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 385 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_tiny_uv2_p1.7", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#50 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 385 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_tiny_uv1.2", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#51 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 427 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_tiny_uv-0.3", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#52 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 427 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_tiny_uv0.5", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#53 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 427 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_line_x5.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#54 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_line_x5.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#55 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 350 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_line_x3.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#56 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_line_x3.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#57 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 350 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_line_scaled_x5.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#58 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_line_scaled_x5.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#59 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 350 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_line_scaled_x3.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#60 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_line_scaled_x3.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#61 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 350 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_circle_x5.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#62 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_circle_x5.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#63 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 350 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_circle_x3.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#64 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_circle_x3.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#65 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 350 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_ellipse_x5.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#66 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_ellipse_x5.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#67 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 350 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_ellipse_x3.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#68 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_ellipse_x3.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#69 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 350 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_hermite_x5.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#70 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_hermite_x5.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#71 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 350 + }, + { + "max_rel_err": 0.0, + "name": "adv_xsect_hermite_x3.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#72 (upstream source/SMLib/src/SmCurveClass.cpp:512 (sm_SetXSectCurveThroughPoint -> SmBSplineCurve::SetIntersectionCurveThroughPoint at :675); review adversarial case)", + "values_compared": 88 + }, + { + "max_rel_err": 0.0, + "name": "adv_apply_hermite_x3.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#73 (upstream source/SMLib/src/SmCurveClass.cpp:464 (sm_ApplyPointSolution); review adversarial case)", + "values_compared": 350 + }, + { + "max_rel_err": 0.0, + "name": "adv_containers_grow", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/intersect.curve_class_p1/adversarial.json#74 (upstream source/SMLib/src/SmCurveClass.cpp:5378,5409 (SmCurveClassification::RemoveAt/SetSize past MIN_ARRAY_SIZE); review adversarial case)", + "values_compared": 14818 + }, { "max_rel_err": 0.0, "name": "apply_point_solution_two_planes", @@ -16747,14 +17427,15 @@ } ], "cases_both_errored": 0, - "cases_deferred": 160, + "cases_deferred": 180, "cases_failed": 0, - "cases_passed": 1853, - "cases_total": 2013, + "cases_passed": 1908, + "cases_total": 2088, "deferred_by_unit": { "intersect.curve_class_p4": 6, "surface.surface_p1": 79, "surface.surface_p4": 54, + "surface.surface_p5": 20, "topology.edge": 9, "topology.face_p2": 10, "topology.vertex": 2 From b4afafc3fb69532453158a68b972595590a5f8d6 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 13:58:13 -0400 Subject: [PATCH 39/54] reports: refresh surface.surface_p7 after merging main Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm --- reports/difftest/surface.surface_p7.json | 38 ++++++++++++------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/reports/difftest/surface.surface_p7.json b/reports/difftest/surface.surface_p7.json index 27019d2d02..0afd574f0b 100644 --- a/reports/difftest/surface.surface_p7.json +++ b/reports/difftest/surface.surface_p7.json @@ -5351,8 +5351,8 @@ }, { "deferred": { - "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", - "unit": "intersect.adv_surface_intersector" + "symbol": "SmSurfaceIntersector::DoIntersection", + "unit": "intersect.surface_intersector_p5" }, "max_rel_err": 0.0, "name": "gen0000", @@ -14399,8 +14399,8 @@ }, { "deferred": { - "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", - "unit": "intersect.adv_surface_intersector" + "symbol": "SmSurfaceIntersector::DoIntersection", + "unit": "intersect.surface_intersector_p5" }, "max_rel_err": 0.0, "name": "gen1099", @@ -16343,8 +16343,8 @@ }, { "deferred": { - "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", - "unit": "intersect.adv_surface_intersector" + "symbol": "SmSurfaceIntersector::DoIntersection", + "unit": "intersect.surface_intersector_p5" }, "max_rel_err": 0.0, "name": "gen1332", @@ -18415,8 +18415,8 @@ }, { "deferred": { - "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", - "unit": "intersect.adv_surface_intersector" + "symbol": "SmSurfaceIntersector::DoIntersection", + "unit": "intersect.surface_intersector_p5" }, "max_rel_err": 0.0, "name": "gen1583", @@ -19903,8 +19903,8 @@ }, { "deferred": { - "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", - "unit": "intersect.adv_surface_intersector" + "symbol": "SmSurfaceIntersector::DoIntersection", + "unit": "intersect.surface_intersector_p5" }, "max_rel_err": 0.0, "name": "gen1764", @@ -20891,8 +20891,8 @@ }, { "deferred": { - "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", - "unit": "intersect.adv_surface_intersector" + "symbol": "SmSurfaceIntersector::DoIntersection", + "unit": "intersect.surface_intersector_p5" }, "max_rel_err": 0.0, "name": "gen1881", @@ -22759,8 +22759,8 @@ }, { "deferred": { - "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", - "unit": "intersect.adv_surface_intersector" + "symbol": "SmSurfaceIntersector::DoIntersection", + "unit": "intersect.surface_intersector_p5" }, "max_rel_err": 0.0, "name": "gen2108", @@ -23443,8 +23443,8 @@ }, { "deferred": { - "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", - "unit": "intersect.adv_surface_intersector" + "symbol": "SmSurfaceIntersector::DoIntersection", + "unit": "intersect.surface_intersector_p5" }, "max_rel_err": 0.0, "name": "gen2190", @@ -24851,8 +24851,8 @@ }, { "deferred": { - "symbol": "SmAdvSurfaceIntersector::SmAdvSurfaceIntersector", - "unit": "intersect.adv_surface_intersector" + "symbol": "SmSurfaceIntersector::DoIntersection", + "unit": "intersect.surface_intersector_p5" }, "max_rel_err": 0.0, "name": "gen2360", @@ -30116,7 +30116,7 @@ "cases_passed": 3453, "cases_total": 3660, "deferred_by_unit": { - "intersect.adv_surface_intersector": 9, + "intersect.surface_intersector_p5": 9, "surface.surface_p11": 59, "surface.surface_p4": 52, "surface.surface_p6": 15, From 9652f994ffcc3f42eda0474a64fdf44988ac586d Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 14:07:45 -0400 Subject: [PATCH 40/54] surface.surf_of_extrusion_p2: review fixes (clippy, adversarial fixtures) - Box Inputs::Op's OpIn and Stop::Deferred's Output (clippy large_enum_variant, result_large_err), gen_other_ext returns SurfIn (unnecessary_wraps): CI clippy green. - 63 review adversarial fixtures: 1359 cases, 971 pass, 0 fail, 388 deferred. - Record review follow-ups in plan/findings.md and plan/STATUS.md. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm --- .../src/units/surface_surf_of_extrusion_p2.rs | 34 +- .../review_adversarial.json | 3875 +++++++++++++++++ plan/STATUS.md | 6 + plan/findings.md | 18 + plan/modules.toml | 2 +- .../surface.surf_of_extrusion_p2.json | 574 ++- 6 files changed, 4486 insertions(+), 23 deletions(-) create mode 100644 fixtures/surface.surf_of_extrusion_p2/review_adversarial.json diff --git a/crates/difftest/src/units/surface_surf_of_extrusion_p2.rs b/crates/difftest/src/units/surface_surf_of_extrusion_p2.rs index 3814d48e2a..e1e69b576d 100644 --- a/crates/difftest/src/units/surface_surf_of_extrusion_p2.rs +++ b/crates/difftest/src/units/surface_surf_of_extrusion_p2.rs @@ -273,7 +273,7 @@ enum Inputs { #[serde(flatten)] src: SrcIn, #[serde(flatten)] - op: OpIn, + op: Box, }, } @@ -553,7 +553,7 @@ fn cpp(i: &Inputs) -> Result { ffi::is_nurb(&t, *scale) } Inputs::Op { src, op } => { - let op = match op { + let op = match &**op { OpIn::State {} => ffi::Op::State, OpIn::Plane { plane, @@ -615,12 +615,12 @@ fn to_output(flat: &[f64]) -> Result { /// A failed Rust step: deferred (unported) or an `SmStatus` written to the record. enum Stop { - Deferred(Output), + Deferred(Box), Status(f64), } fn stop(e: &solidcore::SolidError) -> Stop { - Output::unported(e).map_or_else(|| Stop::Status(status(e)), Stop::Deferred) + Output::unported(e).map_or_else(|| Stop::Status(status(e)), |d| Stop::Deferred(Box::new(d))) } /// The surface of a source; `Ok(Err(..))` when it cannot be made. @@ -965,7 +965,7 @@ fn rust(i: &Inputs) -> Result { let mut o = Vec::new(); match i { Inputs::IsNurb { is_nurb, scale } => match rust_test(&k, is_nurb, &mut o)? { - Err(Stop::Deferred(d)) => return Ok(d), + Err(Stop::Deferred(d)) => return Ok(*d), Err(Stop::Status(_)) => return Err(harness("unexpected status stop")), Ok(None) => {} Ok(Some(t)) => { @@ -999,13 +999,13 @@ fn rust(i: &Inputs) -> Result { } }, Inputs::Op { src, op } => match rust_src(&k, src)? { - Err(Stop::Deferred(d)) => return Ok(d), + Err(Stop::Deferred(d)) => return Ok(*d), Err(Stop::Status(st)) => o.push(st), Ok(mut s) => { o.push(0.0); if let Err(stop) = rust_op(&k, &mut s, op, &mut o)? { match stop { - Stop::Deferred(d) => return Ok(d), + Stop::Deferred(d) => return Ok(*d), Stop::Status(_) => return Err(harness("unexpected status stop")), } } @@ -1278,7 +1278,7 @@ fn gen_cone( } /// Another built surface swept along `b`'s extrusion (or not). -fn gen_other_ext(rng: &mut Rng, b: &SurfOfExtrusion, parallel: bool) -> Option { +fn gen_other_ext(rng: &mut Rng, b: &SurfOfExtrusion, parallel: bool) -> SurfIn { let size = 1.0; let f: Frame = frame(rng, size); let gen = gen_generator(rng, &f, true, size); @@ -1289,12 +1289,12 @@ fn gen_other_ext(rng: &mut Rng, b: &SurfOfExtrusion, parallel: bool) -> Option Option { let op = OpIn::State {}; return Some(Inputs::Op { src: SrcIn::Record { rec: Box::new(rec) }, - op, + op: Box::new(op), }); } if pick < 18 { @@ -1454,7 +1454,7 @@ fn gen_case(rng: &mut Rng) -> Option { let parallel = rng.chance(0.4); OpIn::Extrusion { other: Box::new(SrcIn::Built { - surf: gen_other_ext(rng, &b, parallel)?, + surf: gen_other_ext(rng, &b, parallel), }), tol: gen_tol(rng), } @@ -1475,12 +1475,12 @@ fn gen_case(rng: &mut Rng) -> Option { }, 3 => TargetIn::Extrusion { other: Box::new(SrcIn::Built { - surf: gen_other_ext(rng, &b, false)?, + surf: gen_other_ext(rng, &b, false), }), }, _ => TargetIn::Bspline { other: Box::new(SrcIn::Built { - surf: gen_other_ext(rng, &b, false)?, + surf: gen_other_ext(rng, &b, false), }), }, }; @@ -1518,7 +1518,7 @@ fn gen_case(rng: &mut Rng) -> Option { }; Some(Inputs::Op { src: SrcIn::Built { surf: s }, - op, + op: Box::new(op), }) } @@ -1569,7 +1569,7 @@ mod tests { SrcIn::Built { .. } => "", _ => "record:", }; - let o = match op { + let o = match &**op { OpIn::State {} => "state".to_string(), OpIn::Plane { .. } => "plane".into(), OpIn::Cylinder { .. } => "cylinder".into(), @@ -1603,7 +1603,7 @@ mod tests { } match i { Inputs::IsNurb { .. } => format!("{:?}", o.get(..2)), - Inputs::Op { op, .. } => match op { + Inputs::Op { op, .. } => match &**op { OpIn::Plane { .. } => format!("{:?}", o.get(..3)), OpIn::Cylinder { .. } | OpIn::Extrusion { .. } | OpIn::Global { .. } => { format!("{:?}", o.get(..4)) diff --git a/fixtures/surface.surf_of_extrusion_p2/review_adversarial.json b/fixtures/surface.surf_of_extrusion_p2/review_adversarial.json new file mode 100644 index 0000000000..61204ec072 --- /dev/null +++ b/fixtures/surface.surf_of_extrusion_p2/review_adversarial.json @@ -0,0 +1,3875 @@ +{ + "cases": [ + { + "name": "adv_seam_tangent_tolNone", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 1, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_seam_tangent_tol0.001", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 1, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + }, + "tol": 0.001 + } + }, + { + "name": "adv_seam_tangent_tol1e-09", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 1, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + }, + "tol": 1e-09 + } + }, + { + "name": "adv_seam_tangent_tol0.0", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 1, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + }, + "tol": 0.0 + } + }, + { + "name": "adv_seam_tangent_tol-0.0001", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 1, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + }, + "tol": -0.0001 + } + }, + { + "name": "adv_near_tangent_1.9deg", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.9994502159417572, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_near_tangent_2.0deg", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.9993908270190958, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_near_tangent_2.1deg", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.9993283937786562, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_near_tangent_0.5deg", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.9999619230641713, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_seam_y", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + -90, + 270 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_ellipse_cut", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "ellipse", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "rx": 3, + "ry": 1 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 1, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_ellipse_tangent_minor", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "ellipse", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "rx": 3, + "ry": 1 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 1, + 0 + ], + "n": [ + 0, + 1, + 0 + ] + } + } + }, + { + "name": "adv_ellipse_tangent_major_seam", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "ellipse", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "rx": 3, + "ry": 1 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 3, + 0, + 0 + ], + "n": [ + -1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_hyperbola_cut", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "hyperbola", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + -1.0, + 1.0 + ], + "a": 1.0, + "b": 0.5 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0.1, + 0 + ], + "n": [ + 0, + 1, + 0 + ] + } + } + }, + { + "name": "adv_hyperbola_vertex_tangent", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "hyperbola", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + -1.0, + 1.0 + ], + "a": 1.0, + "b": 0.5 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 1, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_parabola_cut", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "parabola", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + -2.0, + 2.0 + ], + "f": 0.5 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.5, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_parabola_vertex", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "parabola", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + -2.0, + 2.0 + ], + "f": 0.5 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_scale_0.0001", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 0.0001 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 0.0002 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 3e-05, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_scale_par_0.0001", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 0.0001 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 0.0002 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 0.0001 + ], + "n": [ + 0, + 0, + 1 + ] + } + } + }, + { + "name": "adv_scale_10000.0", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 10000.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 20000.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 3000.0, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_scale_par_10000.0", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 10000.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 20000.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 10000.0 + ], + "n": [ + 0, + 0, + 1 + ] + } + } + }, + { + "name": "adv_scale_1000000.0", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1000000.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2000000.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 300000.0, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_scale_par_1000000.0", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1000000.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2000000.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 1000000.0 + ], + "n": [ + 0, + 0, + 1 + ] + } + } + }, + { + "name": "adv_antiparallel_normal", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + -2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + -1 + ], + "n": [ + 0, + 0, + -1 + ] + } + } + }, + { + "name": "adv_antiparallel_normal2", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 1 + ], + "n": [ + 0, + 0, + -1 + ] + } + } + }, + { + "name": "adv_indep_snap_top", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 1, + 0, + 1 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 1.000000001 + ], + "n": [ + 0, + 0, + 1 + ] + } + } + }, + { + "name": "adv_indep_snap_top_tol", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 1, + 0, + 1 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 1.0001 + ], + "n": [ + 0, + 0, + 1 + ] + }, + "tol": 0.001 + } + }, + { + "name": "adv_indep_beyond", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 1, + 0, + 1 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 1.5 + ], + "n": [ + 0, + 0, + 1 + ] + } + } + }, + { + "name": "adv_tilt_1e-09", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.3, + 0, + 0 + ], + "n": [ + 1, + 0, + 1e-09 + ] + } + } + }, + { + "name": "adv_tilt_par_1e-09", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 1 + ], + "n": [ + 1e-09, + 0, + 1 + ] + } + } + }, + { + "name": "adv_tilt_1e-07", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.3, + 0, + 0 + ], + "n": [ + 1, + 0, + 1e-07 + ] + } + } + }, + { + "name": "adv_tilt_par_1e-07", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 1 + ], + "n": [ + 1e-07, + 0, + 1 + ] + } + } + }, + { + "name": "adv_tilt_1e-06", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.3, + 0, + 0 + ], + "n": [ + 1, + 0, + 1e-06 + ] + } + } + }, + { + "name": "adv_tilt_par_1e-06", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 1 + ], + "n": [ + 1e-06, + 0, + 1 + ] + } + } + }, + { + "name": "adv_tilt_0.0001", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.3, + 0, + 0 + ], + "n": [ + 1, + 0, + 0.0001 + ] + } + } + }, + { + "name": "adv_tilt_par_0.0001", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 1 + ], + "n": [ + 0.0001, + 0, + 1 + ] + } + } + }, + { + "name": "adv_bounded_partial", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + 0.5, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "dom": [ + -2, + 0.5, + 2, + 0.5000000001 + ] + } + } + }, + { + "name": "adv_bounded_partial2", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + 0.5, + 0, + 0 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 0, + 0, + 1 + ], + "scale": [ + 1, + 1 + ], + "dom": [ + -2, + -1, + 2, + 0.7 + ] + }, + "tol": 0.01 + } + }, + { + "name": "adv_subdomain_closed", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 1, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + }, + "dom": [ + 0.0, + 0.0, + 0.5, + 1.0 + ] + } + }, + { + "name": "adv_ctor_swap", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "ctor", + "vec": [ + 0, + 0, + 2 + ], + "origin": [ + 1, + 0, + 0 + ], + "domain": [ + 0, + -1, + 6.283185307179586, + 1 + ] + }, + "oob": false, + "swap": true + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.2, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_infinite_cut", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "infinite", + "vec": [ + 0, + 0, + 1 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.2, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_infinite_par", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "infinite", + "vec": [ + 0, + 0, + 1 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.2, + 0, + 5 + ], + "n": [ + 0, + 0, + 1 + ] + } + } + }, + { + "name": "adv_oob_cut", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": true, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.2, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_bspline_closed_seam", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "b_spline", + "cpts": [ + [ + 1, + 0, + 0 + ], + [ + 1, + 1, + 0 + ], + [ + -1, + 1, + 0 + ], + [ + -1, + -1, + 0 + ], + [ + 1, + -1, + 0 + ], + [ + 1, + 0, + 0 + ] + ], + "p": 3, + "u": [ + 0, + 0, + 0, + 0, + 0.33, + 0.66, + 1, + 1, + 1, + 1 + ] + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 0 + ], + "n": [ + 0, + 1, + 0 + ] + } + } + }, + { + "name": "adv_bspline_closed_cut", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "b_spline", + "cpts": [ + [ + 1, + 0, + 0 + ], + [ + 1, + 1, + 0 + ], + [ + -1, + 1, + 0 + ], + [ + -1, + -1, + 0 + ], + [ + 1, + -1, + 0 + ], + [ + 1, + 0, + 0 + ] + ], + "p": 3, + "u": [ + 0, + 0, + 0, + 0, + 0.33, + 0.66, + 1, + 1, + 1, + 1 + ] + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.5, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_bspline_rat_cut", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "b_spline", + "cpts": [ + [ + 1, + 0, + 0 + ], + [ + 1, + 1, + 0 + ], + [ + -1, + 1, + 0 + ], + [ + -1, + -1, + 0 + ], + [ + 1, + -1, + 0 + ], + [ + 1, + 0, + 0 + ] + ], + "p": 3, + "u": [ + 0, + 0, + 0, + 0, + 0.33, + 0.66, + 1, + 1, + 1, + 1 + ], + "weights": [ + 1, + 2, + 0.5, + 1, + 3, + 1 + ] + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0.5, + 0, + 0 + ], + "n": [ + 1, + 0, + 0 + ] + } + } + }, + { + "name": "adv_cyl_1", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "cylinder", + "cone": { + "cone": { + "kind": "canonical", + "bot": 1, + "top": 1, + "height": 1.0 + }, + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ] + } + } + }, + { + "name": "adv_cyl_tilt_1", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "cylinder", + "cone": { + "cone": { + "kind": "canonical", + "bot": 1, + "top": 1, + "height": 1.0 + }, + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ] + } + } + }, + { + "name": "adv_cyl_1.000000000000001", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "cylinder", + "cone": { + "cone": { + "kind": "canonical", + "bot": 1, + "top": 1.000000000000001, + "height": 1.0 + }, + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ] + } + } + }, + { + "name": "adv_cyl_tilt_1.000000000000001", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "cylinder", + "cone": { + "cone": { + "kind": "canonical", + "bot": 1, + "top": 1.000000000000001, + "height": 1.0 + }, + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ] + } + } + }, + { + "name": "adv_cyl_1.0000000001", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "cylinder", + "cone": { + "cone": { + "kind": "canonical", + "bot": 1, + "top": 1.0000000001, + "height": 1.0 + }, + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ] + } + } + }, + { + "name": "adv_cyl_tilt_1.0000000001", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "cylinder", + "cone": { + "cone": { + "kind": "canonical", + "bot": 1, + "top": 1.0000000001, + "height": 1.0 + }, + "o": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 0, + 1 + ] + } + } + }, + { + "name": "adv_isnurb_sweep_tiny", + "upstream_ref": "review adversarial", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 2, + "m": 1, + "p": 2, + "q": 1, + "cpts": [ + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 1e-13, + 1 + ], + [ + 1, + 2, + 0, + 1 + ], + [ + 1, + 2, + 1e-13, + 1 + ], + [ + 2, + 0, + 0, + 1 + ], + [ + 2, + 0, + 1e-13, + 1 + ] + ], + "u": [ + 0, + 0, + 0, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + }, + "scale": 1.0 + } + }, + { + "name": "adv_isnurb_sweep_small", + "upstream_ref": "review adversarial", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 2, + "m": 1, + "p": 2, + "q": 1, + "cpts": [ + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 1e-11, + 1 + ], + [ + 1, + 2, + 0, + 1 + ], + [ + 1, + 2, + 1e-11, + 1 + ], + [ + 2, + 0, + 0, + 1 + ], + [ + 2, + 0, + 1e-11, + 1 + ] + ], + "u": [ + 0, + 0, + 0, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + }, + "scale": 1.0 + } + }, + { + "name": "adv_isnurb_sweep_huge", + "upstream_ref": "review adversarial", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 2, + "m": 1, + "p": 2, + "q": 1, + "cpts": [ + [ + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 100000.0, + 1 + ], + [ + 1, + 2, + 0, + 1 + ], + [ + 1, + 2, + 100000.0, + 1 + ], + [ + 2, + 0, + 0, + 1 + ], + [ + 2, + 0, + 100000.0, + 1 + ] + ], + "u": [ + 0, + 0, + 0, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + }, + "scale": 1.0 + } + }, + { + "name": "adv_isnurb_shifted", + "upstream_ref": "review adversarial", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 3, + "m": 1, + "p": 2, + "q": 1, + "cpts": [ + [ + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + 2, + 1 + ], + [ + 1, + 2, + 0, + 1 + ], + [ + 2, + 2, + 2, + 1 + ], + [ + 2, + 0, + 0, + 1 + ], + [ + 3, + 0, + 2, + 1 + ], + [ + 3, + 1, + 0, + 1 + ], + [ + 4, + 1, + 2, + 1 + ] + ], + "u": [ + -5, + -5, + -5, + -2, + 3, + 3, + 3 + ], + "v": [ + 2, + 2, + 7, + 7 + ] + } + } + }, + "scale": 1.0 + } + }, + { + "name": "adv_isnurb_tol_edge", + "upstream_ref": "review adversarial", + "inputs": { + "is_nurb": { + "source": { + "test": "raw", + "nurb": { + "n": 3, + "m": 1, + "p": 2, + "q": 1, + "cpts": [ + [ + 0, + 0, + 0, + 1 + ], + [ + 1, + 0, + 2, + 1 + ], + [ + 1, + 2, + 0, + 1 + ], + [ + 2, + 2, + 2, + 1 + ], + [ + 2, + 0, + 0, + 1 + ], + [ + 3, + 0, + 2.000000000001, + 1 + ], + [ + 3, + 1, + 0, + 1 + ], + [ + 4, + 1, + 2, + 1 + ] + ], + "u": [ + 0, + 0, + 0, + 0.5, + 1, + 1, + 1 + ], + "v": [ + 0, + 0, + 1, + 1 + ] + } + } + }, + "scale": 1.0 + } + }, + { + "name": "adv_indep_outside_far", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 1, + 0, + 1 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 3 + ], + "n": [ + 0, + 0, + 1 + ] + } + } + }, + { + "name": "adv_indep_outside_just", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 1, + 0, + 1 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + 1.000001 + ], + "n": [ + 0, + 0, + 1 + ] + } + } + }, + { + "name": "adv_indep_below_just", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 1, + 0, + 1 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "normal", + "o": [ + 0, + 0, + -1e-06 + ], + "n": [ + 0, + 0, + 1 + ] + }, + "tol": 1e-07 + } + }, + { + "name": "adv_indep_snap_box_disjoint", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 1, + 0, + 1 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + 50, + 50, + 1.000000001 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "dom": [ + -1, + -1, + 1, + 1 + ] + } + } + }, + { + "name": "adv_perp_box_disjoint_huge", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1000000.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2000000.0 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + 5000000.0, + 0, + 1000000.0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "scale": [ + 1, + 1 + ], + "dom": [ + -1, + -1, + 1, + 1 + ] + } + } + }, + { + "name": "adv_perp_box_disjoint_antinormal", + "upstream_ref": "review adversarial", + "inputs": { + "src": "built", + "surf": { + "gen": { + "kind": "circle", + "c": [ + 0, + 0, + 0 + ], + "x": [ + 1, + 0, + 0 + ], + "y": [ + 0, + 1, + 0 + ], + "d": [ + 0, + 360 + ], + "r": 1.0 + }, + "build": { + "mode": "canonical", + "vec": [ + 0, + 0, + 2 + ] + }, + "oob": false, + "swap": false + }, + "op": "plane", + "plane": { + "kind": "bounded", + "o": [ + 5, + 5, + 1 + ], + "x": [ + 0, + 1, + 0 + ], + "y": [ + 1, + 0, + 0 + ], + "scale": [ + 1, + 1 + ], + "dom": [ + -1, + -1, + 1, + 1 + ] + } + } + } + ] +} \ No newline at end of file diff --git a/plan/STATUS.md b/plan/STATUS.md index 1c012bb733..222718a1d4 100644 --- a/plan/STATUS.md +++ b/plan/STATUS.md @@ -837,3 +837,9 @@ geom_utility_p2 3270 green; all `max_rel_err` 0. fmt, clippy, tests and wasm32 p extend `math.rs`, or re-export from it, rather than create duplicate types, and update `rust_module` to match. *Resolved for `Vec2`:* `geom.vector2d` moved `Vec2`/`Point2` into `geom::vector2d` and `math` re-exports them; `geom.vector3d` can do the same for `Vec3`. +- **`SurfOfExtrusion` as a `SurfaceKind` needs an owner.** `Surface::read_from_db` defers + `SURF_OF_EXTRUSION_TYPE` on `UNPORTED(surface.surf_of_extrusion_p2)`, a stub tagged with + its own (partial) unit because adding the variant means threading a `Kernel` through the + `Surface` dispatchers in `surface::surface::p2` and their callers (cross-unit refactor; + `plan/findings.md`, `surface.surf_of_extrusion_p2`). The coordinator should assign it to + a unit (or a refactor PR) and retag the stub; 2 `topology.brep_data` cases wait on it. diff --git a/plan/findings.md b/plan/findings.md index 119a41ee6f..5647ad9514 100644 --- a/plan/findings.md +++ b/plan/findings.md @@ -3333,3 +3333,21 @@ cases, 169 deferred; `SmSurface::EvaluateNormal` and `DropVectors` now call the returns early (no NURB made) when the domains already agree; upstream's state queries (`GetGenDirParamExtent`) would make the NURB lazily, so the runner records whether the NURB exists, makes it on both sides, then compares the state. +- **Review (PR #57): `sm_IntersectGenerators` status.** Upstream `IntersectWithCylinder` + and `IntersectWithSurfOfExtrusion` ignore the status `sm_IntersectGenerators` returns + (keeping whatever outputs and needs-more flag it set); Rust propagates it with `?`. Not + reachable today: every failure past the parallel test goes through the unported + `GlobalCurveSolve` (`curve.curve_p9`). When `curve.curve_p9` lands, swallow non-`Unported` + errors there (keep the partial curves/types and the needs-more flag), which needs + `intersect_generators` (`surface.surf_of_extrusion_p1`) to hand back its partial result + on failure. +- **Review (PR #57): generator record coverage.** The FFI `check_record` accepts only + generator records of type `SmBSplineCurve` (14033). Upstream `WriteToDB` writes the + generator's own type, and `SmLine`, `SmEllipse`, `SmCircle`, `SmHyperbola` and + `SmParabola` records are valid too. `ReadFromDB` does not branch on the generator kind and + built surfaces cover every kind, so this is a coverage gap only; extending the + `topology.brep_data` Sim to line and conic records would close it. +- **Review (PR #57): self-tagged stub.** The `UNPORTED(surface.surf_of_extrusion_p2)` stub + in `Surface::read_from_db` names this (now `partial`) unit, so a back-edge grep will not + pick it up again. Its real owner is whoever threads a `Kernel` through the `Surface` + dispatchers; raised in `plan/STATUS.md` Open issues for the coordinator to assign. diff --git a/plan/modules.toml b/plan/modules.toml index b78d33e37d..fa3d5dce7f 100644 --- a/plan/modules.toml +++ b/plan/modules.toml @@ -1862,7 +1862,7 @@ tests = ["prog_test:my_test_surface_cover_domains", "prog_test:my_test_tsurf_cre status = "partial" claimed_by = "" claimed_at = "" -notes = "PARTIAL (PR #57): difftest 1296 cases (96 fixtures: the SmSurfOfExtrusion records of upstream Fillet/eg1_srf1.smb and Fillet/blade_fillet_fails.smb (state, IsNurbSurfaceSurfOfExtrusion, plane cuts in every branch, trims, extrusion pair), hand-built edge cases: seam/tangent/near-tangent/clipped-degenerate directrices, snapped and outside extrusion ends, tol 0 / tiny / large, disjoint plane boxes, cylinders and cones, inline NURBs (bilinear, biquadratic, 3-point linear, rational constant/varying ratio, zero sweep, shifted domain, perturbed); + 1200 generated over every op incl. database records (ASCII/binary, versions 29-45), 1e-3..1e3 scales), 923 pass bit-identical (max_rel_err 0), 0 failed, 373 deferred (surface.plane_p2 197: SmPlane::IntersectWithPlane / TrimCurveToPlaneDomain; intersect.adv_surface_intersector 97: GlobalSurfaceIntersect general case; curve.curve_p9 79: parallel generators); --perturb SENSITIVE 923/923; 20k-seed run clean. SurfOfExtrusion does not join SurfaceKind yet (Surface dispatchers take no Kernel; see plan/findings.md): Surface::read_from_db reads the record then defers on UNPORTED(surface.surf_of_extrusion_p2) SurfaceKind::SurfOfExtrusion (topology.brep_data 2 cases). Upstream issues UB-85..UB-89, WR-63. 7 fns; largest: SmSurfOfExtrusion::IntersectWithPlane, SmSurfOfExtrusion::IsNurbSurfaceSurfOfExtrusion, SmSurfOfExtrusion::IntersectWithCylinder, SmSurfOfExtrusion::IntersectWithSurfOfExtrusion; cycle back-edges (call into later units; stub or co-port): intersect.curve_class_p1(3), intersect.curve_class_p4(1), intersect.point_class(1); unit-SCC #22 (220 units); 216 upstream test entry points reach this unit" +notes = "PARTIAL (PR #57): difftest 1359 cases (159 fixtures, 63 of them review adversarial (seam/tangent planes at tol None/1e-3/1e-9/0/negative, the 2-degree tangent boundary, conic vertex tangents, closed/rational B-spline seams, scales 1e-4..1e6, plane tilts around the angle tolerance, snapped/outside independent extrusions, disjoint boxes, ctor+swap/infinite/out-of-bounds surfaces, cylinder radii at the tolerance edge, IsNurb edge sweeps/domains/tolerances); the rest: the SmSurfOfExtrusion records of upstream Fillet/eg1_srf1.smb and Fillet/blade_fillet_fails.smb (state, IsNurbSurfaceSurfOfExtrusion, plane cuts in every branch, trims, extrusion pair), hand-built edge cases: seam/tangent/near-tangent/clipped-degenerate directrices, snapped and outside extrusion ends, tol 0 / tiny / large, disjoint plane boxes, cylinders and cones, inline NURBs (bilinear, biquadratic, 3-point linear, rational constant/varying ratio, zero sweep, shifted domain, perturbed); + 1200 generated over every op incl. database records (ASCII/binary, versions 29-45), 1e-3..1e3 scales), 971 pass bit-identical (max_rel_err 0), 0 failed, 388 deferred (surface.plane_p2 210: SmPlane::IntersectWithPlane / TrimCurveToPlaneDomain; intersect.adv_surface_intersector 97: GlobalSurfaceIntersect general case; curve.curve_p9 81: parallel generators); --perturb SENSITIVE 971/971; 20k-seed run clean. SurfOfExtrusion does not join SurfaceKind yet (Surface dispatchers take no Kernel; see plan/findings.md): Surface::read_from_db reads the record then defers on UNPORTED(surface.surf_of_extrusion_p2) SurfaceKind::SurfOfExtrusion (topology.brep_data 2 cases); this stub needs an owner for threading a Kernel through the Surface dispatchers (plan/STATUS.md Open issues). TODO when curve.curve_p9 lands: IntersectWithCylinder/IntersectWithSurfOfExtrusion must swallow non-Unported sm_IntersectGenerators errors as upstream does (plan/findings.md). FFI check_record accepts only SmBSplineCurve generator records (coverage gap; see plan/findings.md). Upstream issues UB-85..UB-89, WR-63. 7 fns; largest: SmSurfOfExtrusion::IntersectWithPlane, SmSurfOfExtrusion::IsNurbSurfaceSurfOfExtrusion, SmSurfOfExtrusion::IntersectWithCylinder, SmSurfOfExtrusion::IntersectWithSurfOfExtrusion; cycle back-edges (call into later units; stub or co-port): intersect.curve_class_p1(3), intersect.curve_class_p4(1), intersect.point_class(1); unit-SCC #22 (220 units); 216 upstream test entry points reach this unit" [[unit]] id = "surface.surface_p5" diff --git a/reports/difftest/surface.surf_of_extrusion_p2.json b/reports/difftest/surface.surf_of_extrusion_p2.json index e5700a0a7b..2c1f8bf651 100644 --- a/reports/difftest/surface.surf_of_extrusion_p2.json +++ b/reports/difftest/surface.surf_of_extrusion_p2.json @@ -853,6 +853,570 @@ "source": "fixture:fixtures/surface.surf_of_extrusion_p2/cases.json#95 (upstream TestFiles/pt_TestFiles/Fillet/eg1_srf1.smb:400 (SmSurfOfExtrusion record, read by SmBrep::ReadFromFile in upstream tests))", "values_compared": 8 }, + { + "max_rel_err": 0.0, + "name": "adv_seam_tangent_tolNone", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#0 (upstream review adversarial)", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_seam_tangent_tol0.001", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#1 (upstream review adversarial)", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_seam_tangent_tol1e-09", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#2 (upstream review adversarial)", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_seam_tangent_tol0.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#3 (upstream review adversarial)", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "adv_seam_tangent_tol-0.0001", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#4 (upstream review adversarial)", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_near_tangent_1.9deg", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#5 (upstream review adversarial)", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_near_tangent_2.0deg", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#6 (upstream review adversarial)", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_near_tangent_2.1deg", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#7 (upstream review adversarial)", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_near_tangent_0.5deg", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#8 (upstream review adversarial)", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_seam_y", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#9 (upstream review adversarial)", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_ellipse_cut", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#10 (upstream review adversarial)", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_ellipse_tangent_minor", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#11 (upstream review adversarial)", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_ellipse_tangent_major_seam", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#12 (upstream review adversarial)", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_hyperbola_cut", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#13 (upstream review adversarial)", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_hyperbola_vertex_tangent", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#14 (upstream review adversarial)", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_parabola_cut", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#15 (upstream review adversarial)", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_parabola_vertex", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#16 (upstream review adversarial)", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_scale_0.0001", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#17 (upstream review adversarial)", + "values_compared": 56 + }, + { + "deferred": { + "symbol": "SmPlane::TrimCurveToPlaneDomain", + "unit": "surface.plane_p2" + }, + "max_rel_err": 0.0, + "name": "adv_scale_par_0.0001", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#18 (upstream review adversarial)", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "adv_scale_10000.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#19 (upstream review adversarial)", + "values_compared": 56 + }, + { + "deferred": { + "symbol": "SmPlane::TrimCurveToPlaneDomain", + "unit": "surface.plane_p2" + }, + "max_rel_err": 0.0, + "name": "adv_scale_par_10000.0", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#20 (upstream review adversarial)", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "adv_scale_1000000.0", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#21 (upstream review adversarial)", + "values_compared": 56 + }, + { + "deferred": { + "symbol": "SmPlane::TrimCurveToPlaneDomain", + "unit": "surface.plane_p2" + }, + "max_rel_err": 0.0, + "name": "adv_scale_par_1000000.0", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#22 (upstream review adversarial)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::TrimCurveToPlaneDomain", + "unit": "surface.plane_p2" + }, + "max_rel_err": 0.0, + "name": "adv_antiparallel_normal", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#23 (upstream review adversarial)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::TrimCurveToPlaneDomain", + "unit": "surface.plane_p2" + }, + "max_rel_err": 0.0, + "name": "adv_antiparallel_normal2", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#24 (upstream review adversarial)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::TrimCurveToPlaneDomain", + "unit": "surface.plane_p2" + }, + "max_rel_err": 0.0, + "name": "adv_indep_snap_top", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#25 (upstream review adversarial)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::TrimCurveToPlaneDomain", + "unit": "surface.plane_p2" + }, + "max_rel_err": 0.0, + "name": "adv_indep_snap_top_tol", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#26 (upstream review adversarial)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::TrimCurveToPlaneDomain", + "unit": "surface.plane_p2" + }, + "max_rel_err": 0.0, + "name": "adv_indep_beyond", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#27 (upstream review adversarial)", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "adv_tilt_1e-09", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#28 (upstream review adversarial)", + "values_compared": 56 + }, + { + "deferred": { + "symbol": "SmPlane::TrimCurveToPlaneDomain", + "unit": "surface.plane_p2" + }, + "max_rel_err": 0.0, + "name": "adv_tilt_par_1e-09", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#29 (upstream review adversarial)", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "adv_tilt_1e-07", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#30 (upstream review adversarial)", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "adv_tilt_par_1e-07", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#31 (upstream review adversarial)", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "adv_tilt_1e-06", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#32 (upstream review adversarial)", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "adv_tilt_par_1e-06", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#33 (upstream review adversarial)", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "adv_tilt_0.0001", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#34 (upstream review adversarial)", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "adv_tilt_par_0.0001", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#35 (upstream review adversarial)", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "adv_bounded_partial", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#36 (upstream review adversarial)", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_bounded_partial2", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#37 (upstream review adversarial)", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_subdomain_closed", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#38 (upstream review adversarial)", + "values_compared": 32 + }, + { + "max_rel_err": 0.0, + "name": "adv_ctor_swap", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#39 (upstream review adversarial)", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "adv_infinite_cut", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#40 (upstream review adversarial)", + "values_compared": 56 + }, + { + "deferred": { + "symbol": "SmPlane::TrimCurveToPlaneDomain", + "unit": "surface.plane_p2" + }, + "max_rel_err": 0.0, + "name": "adv_infinite_par", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#41 (upstream review adversarial)", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "adv_oob_cut", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#42 (upstream review adversarial)", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_bspline_closed_seam", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#43 (upstream review adversarial)", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_bspline_closed_cut", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#44 (upstream review adversarial)", + "values_compared": 56 + }, + { + "max_rel_err": 0.0, + "name": "adv_bspline_rat_cut", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#45 (upstream review adversarial)", + "values_compared": 56 + }, + { + "deferred": { + "symbol": "SmCurve::GlobalCurveSolve", + "unit": "curve.curve_p9" + }, + "max_rel_err": 0.0, + "name": "adv_cyl_1", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#46 (upstream review adversarial)", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "adv_cyl_tilt_1", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#47 (upstream review adversarial)", + "values_compared": 9 + }, + { + "deferred": { + "symbol": "SmCurve::GlobalCurveSolve", + "unit": "curve.curve_p9" + }, + "max_rel_err": 0.0, + "name": "adv_cyl_1.000000000000001", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#48 (upstream review adversarial)", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "adv_cyl_tilt_1.000000000000001", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#49 (upstream review adversarial)", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "adv_cyl_1.0000000001", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#50 (upstream review adversarial)", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "adv_cyl_tilt_1.0000000001", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#51 (upstream review adversarial)", + "values_compared": 9 + }, + { + "max_rel_err": 0.0, + "name": "adv_isnurb_sweep_tiny", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#52 (upstream review adversarial)", + "values_compared": 3 + }, + { + "max_rel_err": 0.0, + "name": "adv_isnurb_sweep_small", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#53 (upstream review adversarial)", + "values_compared": 109 + }, + { + "max_rel_err": 0.0, + "name": "adv_isnurb_sweep_huge", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#54 (upstream review adversarial)", + "values_compared": 109 + }, + { + "max_rel_err": 0.0, + "name": "adv_isnurb_shifted", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#55 (upstream review adversarial)", + "values_compared": 123 + }, + { + "max_rel_err": 0.0, + "name": "adv_isnurb_tol_edge", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#56 (upstream review adversarial)", + "values_compared": 123 + }, + { + "deferred": { + "symbol": "SmPlane::TrimCurveToPlaneDomain", + "unit": "surface.plane_p2" + }, + "max_rel_err": 0.0, + "name": "adv_indep_outside_far", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#57 (upstream review adversarial)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::TrimCurveToPlaneDomain", + "unit": "surface.plane_p2" + }, + "max_rel_err": 0.0, + "name": "adv_indep_outside_just", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#58 (upstream review adversarial)", + "values_compared": 0 + }, + { + "deferred": { + "symbol": "SmPlane::TrimCurveToPlaneDomain", + "unit": "surface.plane_p2" + }, + "max_rel_err": 0.0, + "name": "adv_indep_below_just", + "outcome": "deferred", + "pass": false, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#59 (upstream review adversarial)", + "values_compared": 0 + }, + { + "max_rel_err": 0.0, + "name": "adv_indep_snap_box_disjoint", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#60 (upstream review adversarial)", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "adv_perp_box_disjoint_huge", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#61 (upstream review adversarial)", + "values_compared": 8 + }, + { + "max_rel_err": 0.0, + "name": "adv_perp_box_disjoint_antinormal", + "outcome": "pass", + "pass": true, + "source": "fixture:fixtures/surface.surf_of_extrusion_p2/review_adversarial.json#62 (upstream review adversarial)", + "values_compared": 8 + }, { "deferred": { "symbol": "SmPlane::IntersectWithPlane", @@ -11863,14 +12427,14 @@ } ], "cases_both_errored": 0, - "cases_deferred": 373, + "cases_deferred": 388, "cases_failed": 0, - "cases_passed": 923, - "cases_total": 1296, + "cases_passed": 971, + "cases_total": 1359, "deferred_by_unit": { - "curve.curve_p9": 79, + "curve.curve_p9": 81, "intersect.adv_surface_intersector": 97, - "surface.plane_p2": 197 + "surface.plane_p2": 210 }, "max_rel_err": 0.0, "pass": true, From 89daf4f497ce364aba194c95cb4e6aaf6c7ec655 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 18:09:05 +0000 Subject: [PATCH 41/54] plan/PROGRESS.md: regenerate [skip ci] --- plan/PROGRESS.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plan/PROGRESS.md b/plan/PROGRESS.md index 350b84e5fd..6f3e04c90f 100644 --- a/plan/PROGRESS.md +++ b/plan/PROGRESS.md @@ -2,7 +2,7 @@ Generated from `plan/modules.toml` by `harness/plan/progress.py`; do not edit by hand. -**133 / 261 units ported** (87 green, 46 partial), **174,026 / 387,903 upstream lines (44.9%)**. 17 claimed, 0 blocked, 111 todo. +**133 / 261 units ported** (87 green, 46 partial), **174,026 / 387,903 upstream lines (44.9%)**. 18 claimed, 0 blocked, 110 todo. Legend: โœ… green (identical to C++) ยท ๐ŸŸก partial (passes; some cases wait on unported code) ยท ๐Ÿ”จ claimed ยท โ–ถ๏ธ ready (all dependencies done) ยท โณ claimable, dependencies still missing ยท โ›” blocked. @@ -50,7 +50,6 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] `topology.edgeuse_p3` (2273 lines) โ€” missing: `surface.surface_p5`, `topology.edge`, `topology.edgeuse_p1` - [ ] `topology.trimming_tools` (2878 lines) โ€” missing: `topology.edgeuse_p1`, `topology.face_p2`, `topology.loopuse` - [ ] `heal.gap` (1475 lines) โ€” missing: `topology.edgeuse_p1`, `topology.vertexuse` -- [ ] `query.loop` (830 lines) โ€” missing: `topology.loopuse` - [ ] `topology.face_p4` (1812 lines) โ€” missing: `intersect.curve_class_p1`, `intersect.curve_class_p7`, `topology.edgeuse_p1`, `topology.face_p2` +3 more - [ ] `query.face_p2` (1161 lines) โ€” missing: `intersect.curve_class_p1`, `topology.face_p2`, `topology.face_p4` - [ ] `topology.brep_p10` (1890 lines) โ€” missing: `topology.edge`, `topology.edgeuse_p1`, `topology.proto_topology_p1`, `topology.shell` +1 more @@ -144,6 +143,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐Ÿ”จ `topology.edgeuse_p1` (1157 lines) โ€” in progress: #55 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `intersect.surface_intersector_p3` (1932 lines) โ€” in progress: #56 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `intersect.topology_solver_p2` (1391 lines) โ€” in progress: #60 @0xlillith (draft) +- [ ] ๐Ÿ”จ `query.loop` (830 lines) โ€” in progress: #63 @bherbruck (draft) ## By module @@ -374,7 +374,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list ### query (0/10) - [ ] โณ `query.edge` (1025 lines) โ€” waiting -- [ ] โณ `query.loop` (830 lines) โ€” waiting +- [ ] ๐Ÿ”จ `query.loop` (830 lines) โ€” in progress: #63 @bherbruck (draft) - [ ] โณ `query.face_p2` (1161 lines) โ€” waiting - [ ] โณ `query.face_p3` (1620 lines) โ€” waiting - [ ] โณ `query.poly` (2119 lines) โ€” waiting From aa0026cc79690f34004a8797c554229533757b03 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 18:11:19 +0000 Subject: [PATCH 42/54] plan/PROGRESS.md: regenerate [skip ci] --- plan/PROGRESS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plan/PROGRESS.md b/plan/PROGRESS.md index 6f3e04c90f..e817500472 100644 --- a/plan/PROGRESS.md +++ b/plan/PROGRESS.md @@ -127,7 +127,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list ## In progress - [ ] ๐Ÿ”จ `curve.curve_p9` (1783 lines) โ€” in progress: #13 @froglemonade2 (ready for review) -- [ ] ๐Ÿ”จ `surface.surface_p9` (1252 lines) โ€” in progress: #6 @0xlillith (draft) +- [ ] ๐Ÿ”จ `surface.surface_p9` (1252 lines) โ€” in progress: #6 @0xlillith (ready for review) - [ ] ๐Ÿ”จ `surface.surf_of_revolution_p2` (1369 lines) โ€” in progress: #51 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.plane_p2` (1627 lines) โ€” in progress: #40 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `surface.surface_p4` (2270 lines) โ€” in progress: #49 @froglemonade2 (ready for review) @@ -268,7 +268,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐ŸŸก `surface.surface_cache_p1` (1944 lines) โ€” partial, 872 cases - [ ] ๐ŸŸก `surface.plane_p1` (1934 lines) โ€” partial, 2705 cases - [ ] ๐ŸŸก `surface.surf_of_revolution_p1` (1522 lines) โ€” partial, 807 cases -- [ ] ๐Ÿ”จ `surface.surface_p9` (1252 lines) โ€” in progress: #6 @0xlillith (draft) +- [ ] ๐Ÿ”จ `surface.surface_p9` (1252 lines) โ€” in progress: #6 @0xlillith (ready for review) - [ ] ๐ŸŸก `surface.trim_srf_cache` (966 lines) โ€” partial, 621 cases - [ ] ๐ŸŸก `surface.b_spline_volume_n_lib` (310 lines) โ€” partial, 2420 cases - [ ] ๐ŸŸก `surface.bend_volume` (945 lines) โ€” partial, 2347 cases From 08e046cad11e6feddcd9de75c75f303bb066c427 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 18:15:58 +0000 Subject: [PATCH 43/54] plan/PROGRESS.md: regenerate [skip ci] --- plan/PROGRESS.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/plan/PROGRESS.md b/plan/PROGRESS.md index e817500472..2992d9aa6c 100644 --- a/plan/PROGRESS.md +++ b/plan/PROGRESS.md @@ -2,7 +2,7 @@ Generated from `plan/modules.toml` by `harness/plan/progress.py`; do not edit by hand. -**133 / 261 units ported** (87 green, 46 partial), **174,026 / 387,903 upstream lines (44.9%)**. 18 claimed, 0 blocked, 110 todo. +**134 / 261 units ported** (87 green, 47 partial), **175,672 / 387,903 upstream lines (45.3%)**. 17 claimed, 0 blocked, 110 todo. Legend: โœ… green (identical to C++) ยท ๐ŸŸก partial (passes; some cases wait on unported code) ยท ๐Ÿ”จ claimed ยท โ–ถ๏ธ ready (all dependencies done) ยท โณ claimable, dependencies still missing ยท โ›” blocked. @@ -83,7 +83,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] `primitive.primitive_creation_p1` (2322 lines) โ€” missing: `topology.brep_p1`, `topology.brep_p5`, `topology.brep_p8`, `topology.edge` +2 more - [ ] `query.api_queries` (809 lines) โ€” missing: `intersect.topology_solver_p2`, `query.brep`, `query.edge`, `topology.brep_p1` +1 more - [ ] `topology.proto_topology_p3` (1577 lines) โ€” missing: `intersect.curve_class_p1`, `topology.edge`, `topology.proto_topology_p1`, `topology.proto_topology_p2` -- [ ] `blend.fillet_intersector` (1708 lines) โ€” missing: `blend.fillet_geom_p1`, `blend.fillet_solver_p1`, `intersect.adv_surface_intersector`, `topology.edge` +- [ ] `blend.fillet_intersector` (1708 lines) โ€” missing: `blend.fillet_geom_p1`, `blend.fillet_solver_p1`, `topology.edge` - [ ] `blend.fillet_solver_p5` (848 lines) โ€” missing: `blend.fillet_geom_p1`, `blend.fillet_solver_p1`, `intersect.curve_class_p1`, `surface.offset_surface` +1 more - [ ] `blend.fillet_standard_solver_p1` (2336 lines) โ€” missing: `blend.fillet_solver_p1`, `surface.offset_surface`, `topology.edgeuse_p1` - [ ] `boolean.topology_intersector_p1` (2491 lines) โ€” missing: `intersect.curve_class_p1`, `topology.edge`, `topology.face_p2`, `topology.face_p4` +4 more @@ -139,7 +139,6 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐Ÿ”จ `surface.offset_surface` (1787 lines) โ€” in progress: #62 @Pluto-XI (draft) - [ ] ๐Ÿ”จ `intersect.ray_tracer` (1246 lines) โ€” in progress: #48 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.surface_point_solve_p1` (1771 lines) โ€” in progress: #58 @bherbruck (ready for review) -- [ ] ๐Ÿ”จ `intersect.adv_surface_intersector` (1646 lines) โ€” in progress: #41 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `topology.edgeuse_p1` (1157 lines) โ€” in progress: #55 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `intersect.surface_intersector_p3` (1932 lines) โ€” in progress: #56 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `intersect.topology_solver_p2` (1391 lines) โ€” in progress: #60 @0xlillith (draft) @@ -335,7 +334,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] โณ `topology.proto_topology_p2` (2091 lines) โ€” waiting - [ ] โณ `topology.proto_topology_p3` (1577 lines) โ€” waiting -### intersect (6/25) +### intersect (7/25) - [ ] ๐ŸŸก `intersect.surface_tracer` (1900 lines) โ€” partial, 427 cases - [ ] ๐ŸŸก `intersect.point_class` (909 lines) โ€” partial, 2511 cases @@ -348,7 +347,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] โณ `intersect.surface_drop_lib_p2` (1080 lines) โ€” waiting - [ ] ๐ŸŸก `intersect.surface_intersector_p1` (1816 lines) โ€” partial, 1510 cases - [ ] ๐ŸŸก `intersect.topology_solver_p1` (1838 lines) โ€” partial, 3532 cases -- [ ] ๐Ÿ”จ `intersect.adv_surface_intersector` (1646 lines) โ€” in progress: #41 @bherbruck (ready for review) +- [ ] ๐ŸŸก `intersect.adv_surface_intersector` (1646 lines) โ€” partial, 1931 cases - [ ] โณ `intersect.curve_class_p2` (1928 lines) โ€” waiting - [ ] โณ `intersect.surface_drop_lib_p3` (2062 lines) โ€” waiting - [ ] ๐ŸŸก `intersect.surface_intersector_p2` (1677 lines) โ€” partial, 1660 cases From fd1adb4506c5843110a0e05dfb9bc2537fcb6662 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 18:34:40 +0000 Subject: [PATCH 44/54] plan/PROGRESS.md: regenerate [skip ci] --- plan/PROGRESS.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/plan/PROGRESS.md b/plan/PROGRESS.md index 2992d9aa6c..74186c6584 100644 --- a/plan/PROGRESS.md +++ b/plan/PROGRESS.md @@ -2,7 +2,7 @@ Generated from `plan/modules.toml` by `harness/plan/progress.py`; do not edit by hand. -**134 / 261 units ported** (87 green, 47 partial), **175,672 / 387,903 upstream lines (45.3%)**. 17 claimed, 0 blocked, 110 todo. +**135 / 261 units ported** (87 green, 48 partial), **176,924 / 387,903 upstream lines (45.6%)**. 16 claimed, 0 blocked, 110 todo. Legend: โœ… green (identical to C++) ยท ๐ŸŸก partial (passes; some cases wait on unported code) ยท ๐Ÿ”จ claimed ยท โ–ถ๏ธ ready (all dependencies done) ยท โณ claimable, dependencies still missing ยท โ›” blocked. @@ -19,7 +19,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] `surface.surface_p6` (2150 lines) โ€” missing: `surface.surface_p4`, `surface.surface_p5` - [ ] `surface.surface_p10` (2172 lines) โ€” missing: `surface.surface_p5` - [ ] `intersect.surface_drop_lib_p1` (1478 lines) โ€” missing: `surface.surface_p3` -- [ ] `surface.surface_p11` (1789 lines) โ€” missing: `surface.surface_p3`, `surface.surface_p5`, `surface.surface_p6`, `surface.surface_p9` +- [ ] `surface.surface_p11` (1789 lines) โ€” missing: `surface.surface_p3`, `surface.surface_p5`, `surface.surface_p6` - [ ] `surface.surface_p8` (2374 lines) โ€” missing: `surface.surface_p3`, `surface.surface_p4`, `surface.surface_p5`, `surface.surface_p6` - [ ] `intersect.curve_class_p7` (2248 lines) โ€” missing: `intersect.curve_class_p1` - [ ] `intersect.surface_drop_curve` (2014 lines) โ€” missing: `surface.surface_p5` @@ -127,7 +127,6 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list ## In progress - [ ] ๐Ÿ”จ `curve.curve_p9` (1783 lines) โ€” in progress: #13 @froglemonade2 (ready for review) -- [ ] ๐Ÿ”จ `surface.surface_p9` (1252 lines) โ€” in progress: #6 @0xlillith (ready for review) - [ ] ๐Ÿ”จ `surface.surf_of_revolution_p2` (1369 lines) โ€” in progress: #51 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.plane_p2` (1627 lines) โ€” in progress: #40 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `surface.surface_p4` (2270 lines) โ€” in progress: #49 @froglemonade2 (ready for review) @@ -257,7 +256,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐ŸŸก `curve.curve_p5` (2299 lines) โ€” partial, 3097 cases - [ ] ๐Ÿ”จ `curve.curve_p9` (1783 lines) โ€” in progress: #13 @froglemonade2 (ready for review) -### surface (21/40) +### surface (22/40) - [ ] ๐ŸŸก `surface.volume_p1` (2014 lines) โ€” partial, 2886 cases - [x] โœ… `surface.b_spline_volume` (1226 lines) โ€” green, 2333 cases @@ -267,7 +266,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐ŸŸก `surface.surface_cache_p1` (1944 lines) โ€” partial, 872 cases - [ ] ๐ŸŸก `surface.plane_p1` (1934 lines) โ€” partial, 2705 cases - [ ] ๐ŸŸก `surface.surf_of_revolution_p1` (1522 lines) โ€” partial, 807 cases -- [ ] ๐Ÿ”จ `surface.surface_p9` (1252 lines) โ€” in progress: #6 @0xlillith (ready for review) +- [ ] ๐ŸŸก `surface.surface_p9` (1252 lines) โ€” partial, 778 cases - [ ] ๐ŸŸก `surface.trim_srf_cache` (966 lines) โ€” partial, 621 cases - [ ] ๐ŸŸก `surface.b_spline_volume_n_lib` (310 lines) โ€” partial, 2420 cases - [ ] ๐ŸŸก `surface.bend_volume` (945 lines) โ€” partial, 2347 cases From e8462b32eb452f728a1df8e3773b3278bb126998 Mon Sep 17 00:00:00 2001 From: bherbruck Date: Wed, 14 Oct 2026 14:53:59 -0400 Subject: [PATCH 45/54] surface.surface_p9: narrow FFI guards to what the C++ can't handle; extra fixtures Follow-up to #6. The FFI guard now only requires finite values for the net scale, chord height, maximum side, line and CSI domain (disjoint, touching-edge and sliver early exits are compared). It keeps the [0,1] split/iso domain, the angle range, the revolution-CSI rejection and the shim's all-degenerate max-side guard, and adds max|net|/max side <= 1e5 so the ULONG split count stays finite and under the Rust 1e6 limit. 43 new fixtures (CSI domain disjoint/touching/sliver, 1e6-scale nets, chord heights 1e-4/1e-5, max side 1e3/1e6) pass bit-identically or defer on surface.surface_p6. The max-side iso degeneracy test now uses the typed iso curve (SmEllipse/SmLine IsDegenerate), as upstream's virtual call does. Notes: CsiGlobalSolver field CO-PORTED record in surface.surface_p1; duplicate review sentences removed from surface_cache_p2/p3. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm --- .../src/units/surface_surface_p9.rs | 62 +- crates/solidcore/src/surface/surface/p9.rs | 69 +- .../surface.surface_p9/guard-narrowing.json | 3403 +++++++++++++++++ plan/modules.toml | 8 +- reports/difftest/surface.surface_p9.json | 380 +- 5 files changed, 3872 insertions(+), 50 deletions(-) create mode 100644 fixtures/surface.surface_p9/guard-narrowing.json diff --git a/crates/solidcore-ffi/src/units/surface_surface_p9.rs b/crates/solidcore-ffi/src/units/surface_surface_p9.rs index 974ed38d72..6cbdaf66d4 100644 --- a/crates/solidcore-ffi/src/units/surface_surface_p9.rs +++ b/crates/solidcore-ffi/src/units/surface_surface_p9.rs @@ -1,8 +1,8 @@ //! Safe wrappers for `surface.surface_p9`; shim: `surface_surface_p9.cpp`. //! Upstream: `source/SMLib/src/SmSurface.cpp` (tessellation, iso boundaries and CSI). -//! Inputs are one non-rational quadratic 3x3 Bezier patch or a real unit plane, -//! a domain within [0,1]^2, -//! bounded controls and, for CSI, a non-degenerate line. No counts cross the FFI. +//! Inputs are one non-rational quadratic 3x3 Bezier patch, a real unit plane or a +//! canonical revolution, finite values (a split/iso domain within [0,1]^2) and, +//! for CSI, a non-degenerate line. No counts cross the FFI. use crate::{call_with_buffer, FfiError}; mod sys { @@ -67,30 +67,35 @@ pub fn eval_surface_kind( line: [[f64; 3]; 2], ) -> Result, FfiError> { let invalid = || FfiError::InvalidArgument("unsafe surface p9 input".into()); + // Only finite values are required: scale, chord height, maximum side and + // the CSI domain (disjoint, touching or sliver) are all defined in C++. + // The angle range and the [0,1] split/iso domain stay bounded as before. if !(0..=2).contains(&surface_kind) + // The one-node Rust CSI harness tree does not model `BuildTree`, which + // subdivides a revolution; keep revolution CSI out of the comparison. || (surface_kind == 2 && op == 2) || !(0..=2).contains(&op) || !(0..=9).contains(&direction) - || net - .iter() - .flatten() - .any(|v| !v.is_finite() || v.abs() > 10.0) - || domain - .iter() - .any(|v| !v.is_finite() || !(0.0..=1.0).contains(v)) - || domain[2] - domain[0] < 1e-4 - || domain[3] - domain[1] < 1e-4 + || net.iter().flatten().any(|v| !v.is_finite()) + || domain.iter().any(|v| !v.is_finite()) + || (op != 2 + && (domain.iter().any(|v| !(0.0..=1.0).contains(v)) + || domain[2] - domain[0] < 1e-4 + || domain[3] - domain[1] < 1e-4)) || controls.iter().any(|v| !v.is_finite()) - || (controls[0] != 0.0 && !(1e-3..=10.0).contains(&controls[0].abs())) || (controls[1] != 0.0 && !(1.0..=90.0).contains(&controls[1].abs())) - || (controls[2] != 0.0 && !(0.05..=100.0).contains(&controls[2].abs())) - || line - .iter() - .flatten() - .any(|v| !v.is_finite() || v.abs() > 20.0) + || line.iter().flatten().any(|v| !v.is_finite()) { return Err(invalid()); } + // `FindTessellationSplits` converts `max_length / max_side + 1` to ULONG and + // allocates that many splits. An iso curve of a 3x3 net is no longer than its + // control polygon (< 7 * max |net|), so this keeps the count finite and below + // the Rust port's documented 1,000,000-split limit. + let net_max = net.iter().flatten().fold(0.0_f64, |m, v| m.max(v.abs())); + if op == 0 && controls[2] > 0.0 && net_max / controls[2] > 1e5 { + return Err(invalid()); + } if op == 0 && direction > 1 { return Err(invalid()); } @@ -159,4 +164,25 @@ mod tests { ); } } + + #[test] + fn accepts_scale_and_csi_domain_rejects_unbounded_split_count() { + let mut net = [[0.0; 3]; 9]; + for (index, p) in net.iter_mut().enumerate() { + *p = [(index / 3) as f64 * 5e5, (index % 3) as f64 * 5e5, 0.0]; + } + let line = [[5e5, 5e5, -5e6], [5e5, 5e5, 5e6]]; + let unit = [0.0, 0.0, 1.0, 1.0]; + assert!(eval(0, false, &net, unit, 0, [2e4, 15.0, 1e6], false, line).is_ok()); + assert!(eval(1, false, &net, unit, 0, [1e-5, 0.0, 0.0], false, line).is_ok()); + assert!(eval(2, false, &net, [2.0, 2.0, 3.0, 3.0], 0, [0.0; 3], false, line).is_ok()); + assert!(matches!( + eval(0, false, &net, unit, 0, [0.0, 0.0, 1.0], false, line), + Err(FfiError::InvalidArgument(_)) + )); + assert!(matches!( + eval(0, false, &net, [2.0, 2.0, 3.0, 3.0], 0, [0.0; 3], false, line), + Err(FfiError::InvalidArgument(_)) + )); + } } diff --git a/crates/solidcore/src/surface/surface/p9.rs b/crates/solidcore/src/surface/surface/p9.rs index d145f18bd3..9cf5906b49 100644 --- a/crates/solidcore/src/surface/surface/p9.rs +++ b/crates/solidcore/src/surface/surface/p9.rs @@ -62,33 +62,51 @@ fn bss(surface: &Surface) -> Result> { } } +/// `CreateIsoParametricCurve` through the surface virtual: the B-spline view +/// used for lengths and point spacing, and the curve as upstream types it +/// (`SmLine` for planes, `SmCircle` for revolution sweeps), whose own +/// `IsDegenerate` override upstream calls. +fn typed_iso_curve( + k: &Kernel, + surface: &Surface, + direction: SurfParamType, + value: f64, +) -> Result<(BSplineCurve, Curve)> { + if let SurfaceKind::Plane(p) = surface.kind() { + let line = p + .create_iso_parametric_curve(direction, value, None, false)? + .curve; + let base = line.base_with_nurb()?.into_owned(); + return Ok((base, Curve::from(line))); + } + if let SurfaceKind::SurfOfRevolution(s) = surface.kind() { + let iso = s.create_iso_parametric_curve(k, direction, value, None)?; + let base = match iso.curve.kind() { + crate::curve::curve::CurveKind::BSpline(c) => c.copy(), + crate::curve::curve::CurveKind::Ellipse(c) => c.base().copy(), + _ => { + return Err(SolidError::invalid_input( + OP, + "unexpected revolution iso curve kind", + )) + } + }; + return Ok((base, iso.curve)); + } + let base = bss(surface)? + .create_iso_parametric_curve(k, direction, value, IsoCurveOptions::default())? + .curve; + let typed = Curve::from(base.clone()); + Ok((base, typed)) +} + fn iso_curve( k: &Kernel, surface: &Surface, direction: SurfParamType, value: f64, ) -> Result { - if let SurfaceKind::Plane(p) = surface.kind() { - return Ok(p - .create_iso_parametric_curve(direction, value, None, false)? - .curve - .base_with_nurb()? - .into_owned()); - } - if let SurfaceKind::SurfOfRevolution(s) = surface.kind() { - let iso = s.create_iso_parametric_curve(k, direction, value, None)?; - return match iso.curve.kind() { - crate::curve::curve::CurveKind::BSpline(c) => Ok(c.copy()), - crate::curve::curve::CurveKind::Ellipse(c) => Ok(c.base().copy()), - _ => Err(SolidError::invalid_input( - OP, - "unexpected revolution iso curve kind", - )), - }; - } - Ok(bss(surface)? - .create_iso_parametric_curve(k, direction, value, IsoCurveOptions::default())? - .curve) + Ok(typed_iso_curve(k, surface, direction, value)?.0) } fn implicit_iso( @@ -215,11 +233,14 @@ impl Surface { } else { uv.x }; - let curve = iso_curve(k, self, direction, iso)?; - let generic = Curve::from(curve.clone()); - if generic.is_degenerate(EFF_ZERO, None)? { + let (curve, typed) = typed_iso_curve(k, self, direction, iso)?; + // `pBSC->IsDegenerate()` is virtual: a revolution circle uses + // `SmEllipse::IsDegenerate` (radius < tol/2 or arc < tol) and a + // plane line `SmLine::IsDegenerate`, not the B-spline test. + if typed.is_degenerate(EFF_ZERO, None)? { continue; } + let generic = Curve::from(curve.clone()); length = generic.approximate_length(&interval, 30, false)?.0; if length > max_length { max_length = length; diff --git a/fixtures/surface.surface_p9/guard-narrowing.json b/fixtures/surface.surface_p9/guard-narrowing.json new file mode 100644 index 0000000000..6696b8cf0e --- /dev/null +++ b/fixtures/surface.surface_p9/guard-narrowing.json @@ -0,0 +1,3403 @@ +{ + "cases": [ + { + "name": "csi_domain_disjoint", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 2, + 2, + 3, + 3 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "csi_domain_disjoint_negative", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + -3, + -3, + -2, + -2 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "csi_domain_touching_u_edge", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 1, + 0, + 2, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "csi_domain_touching_corner", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 1, + 1, + 2, + 2 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "csi_domain_narrow_u", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0.5, + 0, + 0.50001, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "csi_domain_sliver_u", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0.5, + 0, + 0.50000000000001, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "csi_domain_narrow_v", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0.5, + 1, + 0.500001 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "csi_domain_sliver_v", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0.5, + 1, + 0.50000000000001 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "csi_domain_zero_width", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0.5, + 0, + 0.5, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "csi_domain_narrow_off_line", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0.9, + 0, + 0.90001, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "csi_domain_sliver_tiny_off_line", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0.1, + 0.1, + 0.10000000000001001, + 0.9 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "csi_domain_partial_overlap", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + -1, + -1, + 0.75, + 0.75 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "csi_domain_superset", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + -2, + -2, + 3, + 3 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "csi_scale_1e6", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 500000.0, + 0.0 + ], + [ + 0.0, + 1000000.0, + 0.0 + ], + [ + 500000.0, + 0.0, + 0.0 + ], + [ + 500000.0, + 500000.0, + 0.0 + ], + [ + 500000.0, + 1000000.0, + 0.0 + ], + [ + 1000000.0, + 0.0, + 0.0 + ], + [ + 1000000.0, + 500000.0, + 0.0 + ], + [ + 1000000.0, + 1000000.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 500000.0, + 500000.0, + -5000000.0 + ], + [ + 500000.0, + 500000.0, + 5000000.0 + ] + ] + } + }, + { + "name": "csi_scale_1e6_oblique", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:13887 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 2, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 500000.0, + 0.0 + ], + [ + 0.0, + 1000000.0, + 0.0 + ], + [ + 500000.0, + 0.0, + 0.0 + ], + [ + 500000.0, + 500000.0, + 0.0 + ], + [ + 500000.0, + 1000000.0, + 0.0 + ], + [ + 1000000.0, + 0.0, + 0.0 + ], + [ + 1000000.0, + 500000.0, + 0.0 + ], + [ + 1000000.0, + 1000000.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 100000.0, + 200000.0, + -1000000.0 + ], + [ + 900000.0, + 700000.0, + 1000000.0 + ] + ] + } + }, + { + "name": "splits_scale_1e6_chord_dir0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 500000.0, + 0.0 + ], + [ + 0.0, + 1000000.0, + 0.0 + ], + [ + 500000.0, + 0.0, + 0.0 + ], + [ + 500000.0, + 500000.0, + 450000.0 + ], + [ + 500000.0, + 1000000.0, + 0.0 + ], + [ + 1000000.0, + 0.0, + 0.0 + ], + [ + 1000000.0, + 500000.0, + 0.0 + ], + [ + 1000000.0, + 1000000.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 20000.0, + 15, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_scale_1e6_angle_dir0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 500000.0, + 0.0 + ], + [ + 0.0, + 1000000.0, + 0.0 + ], + [ + 500000.0, + 0.0, + 0.0 + ], + [ + 500000.0, + 500000.0, + 450000.0 + ], + [ + 500000.0, + 1000000.0, + 0.0 + ], + [ + 1000000.0, + 0.0, + 0.0 + ], + [ + 1000000.0, + 500000.0, + 0.0 + ], + [ + 1000000.0, + 1000000.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 15, + 0 + ], + "diagonals": true, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_scale_1e6_maxside_dir0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 500000.0, + 0.0 + ], + [ + 0.0, + 1000000.0, + 0.0 + ], + [ + 500000.0, + 0.0, + 0.0 + ], + [ + 500000.0, + 500000.0, + 450000.0 + ], + [ + 500000.0, + 1000000.0, + 0.0 + ], + [ + 1000000.0, + 0.0, + 0.0 + ], + [ + 1000000.0, + 500000.0, + 0.0 + ], + [ + 1000000.0, + 1000000.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 20000.0, + 0, + 200000.0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_scale_1e6_maxside_1e6_dir0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 500000.0, + 0.0 + ], + [ + 0.0, + 1000000.0, + 0.0 + ], + [ + 500000.0, + 0.0, + 0.0 + ], + [ + 500000.0, + 500000.0, + 450000.0 + ], + [ + 500000.0, + 1000000.0, + 0.0 + ], + [ + 1000000.0, + 0.0, + 0.0 + ], + [ + 1000000.0, + 500000.0, + 0.0 + ], + [ + 1000000.0, + 1000000.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 1000000.0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "iso_scale_1e6_dir0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:14877 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 1, + "net": [ + [ + 0.0, + 0.0, + 300000.0 + ], + [ + 0.0, + 500000.0, + 0.0 + ], + [ + 0.0, + 1000000.0, + -300000.0 + ], + [ + 500000.0, + 0.0, + 0.0 + ], + [ + 500000.0, + 500000.0, + 450000.0 + ], + [ + 500000.0, + 1000000.0, + 0.0 + ], + [ + 1000000.0, + 0.0, + -300000.0 + ], + [ + 1000000.0, + 500000.0, + 0.0 + ], + [ + 1000000.0, + 1000000.0, + 300000.0 + ] + ], + "direction": 0, + "controls": [ + 0.01, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_saddle_scale_1e6_dir0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 300000.0 + ], + [ + 0.0, + 500000.0, + 0.0 + ], + [ + 0.0, + 1000000.0, + -300000.0 + ], + [ + 500000.0, + 0.0, + 0.0 + ], + [ + 500000.0, + 500000.0, + 0.0 + ], + [ + 500000.0, + 1000000.0, + 0.0 + ], + [ + 1000000.0, + 0.0, + -300000.0 + ], + [ + 1000000.0, + 500000.0, + 0.0 + ], + [ + 1000000.0, + 1000000.0, + 300000.0 + ] + ], + "direction": 0, + "controls": [ + 2000.0, + 10, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_scale_1e6_chord_dir1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 500000.0, + 0.0 + ], + [ + 0.0, + 1000000.0, + 0.0 + ], + [ + 500000.0, + 0.0, + 0.0 + ], + [ + 500000.0, + 500000.0, + 450000.0 + ], + [ + 500000.0, + 1000000.0, + 0.0 + ], + [ + 1000000.0, + 0.0, + 0.0 + ], + [ + 1000000.0, + 500000.0, + 0.0 + ], + [ + 1000000.0, + 1000000.0, + 0.0 + ] + ], + "direction": 1, + "controls": [ + 20000.0, + 15, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_scale_1e6_angle_dir1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 500000.0, + 0.0 + ], + [ + 0.0, + 1000000.0, + 0.0 + ], + [ + 500000.0, + 0.0, + 0.0 + ], + [ + 500000.0, + 500000.0, + 450000.0 + ], + [ + 500000.0, + 1000000.0, + 0.0 + ], + [ + 1000000.0, + 0.0, + 0.0 + ], + [ + 1000000.0, + 500000.0, + 0.0 + ], + [ + 1000000.0, + 1000000.0, + 0.0 + ] + ], + "direction": 1, + "controls": [ + 0, + 15, + 0 + ], + "diagonals": true, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_scale_1e6_maxside_dir1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 500000.0, + 0.0 + ], + [ + 0.0, + 1000000.0, + 0.0 + ], + [ + 500000.0, + 0.0, + 0.0 + ], + [ + 500000.0, + 500000.0, + 450000.0 + ], + [ + 500000.0, + 1000000.0, + 0.0 + ], + [ + 1000000.0, + 0.0, + 0.0 + ], + [ + 1000000.0, + 500000.0, + 0.0 + ], + [ + 1000000.0, + 1000000.0, + 0.0 + ] + ], + "direction": 1, + "controls": [ + 20000.0, + 0, + 200000.0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_scale_1e6_maxside_1e6_dir1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 500000.0, + 0.0 + ], + [ + 0.0, + 1000000.0, + 0.0 + ], + [ + 500000.0, + 0.0, + 0.0 + ], + [ + 500000.0, + 500000.0, + 450000.0 + ], + [ + 500000.0, + 1000000.0, + 0.0 + ], + [ + 1000000.0, + 0.0, + 0.0 + ], + [ + 1000000.0, + 500000.0, + 0.0 + ], + [ + 1000000.0, + 1000000.0, + 0.0 + ] + ], + "direction": 1, + "controls": [ + 0, + 0, + 1000000.0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "iso_scale_1e6_dir1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:14877 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 1, + "net": [ + [ + 0.0, + 0.0, + 300000.0 + ], + [ + 0.0, + 500000.0, + 0.0 + ], + [ + 0.0, + 1000000.0, + -300000.0 + ], + [ + 500000.0, + 0.0, + 0.0 + ], + [ + 500000.0, + 500000.0, + 450000.0 + ], + [ + 500000.0, + 1000000.0, + 0.0 + ], + [ + 1000000.0, + 0.0, + -300000.0 + ], + [ + 1000000.0, + 500000.0, + 0.0 + ], + [ + 1000000.0, + 1000000.0, + 300000.0 + ] + ], + "direction": 1, + "controls": [ + 0.01, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_saddle_scale_1e6_dir1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 300000.0 + ], + [ + 0.0, + 500000.0, + 0.0 + ], + [ + 0.0, + 1000000.0, + -300000.0 + ], + [ + 500000.0, + 0.0, + 0.0 + ], + [ + 500000.0, + 500000.0, + 0.0 + ], + [ + 500000.0, + 1000000.0, + 0.0 + ], + [ + 1000000.0, + 0.0, + -300000.0 + ], + [ + 1000000.0, + 500000.0, + 0.0 + ], + [ + 1000000.0, + 1000000.0, + 300000.0 + ] + ], + "direction": 1, + "controls": [ + 2000.0, + 10, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_chord_0.0001_dir0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.45 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0.0001, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_chord_0.0001_angle_dir0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.3 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + -0.3 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + -0.3 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.3 + ] + ], + "direction": 0, + "controls": [ + 0.0001, + 20, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_chord_0.0001_dir1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.45 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 1, + "controls": [ + 0.0001, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_chord_0.0001_angle_dir1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.3 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + -0.3 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + -0.3 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.3 + ] + ], + "direction": 1, + "controls": [ + 0.0001, + 20, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "iso_chord_0.0001", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:14877 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 1, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.45 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0.0001, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_chord_1e-05_dir0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.45 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 1e-05, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_chord_1e-05_angle_dir0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.3 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + -0.3 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + -0.3 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.3 + ] + ], + "direction": 0, + "controls": [ + 1e-05, + 20, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_chord_1e-05_dir1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.45 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 1, + "controls": [ + 1e-05, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_chord_1e-05_angle_dir1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.3 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + -0.3 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + -0.3 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.3 + ] + ], + "direction": 1, + "controls": [ + 1e-05, + 20, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "iso_chord_1e-05", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:14877 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 1, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.45 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 1e-05, + 0, + 0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_maxside_1000_dir0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.45 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0.02, + 15, + 1000.0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_maxside_1000_dir1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.45 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 1, + "controls": [ + 0.02, + 15, + 1000.0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_maxside_1000_plane", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 1000.0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ], + "analytic_plane": true + } + }, + { + "name": "splits_maxside_1e+06_dir0", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.45 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0.02, + 15, + 1000000.0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_maxside_1e+06_dir1", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.45 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 1, + "controls": [ + 0.02, + 15, + 1000000.0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ] + } + }, + { + "name": "splits_maxside_1e+06_plane", + "upstream_ref": "source/SMLib/src/SmSurface.cpp:11644 (guard narrowing follow-up to PR #6)", + "inputs": { + "op": 0, + "net": [ + [ + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.5, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.5, + 0.0, + 0.0 + ], + [ + 0.5, + 0.5, + 0.0 + ], + [ + 0.5, + 1.0, + 0.0 + ], + [ + 1.0, + 0.0, + 0.0 + ], + [ + 1.0, + 0.5, + 0.0 + ], + [ + 1.0, + 1.0, + 0.0 + ] + ], + "direction": 0, + "controls": [ + 0, + 0, + 1000000.0 + ], + "diagonals": false, + "domain": [ + 0, + 0, + 1, + 1 + ], + "line": [ + [ + 0.5, + 0.5, + -5 + ], + [ + 0.5, + 0.5, + 5 + ] + ], + "analytic_plane": true + } + } + ] +} \ No newline at end of file diff --git a/plan/modules.toml b/plan/modules.toml index ce64597d69..ce4a25819f 100644 --- a/plan/modules.toml +++ b/plan/modules.toml @@ -1596,7 +1596,7 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin status = "partial" claimed_by = "" claimed_at = "" -notes = "3 fns; largest: SmCSIGlobalSolver::LocalSolve, SmSurface::FindTessellationSplits, SmSurface::CreateIsoBoundaries; cycle back-edges (call into later units; stub or co-port): surface.surface_p5(4), surface.surface_p1(3), surface.surface_p7(2), surface.surface_p4(1), surface.surface_p6(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; Review validation: 778 cases, 727 bit-identical, 0 failed, 51 deferred (intersect.curve_class_p4 50, surface.surface_p6 1); max_rel_err=0; no absolute floors; CO-PORTED(surface.surface_p1): extend the existing CsiGlobalSolver with optional borrowed curve/cache/kernel context; preserve its constructor and implement its solves in p9; wire surface_to_evaluate, is_node_valid and is_point_valid; CSI disjoint fixture passes, crossing defers on surface.surface_p6; 16 explicit analytic-plane non-diagonal fixtures pass; latest main SurfOfRevolution delegates iso construction to its virtual implementation; 18 canonical-cylinder cases pass against C++ (16 splits, 2 iso boundaries)" +notes = "3 fns; largest: SmCSIGlobalSolver::LocalSolve, SmSurface::FindTessellationSplits, SmSurface::CreateIsoBoundaries; cycle back-edges (call into later units; stub or co-port): surface.surface_p5(4), surface.surface_p1(3), surface.surface_p7(2), surface.surface_p4(1), surface.surface_p6(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; Follow-up (guard narrowing): 821 cases, 763 bit-identical, 0 failed, 58 deferred (intersect.curve_class_p4 50, surface.surface_p6 8); --perturb 763/763 detected; max_rel_err=0; FFI guard now only requires finite net/domain/chord/max side/line (CSI domains may be disjoint, touching or slivers; any scale; chord heights below 1e-3; max side above 100), keeping the [0,1] split/iso domain, the angle range, revolution-CSI rejection (one-node Rust harness tree does not model BuildTree) and the shim all-degenerate 0 Date: Wed, 14 Oct 2026 19:01:42 +0000 Subject: [PATCH 46/54] plan/PROGRESS.md: regenerate [skip ci] --- plan/PROGRESS.md | 61 ++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/plan/PROGRESS.md b/plan/PROGRESS.md index 74186c6584..83fc95a502 100644 --- a/plan/PROGRESS.md +++ b/plan/PROGRESS.md @@ -2,13 +2,15 @@ Generated from `plan/modules.toml` by `harness/plan/progress.py`; do not edit by hand. -**135 / 261 units ported** (87 green, 48 partial), **176,924 / 387,903 upstream lines (45.6%)**. 16 claimed, 0 blocked, 110 todo. +**136 / 261 units ported** (87 green, 49 partial), **179,011 / 387,903 upstream lines (46.1%)**. 15 claimed, 0 blocked, 110 todo. Legend: โœ… green (identical to C++) ยท ๐ŸŸก partial (passes; some cases wait on unported code) ยท ๐Ÿ”จ claimed ยท โ–ถ๏ธ ready (all dependencies done) ยท โณ claimable, dependencies still missing ยท โ›” blocked. ## Ready to claim now - [ ] โ–ถ๏ธ `surface.cone_p2` (1656 lines) โ€” ready +- [ ] โ–ถ๏ธ `intersect.curve_class_p7` (2248 lines) โ€” ready +- [ ] โ–ถ๏ธ `topology.proto_topology_p1` (2746 lines) โ€” ready ## Claimable now, dependencies still missing @@ -21,25 +23,23 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] `intersect.surface_drop_lib_p1` (1478 lines) โ€” missing: `surface.surface_p3` - [ ] `surface.surface_p11` (1789 lines) โ€” missing: `surface.surface_p3`, `surface.surface_p5`, `surface.surface_p6` - [ ] `surface.surface_p8` (2374 lines) โ€” missing: `surface.surface_p3`, `surface.surface_p4`, `surface.surface_p5`, `surface.surface_p6` -- [ ] `intersect.curve_class_p7` (2248 lines) โ€” missing: `intersect.curve_class_p1` - [ ] `intersect.surface_drop_curve` (2014 lines) โ€” missing: `surface.surface_p5` - [ ] `intersect.surface_drop_lib_p2` (1080 lines) โ€” missing: `intersect.surface_drop_lib_p1`, `surface.surface_p5` -- [ ] `topology.proto_topology_p1` (2746 lines) โ€” missing: `intersect.curve_class_p1` -- [ ] `intersect.curve_class_p2` (1928 lines) โ€” missing: `intersect.curve_class_p1`, `intersect.curve_class_p7` +- [ ] `intersect.curve_class_p2` (1928 lines) โ€” missing: `intersect.curve_class_p7` - [ ] `intersect.surface_drop_lib_p3` (2062 lines) โ€” missing: `intersect.surface_drop_lib_p1`, `intersect.surface_drop_lib_p2`, `surface.offset_surface`, `surface.surface_p3` +2 more - [ ] `surface.surface_point_solve_p2` (1882 lines) โ€” missing: `surface.surface_point_solve_p1` -- [ ] `intersect.curve_class_p3` (1986 lines) โ€” missing: `intersect.curve_class_p1`, `intersect.curve_class_p2`, `intersect.curve_class_p7` -- [ ] `intersect.curve_class_p4` (2022 lines) โ€” missing: `intersect.curve_class_p1`, `intersect.curve_class_p2`, `intersect.curve_class_p7` +- [ ] `intersect.curve_class_p3` (1986 lines) โ€” missing: `intersect.curve_class_p2`, `intersect.curve_class_p7` +- [ ] `intersect.curve_class_p4` (2022 lines) โ€” missing: `intersect.curve_class_p2`, `intersect.curve_class_p7` - [ ] `surface.surface_point_solve_p3` (1282 lines) โ€” missing: `surface.surface_p4`, `surface.surface_point_solve_p1`, `surface.surface_point_solve_p2` -- [ ] `intersect.curve_class_p6` (2213 lines) โ€” missing: `intersect.curve_class_p1`, `intersect.curve_class_p2`, `intersect.curve_class_p3`, `intersect.curve_class_p4` +1 more +- [ ] `intersect.curve_class_p6` (2213 lines) โ€” missing: `intersect.curve_class_p2`, `intersect.curve_class_p3`, `intersect.curve_class_p4`, `intersect.curve_class_p7` - [ ] `intersect.surface_intersector_p4` (1570 lines) โ€” missing: `intersect.surface_intersector_p3` -- [ ] `topology.face_p2` (1827 lines) โ€” missing: `intersect.curve_class_p1`, `surface.offset_surface`, `topology.edgeuse_p1` -- [ ] `intersect.curve_class_p5` (2017 lines) โ€” missing: `intersect.curve_class_p1`, `intersect.curve_class_p2`, `intersect.curve_class_p3`, `intersect.curve_class_p6` +1 more +- [ ] `topology.face_p2` (1827 lines) โ€” missing: `surface.offset_surface`, `topology.edgeuse_p1` +- [ ] `intersect.curve_class_p5` (2017 lines) โ€” missing: `intersect.curve_class_p2`, `intersect.curve_class_p3`, `intersect.curve_class_p6`, `intersect.curve_class_p7` - [ ] `intersect.surface_intersector_p5` (622 lines) โ€” missing: `intersect.surface_intersector_p3`, `intersect.surface_intersector_p4` - [ ] `topology.edgeuse_p2` (600 lines) โ€” missing: `topology.edgeuse_p1`, `topology.face_p2` - [ ] `topology.shell` (750 lines) โ€” missing: `topology.edgeuse_p1`, `topology.proto_topology_p1` -- [ ] `intersect.curve_class_p8` (1900 lines) โ€” missing: `intersect.curve_class_p1`, `intersect.curve_class_p3`, `intersect.curve_class_p5` -- [ ] `intersect.curve_class_p9` (1220 lines) โ€” missing: `intersect.curve_class_p1`, `intersect.curve_class_p3`, `intersect.curve_class_p5` +- [ ] `intersect.curve_class_p8` (1900 lines) โ€” missing: `intersect.curve_class_p3`, `intersect.curve_class_p5` +- [ ] `intersect.curve_class_p9` (1220 lines) โ€” missing: `intersect.curve_class_p3`, `intersect.curve_class_p5` - [ ] `topology.vertexuse` (1429 lines) โ€” missing: `topology.edgeuse_p1`, `topology.face_p2` - [ ] `topology.vertex` (824 lines) โ€” missing: `topology.edgeuse_p1`, `topology.proto_topology_p1`, `topology.vertexuse` - [ ] `topology.loopuse` (892 lines) โ€” missing: `topology.edgeuse_p1`, `topology.face_p2`, `topology.vertexuse` @@ -50,50 +50,50 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] `topology.edgeuse_p3` (2273 lines) โ€” missing: `surface.surface_p5`, `topology.edge`, `topology.edgeuse_p1` - [ ] `topology.trimming_tools` (2878 lines) โ€” missing: `topology.edgeuse_p1`, `topology.face_p2`, `topology.loopuse` - [ ] `heal.gap` (1475 lines) โ€” missing: `topology.edgeuse_p1`, `topology.vertexuse` -- [ ] `topology.face_p4` (1812 lines) โ€” missing: `intersect.curve_class_p1`, `intersect.curve_class_p7`, `topology.edgeuse_p1`, `topology.face_p2` +3 more -- [ ] `query.face_p2` (1161 lines) โ€” missing: `intersect.curve_class_p1`, `topology.face_p2`, `topology.face_p4` +- [ ] `topology.face_p4` (1812 lines) โ€” missing: `intersect.curve_class_p7`, `topology.edgeuse_p1`, `topology.face_p2`, `topology.loopuse` +2 more +- [ ] `query.face_p2` (1161 lines) โ€” missing: `topology.face_p2`, `topology.face_p4` - [ ] `topology.brep_p10` (1890 lines) โ€” missing: `topology.edge`, `topology.edgeuse_p1`, `topology.proto_topology_p1`, `topology.shell` +1 more - [ ] `topology.face_p3` (1881 lines) โ€” missing: `topology.edge`, `topology.edgeuse_p1`, `topology.edgeuse_p3`, `topology.face_p2` +3 more - [ ] `topology.topology_traverser` (784 lines) โ€” missing: `topology.edge`, `topology.edgeuse_p1`, `topology.face_p2`, `topology.vertex` +1 more - [ ] `query.face_p3` (1620 lines) โ€” missing: `query.face_p2`, `topology.edge`, `topology.edgeuse_p1`, `topology.face_p2` +2 more - [ ] `query.poly` (2119 lines) โ€” missing: `topology.proto_topology_p1` -- [ ] `topology.brep_p7` (2503 lines) โ€” missing: `intersect.curve_class_p1`, `topology.brep_p10`, `topology.edge`, `topology.edgeuse_p1` +3 more -- [ ] `topology.face_p1` (2171 lines) โ€” missing: `intersect.curve_class_p1`, `topology.edgeuse_p1`, `topology.face_p2`, `topology.face_p3` +3 more +- [ ] `topology.brep_p7` (2503 lines) โ€” missing: `topology.brep_p10`, `topology.edge`, `topology.edgeuse_p1`, `topology.face_p2` +2 more +- [ ] `topology.face_p1` (2171 lines) โ€” missing: `topology.edgeuse_p1`, `topology.face_p2`, `topology.face_p3`, `topology.face_p4` +2 more - [ ] `query.face_p1` (465 lines) โ€” missing: `query.face_p2`, `query.face_p3`, `topology.edge`, `topology.edgeuse_p1` +3 more -- [ ] `query.face_p4` (1432 lines) โ€” missing: `intersect.curve_class_p1`, `query.face_p3`, `topology.face_p2`, `topology.loopuse` +- [ ] `query.face_p4` (1432 lines) โ€” missing: `query.face_p3`, `topology.face_p2`, `topology.loopuse` - [ ] `query.tess` (838 lines) โ€” missing: `query.poly` - [ ] `topology.brep_p1` (2454 lines) โ€” missing: `topology.edge`, `topology.edgeuse_p1`, `topology.edgeuse_p3`, `topology.face_p2` +5 more - [ ] `topology.brep_p6` (1479 lines) โ€” missing: `topology.edge`, `topology.edgeuse_p1`, `topology.edgeuse_p2`, `topology.edgeuse_p3` +6 more -- [ ] `heal.face_props` (1410 lines) โ€” missing: `intersect.curve_class_p1`, `topology.face_p2`, `topology.loopuse` +- [ ] `heal.face_props` (1410 lines) โ€” missing: `topology.face_p2`, `topology.loopuse` - [ ] `topology.brep_cache` (389 lines) โ€” missing: `topology.brep_p1`, `topology.edge` - [ ] `topology.brep_p4` (2113 lines) โ€” missing: `topology.brep_p1`, `topology.edge`, `topology.edgeuse_p1`, `topology.face_p1` +6 more - [ ] `topology.brep_p9` (2443 lines) โ€” missing: `topology.brep_p1`, `topology.edge`, `topology.edgeuse_p1`, `topology.face_p1` +7 more -- [ ] `topology.brep_p2` (2443 lines) โ€” missing: `intersect.curve_class_p1`, `surface.offset_surface`, `topology.brep_cache`, `topology.brep_p1` +8 more +- [ ] `topology.brep_p2` (2443 lines) โ€” missing: `surface.offset_surface`, `topology.brep_cache`, `topology.brep_p1`, `topology.edge` +7 more - [ ] `topology.brep_p5` (2193 lines) โ€” missing: `topology.brep_p1`, `topology.brep_p4`, `topology.edge`, `topology.edgeuse_p1` +6 more - [ ] `blend.fillet_geom_p1` (2113 lines) โ€” missing: `surface.offset_surface`, `topology.brep_p1`, `topology.brep_p2`, `topology.edge` +5 more - [ ] `heal.heal_data_p2` (2160 lines) โ€” missing: `heal.face_props`, `topology.edge`, `topology.vertex` - [ ] `mass.integrator` (1031 lines) โ€” missing: `topology.brep_p1`, `topology.brep_p2`, `topology.edge`, `topology.edgeuse_p1` +2 more - [ ] `query.brep` (517 lines) โ€” missing: `topology.brep_p1`, `topology.brep_p2` - [ ] `topology.brep_p3` (2503 lines) โ€” missing: `topology.brep_p1`, `topology.brep_p2`, `topology.brep_p4`, `topology.brep_p9` +11 more -- [ ] `topology.proto_topology_p2` (2091 lines) โ€” missing: `intersect.curve_class_p1`, `topology.edge`, `topology.face_p2`, `topology.proto_topology_p1` +- [ ] `topology.proto_topology_p2` (2091 lines) โ€” missing: `topology.edge`, `topology.face_p2`, `topology.proto_topology_p1` - [ ] `blend.fillet_solver_p1` (1861 lines) โ€” missing: `blend.fillet_geom_p1`, `surface.offset_surface`, `topology.edge`, `topology.edgeuse_p1` +1 more -- [ ] `blend.hcr` (1875 lines) โ€” missing: `intersect.curve_class_p1`, `intersect.ray_tracer`, `topology.brep_p1`, `topology.edge` +2 more +- [ ] `blend.hcr` (1875 lines) โ€” missing: `intersect.ray_tracer`, `topology.brep_p1`, `topology.edge`, `topology.edgeuse_p1` +1 more - [ ] `heal.heal_data_p1` (922 lines) โ€” missing: `heal.heal_data_p2`, `topology.brep_p1` - [ ] `heal.stitch_p1` (2037 lines) โ€” missing: `topology.brep_p1`, `topology.brep_p5`, `topology.edge`, `topology.edgeuse_p1` +3 more - [ ] `primitive.primitive_creation_p1` (2322 lines) โ€” missing: `topology.brep_p1`, `topology.brep_p5`, `topology.brep_p8`, `topology.edge` +2 more - [ ] `query.api_queries` (809 lines) โ€” missing: `intersect.topology_solver_p2`, `query.brep`, `query.edge`, `topology.brep_p1` +1 more -- [ ] `topology.proto_topology_p3` (1577 lines) โ€” missing: `intersect.curve_class_p1`, `topology.edge`, `topology.proto_topology_p1`, `topology.proto_topology_p2` +- [ ] `topology.proto_topology_p3` (1577 lines) โ€” missing: `topology.edge`, `topology.proto_topology_p1`, `topology.proto_topology_p2` - [ ] `blend.fillet_intersector` (1708 lines) โ€” missing: `blend.fillet_geom_p1`, `blend.fillet_solver_p1`, `topology.edge` -- [ ] `blend.fillet_solver_p5` (848 lines) โ€” missing: `blend.fillet_geom_p1`, `blend.fillet_solver_p1`, `intersect.curve_class_p1`, `surface.offset_surface` +1 more +- [ ] `blend.fillet_solver_p5` (848 lines) โ€” missing: `blend.fillet_geom_p1`, `blend.fillet_solver_p1`, `surface.offset_surface`, `topology.edge` - [ ] `blend.fillet_standard_solver_p1` (2336 lines) โ€” missing: `blend.fillet_solver_p1`, `surface.offset_surface`, `topology.edgeuse_p1` -- [ ] `boolean.topology_intersector_p1` (2491 lines) โ€” missing: `intersect.curve_class_p1`, `topology.edge`, `topology.face_p2`, `topology.face_p4` +4 more +- [ ] `boolean.topology_intersector_p1` (2491 lines) โ€” missing: `topology.edge`, `topology.face_p2`, `topology.face_p4`, `topology.proto_topology_p1` +3 more - [ ] `heal.heal_data_p3` (1967 lines) โ€” missing: `heal.face_props`, `heal.heal_data_p1`, `heal.heal_data_p2`, `topology.brep_p5` +3 more - [ ] `heal.stitch_p2` (1906 lines) โ€” missing: `heal.stitch_p1`, `topology.brep_p1`, `topology.edge`, `topology.face_p3` +1 more - [ ] `blend.fillet_solver_p4` (1404 lines) โ€” missing: `blend.fillet_geom_p1`, `blend.fillet_intersector`, `blend.fillet_solver_p1`, `surface.offset_surface` +2 more -- [ ] `boolean.topology_intersector_p2` (2195 lines) โ€” missing: `boolean.topology_intersector_p1`, `intersect.curve_class_p1`, `topology.edge`, `topology.face_p2` +4 more +- [ ] `boolean.topology_intersector_p2` (2195 lines) โ€” missing: `boolean.topology_intersector_p1`, `topology.edge`, `topology.face_p2`, `topology.face_p4` +3 more - [ ] `offset.offset_geometry_creation` (2652 lines) โ€” missing: `surface.offset_surface`, `topology.edge`, `topology.edgeuse_p1`, `topology.vertex` - [ ] `sweep.topology_sweep` (2456 lines) โ€” missing: `heal.stitch_p1`, `topology.brep_p1`, `topology.brep_p3`, `topology.brep_p5` +6 more -- [ ] `boolean.topology_intersector_p3` (1849 lines) โ€” missing: `boolean.topology_intersector_p1`, `boolean.topology_intersector_p2`, `intersect.curve_class_p1`, `topology.edge` +2 more +- [ ] `boolean.topology_intersector_p3` (1849 lines) โ€” missing: `boolean.topology_intersector_p1`, `boolean.topology_intersector_p2`, `topology.edge`, `topology.edgeuse_p1` +1 more - [ ] `sweep.rotational_sweep_geometry` (1542 lines) โ€” missing: `sweep.topology_sweep`, `topology.edge` - [ ] `sweep.trans_sweep_geometry` (817 lines) โ€” missing: `sweep.topology_sweep`, `topology.edge` - [ ] `boolean.merge_p1` (993 lines) โ€” missing: `boolean.topology_intersector_p1`, `topology.brep_p1`, `topology.edge`, `topology.edgeuse_p1` +4 more @@ -108,7 +108,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] `primitive.primitive_creation_p2` (2258 lines) โ€” missing: `primitive.primitive_creation_p1`, `primitive.primitive_creation_p3`, `topology.brep_p1`, `topology.brep_p4` +3 more - [ ] `blend.fillet_corner_p1` (1971 lines) โ€” missing: `blend.fillet_executive_p1`, `blend.fillet_geom_p1`, `blend.fillet_solver_p1`, `blend.fillet_standard_solver_p1` +4 more - [ ] `blend.fillet_solver_p2` (1939 lines) โ€” missing: `blend.fillet_executive_p1`, `blend.fillet_geom_p1`, `blend.fillet_solver_p1`, `topology.edge` +2 more -- [ ] `blend.fillet_solver_p3` (1112 lines) โ€” missing: `blend.fillet_geom_p1`, `blend.fillet_solver_p1`, `intersect.curve_class_p1`, `surface.offset_surface` +3 more +- [ ] `blend.fillet_solver_p3` (1112 lines) โ€” missing: `blend.fillet_geom_p1`, `blend.fillet_solver_p1`, `surface.offset_surface`, `topology.edge` +2 more - [ ] `offset.offset_executive_p1` (2107 lines) โ€” missing: `offset.offset_geometry_creation`, `surface.offset_surface`, `topology.brep_p1`, `topology.edge` +3 more - [ ] `primitive.api_primitives` (885 lines) โ€” missing: `primitive.primitive_creation_p1`, `primitive.primitive_creation_p2` - [ ] `sweep.api_brep` (529 lines) โ€” missing: `primitive.primitive_creation_p2`, `primitive.primitive_creation_p3` @@ -134,7 +134,6 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐Ÿ”จ `surface.surface_p5` (2321 lines) โ€” in progress: #50 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.srf_in_volume` (779 lines) โ€” in progress: #53 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.surface_p3` (1794 lines) โ€” in progress: #52 @froglemonade2 (ready for review) -- [ ] ๐Ÿ”จ `intersect.curve_class_p1` (2087 lines) โ€” in progress: #47 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `surface.offset_surface` (1787 lines) โ€” in progress: #62 @Pluto-XI (draft) - [ ] ๐Ÿ”จ `intersect.ray_tracer` (1246 lines) โ€” in progress: #48 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.surface_point_solve_p1` (1771 lines) โ€” in progress: #58 @bherbruck (ready for review) @@ -304,7 +303,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [x] โœ… `topology.database_io` (363 lines) โ€” green, 2059 cases - [x] โœ… `topology.topology` (389 lines) โ€” green, 657 cases - [ ] ๐ŸŸก `topology.brep_data` (1466 lines) โ€” partial, 2379 cases -- [ ] โณ `topology.proto_topology_p1` (2746 lines) โ€” waiting +- [ ] โ–ถ๏ธ `topology.proto_topology_p1` (2746 lines) โ€” ready - [ ] ๐Ÿ”จ `topology.edgeuse_p1` (1157 lines) โ€” in progress: #55 @bherbruck (ready for review) - [ ] โณ `topology.face_p2` (1827 lines) โ€” waiting - [ ] โณ `topology.edgeuse_p2` (600 lines) โ€” waiting @@ -333,14 +332,14 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] โณ `topology.proto_topology_p2` (2091 lines) โ€” waiting - [ ] โณ `topology.proto_topology_p3` (1577 lines) โ€” waiting -### intersect (7/25) +### intersect (8/25) - [ ] ๐ŸŸก `intersect.surface_tracer` (1900 lines) โ€” partial, 427 cases - [ ] ๐ŸŸก `intersect.point_class` (909 lines) โ€” partial, 2511 cases -- [ ] ๐Ÿ”จ `intersect.curve_class_p1` (2087 lines) โ€” in progress: #47 @bherbruck (ready for review) +- [ ] ๐ŸŸก `intersect.curve_class_p1` (2087 lines) โ€” partial, 2088 cases - [ ] โณ `intersect.surface_drop_lib_p1` (1478 lines) โ€” waiting - [ ] ๐ŸŸก `intersect.surface_silhouette` (979 lines) โ€” partial, 709 cases -- [ ] โณ `intersect.curve_class_p7` (2248 lines) โ€” waiting +- [ ] โ–ถ๏ธ `intersect.curve_class_p7` (2248 lines) โ€” ready - [ ] ๐Ÿ”จ `intersect.ray_tracer` (1246 lines) โ€” in progress: #48 @froglemonade2 (ready for review) - [ ] โณ `intersect.surface_drop_curve` (2014 lines) โ€” waiting - [ ] โณ `intersect.surface_drop_lib_p2` (1080 lines) โ€” waiting From d0e0190ca2fe607e21bf7eaa10d380cf778baf6f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 19:02:51 +0000 Subject: [PATCH 47/54] plan/PROGRESS.md: regenerate [skip ci] --- plan/PROGRESS.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/plan/PROGRESS.md b/plan/PROGRESS.md index 83fc95a502..a479ba2c7a 100644 --- a/plan/PROGRESS.md +++ b/plan/PROGRESS.md @@ -2,7 +2,7 @@ Generated from `plan/modules.toml` by `harness/plan/progress.py`; do not edit by hand. -**136 / 261 units ported** (87 green, 49 partial), **179,011 / 387,903 upstream lines (46.1%)**. 15 claimed, 0 blocked, 110 todo. +**137 / 261 units ported** (87 green, 50 partial), **180,782 / 387,903 upstream lines (46.6%)**. 14 claimed, 0 blocked, 110 todo. Legend: โœ… green (identical to C++) ยท ๐ŸŸก partial (passes; some cases wait on unported code) ยท ๐Ÿ”จ claimed ยท โ–ถ๏ธ ready (all dependencies done) ยท โณ claimable, dependencies still missing ยท โ›” blocked. @@ -11,6 +11,7 @@ Legend: โœ… green (identical to C++) ยท ๐ŸŸก partial (passes; some cases wait on - [ ] โ–ถ๏ธ `surface.cone_p2` (1656 lines) โ€” ready - [ ] โ–ถ๏ธ `intersect.curve_class_p7` (2248 lines) โ€” ready - [ ] โ–ถ๏ธ `topology.proto_topology_p1` (2746 lines) โ€” ready +- [ ] โ–ถ๏ธ `surface.surface_point_solve_p2` (1882 lines) โ€” ready ## Claimable now, dependencies still missing @@ -27,10 +28,9 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] `intersect.surface_drop_lib_p2` (1080 lines) โ€” missing: `intersect.surface_drop_lib_p1`, `surface.surface_p5` - [ ] `intersect.curve_class_p2` (1928 lines) โ€” missing: `intersect.curve_class_p7` - [ ] `intersect.surface_drop_lib_p3` (2062 lines) โ€” missing: `intersect.surface_drop_lib_p1`, `intersect.surface_drop_lib_p2`, `surface.offset_surface`, `surface.surface_p3` +2 more -- [ ] `surface.surface_point_solve_p2` (1882 lines) โ€” missing: `surface.surface_point_solve_p1` - [ ] `intersect.curve_class_p3` (1986 lines) โ€” missing: `intersect.curve_class_p2`, `intersect.curve_class_p7` - [ ] `intersect.curve_class_p4` (2022 lines) โ€” missing: `intersect.curve_class_p2`, `intersect.curve_class_p7` -- [ ] `surface.surface_point_solve_p3` (1282 lines) โ€” missing: `surface.surface_p4`, `surface.surface_point_solve_p1`, `surface.surface_point_solve_p2` +- [ ] `surface.surface_point_solve_p3` (1282 lines) โ€” missing: `surface.surface_p4`, `surface.surface_point_solve_p2` - [ ] `intersect.curve_class_p6` (2213 lines) โ€” missing: `intersect.curve_class_p2`, `intersect.curve_class_p3`, `intersect.curve_class_p4`, `intersect.curve_class_p7` - [ ] `intersect.surface_intersector_p4` (1570 lines) โ€” missing: `intersect.surface_intersector_p3` - [ ] `topology.face_p2` (1827 lines) โ€” missing: `surface.offset_surface`, `topology.edgeuse_p1` @@ -136,7 +136,6 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐Ÿ”จ `surface.surface_p3` (1794 lines) โ€” in progress: #52 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.offset_surface` (1787 lines) โ€” in progress: #62 @Pluto-XI (draft) - [ ] ๐Ÿ”จ `intersect.ray_tracer` (1246 lines) โ€” in progress: #48 @froglemonade2 (ready for review) -- [ ] ๐Ÿ”จ `surface.surface_point_solve_p1` (1771 lines) โ€” in progress: #58 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `topology.edgeuse_p1` (1157 lines) โ€” in progress: #55 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `intersect.surface_intersector_p3` (1932 lines) โ€” in progress: #56 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `intersect.topology_solver_p2` (1391 lines) โ€” in progress: #60 @0xlillith (draft) @@ -255,7 +254,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐ŸŸก `curve.curve_p5` (2299 lines) โ€” partial, 3097 cases - [ ] ๐Ÿ”จ `curve.curve_p9` (1783 lines) โ€” in progress: #13 @froglemonade2 (ready for review) -### surface (22/40) +### surface (23/40) - [ ] ๐ŸŸก `surface.volume_p1` (2014 lines) โ€” partial, 2886 cases - [x] โœ… `surface.b_spline_volume` (1226 lines) โ€” green, 2333 cases @@ -294,8 +293,8 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐Ÿ”จ `surface.offset_surface` (1787 lines) โ€” in progress: #62 @Pluto-XI (draft) - [ ] โณ `surface.surface_p11` (1789 lines) โ€” waiting - [ ] โณ `surface.surface_p8` (2374 lines) โ€” waiting -- [ ] ๐Ÿ”จ `surface.surface_point_solve_p1` (1771 lines) โ€” in progress: #58 @bherbruck (ready for review) -- [ ] โณ `surface.surface_point_solve_p2` (1882 lines) โ€” waiting +- [ ] ๐ŸŸก `surface.surface_point_solve_p1` (1771 lines) โ€” partial, 1035 cases +- [ ] โ–ถ๏ธ `surface.surface_point_solve_p2` (1882 lines) โ€” ready - [ ] โณ `surface.surface_point_solve_p3` (1282 lines) โ€” waiting ### topology (3/31) From 21ceeb3985d313fe332982730abb55f78f9f7c2e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 19:04:51 +0000 Subject: [PATCH 48/54] plan/PROGRESS.md: regenerate [skip ci] --- plan/PROGRESS.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/plan/PROGRESS.md b/plan/PROGRESS.md index a479ba2c7a..aa34093285 100644 --- a/plan/PROGRESS.md +++ b/plan/PROGRESS.md @@ -2,16 +2,16 @@ Generated from `plan/modules.toml` by `harness/plan/progress.py`; do not edit by hand. -**137 / 261 units ported** (87 green, 50 partial), **180,782 / 387,903 upstream lines (46.6%)**. 14 claimed, 0 blocked, 110 todo. +**138 / 261 units ported** (87 green, 51 partial), **182,714 / 387,903 upstream lines (47.1%)**. 14 claimed, 0 blocked, 109 todo. Legend: โœ… green (identical to C++) ยท ๐ŸŸก partial (passes; some cases wait on unported code) ยท ๐Ÿ”จ claimed ยท โ–ถ๏ธ ready (all dependencies done) ยท โณ claimable, dependencies still missing ยท โ›” blocked. ## Ready to claim now - [ ] โ–ถ๏ธ `surface.cone_p2` (1656 lines) โ€” ready -- [ ] โ–ถ๏ธ `intersect.curve_class_p7` (2248 lines) โ€” ready - [ ] โ–ถ๏ธ `topology.proto_topology_p1` (2746 lines) โ€” ready - [ ] โ–ถ๏ธ `surface.surface_point_solve_p2` (1882 lines) โ€” ready +- [ ] โ–ถ๏ธ `intersect.surface_intersector_p4` (1570 lines) โ€” ready ## Claimable now, dependencies still missing @@ -32,10 +32,9 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] `intersect.curve_class_p4` (2022 lines) โ€” missing: `intersect.curve_class_p2`, `intersect.curve_class_p7` - [ ] `surface.surface_point_solve_p3` (1282 lines) โ€” missing: `surface.surface_p4`, `surface.surface_point_solve_p2` - [ ] `intersect.curve_class_p6` (2213 lines) โ€” missing: `intersect.curve_class_p2`, `intersect.curve_class_p3`, `intersect.curve_class_p4`, `intersect.curve_class_p7` -- [ ] `intersect.surface_intersector_p4` (1570 lines) โ€” missing: `intersect.surface_intersector_p3` - [ ] `topology.face_p2` (1827 lines) โ€” missing: `surface.offset_surface`, `topology.edgeuse_p1` - [ ] `intersect.curve_class_p5` (2017 lines) โ€” missing: `intersect.curve_class_p2`, `intersect.curve_class_p3`, `intersect.curve_class_p6`, `intersect.curve_class_p7` -- [ ] `intersect.surface_intersector_p5` (622 lines) โ€” missing: `intersect.surface_intersector_p3`, `intersect.surface_intersector_p4` +- [ ] `intersect.surface_intersector_p5` (622 lines) โ€” missing: `intersect.surface_intersector_p4` - [ ] `topology.edgeuse_p2` (600 lines) โ€” missing: `topology.edgeuse_p1`, `topology.face_p2` - [ ] `topology.shell` (750 lines) โ€” missing: `topology.edgeuse_p1`, `topology.proto_topology_p1` - [ ] `intersect.curve_class_p8` (1900 lines) โ€” missing: `intersect.curve_class_p3`, `intersect.curve_class_p5` @@ -135,9 +134,9 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐Ÿ”จ `surface.srf_in_volume` (779 lines) โ€” in progress: #53 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.surface_p3` (1794 lines) โ€” in progress: #52 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.offset_surface` (1787 lines) โ€” in progress: #62 @Pluto-XI (draft) +- [ ] ๐Ÿ”จ `intersect.curve_class_p7` (2248 lines) โ€” in progress: #65 @bherbruck (draft) - [ ] ๐Ÿ”จ `intersect.ray_tracer` (1246 lines) โ€” in progress: #48 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `topology.edgeuse_p1` (1157 lines) โ€” in progress: #55 @bherbruck (ready for review) -- [ ] ๐Ÿ”จ `intersect.surface_intersector_p3` (1932 lines) โ€” in progress: #56 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `intersect.topology_solver_p2` (1391 lines) โ€” in progress: #60 @0xlillith (draft) - [ ] ๐Ÿ”จ `query.loop` (830 lines) โ€” in progress: #63 @bherbruck (draft) @@ -331,14 +330,14 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] โณ `topology.proto_topology_p2` (2091 lines) โ€” waiting - [ ] โณ `topology.proto_topology_p3` (1577 lines) โ€” waiting -### intersect (8/25) +### intersect (9/25) - [ ] ๐ŸŸก `intersect.surface_tracer` (1900 lines) โ€” partial, 427 cases - [ ] ๐ŸŸก `intersect.point_class` (909 lines) โ€” partial, 2511 cases - [ ] ๐ŸŸก `intersect.curve_class_p1` (2087 lines) โ€” partial, 2088 cases - [ ] โณ `intersect.surface_drop_lib_p1` (1478 lines) โ€” waiting - [ ] ๐ŸŸก `intersect.surface_silhouette` (979 lines) โ€” partial, 709 cases -- [ ] โ–ถ๏ธ `intersect.curve_class_p7` (2248 lines) โ€” ready +- [ ] ๐Ÿ”จ `intersect.curve_class_p7` (2248 lines) โ€” in progress: #65 @bherbruck (draft) - [ ] ๐Ÿ”จ `intersect.ray_tracer` (1246 lines) โ€” in progress: #48 @froglemonade2 (ready for review) - [ ] โณ `intersect.surface_drop_curve` (2014 lines) โ€” waiting - [ ] โณ `intersect.surface_drop_lib_p2` (1080 lines) โ€” waiting @@ -350,9 +349,9 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐ŸŸก `intersect.surface_intersector_p2` (1677 lines) โ€” partial, 1660 cases - [ ] โณ `intersect.curve_class_p3` (1986 lines) โ€” waiting - [ ] โณ `intersect.curve_class_p4` (2022 lines) โ€” waiting -- [ ] ๐Ÿ”จ `intersect.surface_intersector_p3` (1932 lines) โ€” in progress: #56 @bherbruck (ready for review) +- [ ] ๐ŸŸก `intersect.surface_intersector_p3` (1932 lines) โ€” partial, 1527 cases - [ ] โณ `intersect.curve_class_p6` (2213 lines) โ€” waiting -- [ ] โณ `intersect.surface_intersector_p4` (1570 lines) โ€” waiting +- [ ] โ–ถ๏ธ `intersect.surface_intersector_p4` (1570 lines) โ€” ready - [ ] ๐Ÿ”จ `intersect.topology_solver_p2` (1391 lines) โ€” in progress: #60 @0xlillith (draft) - [ ] โณ `intersect.curve_class_p5` (2017 lines) โ€” waiting - [ ] โณ `intersect.surface_intersector_p5` (622 lines) โ€” waiting From 569d81632514f46ea3a4e23ad8d1673e1eeb2777 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 19:08:15 +0000 Subject: [PATCH 49/54] plan/PROGRESS.md: regenerate [skip ci] --- plan/PROGRESS.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/plan/PROGRESS.md b/plan/PROGRESS.md index aa34093285..3d4a7dd0fc 100644 --- a/plan/PROGRESS.md +++ b/plan/PROGRESS.md @@ -2,15 +2,13 @@ Generated from `plan/modules.toml` by `harness/plan/progress.py`; do not edit by hand. -**138 / 261 units ported** (87 green, 51 partial), **182,714 / 387,903 upstream lines (47.1%)**. 14 claimed, 0 blocked, 109 todo. +**139 / 261 units ported** (88 green, 51 partial), **184,341 / 387,903 upstream lines (47.5%)**. 15 claimed, 0 blocked, 107 todo. Legend: โœ… green (identical to C++) ยท ๐ŸŸก partial (passes; some cases wait on unported code) ยท ๐Ÿ”จ claimed ยท โ–ถ๏ธ ready (all dependencies done) ยท โณ claimable, dependencies still missing ยท โ›” blocked. ## Ready to claim now - [ ] โ–ถ๏ธ `surface.cone_p2` (1656 lines) โ€” ready -- [ ] โ–ถ๏ธ `topology.proto_topology_p1` (2746 lines) โ€” ready -- [ ] โ–ถ๏ธ `surface.surface_point_solve_p2` (1882 lines) โ€” ready - [ ] โ–ถ๏ธ `intersect.surface_intersector_p4` (1570 lines) โ€” ready ## Claimable now, dependencies still missing @@ -127,7 +125,6 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐Ÿ”จ `curve.curve_p9` (1783 lines) โ€” in progress: #13 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.surf_of_revolution_p2` (1369 lines) โ€” in progress: #51 @froglemonade2 (ready for review) -- [ ] ๐Ÿ”จ `surface.plane_p2` (1627 lines) โ€” in progress: #40 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `surface.surface_p4` (2270 lines) โ€” in progress: #49 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.surf_of_extrusion_p2` (1420 lines) โ€” in progress: #57 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `surface.surface_p5` (2321 lines) โ€” in progress: #50 @froglemonade2 (ready for review) @@ -136,9 +133,11 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐Ÿ”จ `surface.offset_surface` (1787 lines) โ€” in progress: #62 @Pluto-XI (draft) - [ ] ๐Ÿ”จ `intersect.curve_class_p7` (2248 lines) โ€” in progress: #65 @bherbruck (draft) - [ ] ๐Ÿ”จ `intersect.ray_tracer` (1246 lines) โ€” in progress: #48 @froglemonade2 (ready for review) +- [ ] ๐Ÿ”จ `topology.proto_topology_p1` (2746 lines) โ€” in progress: #67 @bherbruck (draft) +- [ ] ๐Ÿ”จ `surface.surface_point_solve_p2` (1882 lines) โ€” in progress: #66 @bherbruck (draft) - [ ] ๐Ÿ”จ `topology.edgeuse_p1` (1157 lines) โ€” in progress: #55 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `intersect.topology_solver_p2` (1391 lines) โ€” in progress: #60 @0xlillith (draft) -- [ ] ๐Ÿ”จ `query.loop` (830 lines) โ€” in progress: #63 @bherbruck (draft) +- [ ] ๐Ÿ”จ `query.loop` (830 lines) โ€” in progress: #63 @bherbruck (ready for review) ## By module @@ -253,7 +252,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐ŸŸก `curve.curve_p5` (2299 lines) โ€” partial, 3097 cases - [ ] ๐Ÿ”จ `curve.curve_p9` (1783 lines) โ€” in progress: #13 @froglemonade2 (ready for review) -### surface (23/40) +### surface (24/40) - [ ] ๐ŸŸก `surface.volume_p1` (2014 lines) โ€” partial, 2886 cases - [x] โœ… `surface.b_spline_volume` (1226 lines) โ€” green, 2333 cases @@ -262,7 +261,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐ŸŸก `surface.curve_bounded_surface` (324 lines) โ€” partial, 535 cases - [ ] ๐ŸŸก `surface.surface_cache_p1` (1944 lines) โ€” partial, 872 cases - [ ] ๐ŸŸก `surface.plane_p1` (1934 lines) โ€” partial, 2705 cases -- [ ] ๐ŸŸก `surface.surf_of_revolution_p1` (1522 lines) โ€” partial, 807 cases +- [x] โœ… `surface.surf_of_revolution_p1` (1522 lines) โ€” green, 858 cases - [ ] ๐ŸŸก `surface.surface_p9` (1252 lines) โ€” partial, 778 cases - [ ] ๐ŸŸก `surface.trim_srf_cache` (966 lines) โ€” partial, 621 cases - [ ] ๐ŸŸก `surface.b_spline_volume_n_lib` (310 lines) โ€” partial, 2420 cases @@ -278,7 +277,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐ŸŸก `surface.surface_cache_p3` (1703 lines) โ€” partial, 600 cases - [ ] ๐ŸŸก `surface.volume_p2` (1490 lines) โ€” partial, 11220 cases - [ ] ๐ŸŸก `surface.surface_p7` (2406 lines) โ€” partial, 3660 cases -- [ ] ๐Ÿ”จ `surface.plane_p2` (1627 lines) โ€” in progress: #40 @bherbruck (ready for review) +- [ ] ๐ŸŸก `surface.plane_p2` (1627 lines) โ€” partial, 2218 cases - [ ] ๐Ÿ”จ `surface.surface_p4` (2270 lines) โ€” in progress: #49 @froglemonade2 (ready for review) - [ ] โณ `surface.sphere` (2861 lines) โ€” waiting - [ ] ๐Ÿ”จ `surface.surf_of_extrusion_p2` (1420 lines) โ€” in progress: #57 @bherbruck (ready for review) @@ -293,7 +292,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] โณ `surface.surface_p11` (1789 lines) โ€” waiting - [ ] โณ `surface.surface_p8` (2374 lines) โ€” waiting - [ ] ๐ŸŸก `surface.surface_point_solve_p1` (1771 lines) โ€” partial, 1035 cases -- [ ] โ–ถ๏ธ `surface.surface_point_solve_p2` (1882 lines) โ€” ready +- [ ] ๐Ÿ”จ `surface.surface_point_solve_p2` (1882 lines) โ€” in progress: #66 @bherbruck (draft) - [ ] โณ `surface.surface_point_solve_p3` (1282 lines) โ€” waiting ### topology (3/31) @@ -301,7 +300,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [x] โœ… `topology.database_io` (363 lines) โ€” green, 2059 cases - [x] โœ… `topology.topology` (389 lines) โ€” green, 657 cases - [ ] ๐ŸŸก `topology.brep_data` (1466 lines) โ€” partial, 2379 cases -- [ ] โ–ถ๏ธ `topology.proto_topology_p1` (2746 lines) โ€” ready +- [ ] ๐Ÿ”จ `topology.proto_topology_p1` (2746 lines) โ€” in progress: #67 @bherbruck (draft) - [ ] ๐Ÿ”จ `topology.edgeuse_p1` (1157 lines) โ€” in progress: #55 @bherbruck (ready for review) - [ ] โณ `topology.face_p2` (1827 lines) โ€” waiting - [ ] โณ `topology.edgeuse_p2` (600 lines) โ€” waiting @@ -369,7 +368,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list ### query (0/10) - [ ] โณ `query.edge` (1025 lines) โ€” waiting -- [ ] ๐Ÿ”จ `query.loop` (830 lines) โ€” in progress: #63 @bherbruck (draft) +- [ ] ๐Ÿ”จ `query.loop` (830 lines) โ€” in progress: #63 @bherbruck (ready for review) - [ ] โณ `query.face_p2` (1161 lines) โ€” waiting - [ ] โณ `query.face_p3` (1620 lines) โ€” waiting - [ ] โณ `query.poly` (2119 lines) โ€” waiting From 284863f4d0af8c115a2b6638b4a2c133f6089ee9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 19:11:52 +0000 Subject: [PATCH 50/54] plan/PROGRESS.md: regenerate [skip ci] --- plan/PROGRESS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plan/PROGRESS.md b/plan/PROGRESS.md index 3d4a7dd0fc..72d2b3111b 100644 --- a/plan/PROGRESS.md +++ b/plan/PROGRESS.md @@ -262,7 +262,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐ŸŸก `surface.surface_cache_p1` (1944 lines) โ€” partial, 872 cases - [ ] ๐ŸŸก `surface.plane_p1` (1934 lines) โ€” partial, 2705 cases - [x] โœ… `surface.surf_of_revolution_p1` (1522 lines) โ€” green, 858 cases -- [ ] ๐ŸŸก `surface.surface_p9` (1252 lines) โ€” partial, 778 cases +- [ ] ๐ŸŸก `surface.surface_p9` (1252 lines) โ€” partial, 821 cases - [ ] ๐ŸŸก `surface.trim_srf_cache` (966 lines) โ€” partial, 621 cases - [ ] ๐ŸŸก `surface.b_spline_volume_n_lib` (310 lines) โ€” partial, 2420 cases - [ ] ๐ŸŸก `surface.bend_volume` (945 lines) โ€” partial, 2347 cases From 1026c18189af4b38de84f9904563cf178a302981 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 19:38:40 +0000 Subject: [PATCH 51/54] plan/PROGRESS.md: regenerate [skip ci] --- plan/PROGRESS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plan/PROGRESS.md b/plan/PROGRESS.md index 72d2b3111b..9f15ea1280 100644 --- a/plan/PROGRESS.md +++ b/plan/PROGRESS.md @@ -136,7 +136,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐Ÿ”จ `topology.proto_topology_p1` (2746 lines) โ€” in progress: #67 @bherbruck (draft) - [ ] ๐Ÿ”จ `surface.surface_point_solve_p2` (1882 lines) โ€” in progress: #66 @bherbruck (draft) - [ ] ๐Ÿ”จ `topology.edgeuse_p1` (1157 lines) โ€” in progress: #55 @bherbruck (ready for review) -- [ ] ๐Ÿ”จ `intersect.topology_solver_p2` (1391 lines) โ€” in progress: #60 @0xlillith (draft) +- [ ] ๐Ÿ”จ `intersect.topology_solver_p2` (1391 lines) โ€” in progress: #60 @0xlillith (ready for review) - [ ] ๐Ÿ”จ `query.loop` (830 lines) โ€” in progress: #63 @bherbruck (ready for review) ## By module @@ -351,7 +351,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐ŸŸก `intersect.surface_intersector_p3` (1932 lines) โ€” partial, 1527 cases - [ ] โณ `intersect.curve_class_p6` (2213 lines) โ€” waiting - [ ] โ–ถ๏ธ `intersect.surface_intersector_p4` (1570 lines) โ€” ready -- [ ] ๐Ÿ”จ `intersect.topology_solver_p2` (1391 lines) โ€” in progress: #60 @0xlillith (draft) +- [ ] ๐Ÿ”จ `intersect.topology_solver_p2` (1391 lines) โ€” in progress: #60 @0xlillith (ready for review) - [ ] โณ `intersect.curve_class_p5` (2017 lines) โ€” waiting - [ ] โณ `intersect.surface_intersector_p5` (622 lines) โ€” waiting - [ ] โณ `intersect.curve_class_p8` (1900 lines) โ€” waiting From 5d10b0ae4603f5cea6c51dd3ecab235106eb0025 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 19:46:21 +0000 Subject: [PATCH 52/54] plan/PROGRESS.md: regenerate [skip ci] --- plan/PROGRESS.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/plan/PROGRESS.md b/plan/PROGRESS.md index 9f15ea1280..01056911aa 100644 --- a/plan/PROGRESS.md +++ b/plan/PROGRESS.md @@ -2,7 +2,7 @@ Generated from `plan/modules.toml` by `harness/plan/progress.py`; do not edit by hand. -**139 / 261 units ported** (88 green, 51 partial), **184,341 / 387,903 upstream lines (47.5%)**. 15 claimed, 0 blocked, 107 todo. +**140 / 261 units ported** (88 green, 52 partial), **185,761 / 387,903 upstream lines (47.9%)**. 14 claimed, 0 blocked, 107 todo. Legend: โœ… green (identical to C++) ยท ๐ŸŸก partial (passes; some cases wait on unported code) ยท ๐Ÿ”จ claimed ยท โ–ถ๏ธ ready (all dependencies done) ยท โณ claimable, dependencies still missing ยท โ›” blocked. @@ -119,14 +119,13 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] `blend.fillet_geom_p2` (2077 lines) โ€” missing: `blend.fillet_corner_p1`, `blend.fillet_geom_p1`, `blend.fillet_geom_p6`, `blend.fillet_solver_p1` +5 more - [ ] `blend.fillet_geom_p5` (1952 lines) โ€” missing: `blend.fillet_corner_p1`, `blend.fillet_geom_p1`, `blend.fillet_geom_p2`, `blend.fillet_geom_p4` +6 more - [ ] `blend.fillet_corner_p2` (1892 lines) โ€” missing: `blend.fillet_corner_p1`, `blend.fillet_geom_p1`, `blend.fillet_geom_p2`, `blend.fillet_solver_p1` +3 more -- [ ] `audit.recursion` (0 lines) โ€” missing: `blend.fillet_corner_p2`, `blend.fillet_corner_p3`, `blend.hcr`, `boolean.api_brep` +14 more +- [ ] `audit.recursion` (0 lines) โ€” missing: `blend.fillet_corner_p2`, `blend.fillet_corner_p3`, `blend.hcr`, `boolean.api_brep` +13 more ## In progress - [ ] ๐Ÿ”จ `curve.curve_p9` (1783 lines) โ€” in progress: #13 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.surf_of_revolution_p2` (1369 lines) โ€” in progress: #51 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.surface_p4` (2270 lines) โ€” in progress: #49 @froglemonade2 (ready for review) -- [ ] ๐Ÿ”จ `surface.surf_of_extrusion_p2` (1420 lines) โ€” in progress: #57 @bherbruck (ready for review) - [ ] ๐Ÿ”จ `surface.surface_p5` (2321 lines) โ€” in progress: #50 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.srf_in_volume` (779 lines) โ€” in progress: #53 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.surface_p3` (1794 lines) โ€” in progress: #52 @froglemonade2 (ready for review) @@ -252,7 +251,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐ŸŸก `curve.curve_p5` (2299 lines) โ€” partial, 3097 cases - [ ] ๐Ÿ”จ `curve.curve_p9` (1783 lines) โ€” in progress: #13 @froglemonade2 (ready for review) -### surface (24/40) +### surface (25/40) - [ ] ๐ŸŸก `surface.volume_p1` (2014 lines) โ€” partial, 2886 cases - [x] โœ… `surface.b_spline_volume` (1226 lines) โ€” green, 2333 cases @@ -280,7 +279,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐ŸŸก `surface.plane_p2` (1627 lines) โ€” partial, 2218 cases - [ ] ๐Ÿ”จ `surface.surface_p4` (2270 lines) โ€” in progress: #49 @froglemonade2 (ready for review) - [ ] โณ `surface.sphere` (2861 lines) โ€” waiting -- [ ] ๐Ÿ”จ `surface.surf_of_extrusion_p2` (1420 lines) โ€” in progress: #57 @bherbruck (ready for review) +- [ ] ๐ŸŸก `surface.surf_of_extrusion_p2` (1420 lines) โ€” partial, 1359 cases - [ ] ๐Ÿ”จ `surface.surface_p5` (2321 lines) โ€” in progress: #50 @froglemonade2 (ready for review) - [ ] โณ `surface.cone_p3` (1939 lines) โ€” waiting - [ ] ๐ŸŸก `surface.surface_p1` (2458 lines) โ€” partial, 806 cases From 2f4bdf46ecf1dd34977fd93240b546a3ecd13020 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 19:46:38 +0000 Subject: [PATCH 53/54] plan/PROGRESS.md: regenerate [skip ci] --- plan/PROGRESS.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plan/PROGRESS.md b/plan/PROGRESS.md index 01056911aa..c38ea26c5f 100644 --- a/plan/PROGRESS.md +++ b/plan/PROGRESS.md @@ -2,14 +2,13 @@ Generated from `plan/modules.toml` by `harness/plan/progress.py`; do not edit by hand. -**140 / 261 units ported** (88 green, 52 partial), **185,761 / 387,903 upstream lines (47.9%)**. 14 claimed, 0 blocked, 107 todo. +**140 / 261 units ported** (88 green, 52 partial), **185,761 / 387,903 upstream lines (47.9%)**. 15 claimed, 0 blocked, 106 todo. Legend: โœ… green (identical to C++) ยท ๐ŸŸก partial (passes; some cases wait on unported code) ยท ๐Ÿ”จ claimed ยท โ–ถ๏ธ ready (all dependencies done) ยท โณ claimable, dependencies still missing ยท โ›” blocked. ## Ready to claim now - [ ] โ–ถ๏ธ `surface.cone_p2` (1656 lines) โ€” ready -- [ ] โ–ถ๏ธ `intersect.surface_intersector_p4` (1570 lines) โ€” ready ## Claimable now, dependencies still missing @@ -135,6 +134,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐Ÿ”จ `topology.proto_topology_p1` (2746 lines) โ€” in progress: #67 @bherbruck (draft) - [ ] ๐Ÿ”จ `surface.surface_point_solve_p2` (1882 lines) โ€” in progress: #66 @bherbruck (draft) - [ ] ๐Ÿ”จ `topology.edgeuse_p1` (1157 lines) โ€” in progress: #55 @bherbruck (ready for review) +- [ ] ๐Ÿ”จ `intersect.surface_intersector_p4` (1570 lines) โ€” in progress: #70 @bherbruck (draft) - [ ] ๐Ÿ”จ `intersect.topology_solver_p2` (1391 lines) โ€” in progress: #60 @0xlillith (ready for review) - [ ] ๐Ÿ”จ `query.loop` (830 lines) โ€” in progress: #63 @bherbruck (ready for review) @@ -349,7 +349,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] โณ `intersect.curve_class_p4` (2022 lines) โ€” waiting - [ ] ๐ŸŸก `intersect.surface_intersector_p3` (1932 lines) โ€” partial, 1527 cases - [ ] โณ `intersect.curve_class_p6` (2213 lines) โ€” waiting -- [ ] โ–ถ๏ธ `intersect.surface_intersector_p4` (1570 lines) โ€” ready +- [ ] ๐Ÿ”จ `intersect.surface_intersector_p4` (1570 lines) โ€” in progress: #70 @bherbruck (draft) - [ ] ๐Ÿ”จ `intersect.topology_solver_p2` (1391 lines) โ€” in progress: #60 @0xlillith (ready for review) - [ ] โณ `intersect.curve_class_p5` (2017 lines) โ€” waiting - [ ] โณ `intersect.surface_intersector_p5` (622 lines) โ€” waiting From 8190c3023c089aa6b4889942ded6c8d92eac1f41 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 19:55:58 +0000 Subject: [PATCH 54/54] plan/PROGRESS.md: regenerate [skip ci] --- plan/PROGRESS.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plan/PROGRESS.md b/plan/PROGRESS.md index c38ea26c5f..a41b5d3d81 100644 --- a/plan/PROGRESS.md +++ b/plan/PROGRESS.md @@ -2,13 +2,13 @@ Generated from `plan/modules.toml` by `harness/plan/progress.py`; do not edit by hand. -**140 / 261 units ported** (88 green, 52 partial), **185,761 / 387,903 upstream lines (47.9%)**. 15 claimed, 0 blocked, 106 todo. +**140 / 261 units ported** (88 green, 52 partial), **185,761 / 387,903 upstream lines (47.9%)**. 16 claimed, 0 blocked, 105 todo. Legend: โœ… green (identical to C++) ยท ๐ŸŸก partial (passes; some cases wait on unported code) ยท ๐Ÿ”จ claimed ยท โ–ถ๏ธ ready (all dependencies done) ยท โณ claimable, dependencies still missing ยท โ›” blocked. ## Ready to claim now -- [ ] โ–ถ๏ธ `surface.cone_p2` (1656 lines) โ€” ready +_None right now; see the next section._ ## Claimable now, dependencies still missing @@ -123,6 +123,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list ## In progress - [ ] ๐Ÿ”จ `curve.curve_p9` (1783 lines) โ€” in progress: #13 @froglemonade2 (ready for review) +- [ ] ๐Ÿ”จ `surface.cone_p2` (1656 lines) โ€” in progress: #71 @0xlillith (draft) - [ ] ๐Ÿ”จ `surface.surf_of_revolution_p2` (1369 lines) โ€” in progress: #51 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.surface_p4` (2270 lines) โ€” in progress: #49 @froglemonade2 (ready for review) - [ ] ๐Ÿ”จ `surface.surface_p5` (2321 lines) โ€” in progress: #50 @froglemonade2 (ready for review) @@ -271,7 +272,7 @@ Anything `todo` can be claimed. These need stubs for, or co-porting of, the list - [ ] ๐ŸŸก `surface.surface_cache_p2` (1245 lines) โ€” partial, 905 cases - [x] โœ… `surface.torus` (1180 lines) โ€” green, 563 cases - [ ] ๐ŸŸก `surface.unbend_volume` (920 lines) โ€” partial, 1874 cases -- [ ] โ–ถ๏ธ `surface.cone_p2` (1656 lines) โ€” ready +- [ ] ๐Ÿ”จ `surface.cone_p2` (1656 lines) โ€” in progress: #71 @0xlillith (draft) - [ ] ๐Ÿ”จ `surface.surf_of_revolution_p2` (1369 lines) โ€” in progress: #51 @froglemonade2 (ready for review) - [ ] ๐ŸŸก `surface.surface_cache_p3` (1703 lines) โ€” partial, 600 cases - [ ] ๐ŸŸก `surface.volume_p2` (1490 lines) โ€” partial, 11220 cases