zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
U
P±d¶,ã @sª
dZddlZddlZddlZddlZddlZddlZddlZddlZz ddl    Z    Wne
k
rhdZ    YnXddl m Z ddl Tddl mZe jadadadadadad    ad    adadadagad    ad    adaiad    a da!da"da#t#gia$d    a%ga&d
a'ga(da)d
a*ga+ga,ga-d d „Z.dd d„Z/de_0iZ1dD]Z2ddie1e2<q*dD]Z2ddie1e2<qBiZ3iZ4dD]Z5e5de3e5<e5e4e5d<qbdd„Z6dd„Z7dd„Z8dd„Z9dd „Z:e ;d!ej<¡j=Z>e ;d"ej<¡j?Z@e ;d#ej<¡j?ZAe ;d$ej<¡j?ZBe ;d%ej<¡j=ZCd&d'„ZDd(d)„ZEeFdfd*d+„ZGd,ZHd-ZIe ;eHd    eIeId.fej<¡d/fZJe ;eHd    eId0eId0d.fej<¡ZKe ;eHd1ej<¡d2fZLe ;eHd3ej<¡d2fZMd4ZNe ;eHd    eNeNd.fej<¡d2fZOeNd5d6ZPe ;eHd    ePePd.fej<¡d2fZQd7ZRe ;eHd    eReRd.fej<¡d8fZSd9ZTe ;eHd:eTeTd;fej<¡d<fZUd=ZVe ;eHd    eVeVd.fej<¡d>fZWe ;eHd?ej<¡d@fZXe ;eHdAej<¡dBfZYe ;eHdCej<¡dDfZZe ;eHdEej<¡dFfZ[e ;eHdGej<¡dHfZ\e ;eHdIej<¡dJfZ]e ;eHdKej<¡dLfZ^e ;eHdMej<¡dNfZ_e ;eHdOej<¡dPfZ`e ;eHdQej<¡dRfZae ;eHdSej<¡dTfZbe ;eHdUej<¡dVfZce ;eHdWej<¡dXfZde ;eHdYej<¡dZfZee ;eHd[ej<¡d\fZfe ;eHd]ej<¡d^fZge ;eHd_ej<¡d`fZhe ;eHdaej<¡dbfZie ;eHdcej<ejjB¡ddfZke ;deejj¡dffZldgdh„Zmdidj„Zne ;dkej<¡Zoddldm„Zpdndo„Zqd    dqdr„Zrdsdt„Zsd
dudv„Zte ;dwej<¡Zue ;dxej<¡Zve ;dyej<¡Zwe ;dzej<¡Zxe ;d{ej<¡Zye ;d|¡Zze ;d}¡Z{e ;d~ej<¡Z|dd€„Z}dd‚„Z~dƒd„„Zd…d†„Z€d‡dˆ„Zd‰dŠ„Z‚e ;d‹ej<¡Zƒe ;dŒej<¡Z„e ;dej<¡Z…e ;dŽej<¡Z†e ;dej<¡Z‡dd‘„Zˆd’d“„Z‰d”d•„ZŠd–d—„Z‹d d˜d™„ZŒd dšd›„Zd dœd„ZސddŸd „Zd¡d¢„Zd£d¤„Z‘dd¥d¦„Z’dd§d¨„Z“dd©dª„Z”d«d¬„Z•d­d®„Z–dd¯d°„Z—d±d²„Z˜dd³d´„Z™e ;dµej<¡Zšd¶d·„Z›e ;d¸ej<¡Zœd¹dº„Zd»d¼„Zžd½d¾„ZŸd¿dÀ„Z dÁd„Z¡ddÃdĄZ¢ifdÅdƄZ£dÇdȄZ¤e ;dÉ¡j=Z¥dÊd˄Z¦dÌd̈́Z§e ;dÎej<¡Z¨gfdÏdЄZ©dÑd҄Zªe ;dÓej<¡Z«e ;dÔej<¡Z¬e ;dÕej<¡Z­e ;dÖej<¡Z®e ;d×ej<¡Z¯dØdلZ°ifdÚdۄZ±ddÞd߄Z²ddàdá„Z³ddâdã„Z´dädå„Zµddædç„Z¶ga·dèdé„Z¸dêdë„Z¹dìdí„Zºgdfdîdï„Z»dðdñ„Z¼t· ½e¼¡e¾dòk
r¦gZ¿gZÀdZÁdZÂdZÃdZÄejÅdd…D]¦ZÆeÆd    kr˜q„eÆddókr®dZÁq„eÆdôkrÄdadaq„eÆdõkrÚdöadaq„eÆd÷k    rtrôe/dødƒdadaq„eÆdùk    rdaq„eÆdúk    r$daq„eÆdûk    r8dadanòeÆdük    rPdadýadanÚeÆdþk    r`dZÂnÊeÆdÿk    rpdZÄnºeƐdk    r‚dZÃn¨eÆddk    r¦eǐdeÈeƃƒn„e    r¶dZÂeÆanteР   rÆdZÃeÆandeÁ
r zeÉeƃ Ê¡e¿ ½eÆ¡Wn6eËk

rZÌzeǐde̛dܝƒW5dZÌ[ÌXYnXn
eÀ ½eÆ¡q„t
sLt
rLt
sLe/ddƒe¸e¿ƒZÍt
r˜e/deÈtƒdƒe¹e̓ZÎeÉtdƒZÁeÁ ÏeΡW5QRXeĐ
r¦eFe̓dS(a*
crackfortran --- read fortran (77,90) code and extract declaration information.
 
Copyright 1999-2004 Pearu Peterson all rights reserved,
Pearu Peterson <pearu@ioc.ee>
Permission to use, modify, and distribute this software is given under the
terms of the NumPy License.
 
NO WARRANTY IS EXPRESSED OR IMPLIED.  USE AT YOUR OWN RISK.
$Date: 2005/09/27 07:13:49 $
Pearu Peterson
 
 
Usage of crackfortran:
======================
Command line keys: -quiet,-verbose,-fix,-f77,-f90,-show,-h <pyffilename>
                   -m <module name for f77 routines>,--ignore-contains
Functions: crackfortran, crack2fortran
The following Fortran statements/constructions are supported
(or will be if needed):
   block data,byte,call,character,common,complex,contains,data,
   dimension,double complex,double precision,end,external,function,
   implicit,integer,intent,interface,intrinsic,
   logical,module,optional,parameter,private,public,
   program,real,(sequence?),subroutine,type,use,virtual,
   include,pythonmodule
Note: 'virtual' is mapped to 'dimension'.
Note: 'implicit integer (z) static (z)' is 'implicit static (z)' (this is minor bug).
Note: code after 'contains' will be ignored until its scope ends.
Note: 'common' statement is extended: dimensions are moved to variable definitions
Note: f2py directive: <commentchar>f2py<line> is read as <line>
Note: pythonmodule is introduced to represent Python module
 
Usage:
  `postlist=crackfortran(files)`
  `postlist` contains declaration information read from the list of files `files`.
  `crack2fortran(postlist)` returns a fortran code to be saved to pyf-file
 
  `postlist` has the following structure:
 *** it is a list of dictionaries containing `blocks':
     B = {'block','body','vars','parent_block'[,'name','prefix','args','result',
          'implicit','externals','interfaced','common','sortvars',
          'commonvars','note']}
     B['block'] = 'interface' | 'function' | 'subroutine' | 'module' |
                  'program' | 'block data' | 'type' | 'pythonmodule' |
                  'abstract interface'
     B['body'] --- list containing `subblocks' with the same structure as `blocks'
     B['parent_block'] --- dictionary of a parent block:
                             C['body'][<index>]['parent_block'] is C
     B['vars'] --- dictionary of variable definitions
     B['sortvars'] --- dictionary of variable definitions sorted by dependence (independent first)
     B['name'] --- name of the block (not if B['block']=='interface')
     B['prefix'] --- prefix string (only if B['block']=='function')
     B['args'] --- list of argument names if B['block']== 'function' | 'subroutine'
     B['result'] --- name of the return value (only if B['block']=='function')
     B['implicit'] --- dictionary {'a':<variable definition>,'b':...} | None
     B['externals'] --- list of variables being external
     B['interfaced'] --- list of variables being external and defined
     B['common'] --- dictionary of common blocks (list of objects)
     B['commonvars'] --- list of variables used in common blocks (dimensions are moved to variable definitions)
     B['from'] --- string showing the 'parents' of the current block
     B['use'] --- dictionary of modules used in current block:
         {<modulename>:{['only':<0|1>],['map':{<local_name1>:<use_name1>,...}]}}
     B['note'] --- list of LaTeX comments on the block
     B['f2pyenhancements'] --- optional dictionary
          {'threadsafe':'','fortranname':<name>,
           'callstatement':<C-expr>|<multi-line block>,
           'callprotoargument':<C-expr-list>,
           'usercode':<multi-line block>|<list of multi-line blocks>,
           'pymethoddef:<multi-line block>'
           }
     B['entry'] --- dictionary {entryname:argslist,..}
     B['varnames'] --- list of variable names given in the order of reading the
                       Fortran code, useful for derived types.
     B['saved_interface'] --- a string of scanned routine signature, defines explicit interface
 *** Variable definition is a dictionary
     D = B['vars'][<variable name>] =
     {'typespec'[,'attrspec','kindselector','charselector','=','typename']}
     D['typespec'] = 'byte' | 'character' | 'complex' | 'double complex' |
                     'double precision' | 'integer' | 'logical' | 'real' | 'type'
     D['attrspec'] --- list of attributes (e.g. 'dimension(<arrayspec>)',
                       'external','intent(in|out|inout|hide|c|callback|cache|aligned4|aligned8|aligned16)',
                       'optional','required', etc)
     K = D['kindselector'] = {['*','kind']} (only if D['typespec'] =
                         'complex' | 'integer' | 'logical' | 'real' )
     C = D['charselector'] = {['*','len','kind','f2py_len']}
                             (only if D['typespec']=='character')
     D['='] --- initialization expression string
     D['typename'] --- name of the type if D['typespec']=='type'
     D['dimension'] --- list of dimension bounds
     D['intent'] --- list of intent specifications
     D['depend'] --- list of variable names on which current variable depends on
     D['check'] --- list of C-expressions; if C-expr returns zero, exception is raised
     D['note'] --- list of LaTeX comments on the variable
 *** Meaning of kind/char selectors (few examples):
     D['typespec>']*K['*']
     D['typespec'](kind=K['kind'])
     character*C['*']
     character(len=C['len'],kind=C['kind'], f2py_len=C['f2py_len'])
     (see also fortran type declaration statement formats below)
 
Fortran 90 type declaration statement format (F77 is subset of F90)
====================================================================
(Main source: IBM XL Fortran 5.1 Language Reference Manual)
type declaration = <typespec> [[<attrspec>]::] <entitydecl>
<typespec> = byte                          |
             character[<charselector>]     |
             complex[<kindselector>]       |
             double complex                |
             double precision              |
             integer[<kindselector>]       |
             logical[<kindselector>]       |
             real[<kindselector>]          |
             type(<typename>)
<charselector> = * <charlen>               |
             ([len=]<len>[,[kind=]<kind>]) |
             (kind=<kind>[,len=<len>])
<kindselector> = * <intlen>                |
             ([kind=]<kind>)
<attrspec> = comma separated list of attributes.
             Only the following attributes are used in
             building up the interface:
                external
                (parameter --- affects '=' key)
                optional
                intent
             Other attributes are ignored.
<intentspec> = in | out | inout
<arrayspec> = comma separated list of dimension bounds.
<entitydecl> = <name> [[*<charlen>][(<arrayspec>)] | [(<arrayspec>)]*<charlen>]
                      [/<init_expr>/ | =<init_expr>] [,<entitydecl>]
 
In addition, the following attributes are used: check,depend,note
 
TODO:
    * Apply 'parameter' attribute (e.g. 'integer parameter :: i=2' 'real x(i)'
                                   -> 'real x(2)')
    The above may be solved by creating appropriate preprocessor program, for example.
 
éNé)Ú __version__)Ú*)ÚsymbolicÚfixú    ÚéÿÿÿÿcCspdadadadadadadadadada    ga
da t gia da dadagaiadadadagagagagadadS)Nrrrrrr    )Ú    strictf77ÚsourcecodeformÚquietÚverboseÚtabcharÚ pyffilenameÚ f77modulenameÚ skipemptyendsÚignorecontainsÚ dolowercaseÚdebugÚ groupcounterÚ    grouplistÚ neededmoduleÚ expectbeginÚskipblocksuntilÚ usermodulesÚ f90modulevarsÚ gotnextfileÚfilepositiontextÚcurrentfilenameÚ skipfunctionsÚ    skipfuncsÚ    onlyfuncsÚ include_pathsÚprevious_context©r$r$úNd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\numpy/f2py/crackfortran.pyÚreset_global_f2py_varsÇs4    r&cCs,tsdSts(|rtj t¡tj |¡dS©N)r r ÚsysÚstdoutÚwriter)ÚlineÚflagr$r$r%Úoutmessís  r-é2zabcdefghopqrstuvwxyz$_ÚtypespecÚrealZijklmnÚinteger)3ÚintÚdoubleÚfloatÚcharÚshortÚlongZvoidÚcaseÚwhileÚreturnÚsignedZunsignedÚifÚforZtypedefÚsizeofÚunionÚstructÚstaticÚregisterÚnewÚbreakZdoÚgotoÚswitchÚcontinueÚelseÚinlineZexternÚdeleteÚconstÚautoÚlenZrankÚshapeÚindexÚslenÚsizeZ_iÚmaxÚminZflenZfshapeÚstringZcomplex_doubleZ float_doubleÚstdinÚstderrr)ÚtypeÚdefaultZ_bncCs(|tkr$td|t|fƒt|S|S)Nz&rmbadname1: Replacing "%s" with "%s".
)ÚbadnamesÚerrmess©Únamer$r$r%Ú
rmbadname1 s 
ÿr]cCsdd„|DƒS)NcSsg|] }t|ƒ‘qSr$)r]©Ú.0Ú_mr$r$r%Ú
<listcomp>szrmbadname.<locals>.<listcomp>r$©Únamesr$r$r%Ú    rmbadnamesrdcCs(|tkr$td|t|fƒt|S|S)Nz+undo_rmbadname1: Replacing "%s" with "%s".
)Ú invbadnamesrZr[r$r$r%Úundo_rmbadname1s 
ÿrfcCsdd„|DƒS)NcSsg|] }t|ƒ‘qSr$)rfr^r$r$r%ra!sz"undo_rmbadname.<locals>.<listcomp>r$rbr$r$r%Úundo_rmbadname srgcCsN| d¡}|dkrdSd||d…kr*dSd||d…kr>dS||dd…S)NÚ.r    rú\ú/r)Úrfind)r\Úir$r$r%Ú getextension$s
rmz.*\.(for|ftn|f77|f)\Zz-\*-\s*fortran\s*-\*-z-\*-\s*f90\s*-\*-z-\*-\s*fix\s*-\*-z[^c*]\s*[^\s\d\t]c    Cs tdk    rt |¡ ¡j}nxtdtj |¡ƒ}t|dƒV}|     |¡}| 
t j ¡rTd}n4| 
t j t jf¡rld}n| 
t jt jf¡r„d}nd}W5QRXt|||dS)    aNEnsures that filename is opened with correct encoding parameter.
 
    This function uses charset_normalizer package, when available, for
    determining the encoding of the file to be opened. When charset_normalizer
    is not available, the function detects only UTF encodings, otherwise, ASCII
    encoding is used as fallback.
    Né Úrbz    UTF-8-SIGzUTF-32zUTF-16Úascii)Úencoding)Úcharset_normalizerÚ    from_pathÚbestrqrSÚosÚpathÚgetsizeÚopenÚreadÚ
startswithÚcodecsÚBOM_UTF8Ú BOM_UTF32_LEÚ BOM_UTF32_BEÚBOM_LEÚBOM_BE)ÚfilenameÚmoderqÚnbytesZfhandleÚrawr$r$r%Úopenhook5s  
 r…c    Cs¬d}t|dƒ”}| ¡}d}t|ƒr*d}nt|ƒr:d}d}|dkrž|rž|ddkr”| ¡r”|d8}|ddkr~t|dd…ƒsŽ|d    d
…d kr”d}qž| ¡}q:W5QRX|S) z(Check if file is in free format Fortran.rÚrérú!ú    Nééþÿÿÿr    ú&)r…ÚreadlineÚ _has_f_headerÚ_has_f90_headerÚstripÚ_free_f90_start)ÚfileÚresultÚfr+Únr$r$r%Úis_free_formatTs"  ,r–c Cs”|stttttttttf    }|gkr&dSt}d}d}d}t     
dt    j ¡}t     
d¡}    t     
d¡}
t     
d¡} |rp|ddƒd    \}} d
gd d „t d ƒDƒ} dat j|td}z | ¡}WnFtk
rô}z(td| ¡›d| ¡›d|›dƒ‚W5d}~XYnX|sþqt| ¡r¢da| ¡ada|} dadatj t¡d}ttƒrXt|ƒsXt|ƒsXdanttƒrpt|ƒspdatr|tantatdt tƒttr˜dpšdfƒ| !¡ "dd
¡}|dksÞ|ddkrΐqÞ|dd…}q²ts.t#|dƒ\}}|d
7}|dd… $¡dkr.t#|d|dd…dƒ\}}| %¡dkrNtdkrHq¢d}q¢tdkr¾|ddkr–|dd… $¡d krŽd!|dd…}nd}q¢n tr¶t&|ƒd"kr¶|dd"…}|d| krÔtd#t |ƒƒ‚|ràtrt&|ƒdkr|dd
ks||d$d…}d}d}n¦ts|     '|¡}|r6| (d%¡}|rZ||
 '|¡ (d%¡}d}d}n,d!|dd…}|rz| $¡}n|}|}|}|dk    }n,d!|dd…}|r°| $¡}n|}|}|}nàtdkrŽ|s*|d&kr*|  '|¡r*|d'}| ¡}|st)d(ƒq"||}|  '|¡rìq"qì| *¡}|     '|¡}|rD| (d%¡}|rh||
 '|¡ (d%¡}d}d}n|rx| $¡}n|}|}|}|dk    }nt+d)t tƒƒ‚d*| ,¡dt| fa| '|¡}|rf| (d+¡}tj -|¡rìt.||dd,nxtj /t¡gt0}d}|D]:}tj 1||¡}tj -|¡rd}t.||dd,qBq|sntd-t |ƒtj2 1|¡fƒn||ƒ|} q¢|r„| $¡}n|}|}d*| ,¡dt| fa| '|¡}|rT| (d+¡}tj -|¡rÚt.||dd,nxtj /t¡gt0}d}|D]:}tj 1||¡}tj -|¡rôd}t.||dd,q0qô|s\td-t |ƒtj2 1|¡fƒn||ƒda| 3¡|rz|ddƒn|\    aaaaaaaaadS).zõ
    Read fortran codes from files and
     1) Get rid of comments, line continuations, and empty lines; lower cases.
     2) Call dowithline(line) on every line.
     3) Recursively call itself when statement "include '<filename>'" is met.
    NFrz*\s*include\s*(\'|")(?P<name>[^\'"]*)(\'|")z(?P<line>.*)&\s*\Zz(\s*&|)(?P<line>.*)z.*?'''r    )rrú cSsg|] }t|ƒ‘qSr$)Ústrr^r$r$r%ra‰sz#readfortrancode.<locals>.<listcomp>é
)r…zreadfortrancode: reading ú#z  failed with
zu.
It is likely that installing charset_normalizer package will help f2py determine the input file encoding correctly.rrrÚfreez    Reading file %s (format:%s%s)
z,strictõ z
rˆrŠz!f2pyr)rÚcrˆÚCršZf2pyz     éHzxreadfortrancode: Found non-(space,digit) char in the first column.
    Are you sure that this code is in fix form?
    line=%sér+ú.pyfÚ
z.Unexpected end of file when reading multiline
z6Flag sourcecodeform must be either 'fix' or 'free': %szLine #%d in %s:"%s"
    r\)Ú
dowithlineÚistopzAreadfortrancode: could not find include file %s in %s. Ignoring.
)4rrrr r
Ú beginpatternr r rÚreÚcompileÚIÚrangeÚ    fileinputZ    FileInputr…rÚUnicodeDecodeErrorÚ    ExceptionrÚlinenoZ isfirstlinerurvÚsplitextÚ    is_f_filerÚ_has_fix_headerr–Úbeginpattern77Úbeginpattern90r-ÚreprÚ
expandtabsÚreplaceÚsplit_by_unquotedÚlowerrrMÚmatchÚgrouprZÚrstripÚ
ValueErrorZ
filelinenoÚisfileÚreadfortrancodeÚdirnamer"ÚjoinÚpathsepÚclose)Úffiler£r¤Z saveglobalsZlocaldolowercaseÚcontZ    finallineÚllZ includelineZcont1Zcont2Z
mline_markÚl1Z spacedigitsZfinÚlÚmsgÚextÚrlÚ_Z origfinalliner†ÚlcÚmÚfnÚ include_dirsZ    foundfileÚinc_dirZfn1r$r$r%r½lsž
 
ÿÿ
 
 
 
 ÿ
 
ÿÿÿÿ
 
 
 þ(
 
 
 
 
 
ÿ 
 
 
 
 
ÿ
ÿ
 
 
ÿÿ
 
ÿ
 
 
ÿ
 
 
 
ÿ
 ÿ ÿr½zN\s*(?P<before>%s(?=\s*(\b(%s)\b)))\s*(?P<this>(\b(%s)\b))\s*(?P<after>%s)\s*\Zzqcharacter|logical|integer|real|complex|double\s*(precision\s*(complex|)|complex)|type(?=\s*\([\w\s,=(*)]*\))|byteú.*rWz|static|automatic|undefined)z([a-z]+[\w\s(=*+-/)]*?|)ÚfunctionrÑrÐÚbegin)z    [a-z\s]*?Ú
subroutinerÓrÐzprogram|block\s*dataz@|module(?!\s*procedure)|python\s*module|(abstract|)\s*interface|z type(?!\s*\()z\end|endprogram|endblockdata|endmodule|endpythonmodule|endinterface|endsubroutine|endfunctionÚendzJend\s*(if|do|where|select|while|forall|associate|block|critical|enum|team)z[\w]*?z[\w\s]*Úendifzmodule\s*procedureÚmoduleprocedure)rÚimplicitr×rÐr×)rúdimension|virtualrØrÐÚ    dimension)rÚexternalrÚrÐrÚ)rÚoptionalrÛrÐrÛ)rÚrequiredrÜrÐrÜ)rÚpublicrÝrÐrÝ)rÚprivaterÞrÐrÞ)rÚ    intrinsicrßrÐrß)rúintent|depend|note|checkràz \s*\(.*?\).*Úintent)rÚ    parameterrâz\s*\(.*râ)rÚdatarãrÐrã)rÚcallrärÐrä)rÚentryrårÐrå)rÚcallfunrærÐræ)rÚcommonrçrÐrç)rÚuserèrÐrè)rÚcontainsrérré)rÚformatrêrÐrê)rúKthreadsafe|fortranname|callstatement|callprotoargument|usercode|pymethoddefrërÐÚf2pyenhancementsz2\s*(?P<before>''')(?P<this>.*?)(?P<after>''')\s*\ZÚ    multilinec    Csvtdƒt|ƒ@rtdƒ‚t djd t |¡¡d t |¡¡ddd¡}| |¡}|rn| ¡}|d    |d
fS|d fS) z¶
    Splits the line into (line[:i], line[i:]),
    where i is the index of first occurrence of one of the characters
    not within quotes, or len(line) if no such index exists
    z"'zcannot split by unquoted quoteszR\A(?P<before>({single_quoted}|{double_quoted}|{not_quoted})*)(?P<after>{char}.*)\Zz[^"'{}]z[{}]z('([^'\\]|(\\.))*')z("([^"\\]|(\\.))*"))Z
not_quotedr5Ú single_quotedZ double_quotedÚbeforeÚafterr)ÚsetÚAssertionErrorr¦r§rêÚescaper¸Ú    groupdict)r+Ú
charactersr†rÌÚdr$r$r%r¶¡sûÿ
r¶cCsBg}t|ƒ d¡D]$}dD]}| |d¡}q| |¡qd |¡S)Nú@,@z(),rÊú,)ÚmarkoutercommaÚsplitrµÚappendr¿)ZargslineÚar•r†r$r$r%Ú _simplifyargsµs  rýz"\s*(?P<result>\b[a-z]+\w*\b)\s*=.*cCs¸t|dƒ\}}|r„td |¡s„td |¡s„|dksBtt|ƒƒ‚t|dƒ\}}|rvt||ƒt|dd…dƒ\}}qPt||ƒdS|dkrädatdiatiia    tgia
gt    td<it    td<dt    td<dt    td    <d
a d
a dS|dkrd}t rt tkrd }t|krptd ttƒttƒfƒtd ƒt
td t    t¡t
tt
tdd
d<t
t=tdaqt rüt tkrüt
td t    t¡t
tt
tdd
d<t
t=tdat
td t    t¡t
tt
tdd
d<t
t=tdad
a dS|dkrdSd}ttttttttttttttttt t!t"t#t$t%t&ttt'fD](}|d |¡}|rhqt|d}qJ|sÎt(}    dt kr–tkržnndSdt    tkr–t    tdD]Ü}
|
t)krÎt)|
}
dt    tkrò|
t    tdkròq¸t* d|
t+|ƒt*j,¡} | r¸|     |  -d¡¡} t.|  -d¡ƒ} | rJd|
| |  -d¡f}n d|
| f}t/d |¡}|s€tdt|ƒƒdSt0|d|ƒdSq¸t1dksºt1dkrÊt2 3¡ 4d¡rÊda5tdtƒdS|ddkrÆdt krôtkrnntdat tkrdStdkr$t6dtƒ‚td |¡} | rp|  -d¡ttkspt6dt|  -d¡ƒtttƒt7fƒ‚t tkr~d
a t
td t    t¡t
tt
tdd
d<t
t=tdat8s´da9nî|ddkrdt krìtkrünn tdadSda:t0||d|ƒda9nž|ddkr&nŽ|dd krFt0||d|ƒnn|dd!kr„t;r^dSdt krvtkr~nndSta n0dt krœtkr¤nndSt0||d|ƒdS)"z¬
    reset=-1  --- initialize
    reset=0   --- crack the line
    reset=1   --- final check if mismatch of blocks occurred
 
    Cracked data is saved in grouplist[0].
    ú;rrNrÚbodyÚvarsÚblockr\r    éz(crackline: groupcounter=%s groupname=%s
zYcrackline: Mismatch of blocks encountered. Trying to fix it by assuming "end" statement.
Ú    externalsÚ
interfacedz5(?P<before>[^"]*)\b%s\b\s*@\(@(?P<args>[^@]*)@\)@.*\ZrïÚargszcallfun %s(%s) result (%s)r“zcallfun %s(%s)z8crackline: could not resolve function call for line=%s.
rær¡z"crackline:%d: No pattern for line
rÔz>crackline: groupcounter(=%s) is nonpositive. Check the blocks.ÚthiszGcrackline: End group %s does not match with previous Begin group %s
    %srÒrÕrÖré)<r¶Úf2pyenhancementspatternr¸Úmultilinepatternròr³Ú    cracklinerÚ    groupnameÚ
groupcacherrrrr-rûÚdimensionpatternÚexternalpatternÚ intentpatternÚoptionalpatternÚrequiredpatternÚparameterpatternÚ datapatternÚ publicpatternÚprivatepatternÚintrinsicpatternÚ endifpatternÚ
endpatternÚ formatpatternr¥ÚfunctionpatternÚsubroutinepatternÚimplicitpatternÚ typespatternÚ commonpatternÚ callpatternÚ
usepatternÚcontainspatternÚ entrypatternÚmoduleprocedurepatternÚcrackline_re_1rer¦Úmarkouterparenr¨r¹rýÚcallfunpatternÚ analyzeliner rr·Úendswithr#r¬rrrrr)r+ÚresetrÊZ has_semicolonZsemicolon_lineÚflr,ÚpatrÌÚre_1r\Úm1Úm2rür$r$r%r    ÀsB  ÿ
 
 
 
ÿÿ 
ô 
 ÿÿ 
ÿ 
$ 
 
þÿþ
r    cCsdd}d}|D]R}|dkr4|d}|dkrV|d}q n"|dkrV|d}|dkrV|d}q ||}q |S)Nrrú(rú@(@ú)ú@)@r$)r+rÆr”rr$r$r%r$_s
r$røcCsÀd}d}t||dƒ\}}||7}|r¦|d|krL|dkrL|d|d7}n6||d7}|ddkrn|d7}n|ddkr‚|d8}t|dd…|dƒ\}}||7}q"|r¼tt|||fƒƒ‚|S)Nrrz()ú@r.rr0)r¶ròr³)r+ÚcommarÆr”rïrðr$r$r%rùqs   
 
rùcCs| dd¡ dd¡}|S)Nr/r.r1r0)rµ)r+r†r$r$r%Úunmarkouterparen„sr4cCsþ|si}|s|S||kr|St| ¡ƒD]Ð}|dkrN|s@||krø||||<q(|dkrr||D]}t|||ƒ}q^q(|dkrŒt||||ƒ}q(|dkr¦t||||ƒ}q(|dkrÈ|sº||krø||||<q(|dkrÒq(|dkrètd|ƒq(td    t|ƒƒ‚q(|S)
Nr/ÚattrspecÚ kindselectorÚ charselector)ú=ÚtypenameÚnote)ráÚcheckrÙrÛrÜÚdependz"appenddecl: "%s" not implemented.
z-appenddecl: Unknown variable definition key: )ÚlistÚkeysÚ setattrspecÚsetkindselectorÚsetcharselectorrZr¬r˜)ÚdeclZdecl2ÚforceÚkrÆr$r$r%Ú
appenddecl‰s8   ÿrEzD\s*(?P<this>(@\(@.*?@\)@|\*[\d*]+|\*\s*@\(@.*?@\)@|))(?P<after>.*)\Zz[(?:,(?P<attributes>[\w(),]+))?(::)?(?P<name>\b[a-z$_][\w$]*\b)(?:\((?P<params>[\w,]*)\))?\Zzž\s*(?P<name>\b[\w$]+\b)\s*(@\(@\s*(?P<args>[\w\s,]*)\s*@\)@|)\s*((result(\s*@\(@\s*(?P<result>\b[\w$]+\b)\s*@\)@|))|(bind\s*@\(@\s*(?P<bind>.*)\s*@\)@))*\s*\ZzF\s*(?P<scheme>(operator|assignment))@\(@\s*(?P<name>[^)]+)\s*@\)@\s*\Zz9\s*(?P<name>\b[\w$]+\b)\s*@\(@\s*(?P<args>.*)\s*@\)@\s*\Zz4([-+]?(?:\d+(?:\.\d*)?|\d*\.\d+))[dD]((?:[-+]?\d+)?)zA([-+]?((?:\d+(?:\.\d*)?|\d*\.\d+))[eE]((?:[-+]?\d+)?)|(\d+\.\d*))zintent\s*\(.*?\bcallback\bcCs&| dg¡D]}t |¡r dSq dS)Nr5rr)ÚgetÚ_intentcallbackpatternr¸)Zvdeclrür$r$r%Ú_is_intent_callback¼s
rHcCsld | ¡¡}t |¡}t||ƒ|rb| d¡}|rHdd„| d¡Dƒng}| d¡|| d¡fSdgdfS)NrÚ
attributescSsg|] }| ¡‘qSr$)r·)r_rür$r$r%raÉsz*_resolvetypedefpattern.<locals>.<listcomp>rør\Úparams)r¿rúÚtypedefpatternr¸Úprintr¹)r+r,Úattrsr$r$r%Ú_resolvetypedefpatternÃs
 
 
rNcCs¢t|ƒ}t |¡}|r:| d¡| d¡| d¡| d¡fSt |¡}|rp| d¡d| d¡d}|gddfSt |¡}|r–| d¡| d¡ddfSdgddfS)Nr\rr“ÚbindÚschemer.r0)r$Únameargspatternr¸r¹ÚoperatorpatternÚcallnameargspattern)r+r,r\r$r$r%Ú_resolvenameargspatternÎs
$
 
rTc> CsÔ| d¡}|dkrdatr´|dkr´ts´tdkr´tj t¡     d¡d}t
d|ƒda tdadt t<it t<gtt<gt td    <it td
<dt td <|t td <d t td<da|dkr¸| ¡}t d|tj¡rÜd}n,t d|tj¡ròd}nt d|tj¡rd}|dkrFt| d¡ƒ\}}}t|dt td
|<g}d}    nt| d¡ƒ\}}}    }|dkrŒ|dkrvd}nd}|dkrŒt
dƒ||tfa|rºtdd„t|ƒ     d¡Dƒƒ}ng}d|krèd|krà| d¡qÈt
d ƒd}
d} |d!krnd} d"t tkrdS|t td"kr&dSttD]} | d |kr.dSq.|t td#kr`dSd$d%d!œ|}tr¢td&kr¢tdkr¢td'ad}
|d(kr¢d} tdait t<gtt<|
rPtdkrÜt
d)ttƒdƒd*t t<dt td <tt td <dt td<gt td    <gt td+<gt td#<it td
<tdait t<gtt<| rtdkrnt
d,tdƒd-t t<d-t td <d.t td <d/t tddt tdd ft td<gt td    <gt td+<gt td#<it td
<tdait t<gtt<|t t<|t td <|s,d0| d1d2¡}| d3¡t td4<t|ƒt td <|    t td5<tdkrrtt td<n^tr¤td6kr¤d/t tddtft td<n,d/t tddt tdd ft td<tt t  ¡ƒD]} t t| sàt t| =qà|t td"<gt td    <gt td+<gt td#<it td
<it td7<|dkr^gt td8<|d!krö|t td'd+kr”t td'd+ !|¡t" #t td'd
¡t td
<z,t td
|t td
|d9 $d:¡=Wnt%k
rôYnX|d;krÚz6t&t td
|t td'd
dƒt td
|<Wnt%k
rLYnX|d<kr¨|    r¨|    t td
kr¨||    ks¨t&t td
|t td
|    ƒt td
|<zt td'd# !|¡Wnt%k
rØYnX|d%kr2t'd | d3¡d1|¡}|r2t(| d¡| d¡ƒ\}}}}t)||||ƒ|d!krÐttd !t t¡ttttdd&d    <tt=tdattd !t t¡ttttdd&d    <tt=tdan|d7kr>t| d¡ƒ\}}}    }|dk    rÐ|rtd=d„t|ƒ     d¡Dƒƒ}ng}|    dks t*t|    ƒƒ‚|t td7|<d7|tfan’|dkr†t(|| d¡ƒ\}}}}t)||||ƒ}|dk    rÐd>|tfanJ|d?k r$t td
}| d¡ +¡}| ,d@¡}|dk    r\|dAk    r\t-|ƒ ,dB¡d'}|d|d…d@||dd…}| ,d@¡}||d…d@k    r\d"t tk    r\t
dC| d¡|d|…fƒ|dD .t td"¡}|dk    rpd}d}n |d|… +¡}||d'd…}t|ƒ     d¡}t/|ƒdk    rÎ|d}t
dEdD .|dd…¡ƒd}dFd„t|ƒ     d¡DƒD]}t0 |¡}|
s6|dGk
rd} n$t1| 2¡ƒt
dH|t|ƒfƒ    qênt| d ¡ƒ} |dGk
rp| dIk
sb| dJk
rp| | d¡7} | |k
r‚i|| <|dKk
rš|| d¡}|dAk rP| d¡|}t3 |¡ rP| t td"k rDtdk r6dLt td'd k
røt
dMƒ| t td k rBt
dN| t td fƒt td" !| ¡n t4dO| ƒn t4dP| ƒ|dQk r^|}d9|| k r€|| d9 !|¡n|g|| d9<|d:k røt td dk r¶t
dRƒ    qê| t td"k r̐    qêd+t tk rægt td+<t td+ !| ¡| }    qê|t td
<|dk    rÐd>|tfa n¬|dSk rTdTd„| d¡     dD¡Dƒt tdU< n||dVkrªt td
}| d¡ +¡dd&…}d}t|ƒ     d¡D]ð}zdWd„|     dX¡Dƒ\} }Wn,t%k
 ràt
dY||fƒY q’YnXt5|ƒ}t| ƒ} | |k ri|| <dX|| k r>|| dX|k s>t
dZ| || dX|fƒt6||ƒ}| rè| 7d[¡d\k r¸t|ƒ}t8 9|¡D]:}t|| :¡| ;¡… ¡ d]d^¡ƒ|| :¡| ;¡…< qpd .|¡}n0| 7d[¡d_k rè|dd… ¡ d]d^¡ dDd`¡}zt<|i|ƒ}WnDt=t>t?fk
r<} zt4da|| fƒWY¢ q’W5d} ~ XYnXt|ƒ|| dX<d9|| krp|| d9 !dV¡ndVg|| d9<| } q’|t td
<|dk    rÐd>|tfa    n&|dbkrä| d¡ +¡ ¡dckrÜdt tdb<qÐ| d¡rÐdbt tkrt tdb}!ni}!|!dkrt
ddƒi}!t| d¡ƒ     d¡D]ž}i}"t de|tj¡}|sbt
df|ƒq2t@ | d¡¡}#|#sˆt
dg|ƒq2t(|# d¡|# d¡ƒ\}}}}tA||ƒ\}$}%}&||"d[<|$|"dh<|%|"di<|&|"dj<t|"  ¡ƒD]} |"| sâ|"| =qât| d¡ƒ     d¡D]À}'dk|'krdzdld„|'     dk¡Dƒ\}(})Wn(t%k
r`t
dm|'ƒYqYnXn |' +¡}(})t/|(ƒt/|)ƒkrdks¢nt
dn|'ƒqtBtC|(ƒtC|)ƒdƒD]}*|"|!tD|*ƒ<q¸qq2|!t tdb<nì|dokrg}d}+d},d}-d}.d}/| d¡D]Î}0|/sF|0dpkr*|. }.|0dqkrF|.rF|-d}-q|0drkrZ|/d}/n|0dskrl|/d}/|-dkr€|+|0}+n\|-dkr”|,|0},nH|-d'kr|+ +¡}+|+ EdD¡rÂ|+dd… +¡}+| !|+|,g¡|0}+d},d}-q|-d'kr|+ +¡}+|+ EdD¡r|+dd… +¡}+| !|+|,g¡i}1d
t tkr:t td
}1d}|D]ž}2dtd„|2Dƒ}2|2dddDkr||2ddd…|2d<|2dddrkr¢t
du|2dƒqBd}d}3t/|2dƒ}4tdvd„t|2dƒ     d¡DƒƒD]}|ddrkrút
du|ƒqÖd}.||4krD|.s |2d|dDksD|2d|dpkr8|. }.|d}qþ|d}||1kr^i|1|<dX|1|kr¸|1|dX|2d|3|d…ks¸t
dw||1|dX|2d|3|d…fƒ|2d|3|d…|1|dX<|}3|}q֐qB|1t td
<|dk    rÐd>|tfanÈ|dxkrx| d¡ +¡}|ddqks6dy|}g}5d}-d}6d}7|D]r}0|0dqkrd|-d}-qJ|-d6krž|6 +¡}6|6s€dz}6|5 !|6|7g¡|-d'}-d}6d}7|-d'r²|6|0}6n|7|0}7qJ|6 +¡}6|6sÐdz}6|5 !|6|7g¡i}8dxt tkrüt tdx}8|5D]\}0|0d|8krg|8|0d<d{d„t|0dƒ     d¡DƒD]}|r:|8|0d !|¡q:q|8t tdx<dx|6tfanX|d|krÔt d}| d¡tj¡}|r¾| 2¡}9d|t tkrÀit td|<| d ¡}it td||<d}:d~|9krÒ|9d~dk    rÒd|9kr|9ddkrd}:|:t td||d€<dd„|9d~     dD¡Dƒ}i};|D]r}2dX|2kršt d‚|2tj¡}#|#rˆ|# d|¡ +¡|;|# dƒ¡ +¡<nt
d„t|2ƒƒn|2|;|2<|;t td||d…<qFnnt1| 2¡ƒt
d†ƒnü|d‡krhdˆt tkrøit tdˆ<t tdˆ}<| d¡d‰krRd‰|<krRtF|<d‰tGƒr<|<d‰g|<d‰<|<d‰ !| d¡¡n| d¡|<| d¡<nh|dkr²tdkrŽtrŠt
dŠƒdSt}=tHt |=tdd'…| d¡ƒntdkrÐt1| 2¡ƒt
d‹ƒdS)ŒNrrí)rÒrärærWrrhrzBanalyzeline: no group yet. Creating program group with name "%s".
Úprogramrÿrrr\ZfromskyÚfrom)rÒräræz block\s*dataú
block datazpython\s*moduleú python modulezabstract\s*interfaceúabstract interfacerWrð)r5Ú _BLOCK_DATA_r)Ú    interfacerWrYz2analyzeline: No name/args pattern found for line.
cSsg|] }| ¡‘qSr$©r©r_Úxr$r$r%rasÿzanalyzeline.<locals>.<listcomp>r÷z<analyzeline: argument list is malformed (missing argument).
)rärærrrÓrÑr    r©r[rYz&analyzeline: Creating module block %s
ÚmodulerzDanalyzeline: Creating additional interface block (groupcounter=%s).
r[Úunknown_interfacez%s:%sZunknown_r—rÊrïÚprefixr“éråÚvarnamesr5rÚ©rÑrÓræcSsg|] }| ¡‘qSr$r\r]r$r$r%ražsÿÚvariable)rÙrárÛrÜrÚrÝrÞrßú::rár1z'All arguments will have attribute %s%s
røzXanalyzeline: cannot handle multiple attributes without type specification. Ignoring %r.
cSsg|] }| ¡‘qSr$r\r]r$r$r%raÄs©rÝrÞzEanalyzeline: no name pattern found in %s statement for %s. Skipping.
ÚoperatorZ
assignmentrÙÚ__user__z8analyzeline: missing __user__ module (could be nothing)
z;analyzeline: appending intent(callback) %s to %s arguments
z,analyzeline: intent(callback) %s is ignored
z=analyzeline: intent(callback) %s is already in argument list
)rÛrÜrÝrÚrÞrßz(analyzeline: ignoring program arguments
rÖcSsg|] }| ¡‘qSr$r\r]r$r$r%raÿsÚ implementedbyrâcSsg|] }| ¡‘qSr$r\r]r$r$r%rasr8zManalyzeline: could not extract name,expr in parameter statement "%s" of "%s"
zGanalyzeline: Overwriting the value of parameter "%s" ("%s") with "%s".
r/r0röÚeÚcomplexz+1j*(z1analyzeline: Failed to evaluate %r. Ignoring: %s
r×Únonez<analyzeline: Overwriting earlier "implicit none" statement.
z9\s*(?P<this>.*?)\s*(\(\s*(?P<after>[a-z-, ]+)\s*\)\s*|)\ZzDanalyzeline: could not extract info of implicit statement part "%s"
zManalyzeline: could not extract types pattern of implicit statement part "%s"
r6r7r9ú-cSsg|] }| ¡‘qSr$r\r]r$r$r%raSszZanalyzeline: expected "<char>-<char>" instead of "%s" in range list of implicit statement
z^analyzeline: expected "<char>-<char>" instead of "%s" in range list of implicit statement (2)
rãú'rjr.r0cSsg|] }| ¡‘qSr$r\r]r$r$r%ra‰sz>analyzeline: implied-DO list "%s" is not supported. Skipping.
cSsg|] }| ¡‘qSr$r\r]r$r$r%ra“sz=analyzeline: changing init expression of "%s" ("%s") to "%s"
rçz//Ú_BLNK_cSsg|] }| ¡‘qSr$r\r]r$r$r%raÎsrèzR\A\s*(?P<name>\b\w+\b)\s*((,(\s*\bonly\b\s*:|(?P<notonly>))\s*(?P<list>.*))|)\s*\Zr=ZnotonlyÚonlycSsg|] }| ¡‘qSr$r\r]r$r$r%raász7\A\s*(?P<local>\b\w+\b)\s*=\s*>\s*(?P<use>\b\w+\b)\s*\ZÚlocalz0analyzeline: Not local=>use pattern found in %s
Úmapz0analyzeline: Could not crack the use statement.
)rìrìZusercodez-analyzeline: No context for multiline block.
z+analyzeline: No code implemented for line.
)Ir¹r#rrrrurvÚbasenamerrúr-rr
r rr·r¦r¸r¨rNÚdictrTrdrùÚremoverrr r³rµr]r=r>rûÚcopyÚdeepcopyrOr¬rErÚcracktypespec0Ú
updatevarsròrÚfindr$r¿rMÚ namepatternrLrôrGrZÚget_parametersÚdetermineexprtyperFÚ real16patternÚfinditerÚstartrÔÚevalÚ SyntaxErrorÚ    NameErrorÚ    TypeErrorÚtypespattern4implicitÚ cracktypespecr©ÚordÚchrrzÚ
isinstancer˜Úappendmultiline)>rÌr8r+rZnewnamer\rMrÊrr“Z
needmoduleZ needinterfaceÚitrDÚtr/ÚselectorÚattrÚedeclrOÚ    last_namerÄrlÚplÚchrlr,ZapZinitexprrJÚttÚvrÇÚimplrBr-Ú
kindselectÚ
charselectr9r†ZbegcZendcÚoÚdlZilr”ZfcÚinprrrÆÚjZllenZclZbnÚolZ    commonkeyÚmmZisonlyrÉröÚgcr$r$r%r&Ýsš
 ÿÿÿ     
 
 
 
 
 
 ÿ
 
 
ÿ
 
 
 
ÿÿ       
ÿÿ  ÿ      
ÿÿ      
 
ÿ ÿ
ÿ
 
ÿ
ÿ 
 
 
 ÿ
 
ÿ 
 
 
$
 ÿ
ÿ
 
 ÿ
ÿÿ
 
 
 
ÿÿÿÿ
 
 
 
ÿ
 
ÿ 
 
ÿ
ÿ ÿÿ 
 
 
ÿÿÿÿÿ ÿ
 
 
 
ÿ "ÿ
 
 
 
 
 
 
 
 
 
 
 
 
ÿ &ÿ" 
0
ÿ  
 
 
 
 
 
     
ÿ 
 
ÿÿ
ÿ 
 
 
 
 
þ
 r&cCs:d|kri|d<|d}||kr(g||<|| |¡dS)NZf2pymultilines©rû)r¹Z context_nameÚmlrör$r$r%rŒsrŒcCsÞd}d}t d|tj¡rd}n"t d|tj¡r4d}n | ¡ ¡}t t|ƒ¡}|s^tdƒdS| ¡}t    | 
¡ƒD]}t ||ƒ||<qr|dkr |d}|d}|  d    ¡}|d
krÒ|d|… ¡}||d d…}||||fS) Nzdouble\s*complexúdouble complexzdouble\s*precisionzdouble precisionz>cracktypespec0: no kind/char_selector pattern found for line.
)rmr1Úlogicalr0Ú    characterrWrrðrgrr) r¦r¸r¨rr·Ú selectpatternr$r-rôr=r>r4r|)r/rÄrrr,rörDrlr$r$r%rzs0 ÿ
rzz)\s*(?P<name>\b\w+\b)\s*(?P<after>.*)\s*\ZzB\s*(\(\s*(kind\s*=)?\s*(?P<kind>.*)\s*\)|\*\s*(?P<kind2>.*?))\s*\Zz2\s*(\((?P<lenkind>.*)\)|\*\s*(?P<charlen>.*))\s*\Zz§\s*(kind\s*=\s*(?P<kind>.*?)\s*(@,@\s*len\s*=\s*(?P<len>.*)|)|(len\s*=\s*|)(?P<len2>.*?)\s*(@,@\s*(kind\s*=\s*|)(?P<kind2>.*)|(f2py_len\s*=\s*(?P<f2py_len>.*))|))\s*\Zz¿\s*(@\(@\s*(?!/)\s*(?P<array>.*?)\s*@\)@\s*\*\s*(?P<len>.*?)|(\*\s*(?P<len2>.*?)|)\s*(@\(@\s*(?!/)\s*(?P<array2>.*?)\s*@\)@|))\s*(=\s*(?P<init>.*?)|(@\(@|)/\s*(?P<init2>.*?)\s*/(@\)@|)|)\s*\ZcCs‚| ¡}t|ƒdkr|S|d}tdt|ƒdƒD]>}||dkrd||ddks2||ddkrdq2|||}q2||d}|S)Nrrr—z ()[]{}=+-/* r    )rrMr©)ÚexprZexpr2rlr$r$r%Ú removespaces?s  ÿþ r¨cCs~d}d}d}d}|D]d}|dkr6|dkr6||7}|}q|sF|dkrF|}||krV| }n|dkrl|rl|d7}q||7}|}q|S)    a(
    The function replace all spaces in the input variable line which are 
    surrounded with quotation marks, with the triplet "@_@".
 
    For instance, for the input "a 'b c'" the function returns "a 'b@_@c'"
 
    Parameters
    ----------
    line : str
 
    Returns
    -------
    str
 
    rFNri)rirpú")rpr©r—ú@_@r$)r+ÚfragmentZinsideZ current_quoteÚescapedrr$r$r%ÚmarkinnerspacesNs&  r­c    Csìd}t||ƒ\}}}|rŒdd„t|ƒ d¡Dƒ}g}t d¡}    |D]D}
|
sLqB|     |
¡} | r||  d¡ ¡} | |
t| ƒd…}
|     |
¡qB|}dd„t|ƒ d¡Dƒ} g}| D]D}dd„tt
t |ƒƒdd     d
¡DƒD]}|rÔ|     |  d d¡¡qÔq¬|D]î}t  |¡} | std t|ƒƒqöt|  d ¡ƒ}i}|ttdkrXttd| ¡}d|k}|rn||d<n*|r˜||dks˜td||d|fƒd|kr²t |¡|d<nv|r(t| ¡ƒD]b}||dkr|||d|kstd|||d|||fƒnt ||¡|d|<qÄd|krZ|rZ|rH||d<ntd||fƒnv|rÐt| ¡ƒD]b}||dkr¶|||d|ks¶td|||d|||fƒnt ||¡|d|<qld|krä||d<n*|r|d|kstd||d|fƒd|kr(t |¡|d<n.|r˜|D]"}
|
|dkr2|d     |
¡q2n@t |¡|d<t |¡|d<t |¡|d<||d<t |¡|d<d| d¡p¨gkrì|ttdkrìdttkrÚgttd<ttd     |¡|  d¡rŽt t|  d¡ƒ¡}|rx| ¡}dD]2}||ddk    r||d||<||d=qt| ¡ƒD],}||dk    r‚t||ƒ||<n||=q^d|kr(|d krÔd|ks´|ds¼i|d<|d|dd!<|d=nT|d"kr(d|ksò|dsúi|d<d|dkr|dd=|d|dd!<|d=d#|krvd$|krj|d$|d#ksjtd%||d$|d#fƒn |d#|d$<d|kräd&|krä|dd'kr¬|d&|d<|d&=n8|d&d(|d|d&<|d=td)|||||d&fƒd&|krŽd*|d&}d|ks|ds|g|d<n\|d     |¡|dD]D}|dd+…d,kr0||kr0|dd-=td.|||fƒqސq0ntd/||  d¡ƒt| ¡ƒD]}||sš||=qš|ttd|<d0ttkrâttd0     |¡|}qö|S)1NcSsg|] }| ¡‘qSr$r\r]r$r$r%rayszupdatevars.<locals>.<listcomp>r÷z(?P<start>[a-zA-Z]+)r‚cSsg|] }| ¡‘qSr$r\r]r$r$r%ra…scSsg|] }| ¡‘qSr$r\r]r$r$r%raˆsr—©r3z@ @rªz;updatevars: no name pattern found for entity=%s. Skipping.
r\rr/zIupdatevars: attempt to change the type of "%s" ("%s") to "%s". Ignoring.
r6zVupdatevars: attempt to change the kindselector "%s" of "%s" ("%s") to "%s". Ignoring.
r7zEupdatevars:%s: attempt to change empty charselector to %r. Ignoring.
zVupdatevars: attempt to change the charselector "%s" of "%s" ("%s") to "%s". Ignoring.
r9zMupdatevars: attempt to change the typename of "%s" ("%s") to "%s". Ignoring.
r5rÚrrrð)rMÚarrayÚinitÚ2rM©rmr1r¤r0rr¥r°r8zTupdatevars: attempt to change the init expression of "%s" ("%s") to "%s". Ignoring.
r¯rrøz-updatevars: "%s %s" is mapped to "%s %s(%s)"
ú dimension(%s)é    rÙr    z5updatevars:%s: attempt to change %r to %r. Ignoring.
z?updatevars: could not crack entity declaration "%s". Ignoring.
rd)rˆrùrúr¦r§r¸r¹r·rMrûr¨r­rµr}r-r³r]r rrxr=r>rZrFÚlenarraypatternr$rôr4)r/rr5Z
entitydeclr’r˜r™r9rÆrrürÌÚsÚelZel1rlÚe1Zenamer‘Znot_has_typespecrDr,Úd1ÚlkÚdmZdm1r$r$r%r{ssB
 
 (
 
 
ÿ
ÿ
$
ÿ
 
ÿ$
ÿ
 
 
ÿ
(  
 
 
 
 
 
ÿ
  ÿ
 
ÿ  ÿ
 
r{c    Cs d}d}d}|r|dkrœt |¡}|s<tdt|ƒƒdS| ¡}|d|d<|d=t| ¡ƒD]}||sb||=qbt| ¡ƒD]\}}t|ƒ||<q‚nf|dkr°t     |¡}|sÈtdt|ƒƒdS| ¡}|d|d<|d=|dr`t
 t |dƒ¡}| ¡}d    D]:}||d
r,||d
||<||||<||d
=q
|d dk    r`|d |d <|d=t| ¡ƒD]}||sr||=qrt| ¡ƒD]\}}t|ƒ||<q–nR|d kròt  d |t j ¡}|rÜ| d¡}ntdt||ƒƒntdt|ƒƒ|||fS)Nr²z4cracktypespec: no kindselector pattern found for %s
Zkind2rr¥z4cracktypespec: no charselector pattern found for %s
ZcharlenÚlenkind)rMÚkindr±Zf2py_lenrWz\s*\(\s*(?P<name>\w+)\s*\)r\z'cracktypespec: no typename found in %s
z'cracktypespec: no selector used for %s
)r6r¸r-r³rôr=r>Úitemsr]r7Úlenkindpatternrùr¦r¨r¹)    r/rr˜r™r9rDrlr¼rºr$r$r%rˆ st
 
ÿ 
 
 
ÿ 
 
ÿ  
 
 
 
ÿÿrˆcCsê|si}|s|Sd|kr&|g|d<|S|r8|d |¡||dkrH|S|dkrld|dkrl|d |¡nz|dkrd|dkr|d |¡nV|dkr´d|dkræ|d |¡n2|dkrØd|dkræ|d |¡n|d |¡|S)Nr5rAÚ    automaticrÝrÞr¡)rBrrCr$r$r%r?Is.
   r?cCsZ|si}|s|Sd|kr$||d<|St| ¡ƒD]$}|sD||dkr0|||d|<q0|S)Nr6©r=r>©rBÚselrCrDr$r$r%r@dsr@cCsZ|si}|s|Sd|kr$||d<|St| ¡ƒD]$}|sD||dkr0|||d|<q0|S)Nr7rÁrÂr$r$r%rArsrAÚunknowncCsd|kr|dS|S)Nr\r$)rrÄr$r$r%Ú getblocknamesrÅcCs2zd|d|dfaWntk
r,YnXdS)Nz
In: %s:%s
rVr\)rr¬)rr$r$r%Ú setmesstext‰srÆcCs2i}d|krt|dƒ}d|kr.| |d¡|S)NÚ parent_blockrè)Ú get_usedictÚupdate)rÚusedictr$r$r%rÈ’s  rÈc    CsÂ|dkr i}t|ƒ}|s|St| ¡ƒD]”\}}| ¡}|tkrXtd|| d¡fƒq(t|}t|ƒ}|snq(|r~td|ƒt| ¡ƒD]0\}}||kr²tdt    |ƒt    |ƒfƒ|||<qŠq(|S)Nz0get_useparameters: no module %s info used by %s
r\z,get_useparameters: mapping for %s not impl.
zEget_useparameters: overriding parameter %s with value from module %s
)
rÈr=r¾r·rr-rFr~rZr³)    rÚ    param_maprÊZusenameÚmappingÚmvarsrJrDr–r$r$r%Úget_useparameters›s2 ÿ ÿ rÎc
sâts|St|tƒr*‡‡fdd„|Dƒ}|St|ƒtdˆ|dfdƒˆdkrXt|ƒ‰ˆdk    r¾d|kr¾|d}t| ¡ƒD]@}||}d|kr||d}d|kr||d}|ˆkr|ˆ||d<q|‡‡fd    d„|d
Dƒ}    |    |d
<|S) Ncsg|]}t|ˆdˆd‘qS©r‰)ÚtabrË©Ú
postcrack2)r_Úg©rËrÐr$r%ra¿sÿzpostcrack2.<locals>.<listcomp>ú %sBlock: %s
r\rrr6r½csg|]}t|ˆdˆd‘qSrÏrÑ©r_ÚbrÔr$r%raÒsÿrÿ)rr‹r=rÆr-rÎr>)
rrÐrËÚretrr•Úvarr½ÚvalZnew_bodyr$rÔr%rÒ¹s4
 ÿ ÿrÒcCsPt|tƒrfg}g}|D]F}t|ƒt||dd}d|krRd|dkrR| |¡q| |¡q||St|ƒt|tƒsd|krtdt|ƒƒ‚d|krº|ddksºtd||dfd    ƒt    |ƒ}t
|ƒ}t |ƒ|d
<t |d
ƒ|d <d |krþ|d rþ|d }t |||d|d <g}d|krP|d}t| ¡ƒD]}d|kr2| |¡q2ni}d}    d|krj|d}    d|kr>|dr>g}
d|kr”|d}
t |d
¡} |    r²|    d} nd} | |krîd} d| | f|krâ| d} qÄd| | f} dgi|    ddœ}|dD]ð}||
krÎg}d}|d D]–}|d}|ddkr&d} |d D]@}| d} d|krL|d|krLt |¡}|d | =qސqL|r&|d s¨|d |=|
|
 |¡=q¾q&|d  |¡n(|| krt| |ƒs| ||d
|<q|d
s|d r>|
|d<d|gi| |ddœ}i|| <t |¡|rL||d<|S)zi
    TODO:
          function return values
          determine expression types if in argument list
    r‰©rÐr\rjrz0postcrack: Expected block dictionary instead of rarÕrrZsortvarsrrÿrèrrrZ__user__routinesZunknown__user__routinesrz%s_%ir[Z_user_interface)rrÿrr\r    rX)rrÿrr\r)r‹r=rÆÚ    postcrackrûrvr¬r˜r-Ú analyzeargsÚ analyzecommonÚ analyzevarsÚ sortvarnamesÚ analyzebodyr>rxrOZ
isexternalr)rrrÐZgretZuretrÓZ userisdefinedZuseblockrDr\rrÍZmnamerlr[rlZedefrr×ZbbZmblockr$r$r%rÜÙs®
  ÿ 
 
 
 
 
 
  ÿ 
 
 
 
 
 
 
ÿÿ
rÜcCsþg}g}t| ¡ƒD]2}d||kr<||dr<| |¡q| |¡qt|ƒ}d}|rú|d}d}|dd…D]}|||dkrpd}qŽqp|rÖ|dd…|g}|d}||krøtdd |¡dƒ||}qúqT| |¡|dd…}t|ƒ}d}qT|S)Nr<rrzTsortvarnames: failed to compute dependencies because of cyclic dependencies between ú, r¢)r=r>rûrMrZr¿)rZindepÚdepr–r•rlr)Úwr$r$r%rà9s>  þþ
 ràcCsˆt|ƒs |Sg}t|d ¡ƒD]<}g}|d|D]}t d|tj¡}|r2g}| d¡r~dd„t| d¡ƒ d¡Dƒ}t    | d¡ 
¡ƒ}||dkrìd    |d|krÎ|d|d      d
d   |¡¡nd
d   |¡g|d|d    <n0|rd    d
d   |¡gi|d|<n i|d|<||krF|  |¡n|}t d ||fƒ|  |¡q6||d|<q d |krt||d <n|d ||d <|S)Nrçz2\A\s*\b(?P<name>.*?)\b\s*(\((?P<dims>.*?)\)|)\s*\ZÚdimscSsg|] }| ¡‘qSr$r\r]r$r$r%ragsÿz!analyzecommon.<locals>.<listcomp>r÷r\rr5r³røzNanalyzecommon: failed to extract "<name>[(<dims>)]" from "%s" in common /%s/.
Ú
commonvars)Z    hascommonr=r>r¦r¸r¨r¹rùrúr]rrûr¿rZ)rrærDZcomvarsrlrÌrår•r$r$r%rÞ[sTÿ
ÿ  ÿ ÿÿ 
 
ÿ 
 
rÞcCs
t|ƒg}|dD]ð}||d<|ddkr€|dk    rD|d|krDqn|d}|dtkrZqtrl|dtkrlqt|ddd    |d
<n|}t|||d d }|dd kr¾|ds¾| d¡s¾d|kr¾q|d dd¡dkrÞt |¡q|ddkrú|dt    |d<| |¡q|S)NrÿrÇrrer\rz
      T©Ú as_interfaceZsaved_interfacer‰rÛr_rkrìr—rÚ pythonmoduler`r)
rÆr r!Úcrack2fortrangenrÜrFrµrrûr)rrrÐrÿr×Zas_r$r$r%rá†s@   ÿ  ÿÿ   rácCs t|ƒt}i}d|kr˜|ddkrFd}tdkr˜tdt|dƒƒnRt|d ¡ƒD]@}|d| d¡dkr‚|d|||<qV|d|d||<qV||fS)Nr×rz6buildimplicitrules: no implicit rules for routine %s.
r\r/)rArÀ)rÆÚdefaultimplicitrulesr r-r³r=r>rF)rÚ implicitrulesÚ    attrrulesrDr$r$r%Úbuildimplicitrules©s ÿrîcCs0t|||ƒ}t|ƒttfkr |Std|ƒ‚dS)z2 Like `eval` but returns only integers and floats zr=%rN)rƒrWr2r4r»)rlrÓrÆr†r$r$r%Úmyeval¼s rïz \A\b\w+\b\Zc     Cs ztt|iiƒƒ}d|dfWStk
r0YnXt |¡rFdd|fSt|ƒ}|D]²}t|ƒ|krfqRt d|d|¡r|qRt d|dtj    ¡}| |¡}|rRzF| |¡}|rØd| 
d    ¡d| 
d
¡f}| |¡}q®t|iiƒ}    | |¡}|rd| 
d    ¡d| 
d
¡f}| |¡}qît|iiƒ|    }
| |¡}|rbd| 
d    ¡d | 
d
¡f}| |¡}q4t|iiƒ}| |¡}|r¦d| 
d    ¡d | 
d
¡f}| |¡}qxt|iiƒ} |
d |    |kræ|
d |    | kræ|
|    |fWSWntk
rþYnXqqRd S)a
    Obtain ``a`` and ``b`` when ``e == "a*x+b"``, where ``x`` is a symbol in
    xset.
 
    >>> getlincoef('2*x + 1', {'x'})
    (2, 1, 'x')
    >>> getlincoef('3*x + x*2 + 2 + 1', {'x'})
    (5, 3, 'x')
    >>> getlincoef('0', {'x'})
    (0, 0, None)
    >>> getlincoef('0*x', {'x'})
    (0, 0, 'x')
    >>> getlincoef('x*x', {'x'})
    (None, None, None)
 
    This can be tricked by sufficiently complex expressions
 
    >>> getlincoef('(x - 0.5)*(x - 1.5)*(x - 1)*x + 2*x + 3', {'x'})
    (2.0, 3.0, 'x')
    rNrz\w\s*\([^)]*\bú\bú(?P<before>.*?)\bú\b(?P<after>.*)z%s(%s)%srïrðgà?gø?)NNN) r2rïr¬Úgetlincoef_re_1r¸rMr¦Úsearchr§r¨r¹) rlZxsetrZlen_er^r+rÌr,Úeer×rüÚc2r$r$r%Ú
getlincoefÆsv 
 
 
 
 
ÿ  
ÿ 
ÿ 
ÿ $r÷z\b[a-z][\w$]*\bcCsÎ||kr®|| dg¡}d||krjt||ƒsjt ||d¡D]&}||krB||krB||krB| |¡qB|dd…D]4}| |g¡pt|||ƒD]}||kr’| |¡q’qvntdt|ƒƒg}|||<|S)Nr<r8z,_get_depend_dict: no dependence info for %s
)rFÚisstringÚ word_patternÚfindallrûÚ_get_depend_dictr-r³)r\rÚdepsÚwordsÚwordrär$r$r%rû    s   
ÿrûcCs*t| ¡ƒ}i}|D]}t|||ƒq|Sr')r=r>rû)rrcÚ depend_dictr•r$r$r%Ú_calc_depend_dict'    s
 rcs”tˆƒ‰g}tˆ ¡ƒD]}ˆ|s| |¡ˆ|=qˆr‚tˆ ¡ƒD]8\}}‡fdd„|Dƒ}|sv| |¡ˆ|=qF|ˆ|<qFq6‡fdd„|DƒS)z
    csg|]}|ˆkr|‘qSr$r$)r_r•)rÿr$r%ra:    sz$get_sorted_names.<locals>.<listcomp>csg|]}|ˆkr|‘qSr$r$)r_r\©rr$r%ra@    s)rr=r>rûr¾)rrcr\ÚlstZnew_lstr$)rÿrr%Úget_sorted_names/    s
 
 rcCs@|ddkr|dd…}t |¡r&dSt |¡r4dSd|dS)    Nrú'"rr    éézkind(r0)r€r¸Ú real8pattern)rTr$r$r%Ú
_kind_funcC    s  
 
rcCsLd|}|dkrdS|dkr dS|dkr,dS|dkr8d    S|dd
krHd Sd S) Nr™érirlrlré€ér    r$)r†rÌr$r$r%Ú_selected_int_kind_funcN    s r cCsX|dkr dS|dkrdSt ¡ ¡}| d¡r<|dkrTdSn|dkrHdS|dkrTdSd    S)
Nérr r)Úaarch64ÚpowerÚppcZriscvÚs390xZsparcéér™r    )ÚplatformÚmachiner·rz)Úpr†Úradixrr$r$r%Ú_selected_real_kind_func^    s 
rc Cst |¡}t |¡}dtfdtfdtffD]\}}||kr*|||<q*g}t|ƒD]*}d||krPd||dkrP| |¡qPt dtj¡}t dtj¡}    t dtj¡}
|D]j}d    ||krú||d    } t    ||ƒrò|  
¡} d
D]} | j | Ž} qâ|  d | ¡} |      d | ¡} d } d||kr^d||dkr^t | ƒ}|   d||ddd¡} t | ƒ|k} | s®|
 | ¡s®|  d¡}t |ƒdkr®d |dd…¡ 
¡  |d 
¡d¡} t||ƒrt| ƒ}t | ¡D]:}t| | ¡| ¡… 
¡  dd¡ƒ|| ¡| ¡…<qÎd |¡} nt||ƒr4td| ›dƒt | ¡rFd} nt | ¡rVd} zt| ||ƒ||<Wn@tk
rª}z | ||<td|t| ƒfƒW5d}~XYnXt||ƒrÚt||t ƒrÚt!||ƒ||<| 
¡}||kr||||<qªt"||ƒtdt|ƒƒqª|S)Nr½Zselected_int_kindZselected_real_kindr5râz \bkind\s*\(\s*(?P<value>.*)\s*\)z-\bselected_int_kind\s*\(\s*(?P<value>.*)\s*\)z4\bselected_(int|real)_kind\s*\(\s*(?P<value>.*)\s*\)r8))z.false.ÚFalse)z.true.ÚTruez
kind("\1")zselected_int_kind(\1)Fr6rÊrrr    rörlzAget_parameters[TODO]: implement evaluation of complex expression r¢rrzget_parameters: got "%s" on %s
z2get_parameters:parameter %s does not have value?!
)#rxrr rrrûr¦r§r¨Z    islogicalr·rµÚsubrMr¸rúr¿Zisdoubler=r€rr‚rÔZ    iscomplexr-rôrrƒr¬r³rør‹r2rŠrL)rZ global_paramsrJZg_paramsr\ÚfuncZ param_namesr•Zkind_reZselected_int_kind_reZselected_kind_rer–ÚreplZ is_replacedZ
orig_v_lenZv_r•rÌrÇÚnlr$r$r%r~q    sŠ
 
þ 
  ÿÿ
 
&
ÿ   &
 
ÿr~cCs|dkr dSt||ƒS)N)z(:)ú(*)rr)Ú _eval_scalar)ÚlengthrJr$r$r%Ú _eval_lengthÏ    sr"z\d+_c
Csšt|ƒr| d¡d}z&t|i|ƒ}t|tƒr2tnt|ƒ}WnXtttfk
rZ|YSt    k
r”}zt
d||t |  ¡ƒfƒW5d}~XYnX|S)NrÊrz,"%s" in evaluating %r (available names: %s)
) Ú_is_kind_numberrúrƒr‹r˜r³r…r„r†r¬rZr=r>)ÚvaluerJrÇr$r$r%r ×    s þr c@ sît|ƒt|ƒ\}}t |d¡‰|ddkrF|dˆkrFiˆ|d<d|dkrĈd=d|ddkrÄ|ddd}tˆƒtdd„|d    DƒƒBD],}d
D]"}||kržtˆ |i¡|ƒˆ|<qžq–g}|d }|D]2}zˆ|| |¡WqÔtk
rYqÔXqÔtˆ     ¡ƒD]}||kr| |¡qt
ˆt |ƒƒ}    i}
t   d ¡j} tˆ     ¡ƒD]d} | | ƒ} | rZ| |  ¡|  ¡…}z |
|Wn.tk
rºt   d | t j¡j|
|<YnXqZ|D ]Ö}|dt|     ¡ƒkrútˆ|||dƒˆ|<dˆ|krîdˆ|kr(dˆ|dksî|rÈ|d ¡}t||     ¡ƒD]z}|dkrn|||dkrnqJ|ˆ|kr’|||ˆ||<n0|dkrJ|||D]}tˆ||ƒˆ|<q¨qJn&||d krîtdt|ƒ|dfƒdˆ|krZdˆ|dkrZˆ|dd}ztt|i|    ƒƒ}Wntk
rHYnX|ˆ|dd<dˆ|krÆdˆ|dkrƈ|dd}ztt|i|    ƒƒ}Wntk
r´YnX|ˆ|dd<i}dˆ|krôˆ|d}| ¡gˆ|d<d\}}}}}|D]–}|dd…dkr<|dd… ¡dd…}nÂ|dd…dkrh|dd… ¡dd…}n–|dd…dkr”|dd… ¡dd…}nj|dd…d krÀ|dd… ¡dd…}n>|dd!…d"krì|d!d… ¡dd…}ntˆ||ƒˆ|<|rrdˆ|krgˆ|d<d#d$„t|ƒ d%¡DƒD]6}| d&d¡}|ˆ|dkr6ˆ|d |¡q6d}|rÄ| d'd(¡}| d)d*¡}d"ˆ|kr®|gˆ|d"<nˆ|d" |¡d}|dk    r4dˆ|krègˆ|d<td+d$„t|ƒ d%¡DƒƒD]*}|ˆ|dkrˆ|d |¡qd}|dk    r
d ˆ|krXgˆ|d <d,d$„t|ƒ d%¡DƒD]*}|ˆ|d krpˆ|d  |¡qpd}q
|rôdˆ|krôgˆ|d<td-d$„t|ƒ d%¡DƒƒD]}|d.krôd.nd/}||    krt|    |ƒ}|    D]Z}t   d0|d1t j¡}| |¡} | r|  d2¡t|    |ƒ|  d3¡}| |¡} q6q||kr€|g}nt|d.ƒ d4¡}t|ƒd5kr²d/|kr²d/g}d/}t|ƒdkrÚ|d|krÚd6|dg}t|ƒd5krÞt t!j"j#|ƒ\}}||d} | j$t!j%j&d7}i}!|dD]²} t! '| ¡}"|  (|"¡r"z:|  )|"¡\}}#||#fd8d9„}$t| *¡ƒ}%|% +|# *¡¡Wn4t,k
rª}&zd}$t|  *¡ƒ}%W5d}&~&XYnXt‡fd:d„|%Dƒƒ}'|$t|'ƒf|!| <q"|!||<ˆ|d |¡qàd ˆ|k r¦d |k r¦||d k r¦ˆ| dg¡}(g})t-t.t/t0ƒˆ|ƒ}*t1ˆ|ƒ rÞt2ˆ|dƒD]x\}+}| |¡‰ˆdk    r‚n¬|* r.ˆ 3¡D]š\} \},}-‡‡fd;d<„‰tƒ}.ˆ| |.ƒ| |(k    sd=ˆ| k    sdˆ| k    r搠   q|,dk    
rx| |.k
rxd>}/|,t! 'd?|›d@|+›dA¡ƒ}0|0j$t!j%j&d7}0|0ˆ| d=<|g|-ˆ| d<d ˆ| k
ràd?|›d@|+›dB|›gˆ| d <nhdC}/dˆ| k
r–gˆ| d<dDˆ| dk
rºˆ| d dD¡|( | ¡|) d?|›d@|+›dB|›¡ˆ|  dg¡}1dE|1k sdF|1k s|1 |/ rdFndE¡|1    r|1ˆ| d<    qˆdk        r`ˆ 3¡D]–\} \},}-ˆ|  dg¡}'ˆ|  dg¡D]8}2|2 4d¡ rld 5|2 ¡¡}2|' 6|2dGd… dH¡¡ ql|' rÀtt|'ƒƒˆ| d<||'k r@|( | ¡ q@    q`nœt7ˆ|ƒ rzdˆ|k rzd/ˆ|dk r4t8ˆ|dd/|    ƒ}3|3ˆ|dd/<nFdˆ|dk rzt8ˆ|dd|    ƒ}3ˆ|dd=|3ˆ|dd/<|) rŒ|)ˆ|d <|( r¦tt|(ƒƒˆ|d<d=ˆ|krÄdˆ|k rÎgˆ|d<dEˆ|dk rdFˆ|dk rˆ|d dE¡dˆ|k rrgˆ|d<t|
 3¡ƒD].\} } | ˆ|d=ƒ r*ˆ|d | ¡ q*ˆ|d srˆ|d=t9ˆ|ƒrÄt:ˆ|d=|    ƒˆ|d=<qÄtˆ     ¡ƒD]´}||dk rªd"ˆ|k r܈|d"|d"<|ddk rªdI|kr|dIˆkrt;ˆ|ˆ|dIƒˆ|<dJ|k rª|dJ}4|4 dKd¡}5|4|5k }6|5 dLd¡}4|4|5k }7t<d |4¡} | rJt=|  dM¡|  d3¡ƒ\}8}9}}:t>|8|9ƒ\};}<}=|8ˆ|d<|;rôd|;krèzt|;di|    ƒ|;d<Wntk
ræYnX|;ˆ|d<|<r|<ˆ|d<|=r|=ˆ|dN<|6r0tˆ|dKƒˆ|<|7r^tˆ|dLƒˆ|<ntdOt|dJƒƒ qª|ddPkrêdQ|kr’t |d |dQ¡}>nt |d ¡}>tˆ     ¡ƒD]$}t-t?t@ƒˆ|ƒr¬|> |¡q¬dR|kr2|> 6t|dR     ¡ƒ¡t|dR     ¡ƒD].}|dR|D]}||>kr|> |¡qq|ddkrhdI|krZ|> |dI¡n|> |d¡|ddSkr¦|d}?|?ˆkr¦dˆ|?kr¦ˆ|?d|d<|ddTkrÆ|> 6tˆ     ¡ƒ¡tˆ     ¡ƒD]}||>kr҈|=q҈S)UNrrrÑr\rr5css|]}|dVqdS)r\Nr$rÖr$r$r%Ú    <genexpr>ó    szanalyzevars.<locals>.<genexpr>rÿrhrz[A-Za-z][\w$]*z.*\b%s\brr/rÚZ    undefinedzCanalyzevars: typespec of variable %s is not defined in routine %s.
r7rMr6r½)NNNNNr´rÙrr    r rár<rŠr;rr:cSsg|] }| ¡‘qSr$r\r]r$r$r%raI
szanalyzevars.<locals>.<listcomp>r÷r—z\n\nz
 
z\n r¢cSsg|] }| ¡‘qSr$r\r]r$r$r%raZ
scSsg|] }| ¡‘qSr$r\r]r$r$r%raa
scSsg|] }| ¡‘qSr$r\r]r$r$r%rag
sú:rrñròrïrðz@:@rÚ1)ÚlanguagecSs |||Sr'r$)r¶rür×r$r$r%Úsolve_v‹
szanalyzevars.<locals>.solve_vc3s|]}|jˆkr|jVqdSr')rã)r_r¶rr$r%r%˜
s
ÿcs:ˆ |dgg¡dD] }||kr| |¡ˆ||ƒqdS)Nr)rFÚadd)r–rüZv1)Úcoeffs_and_depsÚ compute_depsr$r%r,¹
s
z!analyzevars.<locals>.compute_depsr8Fzshape(râr0z) == TÚinrÛrÜr rør“rbZpureÚ    recursiverr9z'analyzevars: prefix (%s) were not used
)r`rérXrWrærå)rÓrÑrW)ArÆrîrxrñr?rFrûÚKeyErrorr=r>r~rÎr¦r§r¸r‚rÔr¨r·r-r³r˜rƒr¬Úreverserrùrúrµrdr¹rMrtrZExprÚparseÚtostringZLanguageržZ    as_symbolréZ linear_solveÚsymbolsrÉÚ RuntimeErrorZl_orZ isintent_inZisintent_inoutZisintent_inplaceZisarrayÚ    enumerater¾rzr¿Úextendrør"Zisscalarr rErrzrˆÚisintent_callbackZ isintent_aux)@rrìríÚgenr•rDZsvarsrrürJZ dep_matchesZ
name_matchr–rÌZln0rÆZdimension_exprsrZdimrár<r;r:rÚtmpröZstarrr+r›r¹Zd2ZdsizeZsolver_and_depsr¶r×r)Z all_symbolsrÇZv_depsZn_depsZn_checksZ
n_is_inputrlZsolverrüZall_depsZ is_requiredr°Zv_attrZaar!ÚprZpr1ZispureZisrecr/rr‘r˜r™r9Z
neededvarsr\r$)r+r,rr%rßç    s    "
  "
  
ÿ  
 
  
  "
 
 
ÿÿ
 
   ÿ&ÿÿ
 
 
 
 
ÿ
þÿÿ ÿ 
ÿ
ÿ ÿ
 
ÿÿ  ÿ 
 
 
 
ÿ ÿ
 
ÿ    ÿ
 
 
 
 
 
rßz\A[a-z]+[\w$]*\Zc Csf|}t |¡ }|r¦t|ƒ\}}t||d|ƒ}d}|D](}    |     ¡}    |    tjtjkrXd}    ||    }q8|ddkrx|d}n|d}|}||dksœ||dkr¦|d}q„||krØd    }
|t|
ƒ|krÌ|
d    }
q²|t|
ƒ}|rê||d|<nx||dkr(||dkr|d||d|<n i|d|<d
|krb||d
|d krbt    |d|d ƒ|d|<|S) NrZe_rÊr    rlÚ_err†rrrrÚ)
Úanalyzeargs_re_1r¸rîrr·rTÚascii_lowercaseÚdigitsr˜r?) rürrZorig_aZ    a_is_exprrìríÚatÚnarrDr$r$r%Ú    expr2namec s>  
 
 
 
   rAcCst|ƒt|ƒ\}}d|kr$g|d<g}|dD]}t|||ƒ}| |¡q0||d<d|kr˜t|d ¡ƒD]*\}}|D]}||dkrxi|d|<qxql|dD]B}|d|kr d|krÀg|d<|d|dkr |d |d¡q d|kr|d|dkri|d|d<|S)Nrrårrÿr\rr“)rÆrîrArûr=r¾)rrìrÊrrürDZargs1r×r$r$r%r݈ s.       rÝz\A\(.+?,.+?\)\Zz\A[+-]?\d+(_(?P<name>\w+)|)\Zz*\A[+-]?[\d.]+[-\d+de.]*(_(?P<name>\w+)|)\Zz
\A\(.*\)\Zz\A(?P<name>\w+)\s*\(.*?\)\s*\ZcCsTt|tƒrddiSt|tƒr$ddiSt|tƒr6ddiSt|tƒrD|Stt|ƒƒ‚dS)Nr/r1r0rm)r‹r2r4rmrvròr³)r†r$r$r%Ú_ensure_exprdictª s
 
 
 
rBcCs¸||krt||ƒS| ¡}t |¡r.ddiSt |¡}|rjd| ¡krb| d¡rbtdt|ƒƒddiSt     |¡}|r¦d| ¡krž| d¡ržtdt|ƒƒddiSdD]J}dd    „t
||d
  d |d ¡DƒD] }||krÒt||ƒSqÒqªi}t  |¡rt |d d …||ƒ}nft |¡}|r‚| d¡}t | d¡||ƒ}|r^d|kr^|d=|s‚|d|kr‚t||dƒS|ddkrždddidœS|s´tdt|ƒƒ|S)Nr/rmr\z:determineexprtype: selected kind types not supported (%s)
r1r0)ú+rorrjcSsg|] }| ¡‘qSr$r\r]r$r$r%raÉ sz%determineexprtype.<locals>.<listcomp>r®r2rr    r5rrr¥r)r/r7z>determineexprtype: could not determine expressions (%s) type.
)rBrÚdetermineexprtype_re_1r¸Údetermineexprtype_re_2rôr¹r-r³Údetermineexprtype_re_3rùrúÚdetermineexprtype_re_4rÚdetermineexprtype_re_5)r§rÚrulesrÌÚoprlrŽZrnr$r$r%r¶ sT 
 
 
ÿ
 
ÿ( 
 
 
ÿrr¢FcCsît|ƒd}t|tƒrf|D]F}|rN|ddkrN|dtkr<qtrN|dtkrNq|t|||d}q|Sd}d}d}|d}|dkr†dSg}    d|krš|d}d|krø|d}
|dD]&} t| ||    ƒ} t|
| ƒs²|     | ¡q²|dd    ksê|    rød
d      |    ¡}d} d |kr:t|d  
¡ƒD]"} d | |t | |d | f} q|  dg¡dd…}|d    krld|krl|  d¡|rŒd| |t d      |¡|f} d}d|kr¬t|d|t ƒ}d}d|krÌt|d|t ƒ}|dkrÚd}d}d|krd|d}|d|    kr|     |d¡t|d|t |d}t||d|    |t |d}
d}d|kr`|s`d|d}d|kr¬d}t|d ¡ƒD]$\} }d||t | d      |¡f}q~||}|dkrÄ|dkrÄd}d|||||||| ||
|||||f}|S)Nrrrer\rçrUrrrÑz(%s)rørìz    %s%s%s %sráÚcallbackz%s%sintent(%s) %srèrçrar“z  result (%s)rÿrVz! in %sråz%s%sentry %s(%s)rWrZz%%s%s%s %s%s%s %s%s%s%s%s%s%send %s %s)rÆr‹r=r r!rêrAr7rûr¿r>rrFrwÚ use2fortranÚcommon2fortranÚ vars2fortranr¾)rrÐrèrØrÓrbr\rZ    blocktypeZargslrrürìrDZ
intent_lstrèrçr“rÿZmessZ entry_stmtsrlr$r$r%rêã sÄ
 
 
ÿ
 
ÿÿ
 
 
 
 ÿ 
ÿÿrêc    CsVd}t| ¡ƒD]@}|dkr6d||d ||¡f}qd|||d ||¡f}q|S)Nrrqz %s%scommon %srøz%s%scommon /%s/ %s)r=r>r¿)rçrÐrØrDr$r$r%rM. s rMcCs d}t| ¡ƒD]ö}d|||f}||ikrL|r|ddkr|dd…}qd||krl||drld|}d||krê||drêd}t||d ¡ƒD]L}|||d|krÈd    |||f}d}qœd
|||||d|f}d}qœ|r|ddkr|dd…}q|S) Nrz %s%suse %s,r    rørrz%s only:rtr—ú%s%s%sz
%s%s%s=>%srÁ)rèrÐrØrÌrrDr$r$r%rL8 s(  rLc    CsT|d}g}|D]>}ztƒd|}Wntk
r:YqX||ƒr| |¡q|S)Nráz isintent_%s)Úglobalsr/rû)rÙrrØrár”r$r$r%Útrue_intent_listP s rQc    Cs.t|ƒd}g}|D]}||dkr| |¡qd|krn|dD],}||kr`||krl| |¡q@td|ƒq@d|kr„| |d¡|s¬t| ¡ƒD]}||kr”| |¡q”|D]v}d||kr
||dD]8}||krÐd||krÐ|||dkrÐtd||fƒqÐd|krÄ||dkrÄt||ƒr>d    |||f}d
|||f}t||ƒrhd |||f}||kr‚d ||kr‚q°d }    |dD],}
||
dkrŽ|
ddkrŽd}    q¼qŽ|    rÄq°||krät|ƒt    d|ƒq°||dkr |ddks°| 
d¡r q°d ||krld||krRd||dkrR||kr°d
|||f}q°t||ƒt    d|ƒq°||d } | dkr¤d||kr¤d| ||df} i} d||krÄ||d} nd||krÞ||d} d| kr| ddkrd| | df} nd | | df} nZd!| krZd"| | d!f} d#| krPd$| | d#f} nd%| } nd#| krtd&| | d#f} d'} d||krÜd(d)„||dDƒ}|rÀd*|krÀd+|krÀ|  d+¡|rÜd,| d-  |¡f} d-} d.||kr
d/| | d-  ||d.¡f} d-} d0||krBt ||ƒ}|r>d1| | d-  |¡f} d-} d2||krpd3| | d-  ||d2¡f} d-} d||kržd4| | d-  ||d¡f} d-} d5||kr||d5}||d d6krþzt|ƒ}d7|j|jf}Wntk
rüYnXd8| ||f} n d9| |f} d:||| f}q°|S);z&
    TODO:
    public sub
    ...
    rrræz7vars2fortran: Confused?!: "%s" is not defined in vars.
rdr<zHvars2fortran: Warning: cross-dependence between variables "%s" and "%s"
rz%s%sintent(callback) %sz%s%sexternal %sz%s%soptional %sr/rrÿr\rrÑrz/vars2fortran: No definition for argument "%s".
r“r5rÚz-vars2fortran: No typespec for argument "%s".
rWr9z%s(%s)r6r7r)rr&z%s*(%s)z%s*%srMz    %s(len=%sr½z %s,kind=%s)z%s)z %s(kind=%s)r—cSsg|]}|dkr|‘qS))rÚr$)r_rÆr$r$r%ra¸ sÿz vars2fortran.<locals>.<listcomp>z
intent(in)z intent(out)z%s, %srørÙz%s%sdimension(%s)ráz%s%sintent(%s)r;z %s%scheck(%s)z%s%sdepend(%s)r8)rmr£z(%s,%s)z %s :: %s=%sz%s :: %srO)rÆrûrZr6r=r>r7Z
isoptionalÚshowr-rFrwr¿rQrƒr0Úimagr¬)rrrrÐrèrØZnoutrürörÃr×Zvardefrrrrr–r$r$r%rN^ sì    ÿ 
$
ÿ 
 
      
 
 
 
 
 
ÿ ÿ  rNcCsztddƒt|tƒtddƒgattdƒ}tddƒtD]"}td|j›ddƒt||ƒ}q<tddƒt    |ƒ}t|S)NzReading fortran codes...
rzPost-processing...
z"Applying post-processing hooks...
z  r¢zPost-processing (stage 2)...
)
r-r½r    rrÜrÚpost_processing_hooksÚ__name__ÚtraverserÒ)ÚfilesÚpostlistÚhookr$r$r%Ú crackfortrané s
 
 
 
 
rZcCs$t|ƒd}d}dt}|||S)Nr¢zE!    -*- f90 -*-
! Note: the context of this file is case sensitive.
! This file was auto-generated with f2py (version:%s).
! See:
! https://web.archive.org/web/20140822061353/http://cens.ioc.ee/projects/f2py2e
)rêÚ f2py_version)rÚpyfÚheaderÚfooterr$r$r%Ú crack2fortranú s  ür_cCs(t|tƒo&t|ƒdko&t|dttfƒS)Nrr)r‹ÚtuplerMr2r˜)Úobjr$r$r%Ú_is_visit_pair     s
 
 
ÿþrbcOs6t|ƒrR|ddkr|S||||f|ž|Ž}|dk    rDt|ƒs@t‚|S|}|\}}n d|f}d}t|tƒr¼g}t|ƒD]D\}    }
t|    |
f|f|ž||g|dœ|—Ž\} } | dk    rt| | ¡qtndt|tƒrtƒ}| ¡D]B\} }
t| |
f|f|ž||g|dœ|—Ž\}}|dk    rÖ|||<qÖn|}|dkr.|S||fS)aíTraverse f2py data structure with the following visit function:
 
    def visit(item, parents, result, *args, **kwargs):
        """
 
        parents is a list of key-"f2py data structure" pairs from which
        items are taken from.
 
        result is a f2py data structure that is filled with the
        return value of the visit function.
 
        item is 2-tuple (index, value) if parents[-1][1] is a list
        item is 2-tuple (key, value) if parents[-1][1] is a dict
 
        The return value of visit must be None, or of the same kind as
        item, that is, if parents[-1] is a list, the return value must
        be 2-tuple (new_index, new_value), or if parents[-1] is a
        dict, the return value must be 2-tuple (new_key, new_value).
 
        If new_index or new_value is None, the return value of visit
        is ignored, that is, it will not be added to the result.
 
        If the return value is None, the content of obj will be
        traversed, otherwise not.
        """
    rrÇN)Úparentsr“)    rbròr‹r=r5rVrûrvr¾)raÚvisitrcr“rÚkwargsZ
new_resultÚparentZ
result_keyrOr$Z    new_indexZnew_itemÚkeyZnew_keyÚ    new_valuer$r$r%rV sR  
 
 þþþ
  þþþ
 
rVc
Os>|d\}}|\}}dd„}    |dkrF|dddks8t‚|dd}
n.|d    krp|d
ddksbt‚|d
d}
nd }
d } |
d k    rª|} |
 ¡D]\} } t| ƒrŒ|    | | ƒ} qŒnP|d krú|d
dd}
|} |
 ¡D]*\} } t| ƒrÎt d | dd| | ¡} qÎ| d k    r:| |kr2td|›d|›d|›d| ›d    dƒ|| fSd S)aüPreviously, Fortran character was incorrectly treated as
    character*1. This hook fixes the usage of the corresponding
    variables in `check`, `dimension`, `=`, and `callstatement`
    expressions.
 
    The usage of `char*` in `callprotoargument` expression can be left
    unchanged because C `character` is C typedef of `char`, although,
    new implementations should use `character*` in the corresponding
    expressions.
 
    See https://github.com/numpy/numpy/pull/19388 for more information.
 
    r    cSs0t d|d||¡}t d|d||¡}|S)Nz[*]\s*\brðz\b\s*[\[]\s*0\s*[\]])r¦r)Úvarnamer$r$r$r%Ú    fix_usagec s ÿz8character_backward_compatibility_hook.<locals>.fix_usage)rÙr;éýÿÿÿrrrr8r‹NZ callstatementz
(?<![&])\brðrŒzcharacter_bc_hook[rhz ]: replaced `z` -> `z`
)ròr¾Z ischaracterr¦rr-)Úitemrcr“rreZ
parent_keyZ parent_valuergr$rjZ    vars_dictrhriZvdr$r$r%Ú%character_backward_compatibility_hookQ s@ 
ÿ
 
ÿrmÚ__main__r&z-quietz-verboserz-fixz?Use option -f90 before -fix if Fortran 90 code is in fix form.
z-skipemptyendsz--ignore-containsz-f77z-f90r›z-hz-showz-mrozUnknown option %s
z    OSError: a  Warning: You have specified module name for non Fortran 77 code that
  should not need one (expect if you are scanning F90 code for non
  module blocks but then you should use flag -skipemptyends and also
  be sure that the files do not contain programs without program
  statement).
z Writing fortran code to file %s
rä)r)r)rø)r)r)r)r)rÄ)N)rN)Nr)r)NN)rr)r¢F)r)r)rF)ÐÚ__doc__r(rTrªr¦rurxrr{rrÚ ImportErrorrrZauxfuncsrÚversionr[r
r r r rrrrrrrr¥rrrrrr rrr
r"rr!r#rr rrr&r-Ú    _MAXCACHErërrYrer•r]rdrfrgrmr§r¨r¸r¯rôrŽrr°r‘r…r–rRr½ZbeforethisafterZ fortrantypesrr‡rrZ groupbegins77r±Z groupbegins90r²Z    groupendsrZendifsrZmoduleproceduresr"rr r rrrrrrrrrr!r%rrr rÚSrrr¶rýr#r    r$rùr4rEr¦rKrQrRrSr€rrGrHrNrTr&rŒrzr}r6r7r¿rµr¨r­r{rˆr?r@rArÅrÆrÈrÎrÒrÜràrÞrárîrïrór÷rùrûrrrr rr~r"r#r rßr<rArÝrDrErFrGrHrBrrêrMrLrQrNrTrZr_rbrVrmrûrUrWÚfuncsr”Úf2Zf3Z showblocklistÚargvrÆrZr³rxrÁÚOSErrorZdetailrXr\r*r$r$r$r%Ú<module>s‚  
  &
     
fÿÿÿÿ
ÿÿ
ÿÿÿÿÿþÿÿÿÿÿÿÿþÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
 
ÿÿÿÿ    ÿþÿþÿÿÿ 5
ÿÿýÿ%<                `"+ # H   ^ { %ÿ - K
     B<
 
 
 
 
 
ÿ
 
 
 
 
 
  &ú