library;
import self as self;
import "dart:core" as core;

class DeltaBlue extends core::Object {
  synthetic constructor •() → self::DeltaBlue
    ;
  method run() → void
    ;
}
class Strength extends core::Object {
  final field core::int value;
  final field core::String name;
  const constructor •(core::int value, core::String name) → self::Strength
    ;
  method nextWeaker() → self::Strength
    ;
  static method stronger(self::Strength s1, self::Strength s2) → core::bool
    ;
  static method weaker(self::Strength s1, self::Strength s2) → core::bool
    ;
  static method weakest(self::Strength s1, self::Strength s2) → self::Strength
    ;
  static method strongest(self::Strength s1, self::Strength s2) → self::Strength
    ;
}
abstract class Constraint extends core::Object {
  final field self::Strength strength;
  const constructor •(self::Strength strength) → self::Constraint
    ;
  abstract method isSatisfied() → core::bool;
  abstract method markUnsatisfied() → void;
  abstract method addToGraph() → void;
  abstract method removeFromGraph() → void;
  abstract method chooseMethod(core::int mark) → void;
  abstract method markInputs(core::int mark) → void;
  abstract method inputsKnown(core::int mark) → core::bool;
  abstract method output() → self::Variable;
  abstract method execute() → void;
  abstract method recalculate() → void;
  method addConstraint() → void
    ;
  method satisfy(dynamic mark) → self::Constraint
    ;
  method destroyConstraint() → void
    ;
  method isInput() → core::bool
    ;
}
abstract class UnaryConstraint extends self::Constraint {
  final field self::Variable myOutput;
  field core::bool satisfied;
  constructor •(self::Variable myOutput, self::Strength strength) → self::UnaryConstraint
    ;
  method addToGraph() → void
    ;
  method chooseMethod(core::int mark) → void
    ;
  method isSatisfied() → core::bool
    ;
  method markInputs(core::int mark) → void
    ;
  method output() → self::Variable
    ;
  method recalculate() → void
    ;
  method markUnsatisfied() → void
    ;
  method inputsKnown(core::int mark) → core::bool
    ;
  method removeFromGraph() → void
    ;
}
class StayConstraint extends self::UnaryConstraint {
  constructor •(self::Variable v, self::Strength str) → self::StayConstraint
    ;
  method execute() → void
    ;
}
class EditConstraint extends self::UnaryConstraint {
  constructor •(self::Variable v, self::Strength str) → self::EditConstraint
    ;
  method isInput() → core::bool
    ;
  method execute() → void
    ;
}
abstract class BinaryConstraint extends self::Constraint {
  field self::Variable v1;
  field self::Variable v2;
  field core::int direction;
  constructor •(self::Variable v1, self::Variable v2, self::Strength strength) → self::BinaryConstraint
    ;
  method chooseMethod(core::int mark) → void
    ;
  method addToGraph() → void
    ;
  method isSatisfied() → core::bool
    ;
  method markInputs(core::int mark) → void
    ;
  method input() → self::Variable
    ;
  method output() → self::Variable
    ;
  method recalculate() → void
    ;
  method markUnsatisfied() → void
    ;
  method inputsKnown(core::int mark) → core::bool
    ;
  method removeFromGraph() → void
    ;
}
class ScaleConstraint extends self::BinaryConstraint {
  final field self::Variable scale;
  final field self::Variable offset;
  constructor •(self::Variable src, self::Variable scale, self::Variable offset, self::Variable dest, self::Strength strength) → self::ScaleConstraint
    ;
  method addToGraph() → void
    ;
  method removeFromGraph() → void
    ;
  method markInputs(core::int mark) → void
    ;
  method execute() → void
    ;
  method recalculate() → void
    ;
}
class EqualityConstraint extends self::BinaryConstraint {
  constructor •(self::Variable v1, self::Variable v2, self::Strength strength) → self::EqualityConstraint
    ;
  method execute() → void
    ;
}
class Variable extends core::Object {
  field core::List<self::Constraint> constraints;
  field self::Constraint determinedBy;
  field core::int mark;
  field self::Strength walkStrength;
  field core::bool stay;
  field core::int value;
  final field core::String name;
  constructor •(core::String name, core::int value) → self::Variable
    ;
  method addConstraint(self::Constraint c) → void
    ;
  method removeConstraint(self::Constraint c) → void
    ;
}
class Planner extends core::Object {
  field core::int currentMark;
  synthetic constructor •() → self::Planner
    ;
  method incrementalAdd(self::Constraint c) → void
    ;
  method incrementalRemove(self::Constraint c) → void
    ;
  method newMark() → core::int
    ;
  method makePlan(core::List<self::Constraint> sources) → self::Plan
    ;
  method extractPlanFromConstraints(core::List<self::Constraint> constraints) → self::Plan
    ;
  method addPropagate(self::Constraint c, core::int mark) → core::bool
    ;
  method removePropagateFrom(self::Variable out) → core::List<self::Constraint>
    ;
  method addConstraintsConsumingTo(self::Variable v, core::List<self::Constraint> coll) → void
    ;
}
class Plan extends core::Object {
  field core::List<self::Constraint> list;
  synthetic constructor •() → self::Plan
    ;
  method addConstraint(self::Constraint c) → void
    ;
  method size() → core::int
    ;
  method execute() → void
    ;
}
static const field dynamic REQUIRED;
static const field dynamic STRONG_PREFERRED;
static const field dynamic PREFERRED;
static const field dynamic STRONG_DEFAULT;
static const field dynamic NORMAL;
static const field dynamic WEAK_DEFAULT;
static const field dynamic WEAKEST;
static const field core::int NONE;
static const field core::int FORWARD;
static const field core::int BACKWARD;
static field self::Planner planner;
static method main() → dynamic
  ;
static method chainTest(core::int n) → void
  ;
static method projectionTest(core::int n) → void
  ;
static method change(self::Variable v, core::int newValue) → void
  ;
