package Ġcom . mont ec ar lo . app . services Ċ Ċ import Ġcom . google . common . base . Function Ċ import Ġcom . mont ec ar lo . l attice . L attice Ċ import Ġcom . mont ec ar lo . domain . My Persist Ċ import Ġedu . uci . ics . j ung . algorithms . layout . FR Layout Ċ import Ġedu . uci . ics . j ung . algorithms . layout . KK Layout Ċ import Ġedu . uci . ics . j ung . graph . Graph Ċ import Ġedu . uci . ics . j ung . visualization . Layer Ċ import Ġedu . uci . ics . j ung . visualization . Visualization Image Server Ċ import Ġedu . uci . ics . j ung . visualization . Visualization Viewer Ċ import Ġedu . uci . ics . j ung . visualization . decorators . Edge Shape Ċ import Ġedu . uci . ics . j ung . visualization . layout . Layout Transition Ċ import Ġedu . uci . ics . j ung . visualization . render ers . Renderer Ċ import Ġcom . mont ec ar lo . app . flip Ċ import Ġcom . mont ec ar lo . app . flip Matrix H Ċ import Ġcom . mont ec ar lo . app . flip Matrix V Ċ import Ġcom . mont ec ar lo . app . getIndex In Ċ import Ġcom . mont ec ar lo . app . graphs Ċ import Ġcom . mont ec ar lo . app . in Order Ċ import Ġcom . mont ec ar lo . app . print Matrix Ċ import Ġcom . mont ec ar lo . app . rotate Matrix Ċ import Ġjava . awt . Color Ċ import Ġjava . awt . Dimension Ċ import Ġjava . awt . Font Ċ import Ġjava . awt . geom . Ellipse 2 D Ċ import Ġjava . awt . geom . Point 2 D Ċ import Ġjava . awt . image . Buffered Image Ċ import Ġjava . io . File Ċ import Ġjavax . swing . JButton Ċ import Ġjavax . swing . J Frame Ċ import Ġjavax . swing . JPanel Ċ import Ġedu . uci . ics . j ung . visualization . control . Default Modal Graph Mouse Ċ import Ġedu . uci . ics . j ung . visualization . control . Modal Graph Mouse Ċ import Ġedu . uci . ics . j ung . visualization . control . Pick ing Graph Mouse Plugin ĊĊ Ċ /** Ċ Ġ* ĠTODO () ĠTASK S : Ċ Ġ* Ġ 1 st Ġ- ĠJust ĠGenerate Ġall Ġpossible Ġconfigs Ġfor ĠH oney comb Ċ Ġ* Ġ 2 nd Ġ- ĠUse ĠK oz ak 's ĠMAP LE Ġfile Ġto Ġcalc ĠMark ov Ġan alytic Ġresult Ċ Ġ* Ġ 3 rd Ġ- ĠGenerate Ġsym metry Ġunique Ġh oney comb Ċ Ġ*/ ĊĊ Ċ class ĠMark ov Ch ains ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġlattice : ĠL attice Ċ ) Ġ: ĠVirtual Node ( l attice ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfile Ġ= ĠFile (" C :\\ Users \\ FER MAT \\ workspace \\ Kotlin \\ Graph Walker \\ images \\ layout . out ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcalculate Combin ations () Ġ{ ĊĠĠĠĠĠĠĠ Ġprint (" Calcul ating Pairs ...") ĊĠĠĠĠĠĠĠ Ġval Ġgraph : ĠGraph < Number , ĠNumber > Ġ= Ġgraphs [ l attice ] !! ĊĊĠĠĠĠĠĠĠ Ġval Ġall Pairs Ġ= Ġgraph . vertices . findAll Pairs () ĊĊĠĠĠĠĠĠĠ Ġ// Name Ġthis Ġcoordinate Ġor Ġindex Map , Ġposition ĠMap Ġwhen Ġcom iting ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= Ġgraph . vertices . window ed ( 3 , Ġ 3 ). map Ġ{ Ġit . map Ġ{ Ġit . toInt () Ġ}. to IntArray () Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġval Ġmy Matrix Ġ= ĠArray ( 3 ) Ġ{ ĠInt Array ( 3 ) Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ("* ". repeat ( 2 0 )) ĊĠĠĠĠĠĠĠ Ġmatrix . print Matrix () ĊĠĠĠĠĠĠĠ Ġprintln ("* ". repeat ( 2 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġreflection s Ġ= Ġmutable ListOf < Pair < Pair < Number , ĠNumber >, ĠPair < Number , ĠNumber >> >() ĊĠĠĠĠĠĠĠ Ġ// Rot ates Matrix Ġand Ġfigures Ġout Ġreflection Ġpairs ĊĠĠĠĠĠĠĠ Ġall Pairs . forEach Ġ{ Ġinitial Pair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 .. 2 ). fold ( matrix ) Ġ{ Ġa , Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Ġ= Ġrotate Matrix ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoords Ġ= Ġinitial Pair . getIndex In ( new ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreflection s . add ( initial Pair Ġto Ġ( matrix [ coords . first . first ][ coords . first . second ] Ġto Ġmatrix [ coords . second . first ][ coords . second . second ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 .. 2 ). fold ( matrix ) Ġ{ Ġa , Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Ġ= Ġflip Matrix V ( rotate Matrix ( a )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoords Ġ= Ġinitial Pair . getIndex In ( new ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreflection s . add ( initial Pair Ġto Ġ( matrix [ coords . first . first ][ coords . first . second ] Ġto Ġmatrix [ coords . second . first ][ coords . second . second ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 .. 2 ). fold ( matrix ) Ġ{ Ġa , Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Ġ= Ġflip Matrix H ( rotate Matrix ( a )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoords Ġ= Ġinitial Pair . getIndex In ( new ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreflection s . add ( initial Pair Ġto Ġ( matrix [ coords . first . first ][ coords . first . second ] Ġto Ġmatrix [ coords . second . first ][ coords . second . second ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlet Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Ġ= Ġflip Matrix H ( matrix ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoords Ġ= Ġinitial Pair . getIndex In ( new ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreflection s . add ( initial Pair Ġto Ġ( matrix [ coords . first . first ][ coords . first . second ] Ġto Ġmatrix [ coords . second . first ][ coords . second . second ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlet Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Ġ= Ġflip Matrix V ( matrix ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoords Ġ= Ġinitial Pair . getIndex In ( new ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreflection s . add ( initial Pair Ġto Ġ( matrix [ coords . first . first ][ coords . first . second ] Ġto Ġmatrix [ coords . second . first ][ coords . second . second ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Re - format Ġreflection s ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġreflection s . groupBy Ġ{ Ġit . first Ġ}. to Mutable Map () ĊĊĠĠĠĠĠĠĠ Ġ// This Ġfilters Ġout Ġsym metry Ġdistinct Ġpair ĊĊĠĠĠĠĠĠĠ Ġ// optimize ĊĠĠĠĠĠĠĠ Ġmap . forEach Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ key ] Ġ= Ġvalue . toSet (). minus ( key Ġto Ġkey ). minus ( key Ġto Ġkey . flip ()). map Ġ{ Ġit . first Ġto Ġit . second . in Order () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// NEW ĊĠĠĠĠĠĠĠ Ġmap . keys . fold ( map . to Mutable Map ()) Ġ{ Ġa , Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa [ b ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Pairs . remove ( it . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . minus ( it . map Ġ{ Ġit . second Ġ}). to Mutable Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġa ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprint ( map . keys . size ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġval Ġcom bos Ġ= Ġmap . keys . map Ġ{ Ġpair Ġ-> Ġused Ġto Ġbe Ġthis ĊĠĠĠĠĠĠĠ Ġ// This Ġis Ġalways Ġneeded ĊĠĠĠĠĠĠĠ Ġval Ġcom bos Ġ= Ġall Pairs . map Ġ{ Ġpair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpair Ġto Ġmutable ListOf < Pair < Number , ĠNumber >> (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( pair ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġneighbors A Ġ= Ġgraph . get Neighbors ( pair . first ). to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneighbors A . add Virtual Sites ( pair . first ). forEach Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġneighbors B Ġ= Ġgraph . get Neighbors ( pair . second ). to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneighbors B . add Virtual Sites ( pair . second ). forEach Ġ{ Ġb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( a Ġ== Ġpair . second Ġ&& Ġb Ġ== Ġpair . first ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( a Ġto Ġa ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġadd ( a Ġto Ġb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. associate By ({ Ġit . first Ġ}, Ġ{ Ġit . second Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ( 6 Ġto Ġ 6 ). give Reflection s ( reflection s ) ĊĠĠĠĠĠĠĠ Ġgraph . render Graph ( com bos ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Graph Viewer () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprint (" Getting Viewer ...") ĊĠĠĠĠĠĠĠ Ġval Ġgraph : ĠGraph < Number , ĠNumber > Ġ= Ġgraphs [ l attice ] !! ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= ĠK K Layout ( graph ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= ĠDimension ( 1 0 2 4 , Ġ 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠVisualization Viewer ( layout , Ġlayout . size ). let Ġ{ Ġvv Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvv . run Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvv . graph Mouse Ġ= ĠDefault Modal Graph Mouse < Int , ĠInt >(). apply Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . add ( Pick ing Graph Mouse Plugin < Int , ĠInt >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Mode ( Modal Graph Mouse . Mode . P ICK ING ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvv . pick ed Vertex State . addItem Listener Ġ{ ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( it . item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow J Frame ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . vertex Label Renderer . position Ġ= ĠRenderer . Vertex Label . Position . CN TR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Context . let Ġ{ Ġrc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . set Vertex Label Transformer Ġ{ Ġvertex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertex . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . set Vertex Fill Paint Transformer Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( vv . pick ed Vertex State . is Pick ed ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// vv . pick ed Vertex State . pick ( it , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . blue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// vv . pick ed Vertex State . pick ( it , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . yellow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . edge Shape Transformer Ġ= ĠEdge Shape . line ( graph ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . set Vertex Shape Transformer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEl lipse 2 D . Double (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ 4 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġ 4 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ-= Ġwidth Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ-= Ġheight Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// TODO Ġ- ĠThis Ġis Ġa ĠWIP Ġcode ĊĠĠĠ Ġfun Ġcalculate H oney Com b () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprint (" Calcul ating Pairs ...") ĊĠĠĠĠĠĠĠ Ġval Ġgraph : ĠGraph < Number , ĠNumber > Ġ= Ġgraphs [ l attice ] !! ĊĊĠĠĠĠĠĠĠ Ġval Ġall Pairs Ġ= Ġgraph . vertices . findAll Pairs () ĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= ĠK K Layout ( graph ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= ĠDimension ( 1 0 2 4 , Ġ 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠMy Persist ( layout ) ĊĠĠĠĠĠĠĠ Ġp . restore ( file . absolute Path ) ĊĠĠĠĠĠĠĠ Ġval Ġvv Ġ= ĠVisualization Image Server ( p , Ġp . size ) ĊĠĠĠĠĠĠĠ Ġval Ġold Coords Ġ= Ġgraph . vertices . map Ġ{ Ġnode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . let Ġ{ Ġl Ġ-> Ġ( l . getX ( node ) Ġto Ġl . getY ( node )) Ġto Ġnode Ġ} ĊĠĠĠĠĠĠĠ Ġ}. toMap () ĊĠĠĠĠĠĠĠ Ġvv . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . vertex Label Renderer . position Ġ= ĠRenderer . Vertex Label . Position . CN TR ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Context . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Pairs . forEach Ġ{ Ġinitial Pair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 .. 2 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Layer Transformer . get Transformer ( Layer . LAYOUT ). rotate ( Math . PI Ġ/ Ġ 2 , ĠPoint 2 D . Double ( layout . getX ( 4 ), Ġlayout . getY ( 4 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* reflection s . add ( initial Pair Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( old Coords [ vv . layout . getX ( initial Pair . first ) Ġto Ġlayout . getY ( initial Pair . first )] !! Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Coords [ layout . getX ( initial Pair . second ) Ġto Ġlayout . getY ( initial Pair . second )] !! )) */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprint ("") ĊĊĠĠĠ Ġ} Ċ Ċ // ĠWIP ĠEND ĊĊĠĠĠ Ġfun ĠGraph < Number , ĠNumber >. render Graph ( pairs : ĠMap < Pair < Number , ĠNumber >, ĠMutable List < Pair < Number , ĠNumber >> >) Ġ{ ĊĠĠĠĠĠĠĠ Ġprint (" Rendering ...") ĊĠĠĠĠĠĠĠ Ġ// val Ġpairs Ġ= Ġvertices . findAll Pairs () ĊĠĠĠĠĠĠĠ Ġ// val Ġlayout Ġ= ĠFR Layout ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġimages Ġ= Ġmutable ListOf < Buffered Image >() ĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= ĠFR Layout ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= ĠDimension ( 1 0 2 4 , Ġ 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpersist Ġ= ĠMy Persist ( layout ) ĊĠĠĠĠĠĠĠ Ġpersist . restore ( file . absolute Path ) ĊĠĠĠĠĠĠĠ Ġlayout . lock ( false ) ĊĠĠĠĠĠĠĠ ĠVisualization Viewer ( persist , Ġpersist . size ). let Ġ{ Ġvv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvv . run Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . vertex Label Renderer . position Ġ= ĠRenderer . Vertex Label . Position . CN TR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Context . let Ġ{ Ġrc Ġ-> ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . vertex Font Transformer Ġ= ĠFunction Ġ{ ĠFont (" Ser if ", ĠFont . BOLD , Ġ 3 6 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . set Vertex Label Transformer Ġ{ Ġvertex Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . getX ( vertex ). toString (). take ( 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmulti Layer Transformer . apply Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Transformer ( Layer . LAYOUT ). rotate ( Math . PI Ġ/ Ġ 2 , ĠPoint 2 D . Double ( width Ġ/ Ġ 2 . 0 , Ġheight Ġ/ Ġ 2 . 0 )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . edge Shape Transformer Ġ= ĠEdge Shape . line ( this @ render Graph ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . set Vertex Shape Transformer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEl lipse 2 D . Double (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ 6 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġ 6 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ-= Ġwidth Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ-= Ġheight Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ Ġ( 0 .. 3 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Rot ated Ġ 9 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" OLD " Ġ+ Ġlayout . getX ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . multi Layer Transformer . set Transformer ( Layer . LAYOUT , ĠMutable Affine Transformer (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotate ( Math . PI Ġ/ Ġ 2 , ĠPoint 2 D . Double ( layout . getX ( 4 ), Ġlayout . getY ( 4 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrc . multi Layer Transformer . get Transformer ( Layer . LAYOUT ). rotate ( Math . PI Ġ/ Ġ 2 , ĠPoint 2 D . Double ( layout . getX ( 4 ), Ġlayout . getY ( 4 ))) Ċ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" NEW " Ġ+ Ġlayout . getX ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpersist Button Ġ= ĠJButton (" Rotate ". toUpperCase ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( persist Button ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpersist Button . addActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 .. 3 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Rot ated Ġ 9 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" OLD " Ġ+ Ġlayout . getX ( 1 )) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlayout . set Initializer ( vv . graph Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . multi Layer Transformer . get Transformer ( Layer . LAYOUT ). rotate ( Math . PI Ġ/ Ġ 2 , ĠPoint 2 D . Double ( layout . getX ( 4 ), Ġlayout . getY ( 4 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayout Transition ( vv , Ġvv . graph Layout , Ġlayout ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" NEW " Ġ+ Ġlayout . getX ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// persist . restore ( file . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// pairs . forEach Ġ{ Ġkey , Ġcom bos Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠ Ġcom bos . forEach Indexed Ġ{ Ġindex , Ġpair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ Ġval ĠjLabel Ġ= ĠJLabel (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfont Ġ= ĠFont (" Ser if ", ĠFont . BOLD , Ġ 3 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ" Binary ĠConfiguration : Ġ$ key " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" Pair Ġ$ index : Ġ$ pair " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Opaque Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( 2 0 , Ġ 1 0 , Ġ 5 0 0 , Ġ 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġrender Context . let Ġ{ Ġrc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= ĠColor . WHITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . vertex Label Renderer . position Ġ= ĠRenderer . Vertex Label . Position . CN TR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . vertex Font Transformer Ġ= ĠFunction Ġ{ ĠFont (" Ser if ", ĠFont . BOLD , Ġ 3 6 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . set Vertex Label Transformer Ġ{ Ġvertex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertex . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . multi Layer Transformer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Transformer ( Layer . LAYOUT ). rotate ( Math . PI / 2 , ĠPoint 2 D . Double ( width / 2 . 0 , Ġheight / 2 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . edge Shape Transformer Ġ= ĠEdge Shape . line ( this @ render Graph ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . set Vertex Fill Paint Transformer Ġ{ Ġvertex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( vertex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpair . first Ġ-> ĠColor . RED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpair . second Ġ-> ĠColor . GREEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠColor . LIGHT _ GRAY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . set Vertex Stroke Transformer Ġ{ Ġvertex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ(( vertex Ġ== Ġpair . first Ġ|| Ġvertex Ġ== Ġpair . second ) Ġ&& Ġpair . first Ġ== Ġpair . second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> ĠBasic Stroke ( 1 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠBasic Stroke ( 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . set Vertex Draw Paint Transformer Ġ{ Ġvertex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ(( vertex Ġ== Ġpair . first Ġ|| Ġvertex Ġ== Ġpair . second ) Ġ&& Ġpair . first Ġ== Ġpair . second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> ĠColor . GREEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠColor . BLACK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrc . set Vertex Shape Transformer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEl lipse 2 D . Double (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ 6 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġ 6 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ-= Ġwidth Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ-= Ġheight Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( jLabel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ Ġval Ġpersist Button Ġ= ĠJButton (" Save ĠLayout ". toUpperCase ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersist Button . addActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" ds jk lf sd ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersist . persist J ( file . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( persist Button ) */ ĊĊĊĊ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow J Frame ( this ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcom . mont ec ar lo . app . save Image ( key Ġ= Ġkey , Ġpair Ġ= Ġpair , Ġidx Ġ= Ġindex ) Ġ// Visualization Image Server Ġneeded Ġhere . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// images . add ( getImage ( Point 2 D . Double ( graph Layout . size . width Ġ/ Ġ 2 . 0 , Ġgraph Layout . size . width Ġ/ Ġ 2 . 0 ), ĠDimension ( 7 2 0 , Ġ 7 2 0 )) Ġas ĠBufferedImage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// remove ( jLabel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// }} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ//} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" Done !") ĊĊĊĠĠĠĠĠĠĠ Ġ// com . mont ec ar lo . app . make Word Document ( images ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠPair < Number , ĠNumber >. give Reflection s ( reflection s : ĠList < Pair < Number , ĠNumber >> ): ĠList < Pair < Number , ĠNumber >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġgroups Ġ= Ġreflection s . groupBy Ġ{ Ġit . first Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġone Ġ= Ġgroups [ first ] !!. map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtwo Ġ= Ġgroups [ second ] !!. map Ġ{ Ġit . second Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġone . plus ( two ). to Mutable List (). findAll Pairs (). distinct () ĊĠĠĠ Ġ} Ġ// Ġnot Ġneeded ? ĊĊĠĠĠ Ġprivate Ġfun Ġshow J Frame ( component : ĠJPanel ) Ġ{ ĊĠĠĠĠĠĠĠ ĠJ Frame (" Simple ĠGraph ĠView "). let Ġ{ Ġf Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf . default Close Operation Ġ= ĠJ Frame . EXIT _ ON _ CLOSE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf . content Pane . add ( component ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf . pack () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }