NB. Haar_Wavelet 
calc_hwt=: 3 : 0
NB. sub  calc_engine
NB. u. T0
T0=._2 <\ y.
T1=.<; 2 %~ L:0 +/ L:0 T0
T2=.<; 2 %~ L:0 -/ L:0 T0
T1,T2
)


mk_form =: 3 : ', |:;("1) ,.  y.'
mk_unit=: 3 :  '>{. (L:0) _2<\ y. '
mk_ind=: 3 : ';{. (L:0)  _2<\  y.'


f_hwt=: 3 : 0
NB. Fast  Haar wavelet Transform
Y0=. y.
NR=. <. -: # y. NB. not exact /but loopout is if. 
ANS_W=. <''
COUNTER=. 0
 while.  COUNTER  <   NR do.
 T3=.  calc_hwt  Y0
ANS_W=. ({: T3) , ANS_W
Y0=. ; {. T3
if. 1=+/*; Y0 do. goto_end. end.
COUNTER=. >: COUNTER
end.
 label_end.
,.}: (}:  T3),ANS_W
)

ipf_hwt=: 3 : 0
NB.Inplace Fast Haar Wavelet Transform 
NR=: <. -: # y.
IND=: i. # y.
ANS=: mk_form calc_hwt y.
COUNTER=: 0
Y0=: ANS
while. COUNTER  <   NR do.
TMP0=: (mk_unit IND) { ANS
TMP1=: calc_hwt TMP0
ANS=: (mk_form TMP1) (mk_ind IND) } ANS
IND=: mk_ind IND
Y0=: (mk_unit IND) {ANS
if. 1=+/*;Y0 do. goto_end. end.
COUNTER=: >: COUNTER
 end.
label_end.
ANS
)

  
plot_hwt=: 4 : 0
NB. x. 0 1 2 3 4 is  SS S
NB. y. DAT of plot_multi_s 
DAT0=. x. calc_t_sub0 y.
pd 'reset'
pd 'type bar'
pd DAT0
pd 'show'

)


S0=: 5 1 2 8
S1=: 3 1 0 4 8 6 9 9
NB. S0 S1 is issued from Y.Nievergelt 
S2=: 32 10 20 38 37 28 38 34 18 24 18 9 23 24 28 34
 
                              
NB. multiple Haar wavelet
NB. trial version


cut_multi0=: 3 : 0
NB. cut with 2*2
NB. size of y. shoud 2^n 
IND=: ;(2%~ # y.) # <1 0
TMP=: IND <;. 1("1) y.
(IND# TMP) ,: L:0 (-. IND) # TMP
)

cut_multi1=: 3 : 0
NB. cut multibox /i.e. y. is i. 16 16
ANS=:  <''
CU0=: _2<\ cut_multi0 y.
NR=: # CU0
COUNTER0=: 0
while. COUNTER0 < # CU0 do.
NB. CU1=.> COUNTER0{ CU0
CU2=. _2<\"1 > COUNTER0 {CU0
CU3=.({. CU2) ,: L:1 {: CU2
ANS=. ANS,CU3
COUNTER0=. >: COUNTER0
end.
(, NR ,NR) $ }.ANS
)


calc_mhwt=: 3 : 0
NB. calc_mhwt2 L:0 cut_multi0 MD0
M3=. |:  calc_mhwt0 L:0 y.
|: (2%~ +/"1  M3),. 2%~ -/"1 M3
)

calc_mhwt0=: 3 : 0
NB. Y0=. cut_multi y.
M0=: 2%~ +/"1  y.
M1=: 2%~ -/"1  y.
M0,. M1
)


order_mhwt=: 3 : 0
NB. ?????? 4*4 
D0=. <;("1) {. L:0 {. L:0 y.
D2=.<;("1) {: (L:0) {. L:0 y.
D1=.<;("1) {. (L:0) {: L:0 y.
D3=. <;("1) {: L:0 {: L:0 y.
 (D0,D1),.(D2,D3)
)

mh_wt=: 3 : 0
MH0=: calc_mhwt cut_multi0 y.
MH1=: order_mhwt MH0 NB. mhwt is complete
MH2=:calc_mhwt {.{. MH1
MH2 (<0 0)} MH0
)


NB. ----------------------
  
MD0=: 4 4 $ 9 7 6 2 5 3 4 4 8 2 4 0 6 0 2 2