hyb
2026-01-07 c7f60dc7e9a36596f0e0d1787bd0cca4e9b57bcb
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
Ë
KñúhLLãó—dZddlZddlZddlZddlZddlZddlZddlZddlZddl    m
Z
    ddl Z ddl mZmZddl­ej"adadadadadad    ad    adadadagad    ad    ada ia!d    a"da#da$da%tJgia&d    a'ga(d
a)ga*da+d
a,ga-ga.ga/d „Z0dÅd „Z1d e_2iZ3dD]    Z4ddie3e4<Œ dD]    Z4ddie3e4<Œ iZ5iZ6dD]Z7e7dze5e7<e7e6e7dz<Œd„Z8d„Z9d„Z:d„Z;ejxdejz«j|Z?ejxdejz«j|Z@ejxdejz«j|ZAejxdejz«j„ZCgd¢ZDgd¢ZEd„ZFd „ZGeHdfd!„ZId"ZJd#ZKejxeJd    eKeKd$fzejz«d%fZLejxeJd    eKd&zeKd&zd$fzejz«ZMejxeJd'zejz«d(fZNejxeJd)zejz«d(fZOd*ZPejxeJd    ePePd$fzejz«d(fZQePd+zZRejxeJd    eReRd$fzejz«d(fZSd,ZTejxeJd    eTeTd$fzejz«d-fZUd.ZVejxeJd/eVeVd$fzejz«d0fZWd1ZXejxeJd    eXeXd$fzejz«d2fZYejxeJd3zejz«d4fZZejxeJd5zejz«d6fZ[ejxeJd7zejz«d8fZ\ejxeJd9zejz«d:fZ]ejxeJd;zejz«d<fZ^ejxeJd=zejz«d>fZ_ejxeJd?zejz«d@fZ`ejxeJdAzejz«dBfZaejxeJdCzejz«dDfZbejxeJdEzejz«dFfZcejxeJdGzejz«dHfZdejxeJdIzejz«dJfZeejxeJdKzejz«dLfZfejxeJdMzejz«dNfZgejxeJdOzejz«dPfZhejxeJdQzejz«dRfZiejxeJdSzejz«dTfZjejxeJdUzejz«dVfZkejxeJdWzejzejØz«dXfZmejxdYejØ«dZfZnd[„Zod\„Zpejxd]ejz«Zqejxd^ejz«Zrejxd_ejz«ZsdÆd`„Ztda„ZudÇdb„Zvdc„ZwdÅdd„Zxejxdeejz«Zyejxdfejz«Zzejxdgejz«Z{ejxdhejz«Z|ejxdiejz«Z}ejxdj«Z~ejxdk«Zejxdlejz«Z€dm„Zdn„Z‚do„Zƒdp„Z„dq„Z…dr„Z†ds„Z‡ejxdtejz«Zˆejxduejz«Z‰ejxdvejz«ZŠejxdwejz«Z‹ejxdxejz«ZŒdy„Zdz„ZŽd{„Zd|„ZdÆd}„Z‘dÆd~„Z’dÆd„Z“dÈd€„Z”d„Z•d‚„Z–dÉdƒ„Z—dÊd„„Z˜dËd…„Z™d†„Zšd‡„Z›dÌdˆ„Zœd‰„ZdÍdŠ„Zžejxd‹ejz«ZŸdŒ„Z ejxdejz«Z¡dŽ„Z¢d„Z£d„Z¤d‘„Z¥d’„Z¦dÎd“„Z§ifd”„Z¨d•„Z©ejxd–«j„Zªd—„Z«d˜„Z¬ejxd™ejz«Z­dÉdš„Z®d›„Z¯gfdœ„Z°d„Z±ejxdžejz«Z²ejxdŸejz«Z³ejxd ejz«Z´ejxd¡ejz«Zµejxd¢ejz«Z¶d£„Z·ifd¤„Z¸dÏd¦„Z¹dÌd§„ZºdÌd¨„Z»d©„Z¼dÐdª„Z½ga¾d«„Z¿d¬„ZÀd­„ZÁgdfd®„ZÂd¯„ZÐt|j‰eëeÅd°k(rgZÆgZÇdZÈdZÉdZÊdZËej˜ddD]æZÍeÍd    k(rŒ    eÍdd±k(rdZȌeÍd²k(rdadaŒeÍd³k(rd´adaŒ(eÍdµk(rt&r    e1d¶d«dadaŒAeÍd·k(rdaŒIeÍd¸k(rdaŒQeÍd¹k(rdadaŒ[eÍdºk(rdad»adaŒgeÍd¼k(rdZɌoeÍd½k(rdZˌweÍd¾k(rdZʌeÍdd¿k(reÎdÀeÏeÍ«›d¥«ŒšeÉrdZÉeÍaŒ¡eÊrdZÊeÍaŒ¨eÈr+    eÐeÍ«j£«eƐj‰eÍ«ŒÕeǐj‰eÍ«Œèt&st2rt4s    e1dÂd«e¿eÆ«ZÔt0rGe1dÃeÏt0«›d¥d«eÀeÔ«ZÕeÐt0dÄ«5ZÈeȐj­eÕ«ddd«eËr    eHeÔ«yyy#e $rdZ Y
Œ¦wxYw#eÒ$rZÓeÎdÁeӛd¥«YdZÓ[ӐŒ‹dZÓ[ÓwwxYw#1swYŒCxYw)Ña
crackfortran --- read fortran (77,90) code and extract declaration information.
 
Copyright 1999 -- 2011 Pearu Peterson all rights reserved.
Copyright 2011 -- present NumPy Developers.
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.
 
 
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)ÚPathé)Ú __version__Úsymbolic)Ú*Úfixú    Úéÿÿÿÿcóx—dadadadadadadadadada    ga
da tgia da dadagaiadadadagagagagaday)Nrrrr    r
r )Ú    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©óúJH:\Change_password\venv_build\Lib\site-packages\numpy/f2py/crackfortran.pyÚreset_global_f2py_varsr*Ås€ð€IØ€NØ €EØ€GØ€GØ€KØ€MØ€MØ€NØ€KØ €Eà€LܘrÐ"€IØ€LØ€KØ€OØ€KØ€MØ€KØÐØ€OØ€MØ€IØ€IØ€MØÑr(có¨—tsytsE|r#tjj    t
«tjj    |«yy©N)rrÚsysÚstdoutÚwriter )ÚlineÚflags  r)Úoutmessr2ës:€õ ØÝ Ù Ü J‰J× Ñ Ô-Ô .Ü 
‰
×јÕð r(é2zabcdefghopqrstuvwxyz$_ÚtypespecÚrealÚijklmnÚinteger)3ÚintÚdoubleÚfloatÚcharÚshortÚlongÚvoidÚcaseÚwhileÚreturnÚsignedÚunsignedÚifÚforÚtypedefÚsizeofÚunionÚstructÚstaticÚregisterÚnewÚbreakÚdoÚgotoÚswitchÚcontinueÚelseÚinlineÚexternÚdeleteÚconstÚautoÚlenÚrankÚshapeÚindexÚslenÚsizeÚ_iÚmaxÚminÚflenÚfshapeÚstringÚcomplex_doubleÚ float_doubleÚstdinÚstderrr.ÚtypeÚdefaultÚ_bncóZ—|tvr"td|›dt|›d«t|S|S)Nzrmbadname1: Replacing "ú" with "ú".
)ÚbadnamesÚerrmess©Únames r)Ú
rmbadname1rr s6€Ø ŒxÑÜÐ)¨$¨¨x¼À¹Ð7GÀtÐLÔMܘ‰~ÐØ €Kr(có>—|Dcgc] }t|«‘Œc}Scc}wr,)rr©ÚnamesÚ_ms  r)Ú    rmbadnamerws€Ø%*Ö +˜rŒJrNÒ +Ð+ùÒ +ó…cóZ—|tvr"td|›dt|›d«t|S|S)Nzundo_rmbadname1: Replacing "rlrm)Ú invbadnamesrorps r)Úundo_rmbadname1r{s8€Ø Œ{ÑÜÐ.¨t¨f°H¼[ÈÑ=NÐ<OÈtÐTÔUܘ4Ñ Ð Ø €Kr(có>—|Dcgc] }t|«‘Œc}Scc}wr,)r{rts  r)Úundo_rmbadnamer}s€Ø*/Ö 0 BŒO˜BÕ Ò 0Ð0ùÒ 0rxz-\*-\s*fortran\s*-\*-z-\*-\s*f90\s*-\*-z-\*-\s*fix\s*-\*-z[^c*]\s*[^\s\d\t])z.f90z.f95z.f03z.f08)z.forz.ftnz.f77z.fcóL—t.tj|«j«j}n×t    dt
j j|««}t|d«5}|j|«}|jtj«rd}nf|jtjtjf«rd}n4|jtjtj f«rd}nd}ddd«t||¬«S#1swYŒxYw)    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Úbestr‚r`ÚosÚpathÚgetsizeÚopenÚreadÚ
startswithÚcodecsÚBOM_UTF8Ú BOM_UTF32_LEÚ BOM_UTF32_BEÚBOM_LEÚBOM_BE)ÚfilenameÚmoder‚ÚnbytesÚfhandleÚraws      r)Úopenhookr—+sà€ôÐ%Ü%×/Ñ/°Ó9×>Ñ>Ó@×IÑI‰ôRœŸ™Ÿ™¨Ó2Ó3ˆÜ (˜DÓ !ð
    # WØ—,‘,˜vÓ&ˆC؏~‰~œfŸo™oÔ.Ø&‘Ø—‘¤×!4Ñ!4´f×6IÑ6IРJÔKØ#‘Ø—‘¤§¡´· ± Р>Ô?Ø#‘ð#÷
    #ô ˜$¨Ô 2Ð2÷
    #ð
    #ús Á*BDÄD#có¼—d}t|«jj«tvrd}t    |d«5}|j «}d}t |«rd}nt|«rd}d}|dkDrX|rV|ddk7r6|j«r&|dz}|ddk7rt|d    d
«s|d d d k(rd}n|j «}|dkDr|rŒVd    d    d    «|S#1swY|SxYw)z(Check if file is in free format Fortran.FTÚrérú!rú    Nééþÿÿÿr ú&)
rÚsuffixÚlowerÚCOMMON_FREE_EXTENSIONSr—ÚreadlineÚ _has_f_headerÚ_has_f90_headerÚstripÚ_free_f90_start)ÚfnameÚresultr•r0Úns     r)Úis_free_formatr«Jsò€ð€FÜ ˆEƒ{×Ñ×ÑÓ!Ô%;Ñ;؈ܠ   %˜Ó    ð& Ø×ÑÓ!ˆØ ˆÜ ˜Ô ؉AÜ ˜TÔ "؈A؈Fؐ!Še™ØA‰w˜#Š~ $§*¡*¤,ؐQ‘Ø˜‘G˜t’O¬¸¸R¸a¸Ô(AÀdÈ2ÈbÀkÐUXÒFXØ!FØØ×#Ñ#Ó%ˆDð !Šeš÷&ð €M÷&ð €Mús ºB CÃCc
ó`—|s/tttttt
t ttf    }|gk(ryt}d}d}d}tjdtj«}tjd«}    tjd«}
tjd«} |r    |dd«d    \}} d
gtd «D cgc] } t| «‘Œc} z}datj|t ¬ «}        |j#«}|snà|j-«ræda|j)«ada|} dadat.j0j3t«d}t5t«j6j9«t:vrt=|«st?|«sdantAt«r t?|«sdatrtBantDatGdtIt«›dt›txrdxsd›d«|jK«jMdd
«}|dk(s|ddvrn |dd}|dk(sŒd}tO|d«\}}|d
z }|ddj9«dk(rtO|dz|ddzd«\}}d }|jQ«dk(rtdk(rnd}Œ«tdk(r|dd vr'|ddj9«d!k(r d"|ddz}d }nd}d}ŒãtrtS|«d#kDr|dd#}|d|vrt'd$tI|«z«‚|rtr$tS|«dkDr|dd
k(s||d%dz}d}d}nu|    jU|«}|r|jWd&«}|r)||
jU|«jWd&«z}d}d}n&d"|ddz}|r|j9«}n|}|}|}ntdk(rß|sbd'k(r]| jU|«rL|d(z}    |j#«}|s tYd)«n||z}| jU|«rnŒ6|j[«}|    jU|«}|r|jWd&«}|r(||
jU|«jWd&«z}d}d}n(|r |r t]|«s|j9«n|}n|}|}|}|du}nt_d*tIt«›«‚d+|ja«dz
t| fza|jU|«}|rÿ|jWd,«}t.j0jc|«rte||d¬-«nÈt.j0jgt«gthz}d}|D]S}t.j0jk||«}t.j0jc|«sŒCd}te||d¬-«n|sAtGd.tI|«›d/t.jljk|«›d0«n||«|} Œõ|r|j9«}n|}|}d+|ja«dz
t| fza|jU|«}|rÿ|jWd,«}t.j0jc|«rte||d¬-«nÈt.j0jgt«gthz}d}|D]S}t.j0jk||«}t.j0jc|«sŒCd}te||d¬-«n|sAtGd.tI|«›d/t.jljk|«›d0«n||«da|jo«|r
|dd«y\    aaaaaaaaaycc} w#t$$r6}t'd|j)«›d|j+«›d|›d«‚d}~wwxYw)1zõ
    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.
    NFr
z*\s*include\s*(\'|")(?P<name>[^\'"]*)(\'|")z(?P<line>.*)&\s*\Zz(\s*&|)(?P<line>.*)z.*?'''r )r
r
ú é
)r—Tzreadfortrancode: 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 z     (format:z,strictú)
õ z
r›rz!f2pyr    )rÚcr›ÚCr¯Úf2pyz     éHzxreadfortrancode: Found non-(space,digit) char in the first column.
    Are you sure that this code is in fix form?
    line=%sér0ú.pyfú
z.Unexpected end of file when reading multiline
z4Flag sourcecodeform must be either 'fix' or 'free': zLine #%d in %s:"%s"
    rq)Ú
dowithlineÚistopz-readfortrancode: could not find include file z in ú . Ignoring.
)8rr r!rr Ú beginpatternrrrÚreÚcompileÚIÚrangeÚstrÚ    fileinputÚ    FileInputr—r£ÚUnicodeDecodeErrorÚ    Exceptionr’ÚlinenoÚ isfirstliner†r‡Úsplitextrr r¡ÚCOMMON_FIXED_EXTENSIONSr¥Ú_has_fix_headerr«Úbeginpattern77Úbeginpattern90r2ÚreprÚ
expandtabsÚreplaceÚsplit_by_unquotedr¦rXÚmatchÚgrouproÚrstripÚiscstyledirectiveÚ
ValueErrorÚ
filelinenoÚisfileÚreadfortrancodeÚdirnamer%ÚjoinÚpathsepÚclose)Úffilerºr»Ú saveglobalsÚlocaldolowercaseÚcontÚ    finallineÚllÚ includelineÚcont1Úcont2Ú
mline_markÚl1rvÚ spacedigitsÚfinÚlÚmsgÚextÚis_f2py_directiveÚrlÚ_Ú origfinalliner™ÚlcÚmÚfnÚ include_dirsÚ    foundfileÚinc_dirÚfn1s                               r)rÙrÙdsh€ñ Ü!Ô#3´_ÄnÔV_Ü œ%¤¬+ð6ˆ à ‚{ØÜ"Ðð €DØ€IØ     €BÜ—*‘*Ø5´r·t±tó=€Kä J‰JÐ,Ó -€EÜ J‰JÐ-Ó .€EÜ—‘˜IÓ&€J٠ِ2rÔØ F€BˆØ%¬U°2«YÖ7 rœ3˜r7Ò7Ñ7€KØÐÜ
˜e¬hÔ
7€CØ
ð    Ø— ‘ “ˆAñÙ Ø ?‰?Ô Ø!Ð Ø!Ÿl™l›nˆO؈K؈B؈IØ"ˆNÜ—'‘'×"Ñ"¤?Ó3°AÑ6ˆCÜ”OÓ$×+Ñ+×1Ñ1Ó3Ô7NÑNÜ(¨Ô+¬¸qÔ/AØ‘    Ü¤Ô0¼ÈÔ9KØ!'ÝÜ-‘ ä- Ý ÜœOÕ,­nÜ!Ò/ iÒ6°BÑ6ð8ô 9ð L‰L‹N× "Ñ " 6¨3Ó /ˆàr’'ؐ‰u˜HÑ$ØØ#2ˆAðr“'ð
"Ðä# A sÓ+‰ˆˆBØ    ˆS‰ˆØ ˆbˆqˆ6<‰<‹>˜WÒ $Ü$ Q¨¡[°2°a°b°6Ñ%9¸3Ó?‰DˆAˆqØ $Ð Ø 7‰7‹9˜Š?Ü Ò'ð
ðÙ Ü ˜UÓ "ؐ‰tÐ0Ñ0ؐQq6—<‘<“> VÒ+Ø ! A B %™AØ(,Ñ%ࠐDØ(-Ð%ÙÝܐq“6˜B’;ؘ#˜2˜Aؐ‰t˜;Ñ&Üð!GäIMÈaËñ!QóRðRñI¬C°«F°QªJ¸qÀ¹tÀsº{à˜!˜A˜B˜%‘ZØ    Ø "’ à—K‘K “NÙØŸ™ ›AÙØ˜eŸk™k¨!›n×2Ñ2°6Ó:Ñ:BØ "IØ$&’Mð  ! A B %™Aá'Ø$&§H¡H£J™    à$&˜    Ø$&MØ’Bä ˜vÒ %Ù˜C 6šM¨j×.>Ñ.>¸qÔ.Aؘ‘HØØŸ™›BÙÜØMôOàØ˜B™AØ!×'Ñ'¨Ô+Øðð—H‘H“JØ— ‘ ˜A“ˆAÙØ—G‘G˜F“OÙؘ%Ÿ+™+ a›.×.Ñ.¨vÓ6Ñ6Ø    Ø "‘ á#ñ4EÔIZÐ[]ÔI^ §¡¤
Ðeg‘Ià "IØ " ؘؐTM‰DäØFÄtÌNÓG[ÐF\Ð]ó_ð _à4Ø N‰NÓ ˜qÑ  ¤/°2ð87ñ7Ðà × Ñ ˜mÓ ,ˆÙ Ø—‘˜“ˆB܏w‰w~‰~˜bÔ!Ü ¨zÀÖCô—G‘G—O‘O¤OÓ4ð 6Ü8Eñ F à    Ø+òGÜŸ'™'Ÿ,™, w°Ó3CÜ—w‘w—~‘~ cÕ*Ø$%˜    Ü'¨¸
È!ÕLÙð ñ !ÝܘR¤"§*¡*§/¡/°,Õ"?ðAõBñ yÔ !Ø ˆñ{ ñ~Ø—H‘H“J‰    àˆ    Ø€MØ0Ø ‰Ó˜1Ñœo¨rð43ñ3Ðà×ј-Ó(€AÙØ W‰WV‹_ˆÜ 7‰7>‰>˜"Ô Ü ˜B¨:¸QÖ ?äŸG™GŸO™O¬OÓ<Ð=Ä ÑMˆL؈IØ'ò Ü—g‘g—l‘l 7¨BÓ/Ü—7‘7—>‘> #Õ&Ø !IÜ# C°JÀaÕHÙð  ñ Ýܘ•HœbŸj™jŸo™o¨lÕ;ð=õ>ñ    9ÔØÐØ‡II„K٠ِ2qÕð9Dñ    6ˆ Ð% ¸È    Ø ˜% ©+ùòE8øô "ò    ÜØ+¨C¯L©L«NÐ+;¸1¸S¿Z¹Z»\¸NØ   ð&ðóð ûð    úsÃ])Ã<].Ý.    ^-Ý71^(Þ(^-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ú.*rhz|static|automatic|undefined)z([a-z]+[\w\s(=*+-/)]*?|)ÚfunctionrúrùÚbegin)z    [a-z\s]*?Ú
subroutinerürùzprogram|block\s*datazM|module(?!\s*procedure)|python\s*module|(abstract|)\s*interface|type(?!\s*\()z\end|endprogram|endblockdata|endmodule|endpythonmodule|endinterface|endsubroutine|endfunctionÚendzDend\s*(if|do|where|select|while|forall|associate|critical|enum|team)z[\w]*?Úendifzmodule\s*procedureÚmoduleprocedure)r
Úimplicitrrùr)r
údimension|virtualrrùÚ    dimension)r
Úexternalrrùr)r
Úoptionalrrùr)r
Úrequiredrrùr)r
Úpublicrrùr)r
Úprivaterrùr)r
Ú    intrinsicrrùr)r
úintent|depend|note|checkr    z \s*\(.*?\).*Úintent)r
Ú    parameterr z\s*\(.*r )r
Údatar rùr )r
Úcallr rùr )r
Úentryrrùr)r
Úcallfunrrùr)r
Úcommonrrùr)r
Úuserrùr)r
Úcontainsrr
r)r
Úformatrrùr)r
úKthreadsafe|fortranname|callstatement|callprotoargument|usercode|pymethoddefrrùÚf2pyenhancementsz2\s*(?P<before>''')(?P<this>.*?)(?P<after>''')\s*\ZÚ    multilinec    óL—td«t|«zrJd«‚tjdjdtj|«›ddtj|«›ddd¬    ««}|j |«}|r|j «}|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("([^"\\]|(\\.))*"))Ú
not_quotedr;Ú single_quotedÚ double_quotedÚbeforeÚafterr
)Úsetr¾r¿rÚescaperÒÚ    groupdict)r0Ú
charactersr™róÚds     r)rÑrјs®€ô E“
œS ›_Ò,ÐPÐ/PÓPÐ -Ü

‰
ð    !ß!'¡ØœrŸy™y¨Ó4Ð5°QÐ7Ø”R—Y‘Y˜zÓ*Ð+¨1Ð-Ø0Ø0ð    "(ó"2ó    3€Að    
‰‹ €AÙØ K‰K‹MˆØ(‘ ˜Q˜w™ZÐ(Ð(Ø "ˆ:Ðr(cóº—g}t|«jd«D],}dD]}|j|d«}Œ|j|«Œ.dj    |«S)Nú@,@z(),rðú,)ÚmarkoutercommaÚsplitrÐÚappendrÛ)ÚargslineÚarªr™s    r)Ú _simplifyargsr,¬s`€Ø
€AÜ ˜HÓ %× +Ñ +¨EÓ 2òˆØò    "ˆAØ—    ‘    ˜!˜SÓ!‰Að    "à    ‰ ðð 8‰8A‹;Ðr(z"\s*(?P<result>\b[a-z]+\w*\b)\s*=.*z \s*(?P<bind>\b[a-z]+\w*\b)\s*=.*zH\s*bind\(\s*(?P<lang>[^,]+)\s*,\s*name\s*=\s*"(?P<lang_name>[^"]+)"\s*\)có® —t|d«\}}|r„tdj|«sltdj|«sT|dk(sJt    |««‚t|d«\}}|r!t ||«t|ddd«\}}|rŒ!t ||«y|dkr_dat diat iiat gia    gtt d<itt d<dtt d<dtt d    <d
a
d
a y|dkDr”d}trtt k(rd }t |kDr td t    t «›d t    t«›d«td«tt dz
jtt «tt tt dz
d
d<tt =t dz
at |kDrŒ trÍtt k(rÀtt dz
jtt «tt tt dz
d
d<tt =t dz
att dz
jtt «tt tt dz
d
d<tt =t dz
ad
a
y|dk(ryd}tt t"t$t&t(t*t,t.t0t2t4t6t8t:t<t>t@tBtDtFtHtJtttLfD]}|dj|«}|rn|dz}Œ!s•tN}    dtcxkr    t krydtt vr tt dD] }
|
tPvr    tP|
}
dtt vr|
tt dvrŒ7tSjd|
ztU|«tRjV«} | sŒk|    j| jYd««} t[| jYd««} | rd|
›d| ›d| jYd«›d}n    d|
›d| ›d}t\dj|«}|stdt    |«›d«yt_|d|«yt`dkDs,t`dk(r7tbje«jgd«rda4tdt z«yddk(r=dtcxkr    t krnnt dz
att kryt dkrtkd t z«‚t8dj|«} | rc| jYd!«tt k(sDtkd"t    | jYd!««›d#t    tt «›d$tl›«‚tt k(rd
a tt dz
jtt «tt tt dz
d
d<tt =t dz
atnsda8yy|dd%k(r5dtcxkr    t kr nn
t dzayda9t_||d|«da8y|dd&k(ry|dd'k(rt_||d|«y|dd(k(r*ttrydtcxkr    t kr    yt a yt a ydtcxkr    t kryt_||d|«y))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Úblockrqr ézcrackline: groupcounter=z  groupname=r¹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 ú(z
) result (r©ú)z4crackline: could not resolve function call for line=ú.
rr¸z"crackline:%d: No pattern for line
rýz>crackline: groupcounter(=%s) is nonpositive. Check the blocks.Úthiszcrackline: End group z* does not match with previous Begin group z
    rûrþrÿr);rÑÚf2pyenhancementspatternrÒÚmultilinepatternrÎÚ    cracklinerÚ    groupnameÚ
groupcacherrrrr2r)Ú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_1rzr¾ÚmarkouterparenrÀrÓr,ÚcallfunpatternÚ analyzelinerr!r¡Úendswithr&rÆr rrrr)r0ÚresetrðÚ has_semicolonÚsemicolon_lineÚflr1ÚpatróÚre_1rqÚm1Úm2r+s              r)r<r<¹sM€ô)¨¨sÓ3Ñ€A€}ÙÔ5°aÑ8×>Ñ>¸tÔDÜ/°Ñ2×8Ñ8¸Ô>à˜ŠzÐ&œ4 ›;Ó&ˆzä0°°sÓ;шˆnÙÜ d˜EÔ "Ü#4°^ÀAÀBÐ5GÈÓ#MÑ  ˆD.òô    $˜ÔØØ ˆq‚y؈ Ü! 2Ð&ˆ    Ü" BÐ'ˆ
Ü! 2Ð&ˆ    Ø+-Œ
”<Ñ  Ñ(Ø+-Œ
”<Ñ  Ñ(Ø,.Œ
”<Ñ  Ñ)Ø+-Œ
”<Ñ  Ñ(؈ ØˆØØ ˆqƒyØ ˆÝ œ\¬\Ò9؈BܘRÒÝ Üœ,Õ'¬¬i­ð:ô ;ä Ølô nä ”l QÑ&Ñ '× .Ñ .¬z¼,Ñ/GÔ HÜ6?Ä Ñ6MŒI”l QÑ&Ñ '¨Ñ +¨FÑ 3Üœ,Ð'Ü'¨!Ñ+ˆLô˜RÓõ œ\¬\Ò9Ü ”l QÑ&Ñ '× .Ñ .¬z¼,Ñ/GÔ HÜ6?Ä Ñ6MŒI”l QÑ&Ñ '¨Ñ +¨FÑ 3Üœ,Ð'Ü'¨!Ñ+ˆLÜ ”l QÑ&Ñ '× .Ñ .¬z¼,Ñ/GÔ HÜ6?Ä Ñ6MŒI”l QÑ&Ñ '¨Ñ +¨FÑ 3Üœ,Ð'Ü'¨!Ñ+ˆL؈LØØ ˆr‚zØØ €DÜ ¤/´=Ä/ÜÜ ¤+¬}¼nÜ ÜœjÜÜœoÔ/@ܤ¬}ÜœZ¬ÜÜ'Ü Ü&ð òˆð ‰FL‰L˜Ó ˆÙ ٠ؐa‰x‰ð#ò$ ÜˆØ ”Ô /¤<Ò /Ø ð 0à œ*¤\Ñ2Ò 2Ü"¤<Ñ0°Ñ=ó Øœ;Ñ&Ü& tÑ,Dؤ:¬lÑ#;Ñ;ÀÌ
ÔS_ÑH`ÐamÑHnÑ@nØÜ—X‘XØLÈtÑSÔUcÐdhÓUiÔkm×koÑkoóqâØŸ™ B§H¡H¨XÓ$6Ó7BÜ% b§h¡h¨vÓ&6Ó7AÙØ!)¨$¨¨q°°°:¸b¿h¹hÀxÓ>PÐ=QÐQRÐS™à!)¨$¨¨q°°°1Ð5˜Ü& qÑ)×/Ñ/°Ó5AÙÜØRÔSWÐX\ÓS]ÐR^Ð^aÐbôdáÜ  9¨dÔ3Ùð) ô* QŠ;œ7 aš<¬O×,AÑ,AÓ,C×,LÑ,LÈVÔ,TØ#Ð Ü Ð9¼\ÑJÔ KØØ     ˆQ‰5‹Ø ”Ô .¤,Õ .Ü'¨!Ñ+ˆLܤ,Ò.ØÜ ˜1Ò Üð0ä+ñ-ó.ð .ô˜!‰_× "Ñ " 4Ó (ˆÙ ˜Ÿ™ &Ó)¬Y´|Ñ-DÒDÝä! "§(¡(¨6Ó"2Õ3´T¼)ÄLÑ:QÕ5RÝ-ð/óð ô
œlÒ *Ø ˆOÜ”, Ñ"Ñ#×*Ñ*¬:´lÑ+CÔDÜ2;¼LÑ2IŒ    ”, Ñ"Ñ# BÑ'¨Ñ/Ü ”lÐ #Ü# aÑ'ˆ ÝØ‰Kðà     ˆQ‰7Ò    Ø ”Ô /¤<Õ /Ü'¨!Ñ+ˆLØ Øˆ ܐAs˜1‘v˜tÔ$؉ Ø     ˆQ‰7Ò    Ø Ø     ˆQ‰Ð$Ò    $ܐAs˜1‘v˜tÕ$Ø     ˆQ‰:Ò    Ý Ø Ø ”Ô /¤<Ò /Ø ð 0ä&‰œ,‰à ”Ô /¤<Ò /Ø ð 0äAs˜1‘v˜tÕ$r(cóz—d}d}|D]1}|dk(r|dz}|dk(r|dz}Œ|dk(r|dz
}|dk(r|dz}Œ-||z}Œ3|S)Nr
rr6rú@(@r7ú@)@r')r0rëÚfr³s    r)rWrWWsq€Ø
€AØ    €AØ ò ˆØ Š8ؐA‘ˆAؐAŠvؘ‘IØØ #ŠXؐA‘ˆAؐAŠvؘ‘IØØ ‰E‰ð ð €Hr(có—d}d}t||dz«\}}||z }|rY|d|k(r|dk(r |d|zdzz }n#||dz }|ddk(r|dz }n |ddk(r|dz}t|dd|dz«\}}||z }|rŒY|rJt|||f««‚|S)Nr
rú()ú@r6rr7)rÑrÎ)r0Úcommarërfrrs      r)r'r'is̀Ø
€AØ    €AÜ% d¨E°D©LÓ9M€FˆE؈K€AÙ
Ø !‰H˜Ò  A¨¢FØ u‘˜sÑ"Ñ "‰Aà q‘‰MˆAؐQ‰x˜3ŠØQ‘‘ؐq‘˜S’ؐQ‘Ü)¨%°°¨)°U¸T±\ÓB‰ ˆØ    ˆV‰ ˆò ñÐ$”$˜˜4 |Ó$Ó$ˆ5Ø €Hr(cóJ—|jdd«jdd«}|S)Nrdr6rer7)rÐ)r0r™s  r)Úunmarkouterparenrl|s$€Ø  ‰ U˜CÓ ×(Ñ(¨°Ó4€AØ €Hr(có¢—|si}|s|S||ur|St|j««D]¤}|dk(r|s||vsŒ||||<Œ|dk(r||D]}t|||«}ŒŒ5|dk(rt||||«}ŒK|dk(rt    ||||«}Œa|dvr|s||vsŒl||||<Œu|dk(rŒ{|dvrt d|›d    «Œt d
t|«z«‚|S) Nr4ÚattrspecÚ kindselectorÚ charselector)ú=ÚtypenameÚnote)r
ÚcheckrrrÚdependz appenddecl: "z" not implemented.
z-appenddecl: Unknown variable definition key: )ÚlistÚkeysÚ setattrspecÚsetkindselectorÚsetcharselectorrorÆrÂ)ÚdeclÚdecl2ÚforceÚkrës     r)Ú
appenddeclrs€Ù ؈٠؈ Ø ˆu}؈ Ü %—*‘*“,Ó ò$ˆØ 
Š?Ù˜ š Ø ™(Q’Ø *Š_ؘ1‘Xò 3Ü" 4¨¨EÓ2‘ñ 3à .Ò  Ü" 4¨¨q©°5Ó9‰DØ .Ò  Ü" 4¨¨q©°5Ó9‰DØ Ð#Ñ #Ù˜ š Ø ™(Q’Ø &Š[Ø Ø ð)ñ)ä m A 3Ð&:Ð;Õ <äÐKÜ ›Fñ#ó$ð $ð)$ð, €Kr(zD\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\bcó`—|jdg«D]}tj|«sŒyy)Nrnrr)ÚgetÚ_intentcallbackpatternrÒ)Úvdeclr+s  r)Ú_is_intent_callbackr„µs2€Ø Y‰Yz 2Ó &òˆÜ !× 'Ñ '¨Õ *Ùðð r(cód—dj|j««}tj|«}t    ||«|re|j d«}|r-|jd«Dcgc]}|j «‘Œc}ng}|j d«||j d«fSdgdfScc}w)Nr
Ú
attributesr&rqÚparams)rÛr(ÚtypedefpatternrÒÚprintrÓr¡)r0raÚattrsr+s    r)Ú_resolvetypedefpatternr‹¼s“€Ø 7‰74—:‘:“<Ó  €DÜ    ×    Ñ    ˜dÓ    #€BÜ    ˆ$„OÙ    Ø—‘˜Ó&ˆÙ9> E§K¡K°Ó$4Ö5˜q—‘•Ó5ÀBˆØx‰x˜Ó ¨¯©°Ó(:Ð:Ð:Ø Tˆ>Ðùò6sÁ)B-cóì—tjdtj«}|j|«}d}|r8|j    d«}|d|j «||j «dz}||fS)NzObind\(\s*(?P<lang>[^,]+)(?:\s*,\s*name\s*=\s*["\'](?P<name>[^"\']+)["\']\s*)?\)r)r¾r¿rÀÚsearchrÓÚstartrý)r0ÚpatternrÒÚbind_statements    r)Úparse_name_for_bindr‘Æsl€Üj‰jÐkÔmo×mqÑmqÓr€GØ N‰N˜4Ó  €EØ€NÙ ØŸ™ Q›ˆàNU—[‘[“]Ð# d¨5¯9©9«;¨<Ð&8Ñ8ˆØ Ð Ðr(cóÖ—t|«\}}t|«}tj|«}|r3|j    d«|j    d«|j    d«|fSt
j|«}|r/|j    d«dz|j    d«zdz}|gddfSt j|«}|r$|j    d«|j    d«ddfSdgddfS)Nrqr5r©Úschemer6r7)r‘rWÚnameargspatternrÒrÓÚoperatorpatternÚcallnameargspattern)r0Ú
bind_cnamerarqs    r)Ú_resolvenameargspatternr˜Ðsã€Ü*¨4Ó0Ñ€Dˆ*Ü ˜$Ó €DÜ    ×    Ñ    ˜tÓ    $€BÙ    Øx‰x˜Ó §¡¨&Ó!1°2·8±8¸HÓ3EÀzÐQÐQÜ    ×    Ñ    ˜tÓ    $€BÙ    Øx‰x˜Ó! CÑ'¨"¯(©(°6Ó*:Ñ:¸SÑ@ˆØR˜˜tÐ#Ð#Ü    ×    "Ñ    " 4Ó    (€BÙ    Øx‰x˜Ó §¡¨&Ó!1°4¸Ð=Ð=Ø T˜4Ð Ðr(c óº8—|jd«}|dk7rdatrÛ|dvr×tsÑtdkrÈt
j jt«jd«d}td|›d    «da tdzad
tt<itt<gtt<gttd <ittd <d
ttd <|ttd<dttd<da|dvrË|j«}t!j"d|t j$«rd}nOt!j"d|t j$«rd}n't!j"d|t j$«rd}|dk(r8t'|jd««\}}}d|ittd |<g}d}    nt)|jd««\}}}    }
|€|dk(rd}nd}|dvr td«||tfa|r@t+t-|«jd«D cgc]} | j/«‘Œc} «}ng}d|vr%d|vr|j1d«d|vrŒtd «d} d} |d!vr\d} d"ttvry|ttd"vryttD] }|d|k(sŒ y|ttd#vryd$d%d!œ|}t2r#t4d&k(rtdkrtd'zad} |d(vrd} tdzaitt<gtt<| rÉt6dkDrtd)t9t2«zd«d*tt<dttd <t2ttd<dttd<gttd <gttd+<gttd#<ittd <tdzaitt<gtt<| rãt6dkDrtd,tzd«d-tt<d-ttd <d.ttd<ttdz
d›d/ttdz
d›ttd<gttd <gttd+<gttd#<ittd <tdzaitt<gtt<|tt<|ttd <|sd0|j;d1d2«z}|jd3«ttd4<t=|«ttd<|    ttd5<tdk(rtttd<nqt2r4td6k(r+ttdz
d›d/t›ttd<n7ttdz
d›d/ttdz
d›ttd<t?ttjA««D]!}tt|rŒtt|=Œ#|ttd"<gttd <gttd+<gttd#<ittd <ittd7<|dk(rgttd8<|d!vr£|ttd'z
d+vr"ttd'z
d+jC|«tEjFttd'z
d «ttd <    ttd |ttd |djId9«=|d:vrN
r‰t!jLtN|
«}|rm|iittd;<|jd<«ttd;|d<<|jd=«r%|jd=«ttd;|d<    tQttd |ttd'z
d d«ttd |<|d>k(rX|    rV|    ttd vrD||    k(s?tQttd |ttd |    «ttd |<    ttd'z
d#jC|«|d%k(rltRdj#|jd3«d1z|z«}|r=tU|jd«|jd««\}}}}tW||||«|d!vr¿ttdz
jCtt«ttttdz
d&d <tt=tdz
attdz
jCtt«ttttdz
d&d <tt=tdz
ayy|d7k(r•t)|jd««\}}}    }|s|r@t+t-|«jd«D cgc]} | j/«‘Œc} «}ng}|    Jt9|    ««‚|ttd7|<d7|tfayy|dk(r;tU||jd««\}}}}tW||||«}|
d?|tfayy|d@vrâttd }|jd«j/«}|jYdA«}|dkr£|dBk(ržt[|«jYdC«d'z
}|d|dzdAz||dzdz}|jYdA«}||ddAk(rTd"ttvrEtdD|jd«›|d|›dE«|dFj]ttd"«z}|dkrd}d}n|d|j/«}||d'zd}t-|«jd«}t_|«dkDr%|d}tdGdFj]|dd«z«d}t-|«jd«D cgc]} | j/«‘Œc} D]/}t`j#|«}|s<|dHvrd}nOtc|je««tdI|›dJt9|«›dK«ŒWt=|jd««}|dHvr|dLvr||jd«z }||vri||<|dMk(r||jd«z}|dBk(rÕ|jd«|z}tfj#|«r¬|ttd"vrŒtdkDrsdNttd'z
dvr tdO«|ttdk7r^tdP|›dQttd›dR«ttd"jC|«ntidS|›dT«ntidU|z«|dVvr|}d||vr||djC«n    g||d<|d9k(rrttd d
k(r tdW«ŒÜ|ttd"vrŒðd+ttvrgttd+<ttd+jC|«|}Œ2|ttd <|
d?|tfayy|dXk(rK|jd«jdF«D cgc]} | j/«‘Œc} ttdY<y|dZk(r?ttd }|jd«j/«dd&}d}t-|«jd«D]Ð}    |jd[«D cgc]} | j/«‘Œc} \}}tk|«}t=|«}||vri||<d[||vr&||d[|k(std_|›d`||d[›da|›d    «tm||«}|rù|jodb«dck(ržt?|«} tpjs|«D]i}t?||ju«|jw«j«j;ddde««| |ju«|jw«Œkdj]| «}nG|jodb«dfk(r3|ddj«j;ddde«j;dFdg«}    ty|i|«}!t9|!«||d[<d||vr||djCdZ«n    dZg||d<|}ŒÓ|ttd <|
d?|tfayy|djk(rƒ|jd«j/«j«dkk(rdttdj<y|jd«r/ttjodji«}#|#€ tdl«i}#t-|jd««jd«D]Å}i}$t!j"dm|t j$«}|stdn|›d^«Œ=t€j#|jd««}%|%stdo|›d^«ŒstU|%jd«|%jd««\}}}}tƒ||«\}&}'}(||$db<|&|$dp<|'|$dq<|(|$dr<t?|$jA««D] }|$|rŒ    |$|=Œ t-|jd««jd«D]­})ds|)vr2    |)jds«D cgc]} | j/«‘Œc} \}*}+n|)j/«x}*}+t_|*«t_|+«cxk(rdk(sntdt|)›dv«Œzt…t‡|*«t‡|+«dz«D]},|$|#t‰|,«<ŒŒ¯ŒÈ|#ttdj<yy|dwk(r÷g}d}-d}.d}/d}0d}1|jd«D]—}2|1s|2dxk(r|0 }0|2dyk(r|0r|/dz}/Œ|2dzk(r|1dz}1n
|2d{k(r|1dz
}1|/dk(r|-|2z}-Œ:|/dk(r|.|2z}.ŒE|/d'k(sŒK|-j/«}-|-j‹dF«r|-ddj/«}-|jC|-|.g«|2}-d}.d}/Œ™|/d'k(rG|-j/«}-|-j‹dF«r|-ddj/«}-|jC|-|.g«ttjod i«}3d}|D]²}4|4dj/«jdF«|4dj/«c|4d<|4d<|4dj‹dz«rtd||4d›d}«Œgtt+t-|4d«jd«D cgc]} | j/«‘Œc} ««D]þ\}5}!|!j‹dz«rtd||!›d}«Œ'd~|4dvrtd|4d›d}«ŒA|3j‘|!i«|3|!jodb«}6t“|3|!«}7|6dfk(rt!j”d€|4d«n|4djdF«}8    |7rdd‚j]|8«›dƒn|8|5}9|3|!jod[«}>|>r|>|9k7rtd†|!›d`|>›d‡|9›d^«|9|3|!d[<|!}ŒŒµ|3ttd <|r
d?|tfayy|dˆk(r|jd«j/«}|ddyk(sd‰|z}g}?t!jdy|d'¬Š«\}}@}A|@j/«}@|@sd‹}@|?jC@Ag«i}Bdˆttvrttdˆ}B|?D]i}2|2dBvrgB|2d<t-|2d«jd«D cgc]} | j/«‘Œc} D]}|sŒB|2djC|«ŒŒkBttdˆ<dˆ@tfay|dŒk(r·t!j"d|jd«t j$«}|rY|je«}CdŒttvrittdŒ<|jd«}ittdŒ|<d}DdŽCvr%CdސdCvrCd€d}DDttdŒ|d<CdŽjdF«D cgc]} | j/«‘Œ}} i}E|D]¡}4d[|4vr€t!j"d‘|4t j$«}%|%r@|%jdŒ«j/«E|%jd’«j/«<ntd“t9|4«›dE«n|4E|4<EttdŒ|d”<Œ£ytc|je««td•«yyy|d–vr«d—ttvrittd—<ttd—}F|jd«d˜k(rDd˜Fvr@t¡Fd˜t¢«r    Fd˜g|Fd˜<Fd˜jC|jd««y|jd«F|jd«<y|dk(rIt€t6r td™«yt}Gt¥t|Gtdd'|jd««yt6dkDr%tc|je««tdš«yycc} w#tJ$rYŒ~wxYw#tJ$rYŒ»wxYw#tJ$rYŒKwxYwcc} wcc} wcc} wcc} w#tJ$rtd\|›d]|›d^«Y ŒçwxYw#tzt|t~f$r}"tidh|›di|"›dE«Yd}"~" Œd}"~"wwxYwcc} w#tJ$rtdt|)›du«YŒŠwxYwcc} w#t–$rÐt™d„„|8D««ržg}:|8D]•};d…|;vrp    |;jd…«\}<}=|:j›|=j/«gt|<«z«ŒI#tž$r"|:jC|;j/««YŒswxYw|:jC|;j/««Œ—|:}8|7rdd‚j]|8«›dƒn|8|5}9YŒwxYwcc} wcc} w)›a˜
    Reads each line in the input file in sequence and updates global vars.
 
    Effectively reads and collects information from the input file to the
    global variable groupcache, a dictionary containing info about each part
    of the fortran module.
 
    At the end of analyzeline, information is filtered into the correct dict
    keys, but parameter values and dimensions are not yet interpreted.
    r9rN)rûr rrhrú.rz=analyzeline: no group yet. Creating program group with name "rmÚprogramr/r0r1rqÚfromskyÚfrom)rûr rz block\s*dataú
block datazpython\s*moduleú python modulezabstract\s*interfaceúabstract interfacerhrrnÚ _BLOCK_DATA_r
)Ú    interfaceržr z2analyzeline: No name/args pattern found for line.
r%z<analyzeline: argument list is malformed (missing argument).
)r rr5r4rürúr r2©r¢r z&analyzeline: Creating module block %s
Úmoduler3zDanalyzeline: Creating additional interface block (groupcounter=%s).
r¢Úunknown_interfaceú:Úunknown_r­rðrÚprefixr©érÚvarnamesr©rúrüÚbindlangÚlangÚ    lang_namerÚvariable)rr
rrrrrrú::r
rez"All arguments will have attribute r¹r&zXanalyzeline: cannot handle multiple attributes without type specification. Ignoring %r.
©rrz&analyzeline: no name pattern found in z statement for ú . Skipping.
>ÚoperatorÚ
assignmentrÚ__user__z8analyzeline: missing __user__ module (could be nothing)
z(analyzeline: appending intent(callback) ú to z  arguments
zanalyzeline: intent(callback) z  is ignored
z=analyzeline: intent(callback) %s is already in argument list
)rrrrrrz(analyzeline: ignoring program arguments
rÿÚ implementedbyr rqzAanalyzeline: could not extract name,expr in parameter statement "ú" of "ú"
z1analyzeline: Overwriting the value of parameter "ú" ("z    ") with "r4r5r#ÚeÚcomplexz+1j*(z analyzeline: Failed to evaluate z . Ignoring: rÚnonez<analyzeline: Overwriting earlier "implicit none" statement.
z9\s*(?P<this>.*?)\s*(\(\s*(?P<after>[a-z-, ]+)\s*\)\s*|)\Zz@analyzeline: could not extract info of implicit statement part "zIanalyzeline: could not extract types pattern of implicit statement part "rorprrú-z2analyzeline: expected "<char>-<char>" instead of "z&" in range list of implicit statement
z*" in range list of implicit statement (2)
r ú'ú/r6r7zanalyzeline: implied-DO list "z" is not supported. Skipping.
r›zComment line in declaration "z\(.*?\)ú(/ú, z/)c3ó$K—|]}d|v–—Œ
y­w)rNr')Ú.0rós  r)ú    <genexpr>zanalyzeline.<locals>.<genexpr>µsèø€Ò5¨˜3 !œ8Ñ5ùs‚rz*analyzeline: changing init expression of "ú") to "rz//)ÚmaxsplitÚ_BLNK_rzR\A\s*(?P<name>\b\w+\b)\s*((,(\s*\bonly\b\s*:|(?P<notonly>))\s*(?P<list>.*))|)\s*\ZrvÚnotonlyÚonlyz7\A\s*(?P<local>\b\w+\b)\s*=\s*>\s*(?P<use>\b\w+\b)\s*\ZÚlocalz-analyzeline: Not local=>use pattern found in Úmapz0analyzeline: Could not crack the use statement.
)rrÚusercodez-analyzeline: No context for multiline block.
z+analyzeline: No code implemented for line.
)SrÓr&rrrr†r‡Úbasenamer!r(r2rr=r>rr¡r¾rÒrÀr‹r˜rwr'r¦ÚremoverrrrÎrÐrrrvrwr)ÚcopyÚdeepcopyr[rÆrÚcrackline_bindlangrrOÚcracktypespec0Ú
updatevarsÚfindrWrÛrXÚ namepatternr‰r!r‚roÚget_parametersÚdetermineexprtyperÚ real16patternÚfinditerrŽrýÚevalÚ SyntaxErrorÚ    NameErrorÚ    TypeErrorÚtypespattern4implicitÚ cracktypespecrÁÚordÚchrr‹Ú removeprefixÚ    enumerateÚ
setdefaultÚ getdimensionÚfindallÚ
IndexErrorÚanyÚextendr8rÖÚ
isinstancerÂÚappendmultiline)Hrór?r0r1ÚnewnamerqrŠrðr5r©Ú    bindclineÚxÚ
needmoduleÚ needinterfaceÚitr~ÚbindcdatÚtr4ÚselectorÚattrÚedeclÚ    last_namerãÚiÚplÚchr»raÚapÚinitexprr‡ÚttÚvrìÚimplr{rbÚ
kindselectÚ
charselectrrr™ÚbegcÚendcÚoÚdlÚilrfÚfcÚinpr³r0rëÚidxÚvtypeÚvdimÚmatchesÚnew_valÚ expanded_listrÒÚ
multiplierÚvalueÚ current_valÚclÚbnÚolÚ    commonkeyÚmmÚisonlyrïr#ÚgcsH                                                                        r)rYrYàsp€ð G‰GF‹O€EØ ˆ{ÒØÐݐtÐ#GÑGݤ°Ò!1Ü—'‘'×"Ñ"¤?Ó3×9Ñ9¸#Ó>¸qÑAˆÜØKÈGÈ9ÐTXÐ Yô    [àˆ Ü# aÑ'ˆ Ø"+Œ    ”,ÑØ#%Œ
”<Ñ Ø"$Œ    ”,ÑØ+-Œ
”<Ñ  Ñ(Ø+-Œ
”<Ñ  Ñ(Ø,5Œ
”<Ñ  Ñ)Ø+2Œ
”<Ñ  Ñ(Ø+4Œ
”<Ñ  Ñ(؈ Ø Ð+Ò+à— ‘ “ ˆÜ 8‰8O U¬B¯D©DÔ 1Ø ‰EÜ X‰XÐ(¨%´·±Ô 6Ø#‰EÜ X‰XÐ-¨u´b·d±dÔ ;Ø(ˆEØ FŠ?Ü3°A·G±G¸GÓ4DÓE‰NˆD%˜Ø6@À%Ð5HŒJ”|Ñ $ VÑ ,¨TÑ 2؈D؉Fä,CÀAÇGÁGÈGÓDTÓ,UÑ )ˆD$˜     Ø ˆ<ؘ Ò$Ø%‘àØÐMÑMÜÐMÔNà! 4¬Ð6ÐÙ ÜÜ'5°dÓ';×'AÑ'AÀ%Ó'HöJØ"#ð Ÿg™giòJóK‰DðˆDØ ‰:ؘ‘*Ø— ‘ ˜B”ð˜’*ä ØOô Qðˆ
؈ à Ð&Ñ &؈MØœZ¬ Ñ5Ñ5ØØœ:¤lÑ3°FÑ;Ñ;ØÜ¤ Ñ-ò Øf‘: Ó%Ùð ð”z¤,Ñ/° Ñ=Ñ=ØØ)°jÑAÀ$ÑGˆEÝ œ\¨RÒ/´LÀAÒ4EÜ'¨!Ñ+ˆL؈JØÐ?Ñ?Ø ! ä# aÑ'ˆ Ø#%Œ
”<Ñ Ø"$Œ    ”,Ñ٠ܘŠ{ÜÐAÜœ]Ó+ñ,Ø-.ô0à&.ŒI”lÑ #Ø0?ŒJ”|Ñ $ WÑ -Ü/<ŒJ”|Ñ $ VÑ ,Ø/1ŒJ”|Ñ $ VÑ ,Ø/1ŒJ”|Ñ $ VÑ ,Ø46ŒJ”|Ñ $ [Ñ 1Ø57ŒJ”|Ñ $ \Ñ 2Ø/1ŒJ”|Ñ $ VÑ ,Ü'¨!Ñ+ˆLØ')ŒJ”|Ñ $Ø&(ŒI”lÑ #٠ܘŠ{ÜÐ_Ü ñ"Ø#$ô&à&1ŒI”lÑ #Ø0;ŒJ”|Ñ $ WÑ -Ø/BŒJ”|Ñ $ VÑ ,äœ<¨!Ñ+Ñ,¨VÓ4´jÄÐPQÑAQÑ6RÐSYÒ6Zð0\ŒJ”|Ñ $ VÑ ,à/1ŒJ”|Ñ $ VÑ ,Ø46ŒJ”|Ñ $ [Ñ 1Ø57ŒJ”|Ñ $ \Ñ 2Ø/1ŒJ”|Ñ $ VÑ ,Ü'¨!Ñ+ˆLØ')ŒJ”|Ñ $Ø&(ŒI”lÑ #Ø"'Œ    ”,ÑØ,1Œ
”<Ñ  Ñ)ÙØ § ¡ ¨c°3Ó 7Ñ7ˆDØ-.¯W©W°XÓ->Œ
”<Ñ  Ñ*Ü+5°dÓ+;Œ
”<Ñ  Ñ(Ø-3Œ
”<Ñ  Ñ*Ü ˜1Ò Ü/>ŒJ”|Ñ $ VÒ ,Ý œ|¨qÒ0äœ<¨!Ñ+Ñ,¨VÓ4µoð0GŒJ”|Ñ $ VÒ ,ôœ<¨!Ñ+Ñ,¨VÓ4´jÄÐPQÑAQÑ6RÐSYÒ6Zð0\ŒJ”|Ñ $ VÑ ,ä”j¤Ñ.×3Ñ3Ó5Ó6ò    0ˆAÜœlÑ+¨AÓ.Üœ|Ñ,¨QÑ/ð    0ð,0Œ
”<Ñ  Ñ(Ø+-Œ
”<Ñ  Ñ(Ø02Œ
”<Ñ  Ñ-Ø13Œ
”<Ñ  Ñ.Ø+-Œ
”<Ñ  Ñ(Ø,.Œ
”<Ñ  Ñ)à FŠ?Ø35ŒJ”|Ñ $ ZÑ 0à Ð&Ñ &Øœ:¤l°QÑ&6Ñ7¸ ÑDÑDÜœ<¨!Ñ+Ñ,¨[Ñ9×@Ñ@ÀÔFÜ/3¯}©}Üœ<¨!Ñ+Ñ,¨VÑ4ó06ŒJ”|Ñ $ VÑ ,ð Üœ|Ñ,¨VÑ4°TÑ:Üœ|Ñ,¨VÑ4°TÑ:¸:ÑF×LÑLÈZÓXðZð Ð.Ò .áÜŸ9™9Ô%7¸ÓCÙØ<@À"¸:”Jœ|Ñ,¨ZÑ8ØIQÏÉÐX^ÓI_”Jœ|Ñ,¨ZÑ8¸Ñ>¸vÑFØ—~‘~ kÔ2ØMUÏ^É^Ð\gÓMhœ
¤<Ñ0°Ñ<¸TÑBÀ6ÑJð Ü9CÜœ|Ñ,¨VÑ4°TÑ:¼JÄ|ÐVWÑGWÑ<XÐY_Ñ<`ÐacÑ<dó:f”
œ<Ñ(¨Ñ0°Ñ6ðyÒ Ù˜f¬
´<Ñ(@ÀÑ(HÑHØ 6š>ÜAKÜ&¤|Ñ4°VÑ<¸TÑBÄJÌ|ÑD\Ð]cÑDdÐekÑDlóBnœ
¤<Ñ0°Ñ8¸Ñ>ð Üœ<¨!Ñ+Ñ,¨\Ñ:×AÑAÀ$ÔGð JÒ Ü˜Q‘×%Ñ% a§g¡g¨hÓ&7¸#Ñ&=ÀÑ&DÓEˆAÙÜ2@Ø—G‘G˜F“O Q§W¡W¨WÓ%5ó37Ñ/˜( D¨%ä˜8 X¨t°UÔ;à Ð&Ñ &Ü ”l QÑ&Ñ '× .Ñ .¬z¼,Ñ/GÔ HÜ6?Ä Ñ6MŒI”l QÑ&Ñ '¨Ñ +¨FÑ 3Üœ,Ð'Ü'¨!Ñ+ˆLÜ ”l QÑ&Ñ '× .Ñ .¬z¼,Ñ/GÔ HÜ6?Ä Ñ6MŒI”l QÑ&Ñ '¨Ñ +¨FÑ 3Üœ,Ð'Ü'¨!Ñ+‰Lð 'ð
ŠÜ 7¸¿¹ÀÓ8HÓ IшˆdF˜AØ Ð ÙÜ Ü+9¸$Ó+?×+EÑ+EÀeÓ+Lö"NØ&'ð#$§'¡'¥)ò"NóO‘ðØ>Ð /¤4¨£<Ó />Ø6:ŒJ”|Ñ $ WÑ -¨dÑ 3Ø '¨¬|Ð<Ñ ð ð
ŠÜ*8Ø 1—7‘7˜7Ó#ó+%Ñ'ˆ(˜D %ä˜x¨°4¸Ó?ˆ    Ø Ð  Ø *¨I´|ÐDÑ ð !à     ÐnÒ    nÜœ<Ñ(¨Ñ0ˆØ W‰WWÓ × #Ñ #Ó %ˆØ G‰GD‹MˆØ ˆqŠ5T˜XÒ%ܘrÓ"×'Ñ'¨Ó.°Ñ2ˆAؐFQ˜‘U˜dÑ" R¨¨A©¨ ZÑ/ˆBØ—‘˜“ ˆAؐ!"ˆv˜Š~ &¬J´|Ñ,DÑ"DÝØŸ™ œ¨"¨R¨aª&ð2ô3à˜#Ÿ(™(¤:¬lÑ#;¸FÑ#CÓDÑDØ ˆqŠ5؈A؉BàBQ—‘“ˆBؐA˜‘EFˆBÜ ˜BÓ × %Ñ % eÓ ,ˆÜ ˆr‹7QŠ;ؐA‘ˆBÜ ÐoØ—‘˜˜A˜B˜Ó ñ"ô #àˆ    ä%3°BÓ%7×%=Ñ%=¸eÓ%DÖE !—'‘'•)ÒEó4    ˆAÜ×"Ñ" 1Ó%ˆBÙØÐ0Ñ0Ø‘Aä˜!Ÿ+™+›-Ô(ÝÚœd 1gð'ô(àä˜rŸx™x¨Ó/Ó0ØÐ,Ñ,°Ð6PÑ1PؐR—X‘X˜gÓ&Ñ&Ø˜‰~ؐa‘ؐ{Ò"ؘBŸH™H WÓ-Ñ-ØxÒØ—W‘W˜V“_ rÑ)Ü)×/Ñ/°Ô3ؤ
¬<Ñ 8¸Ñ @Ñ@Ü'¨!Ò+Ø)´¼LÈ1Ñ<LÑ1MÈfÑ1UÑUÜ 'Ø$_ô!að !¤J¬|Ñ$<¸VÑ$DÒDÝ 'Ú@AÄ:ÌlÑC[Ð\bÓCcð)eô!fä *¬<Ñ 8¸Ñ @× GÑ GÈÕ Jä#Ø"@ÀÀÀ=РQõSô ð!6Ø9:ñ!<ô=àÐ]Ñ]ؘؐU 1™XÑ%ؐa‘˜Ñ$×+Ñ+¨BÕ/à(* ta‘˜Ñ$ؐzÒ!ÜœlÑ+¨GÑ4¸    ÒAÜÐGÔHÙØœJ¤|Ñ4°VÑ<Ñ<ÙØ¤j´Ñ&>Ñ>Ø<>”Jœ|Ñ,¨[Ñ9Üœ<Ñ(¨Ñ5×<Ñ<¸QÔ?ØŠIði4    ðj,1Œ
”<Ñ  Ñ(Ø Ð  Ø *¨I´|ÐDÑ ð !à     Ð"Ò    "à !§¡¨Ó 0× 6Ñ 6°sÓ ;Ö <˜1ˆQW‰WYÒ <ô    ”<Ñ  Ò1à     Ó    Üœ<Ñ(¨Ñ0ˆØ W‰WWÓ × #Ñ #Ó % a¨Ð +ˆØˆ    Ü Ó#×)Ñ)¨%Ó0ó$    ˆAð Ø23·'±'¸#³,Ö?¨Q˜qŸw™wyÒ?‘ 8ô
$ EÓ*ˆFܘ1“ ˆAؘ‰~ؐa‘ؐe˜A‘h‰¨¨a©°© ¸Ò(AÝڐu˜Q‘x “}¢hð0ô1ä! (¨FÓ3ˆAÙØ—5‘5˜Ó$¨Ò.ܘh›BÜ*×3Ñ3°HÓ=òS˜Ü04Ø$ Q§W¡W£Y¨q¯u©u«wÐ7×=Ñ=Ó?×GÑGÈÈSÓQó1S˜˜1Ÿ7™7›9 Q§U¡U£WÑ-ðSð "Ÿw™w r›{‘HØ—U‘U˜:Ó&¨)Ò3Ø'¨¨˜|×1Ñ1Ó3×;Ñ;¸CÀÓEß™  WÓ-ðð ܘ 2 vÓ.ô
! ›GˆE!‰HS‰MؘU 1™XÑ%ؐa‘˜Ñ$×+Ñ+¨KÕ8à(3 }a‘˜Ñ$ØŠIðI$    ðJ,1Œ
”<Ñ  Ñ(Ø Ð  Ø *¨I´|ÐDÑ ð !à     Ó    Ø 7‰77Ó × !Ñ !Ó #× )Ñ )Ó +¨vÒ 5Ø37ŒJ”|Ñ $ ZÒ 0Ø W‰WWÕ ÜœlÑ+×/Ñ/°
¸BÓ?ˆD؈|ÜØSôUàÜ# A§G¡G¨GÓ$4Ó5×;Ñ;¸EÓBó' ,ØÜ—X‘XØPÐRSÔUW×UYÑUYó[áÜØZÐ[\ÐZ]Ð]aÐbôdàÜ*×0Ñ0°·±¸&Ó1AÓBÙÜØcÐdeÐcfÐfjÐkômàÜ2@Ø—H‘H˜VÓ$ b§h¡h¨wÓ&7ó39Ñ/˜( D¨%ä3@ؘhó4(Ñ0
˜J¨à#+ZÑ Ø'1^Ñ$Ø'1^Ñ$Ø#+ZѠܘdŸi™i›kÓ*ò$AØ ›7Ø  ™Gð$ô(¨¯©°Ó(9Ó:×@Ñ@ÀÓGò,Aؘa‘xð%Ø=>¿W¹WÀS»\Ö)J¸¨!¯'©'­)Ò)J™J˜D¡$ð '(§g¡g£iÐ/˜˜tܘt›9¬¨D«    Ô6°QÔ6ÜØPÐQRÐPSÐS~ÐôAà Ü"¤3 t£9¬c°$«i¸!©mÓ<ò,˜Ø'+˜œS ›Vš ñ,ò,ð1' ,ðP48ŒJ”|Ñ $ ZÒ 0ð]ð^
‹Ø ˆØ ˆØ ˆØ ˆØ ˆØˆØ—‘˜Ó!ò    ˆAÙØ˜’8ؘBؘ’8¡Ø˜A™AØØCŠxؘA‘g‘ؐc’ؘA‘gØAŠvؘ!‘V‘ؐa’ؘ!‘V‘ؐa“Ø—X‘X“ZØ—=‘= Ô%ؘA˜B˜Ÿ™›BØ—    ‘    ˜2˜r˜(Ô#ؐؐؑð-    ð. Š6Ø—‘“ˆB؏}‰}˜SÔ!ؘ˜V—\‘\“^Ø I‰Ir˜2hÔ Üœ,Ñ'×+Ñ+¨F°BÓ7ˆØˆ    Øó0    ˆAؘ1™Ÿ™›×2Ñ2°3Ó7¸¸1¹¿¹»ˆJˆAˆa‰D!A‘$ؐ‰t‰˜sÔ#ÜÐ8¸¸1¹¸Ð>]Ð^Ô_ØÜ#¤IÄ.ÐQRÐSTÑQUÓBV×B\ÑB\Ð]bÓBcÖ.d¸Q¨q¯w©w­yÒ.dÓ$eÓfò+ ‘QØ—<‘< Ô$ÜÐ<¸Q¸CÐ?^Ð_Ô`ðؘ!˜A™$‘;ô Ð;¸A¸a¹D¸6ÐA`ÐaÔbØØ—‘  2Ô&ؘQ™Ÿ ™  JÓ/Ü# D¨¡GÓ,Ø:?À9Ò:Lœ"Ÿ*™* Z°°1±Ô6ÐRSÐTUÑRV×R\ÑR\Ð]`ÓRaðTÙ=A  4§9¡9¨WÓ#5Ð"6°bÑ9ÀwÈsÁ|Gð&# 1™gŸk™k¨#Ó. Ù K°7Ò$:ÜÐHÈÈÈ4ÐP[È}Ð\cÐdkÐclÐlpÐqÔrØ&Q‘˜‘ Ø’    òW+ ð 0    ðb,0Œ
”<Ñ  Ñ(Ù Ø *¨I´|ÐDÑ ð à     Ó    Øw‰wwÓ×%Ñ%Ó'ˆØA‰w˜#Š~ؘ$‘;ˆDà ˆÜ—h‘h˜s D°1Ô5‰ ˆˆBØ X‰X‹ZˆÙ؈BØ
    ‰    2r(ÔØˆ    Ø ”z¤,Ñ/Ñ /Ü"¤<Ñ0°Ñ:ˆIØò    .ˆAؐ‰t˜9Ñ$Ø"$    ˜!˜A™$‘Ü)7¸¸!¹Ó)=×)CÑ)CÀEÓ)JÖK Aa—g‘g•iÒKò .Úؘa ™d‘O×*Ñ*¨1Õ-ñ .ð    .ð .7Œ
”<Ñ  Ñ*Ø$ b¬,Ð7ÑØ     ‹Ü X‰XØ aÐcd×cjÑcjÐkrÓcsÔuw×uyÑuyó{ˆâ Ø—‘“ˆBØœJ¤|Ñ4Ñ4Ø24”
œ<Ñ(¨Ñ/Ø—8‘8˜FÓ#ˆDØ46ŒJ”|Ñ $ UÑ +¨DÑ 1؈FؘŠ|  6¡
Ñ 6Ø ‘? r¨)¡}Ð'<ؐFØ@F”
œ<Ñ(¨Ñ/°Ñ5°fÑ=Ø)+¨F©×)9Ñ)9¸#Ó)>Ö? Aa—g‘g•iÐ?Ð?ؐØò FAؘa‘xÜŸX™XØVÐXYÔ[]×[_Ñ[_óa˜áØ<>¿H¹HØ %ó='ß',¡u£wð˜rŸx™x¨Ó0×6Ñ6Ó8Ò9ô$Ø"OÔPTÐUVÓPWÈyÐXZР[õ]ð!"˜˜1™ØCE”Jœ|Ñ,¨UÑ3°DÑ9¸%Ò@ñ Fô !—+‘+“-Ô  Ü ÐGÕ Hð+!7ˆ|ð,
Ð%Ñ    %Ø ¤Z´ Ñ%=Ñ =Ø;=ŒJ”|Ñ $Ð%7Ñ 8Ü ”|Ñ $Ð%7Ñ 8ˆØ 7‰76‹?˜jÒ (¨Z¸1©_ܘ!˜J™-¬Ô-Ø!" :¡ *‘ Ø ˆj‰M×  Ñ   §¡¨Ó!1Õ 2à!"§¡¨Ó!1ˆAˆag‰gf‹oÒ Ø     Ò    Ü Ð #ÝÜÐHÔIØ Ü ˆÜœ
 2™Ü(¨¨!Ð,ØŸ™ ›õ    )ô
1ŠÜ ˆak‰k‹mÔÜÐ>Õ?ð
ùòoJøôNò Úð ûôò Úð ûôò Úð üò."NùòLFùòt =ùò@øÜò ÜØWÐXYÐWZÐZ`ÐacÐ`dÐdhÐiôkâð ûô0 ¤¬IÐ6ò ÝÚ#¢Sð*ô+åûð üòb*KøÜ(ò%Ü#Ø"TÐUVÐTWÐW~РôAâ$ð%üòn/eøô*"òTô
Ñ5¨WÔ5Ô5Ø(*˜ Ø%,òD˜EØ" e™|ð!HØ8=¿ ¹ ÀCÓ8HÑ$5 J°Ø$1×$8Ñ$8¸%¿+¹+»-¸Ì3ÈzË?Ñ9ZÕ$[øÜ'1ò!HØ$1×$8Ñ$8¸¿¹»Ö$Gð!Húð!.× 4Ñ 4°U·[±[³]Õ CðDð#0˜Ù=A  4§9¡9¨WÓ#5Ð"6°bÑ9ÀwÈsÁ|“Gð#TüòVLùò&@sAÈ)Aj/Ü 7Aj4ßAAká3"AkèAk$ð!Ak)ú2Ak.ü4Ak8ýAk3ýAk8ÁB8 AlÁK,AmÁK?AmÁLAmÁU#Am2ÁX-Am7Á]1AqÁbAqÁj4    AkÁkAkÁk    AkÁkAkÁk    Ak!Ák Ak!Ák3Ak8Ák8AlÁlAlÁlAm Ál.AmÁmAm ÁmAmÁmAm/Ám.Am/Ám7&AqÁnAAoÁoAqÁo(Ap
ÁpAqÁp    Ap
Áp
AAqÁqAqcóZ—d|vri|d<|d}||vrg||<||j|«y)NÚf2pymultilines©r))rÓÚ context_nameÚmlr#s    r)rìrìsC€Ø˜uÑ$Ø"$ˆÐÑØ ÐÑ€Aؘ1ÑØˆˆ,‰Ø€lO×ј2Õr(cóF—d}d}tjd|tj«rd}nFtjd|tj«rd}n|j«j    «}t
jt |««}|s td«y|j«}t|j««D]}t||«||<Œ|dvr
|d}|d}|jd    «}|d
k\r|d|j«}||d zd}||||fS) Nzdouble\s*complexúdouble complexzdouble\s*precisionzdouble precisionz>cracktypespec0: no kind/char_selector pattern found for line.
)r¼r7Úlogicalr5Ú    characterrhr9rr°rr2) r¾rÒrÀr¦r¡Ú selectpatternrWr2r!rvrwrlrÕ)r4rãrõrörar#r~rùs        r)rÓrÓ!s€Ø€HØ €DÜ    ‡xxÐ# X¬r¯t©tÔ4Ø#‰Ü     ‰Ð'¨´2·4±4Ô    8Ø%‰à—>‘>Ó#×)Ñ)Ó+ˆÜ    ×    Ñ    œ^¨BÓ/Ó    0€BÙ ÜØ Mô    OàØ
 ‰ ‹€AÜ !—&‘&“(‹^ò&ˆÜ  !¡Ó%ˆˆ!Šð&àÐQÑQؐV‘9ˆØ ˆw‰ZˆØ
‰‹ €A؈A‚vؐ"1ˆv|‰|‹~ˆØ A‘ˆZˆØ X˜t RÐ 'Ð'r(z)\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*\Zcóä—|j«}t|«dkr|S|d}tdt|«dz
«D]'}||dk(r||dzdvs
||dz
dvrŒ |||z}Œ)||dz}|S)Nrrr­z ()[]{}=+-/* r )r¦rXrÁ)ÚexprÚexpr2rùs   r)Ú removespacesr'Js”€Ø :‰:‹<€DÜ
ˆ4ƒyA‚~؈ Ø ‰G€EÜ 1”c˜$“i !‘mÓ $ò ˆØ ‰GsŠNؐ1q‘5‰k˜^Ñ+ؐa˜!‘e‘ Ñ.Ø Ø˜˜Q™‘‰ð  ð D˜‘HÑ €EØ €Lr(có—d}d}d}d}|D]8}|dk(r |dvr||z }|}Œ|s|dvr|}||k(r| }n |dk(r|r|dz }Œ2||z }|}Œ:|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
 
    r
FNú\)r)r¿ú")r¿r*r­ú@_@r')r0ÚfragmentÚinsideÚ current_quoteÚescapedr³s      r)Úmarkinnerspacesr0Ys€ð €HØ €FØ€MØ€GØ ò ˆØ dŠ?˜qÐ$5Ñ5Ø ˜‰MˆH؈GØ Ù˜!˜{Ñ*؈MØ  Ò ØZ‰FØ #ŠX™&Ø ˜Ñ ˆHØ ØA‰ ˆØ‰ð ð €Or(có€—d}t||«\}}}|r¬t|«jd«Dcgc]}|j«‘Œ}}g}    t    j
d«}
|D]Y} | sŒ|
j | «} | r0| jd«j«} | | t| «dz} |    j| «Œ[|    }t|«jd«Dcgc]}|j«‘Œ}}g}|D]u}ttt|««d¬«jd«Dcgc]}|j«‘Œc}D]&}|sŒ|j|jdd««Œ(Œw|D]·}tj |«} | std    t!|«›d
«Œ4t#| jd ««}i}|t$t&d vræt$t&d |j)«}d |v}|r||d <n"|r ||d k(std|›d|d ›d|›d«d|vrt)j(|«|d<nu|rst+|j-««D]W}||dvr0|||d|k(s"td|›d|›d|d|›d||›d    «Œ:t)j(||«|d|<ŒYd|vr|r|r||d<nˆt/d|›d|›d«nu|rst+|j-««D]W}||dvr0|||d|k(s"td|›d|›d|d|›d||›d    «Œ:t)j(||«|d|<ŒYd|vr||d<n"|r |d|k(std|›d|d›d|›d«d|vrt)j(|«|d<n‹|r‰|D]} | |dvsŒ |dj| «Œ net)j(|«|d <t)j(|«|d<t)j(|«|d<||d<t)j(|«|d<d|j1d«xsgvrP|t$t&dvr>dt$t&vrgt$t&d<t$t&dj|«| jd «r't2j t5| jd «««}|r×|j7«}d!D]}||d"z€Œ ||d"z||<||d"z=Œt+|j-««D]}||t9||«||<Œ||=Œd#|vryd$|vru|d#d%k(r |d$|d#<|d$=na|d&k(r*d|vs|dsi|d<d#|dvr|dd#=|d#|dd'<|d#=n2|d$d(z|d#z|d$<|d#=t/d)|›d|›d*|›d|›d+|d$›d, «d#|vrO|d-vrd|vs|dsi|d<|d#|dd'<|d#=n.|d&k(r)d|vs|dsi|d<d#|dvr|dd#=|d#|dd'<|d#=d.|vr3d/|vr'|d/|d.k(std0|›d|d/›d|d.›d«n|d.|d/<d$|vrƒd1|d$›d2}d|vs|ds|g|d<nj|dj|«|dD]-}|dd3d4k(sŒ ||k7sŒ|dd5=t/d|›d6|›d7|›d«n"n td8|| jd «zz«t+|j-««D] }||rŒ    ||=Œ |t$t&d |<d9t$t&vrt$t&d9j|«|}Œº|Scc}wcc}wcc}w):zÛ
    Returns last_name, the variable name without special chars, parenthesis
        or dimension specifiers.
 
    Alters groupcache to add the name, typespec, attrspec (and possibly value)
    of current variable.
    Nr%z(?P<start>[a-zA-Z]+)rŽr­©rjz@ @r+z-updatevars: no name pattern found for entity=r²rqr0r4z+updatevars: attempt to change the type of "rºrÆz ". Ignoring.
roz0updatevars: attempt to change the kindselector "r¸rpz updatevars:z*: attempt to change empty charselector to r¼z0updatevars: attempt to change the charselector "rrz/updatevars: attempt to change the typename of "rnrr5r3r)rXÚarrayÚinitÚ2rXr3r
r"rr&z updatevars: "z" is mapped to "r6z)"
©r¼r7r!r5r4rqz6updatevars: attempt to change the init expression of "ú
dimension(r7é    rr z: attempt to change r¶z?updatevars: could not crack entity declaration "%s". Ignoring.
rª)ràr'r(r¦r¾r¿rÒrÓr¡rXr)r'r0rÐrÖr2rÎrrr>rrÐrvrwrorÚlenarraypatternrWr!rl)r4rõrnÚ
entitydeclrørrrrrïrër³r+róÚsÚelÚel1r»Úe1Úenamer÷Únot_has_typespecr~raÚd1ÚlkÚdmÚdm1s                           r)rÔrÔ~s=€ð€IÜ'4°X¸xÓ'HÑ$€J
˜HáÜ'5°hÓ'?×'EÑ'EÀeÓ'LÖM !A—G‘G•IÐMˆÐMØ ˆÜ J‰JÐ.Ó /ˆØò    ˆAÙØØ—‘˜“
ˆAÙØ—G‘G˜GÓ$×*Ñ*Ó,Ø˜œ#˜a›&˜'˜
‘NØ H‰HQKð    ðˆÜ+¨JÓ7×=Ñ=¸eÓDÖ    E˜ˆ!'‰')Р   E€BР   EØ
€CØ ò3ˆÜ&4´\Ä/ÐRSÓBTÓ5UÐ]`Ô&a×&gÑ&gÐhmÓ&nÖo 1—7‘7•9Òoò    3ˆBÚØ—
‘
˜2Ÿ:™: e¨SÓ1Õ2ñ    3ð3ðóEˆÜ × Ñ ˜aÓ  ˆÙÜ Ø?ÄÀQøyÈ ÐVô Xà ܘ1Ÿ7™7 6›?Ó+ˆØˆØ ”Jœ|Ñ,¨VÑ4Ò 4Üœ|Ñ,¨VÑ4°UÑ;×@Ñ@ÓBˆEØ)°Ð6Ð ÙØ$,jÒ!Ù 8¨u°ZÑ/@Ò#@ÝÚ˜5 Ó,ªhð8ô9à UÑ*Ü(,¯    ©    °*Ó(=nÒ%ÙܘjŸo™oÓ/Ó0òLAؘE .Ñ1Ñ1¸:Àa¹=ÈEÐR`ÑLaÐbcÑLdÒ;dÝÚšu e¨NÑ&;¸AÓ&>À
È1à ð!OõPô48·9±9¸Zȹ]Ó3K˜˜nÑ-¨aÒ0ð Lð  UÑ*©zÙ#Ø,6E˜.Ò)åÚ$¢jð2õ3áܘjŸo™oÓ/Ó0òLAؘE .Ñ1Ñ1¸:Àa¹=ÈEÐR`ÑLaÐbcÑLdÒ;dÝÚšu e¨NÑ&;¸AÓ&>À
È1à ð!OõPô48·9±9¸Zȹ]Ó3K˜˜nÑ-¨aÒ0ð Lð  Ñ&Ø$,jÒ!Ù 5¨Ñ#4¸Ò#@ÝÚ˜5 Ó,ªhð8ô9à Ñ&Ü$(§I¡I¨hÓ$7jÒ!ÙØ!ò4AØ  jÑ 1Ò1ؘjÑ)×0Ñ0°Õ3ñ4ô!%§    ¡    ¨(Ó 3ˆE*Ñ Ü$(§I¡I¨jÓ$9ˆE.Ñ !Ü$(§I¡I¨jÓ$9ˆE.Ñ !Ø (ˆE*Ñ Ü $§    ¡    ¨(Ó 3ˆE*Ñ Ø ˜%Ÿ)™) JÓ/Ò5°2Ñ 6¸1Ä
Ì<Ñ@XÐY_Ñ@`Ñ;`ؤ*¬\Ñ":Ñ:Ø8:”
œ<Ñ(¨Ñ5Ü ”|Ñ $ [Ñ 1× 8Ñ 8¸Ô ;Ø 7‰77Õ Ü ×&Ñ&¤~°a·g±g¸gÓ6FÓ'GÓHˆBÚØ—\‘\“^Ø2ò)Bؘ"˜s™(‘|Ñ/Ø!# B¨¡H¡˜˜2™Ø˜r C™x™Lð)ô˜bŸg™g›i›ò"Aؘ!‘uÐ(Ü 0°°A±Ó 7˜˜1šà˜q™Eð    "ð ˜B‘; 7¨b¡=ؘ%‘y B’Ø$& w¡K˜˜5™    Ø˜w™KØ! [Ò0Ø*°%Ñ7ÀÀ~ÒAVØ46˜E .Ñ1Ø  E¨.Ñ$9Ñ9Ø % nÑ 5°eР<Ø57¸±Y˜˜nÑ-¨cÑ2ؘu™Ià&(¨¡k°CÑ&7¸"¸U¹)Ñ&C˜˜7™ ؘu˜IÝÚ$¢aª²5¸"¸W»+ð!GôHð˜B‘;ØÐ#LÑLØ*°%Ñ7ÀÀ~ÒAVØ46˜E .Ñ1Ø57¸±Y˜˜nÑ-¨cÑ2ؘu™IØ! [Ò0Ø*°%Ñ7ÀÀ~ÒAVØ46˜E .Ñ1Ø  E¨.Ñ$9Ñ9Ø % nÑ 5°eР<Ø57¸±Y˜˜nÑ-¨cÑ2ؘu˜Ià˜R‘<ؘe‘|¨U°3©Z¸2¸f¹:Ò-EÝÚ! 5¨£:¨r°&«zð!;õ<ð&(¨¡Z˜˜c™
à˜b‘=Ø% b¨¡k ]°!Ð4BØ!¨Ñ.°u¸ZÒ7HØ-/¨D˜˜jÒ)à˜jÑ)×0Ñ0°Ô4Ø#(¨Ñ#4ò&˜CØ" 2 A˜w¨+Ó5¸#À»)Ø$)¨*Ñ$5°bÐ$9Ý 'Ú+0²#²rð);ô!<á %ñ &ôÐZؘAŸG™G GÓ,Ñ,ñ.ô/äe—j‘j“lÓ#ò    ˆAؘ“8ؘ!‘Hð    ð38Œ
”<Ñ  Ñ(¨Ñ/Ø œ¤LÑ1Ñ 1Ü ”|Ñ $ ZÑ 0× 7Ñ 7¸Ô >ØŠ    ðKEðL ÐùòqNùò
Fùòps±\1Ã\6Ä-\;cóz—d}d}d}|r.|dvr£tj|«}|stdt|«›d«y|j    «}|d|d<|d=t |j ««D] }||rŒ    ||=Œ t |j««D]\}}t|«||<Œn‡|dk(rtj|«}|stdt|«›d«y|j    «}|d|d<|d=|d    rftjt|d    ««}|j    «}d
D]#}||d zr ||d z||<||||<||d z=Œ%|d |d |d <|d    =t |j ««D] }||rŒ    ||=Œ t |j««D]\}}t|«||<Œnq|d k(rTtjd|tj«}|r|jd«}n3tdt||z«z«ntdt|«›d«|||fS)Nr6z1cracktypespec: no kindselector pattern found for r¹Úkind2rr"z1cracktypespec: no charselector pattern found for ÚcharlenÚlenkind)rXÚkindr5Úf2py_lenrhz\s*\(\s*(?P<name>\w+)\s*\)rqz'cracktypespec: no typename found in %s
z$cracktypespec: no selector used for )rorÒr2rÎr!rvrwÚitemsrrrpÚlenkindpatternr'r¾rÀrÓ)    r4rõrrrrr~rùrHrBs             r)ràrà's‘€Ø€JØ€JØ€HÚØ Ð@Ñ @Ü%×+Ñ+¨HÓ5ˆJÙÜØGÌÈXËÐGWÐWYÐZô\àØ#×-Ñ-Ó/ˆJØ(¨Ñ1ˆJs‰Oؘ7Ð#ܘ*Ÿ/™/Ó+Ó,ò &Ø! !“}Ø" 1™ ð &ô˜Z×-Ñ-Ó/Ó0ò .‘1Ü *¨1£ 
˜1’ ò .à ˜Ó $Ü%×+Ñ+¨HÓ5ˆJÙÜØGÌÈXËÐGWÐWYÐZô\àØ#×-Ñ-Ó/ˆJØ(¨Ñ3ˆJs‰Oؘ9Ð%ؘ)Ò$Ü(×.Ñ.Ü" :¨iÑ#8Ó9ó;à!×+Ñ+Ó-Ø)ò*Bؘr C™xÒ(Ø&-¨b°3©hÑ&7˜ ™ Ø%,¨R¡[J˜r‘NØ  S¡Ñ)ð    *ð
˜:Ñ&Ð2à-4°ZÑ-@J˜zÑ*ؘ9Ð%ܘ*Ÿ/™/Ó+Ó,ò &Ø! !“}Ø" 1™ ð &ô˜Z×-Ñ-Ó/Ó0ò .‘1Ü *¨1£ 
˜1’ ñ .à ˜Ò Ü—x‘xР=¸xÌÏÉÓNˆHÙØ#Ÿ>™>¨&Ó1‘äÐBܘh¨Ñ1Ó2ñ4õ5ô Ð:¼4À»>Ð:JÈ"ÐMÔ NØ z 8Ð +Ð+r(có¤—|si}|s|Sd|vr|g|d<|S|r|dj|«||dvr|S|dk(rd|dvr|dj|«|S|dk(rd|dvr|dj|«|S|dk(rd|dvr|dj|«|S|dk(rd|dvr|dj|«|S|dj|«|S)NrnrJÚ    automaticrrr)r{rör}s   r)rxrxbs-€Ù ؈٠؈ Ø˜ÑØ ˜6ˆˆZÑØˆ Ù Ø ˆZÑ×Ñ Ô%Ø ˆtJÑÑØˆ Ø ˆxÒ˜K¨t°JÑ/?Ñ?Ø ˆZÑ×Ñ Ô%ð €Kð
Ò     °°jÑ1AÑ!AØ ˆZÑ×Ñ Ô%ð €Kð
Ò    Ø ˜D Ñ,Ñ ,Ø Ñ × #Ñ # DÔ )ð €Kð
Ò    Ø ˜4 
Ñ+Ñ +Ø Ñ × #Ñ # DÔ )ð €Kð     ˆZÑ×Ñ Ô%Ø €Kr(có’—|si}|s|Sd|vr||d<|St|j««D]}|s||dvsŒ |||d|<Œ|S)Nro©rvrw©r{Úselr}r~s    r)ryry}sl€Ù ؈٠؈ ؘTÑ!Ø"ˆˆ^ÑØˆ Ü #—(‘(“*Ó ò-ˆÙ A˜T .Ñ1Ò1Ø&)¨!¡fˆDÑ   Ò #ð-ð €Kr(có’—|si}|s|Sd|vr||d<|St|j««D]}|s||dvsŒ |||d|<Œ|S)NrprPrQs    r)rzrz‹sl€Ù ؈٠؈ ؘTÑ!Ø"ˆˆ^ÑØˆ ä #—(‘(“*Ó ò-ˆÙ A˜T .Ñ1Ò1Ø&)¨!¡fˆDÑ   Ò #ð-ð €Kr(có—d|vr|dS|S)Nrqr')r1Úunknowns  r)Ú getblocknamerVšs€Ø ØV‰}ÐØ €Nr(cóB—    d|d›d|d›day#t$rYywxYw)NzIn: rr¦rqr¹)r rÆ)r1s r)Ú setmesstextrX¢s6€ð Ø! %¨¡- °°%¸±-°ÀÐCÑøÜ ò Ù ð ús ‚’    có^—i}d|vrt|d«}d|vr|j|d«|S)NÚ parent_blockr)Ú get_usedictÚupdate)r1Úusedicts  r)r[r[«s:€Ø€GؘÑܘe NÑ3Ó4ˆØ ~؏‰u˜U‘|Ô$Ø €Nr(c
óΗ|€i}t|«}|s|St|j««D]µ\}}|j«}|tvr"t d|›d|j d«›d«Œ@t|}t|«}|sŒW|rtd|›d«t|j««D]2\}}||vr$t dt|«›dt|«›d«|||<Œ4Œ·|S)    Nzget_useparameters: no module z info used by rqr¹zget_useparameters: mapping for z  not impl.
z(get_useparameters: overriding parameter z with value from module )
r[rvrKr¡rr2rr×rorÎ)    r1Ú    param_mapr]ÚusenameÚmappingÚmvarsr‡r~rÿs             r)Úget_useparametersrc´só€ðÐØˆ    Ü˜%Ó €GÙ ØÐÜ  §¡£Ó1òшØ—-‘-“/ˆØ œ-Ñ 'Ý Ú˜eŸi™i¨Õ/ð1ô 2à ܘgÑ&ˆÜ Ó&ˆÙØ á Ü Ð5°g°Y¸lÐKÔ LܘŸ™›Ó(ò    ‰DˆAˆqؐI‰~ÝÜ59¸!µW¼dÀ7½mðMôNàˆIaŠLñ        ðð& Ðr(cóΗts|St|t«r |Dcgc]}t||dz|¬«‘Œ}}|St    |«t |›d|d›dd«|€ t |«}|Md|vrI|d}t|j««D](}||}d|vsŒ |d}d    |vsŒ|d    }    |    |vsŒ!||    |d    <Œ*|d
D
cgc]}
t|
|dz|¬«‘Œ} }
| |d
<|Scc}wcc}
w) Nrœ)Útabr_úBlock: rqr¹rr0rorIr/)rrërvÚ
postcrack2rXr2rcrw) r1rer_ÚgÚretr0rªÚvarrIÚvalÚbÚnew_bodys             r)rgrgÒs/€õ ؈ ܐ%œÔàöØô˜!  t¡°yÖAðˆðàˆ
ܐÔÜ ˆsˆe7˜5 ™=˜/¨Ð ,¨aÔ0àÐÜ% eÓ,ˆ    àР¨5¡ØV‰}ˆÜd—i‘i“kÓ"ò    6ˆAؐq‘'ˆCØ Ò$ؘ>Ñ*Ø˜T’>ؘv™,CؘiÒ'Ø'0°¡~˜˜Vš ð    6ð˜v™ö(Øô˜1 #¨¡*¸    ÖBð(€Hð(à€Eˆ&Mà €Lùò/ùò&(s CÂ<C"có —t|t«rYg}g}|D]K}t|«t||dz¬«}d|vrd|dvr|j    |«Œ;|j    |«ŒM||zSt|«t|t
«sd|vrt dt|«z«‚d|vr|ddk(st|›d|d›d    d
«t|«}t|«}t|«|d <t|d «|d <|jd «r|d }t|||¬«|d<g}d|vr:|d}t|j««D]}d|vsŒ|j    |«Œni}d}    d|vr|d}    |jd«rKg}
d|vr|d}
t!j |d «} |    r|    dz} nd} | |vr!d} | ›d| ›|vr| dz} | ›d| ›|vrŒ| ›d| ›} dgi|    dzdœ}|dD]²}||
vrg}d}|dD]l}|dz}|ddk(sŒd} |dD]1}| dz} d|vsŒ |d|k(sŒt!j |«}|d| =n|sŒO|ds|d|=|
|
j#|«=n|dj    |«Œ”|| vsŒ™t%| |«rŒ¨| ||d |<Œ´|d s|dr+|
|d<d|gi| |ddœ}i|| <t&j    |«|r||d<|S)zi
    TODO:
          function return values
          determine expression types if in argument list
    rœ©rerqrµr1z0postcrack: Expected block dictionary instead of r¥rfr¹rr0Úsortvarsr5r/rr
r3r4Ú__user__routinesÚunknown__user__routinesrrðr¢Ú_user_interface)r1r/r0rqr rŸ)r1r/r0rqr4)rërvrXÚ    postcrackr)ÚdictrÆrÂr2Ú analyzeargsÚ analyzecommonÚ analyzevarsÚ sortvarnamesrÚ analyzebodyrwrÐr[Ú
isexternalr)r1r5reÚgretÚuretrhÚ userisdefinedÚuseblockr~rqr4rbÚmnamerùr¢r»ÚedefÚjrlÚbbÚmblocks                     r)rtrtòs €ô%œÔ؈؈Øò    ˆAÜ ˜ŒNܘ!  t¡Ô,ˆAà˜‰{˜z¨Q¨v©YÑ6Ø— ‘ ˜A•à— ‘ ˜A•ð    ðd‰{ÐܐÔÜ eœTÔ " w°eÑ';ÜÐJܘE›
ñ#ó$ð    $à ˜u V™}Ð0CÒCܐ3%w˜u V™}˜o¨RÐ0°!Ô4Ü ˜Ó €EÜ ˜%Ó  €EÜ Ó&€Eˆ&MÜ$ U¨6¡]Ó3€Eˆ*ÑØ ‡yyÔؐV‰}ˆÜ  t°Ô5€Eˆ&Mà€MØ ~ؘ‘<ˆÜh—m‘m“oÓ&ò    (ˆAؘQŠØ×$Ñ$ QÕ'ñ    (ðˆØ €DØ ØV‰}ˆà ‡yyÕ؈
Ø ˜5Ñ  Ø˜|Ñ,ˆJÜ—    ‘    ˜% ™-Ó(ˆÙ ØÐ-Ñ-‰Eà-ˆEØ MÑ !؈AؐG˜1˜Q˜C. MÑ1ؘ‘EðG˜1˜Q˜C. MÒ1àg˜Q˜q˜cNˆEØ)°2بÐ0AÑ)AñCˆ    à{Ñ#ò    0ˆAؐJ‰ØØØ˜v™ò"AؘA™Aؘ‘z [Ó0ؘØ"# F¡)ò&˜BØ ! A¡˜AØ%¨š|°°6±
¸a³Ü'+§y¡y°£} Ø$% f¡I¨a LÙ %ð &ò  Ø#$ V¢9Ø$)¨&¡M°!Ð$4Ø *¨:×+;Ñ+;¸AÓ+>Р?Ù!ð"ð˜&Ñ!×(Ñ(¨Õ.ؐe’¤J¨u°Q©xÕ$8Ø',¨Q¡x    ˜&Ñ! !Ò$ð+    0ð, VÒ      ¨&Ò 1Ø",ˆE,Ñ Ø.Øð9Ø$&°ÀUÈ;ÑEWñYˆFà ˆHU‰OÜ × Ñ ˜vÔ &ÙØˆˆe‰ Ø €Lr(cóЗg}g}t|j««D]4}d||vr||dr|j|«Œ$|j|«Œ6t|«}d}|r‚|d}d}|ddD]}|||dvsŒd}n|r;|dd|gz}|dz}||kDrKt    ddj |«zdz«||z}    |S|j|«|dd}t|«}d}|rŒ‚|S)NrurrzTsortvarnames: failed to compute dependencies because of cyclic dependencies between rÂr¹)rvrwr)rXrorÛ)r0ÚindepÚdeprÿrªrùr^Úws        r)ryryQs4€Ø €EØ
€CÜ $—)‘)“+Ó òˆØ t˜A‘wÑ  4¨¡7¨8Ò#4Ø J‰JqMà L‰L˜Oð    ô
     ˆC‹€AØ    €AÙ
Ø ‰FˆØ ˆØQRò    ˆAؐD˜‘G˜HÑ%Ò%ؐÙð    ñ ؐab'˜Q˜C‘-ˆCؐA‘ˆAؐ1ŠuÜð;àŸ)™) C›.ñ)à+/ñ0ô1ð ™ Øð €Lð     L‰L˜ŒOؐab'ˆCܐC“ˆA؈Aò) ð* €Lr(c    ó¦—t|«s|Sg}t|dj««D]†}g}|d|D]m}tjd|tj
«}|rg}|j d«rDt|j d««jd«Dcgc]}|j«‘Œ}}t|j d«j««}||dvrXd|d|vr.|d|djdd    j|«›d
«nIdd    j|«›d
g|d|d<n)|rddd    j|«›d
gi|d|<ni|d|<||vr&|j|«n|}td |›d |›d «|j|«Œp||d|<Œ‰d|vr||d<|S|d|z|d<|Scc}w)Nrz2\A\s*\b(?P<name>.*?)\b\s*(\((?P<dims>.*?)\)|)\s*\ZÚdimsr%rqr0rnr7r&r7z:analyzecommon: failed to extract "<name>[(<dims>)]" from "z " in common /z/.
Ú
commonvars)Ú    hascommonrvrwr¾rÒrÀrÓr'r(r¦rrr)rÛro)    r1r‹r~Úcomvarsr»rórŠrïrªs             r)rwrwss$€Ü UÔ Øˆ Ø€JÜ %˜‘/×&Ñ&Ó(Ó )ó%ˆØˆØx‘ Ñ#ó    ˆAÜ—‘ØEÀqÌ"Ï$É$óPˆAâØØ—7‘7˜6”?ä%3°A·G±G¸F³OÓ%D×%JÑ%JÈ5Ó%QöSØ !ðŸG™GIðSDðSä˜qŸw™w v›×4Ñ4Ó6Ó7Ø˜˜f™ Ñ%Ø! U¨6¡]°1Ñ%5Ñ5ؘf™  aÑ(¨Ñ4×;Ñ;Ø(¨¯©°$«Ð(8¸Ð:õ<ð)¨¯©°$«Ð(8¸Ð:ð8<˜˜f™  aÑ(¨Ò4áà" z°#·(±(¸4³.Ð1AÀÐ%CÐ$Dð(FE˜&‘M !Ò$ð(*E˜&‘M !Ñ$ؘJÑ&Ø×%Ñ% aÕ(àÜØPÐQRÐPSÐS`ÐabÐ`cÐcgÐhôjà N‰N˜1Ö ð7    ð8%ˆˆh‰˜Óð=%ð>˜5Ñ Ø(ˆˆlÑð €Lð$ LÑ1°JÑ>ˆˆlÑØ €Lùò7SsÂ$Gcó¬—t|«|dj«Dcic]\}}d|vsd|dvr||“Œ}}}g}|dD]}||d<|ddvrl||d|vrŒ|d    }|d|j«vrtj    |d«|dtvrŒXt
r |dt
vrŒjt |d
d ¬ «|d <n|}t|||dz¬«}|ddvr|ds|jd«sd|vrŒ±|djdd«dk(rtj    |«Œß|ddk(r|dt|d<|j    |«Œ    |Scc}}w)Nr0rnrr/rZr1r«rqr5z
      T©Ú as_interfaceÚsaved_interfacerœror£r·rr­r
Ú pythonmoduler¤) rXrKrwr#r)r$Úcrack2fortrangenrtrrÐrr)    r1r5reÚkeyrÚ maybe_privater/rlÚas_s             r)rzrzs €ôÔð  ™-×-Ñ-Ó/÷á ˆCØ ˜UÑ " h°e¸JÑ6GÑ&Gð     ˆU‰
ð€Mñð €DØ 6‰]óˆØ!ˆˆ.ÑØ ˆW‰:Ð3Ñ 3ØÐ A f¡I°TÑ$9Øà˜‘ià‰y˜M×.Ñ.Ó0Ñ0Ü× Ñ   6¡Ô+ؐ‰yœIÑ%ØÝ˜Q˜v™Y¬iÑ7ØÜ#3ؐ>°ô$6ˆAÐÒ  ðˆCÜ a˜ #¨¡*Ô -ˆØ ˆW‰:Ð<Ñ <ؐŠy §¡ Ô!7Ø!¨Ñ*ØØ ˆW‰:× Ñ ˜c 2Ó &¨.Ò 8Ü × Ñ ˜qÕ !à‰z˜XÒ%Ø+,¨V©9” ˜a ™iÑ(Ø K‰K˜ŽNð;ð< €KùóKs¢Ecó>—t|«t}i}d|vrƒ|d€*d}tdkDrtdt    |d«›d«||fSt |dj ««D]5}|d|jd«dvr |d|||<Œ(|d|d||<Œ7||fS)Nrrz2buildimplicitrules: no implicit rules for routine rqr8r4)rJrN)rXÚdefaultimplicitrulesrr2rÎrvrwr)r1Ú implicitrulesÚ    attrrulesr~s    r)Úbuildimplicitrulesr›ÊsހܐÔÜ(€MØ€IؐUÑØ Ñ Ð $Ø ˆMܘŠ{ÜØHÌÈeÐTZÉmÓI\ÐH]Ð]`Ðaôcð ˜)Ð #Ð#ô ˜% 
Ñ+×0Ñ0Ó2Ó3ò DØ˜Ñ$ QÑ'×+Ñ+¨JÓ7Ð?VÑVØ',¨ZÑ'8¸Ñ';M !Ò$à#(¨Ñ#4°QÑ#7¸
Ñ#CI˜a’Lð     Dð
˜)Ð #Ð#r(cój—t|||«}t|«ttfvr|St    d|›«‚)z2 Like `eval` but returns only integers and floats zr=)rÛrhr8r:rÖ)r»rhrër™s    r)ÚmyevalrÝs5€ä ˆQ1‹ €AÜ ˆAƒw”3œ,ÑØˆÜ
r˜!˜ZÓ
 Ð r(z \A\b\w+\b\ZcóÌ—    tt|ii««}d|dfS#t$rYnwxYwtj    |«rdd|fSt |«}|D]}t |«|kDrŒt jd|zdz|«rŒ0t jd|zdzt j«}|j    |«}|sŒn    |j    |«}|r<|jd«›d    d›d
|jd «›}|j    |«}|rŒ<tii«}    |j    |«}|r<|jd«›d    d›d
|jd «›}|j    |«}|rŒ<t|ii«|    z
}
|j    |«}|r<|jd«›d    d ›d
|jd «›}|j    |«}|rŒ<t|ii«}|j    |«}|r<|jd«›d    d ›d
|jd «›}|j    |«}|rŒ<t|ii«} |
d z|    z|k(r|
d z|    z| k(r|
|    |fcSy#t$rYywxYwy)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>.*)rr6r7rgà?gø?)NNN) r8rrÆÚgetlincoef_re_1rÒrXr¾rr¿rÀrÓ) r»Úxsetr³Úlen_erïr`róraÚeerlr+Úc2s             r)Ú
getlincoefr§ès€ð* Ü ”q˜"˜bÓ!Ó "ˆØ!TˆzÐøÜ ò Ù ð úä×јQÔØ!QˆwˆÜ ‹F€EØ ó#ˆÜ ˆq‹6EŠ>Ø Ü 9‰9Ð&¨Ñ*¨UÑ2°AÔ 6à ܏z‰zÐ.°Ñ2Ð5GÑGÌÏÉÓNˆØ J‰Jq‹MˆÚ ð Ø—Z‘Z “]ÙØŸH™H XÓ.Ð/¨q°°°1°R·X±X¸gÓ5FÐ4GÐHBØŸ™ B›Bòô˜2˜r 2Ó&Ø—Z‘Z “]ÙØŸH™H XÓ.Ð/¨q°°°1°R·X±X¸gÓ5FÐ4GÐHBØŸ™ B›Bòô˜2˜r 2Ó&¨Ñ*Ø—Z‘Z “]ÙØŸH™H XÓ.Ð/¨q°°°Q°r·x±xÀÓ7HÐ6IÐJBØŸ™ B›Bòô˜2˜r 2Ó&à—Z‘Z “]ÙØŸH™H XÓ.Ð/¨q°°°Q°r·x±xÀÓ7HÐ6IÐJBØŸ™ B›Bòô˜B  BÓ'Ø˜‘G˜a‘K 1Ò$¨¨S©°1©¸Ò):ؘa ˜7’Nð Ø øôò ØØ Ø ð úðC#ðH s:‚    )¨)ÃAIÄAIÅ-AIÇ AIÈ('IÉ    I!É I!z\b[a-z][\w$]*\bcó°—||vr²||jdg«}d||vrOt||«sAtj||d«D]#}||vsŒ||vsŒ ||k7sŒ|j    |«Œ%|ddD]>}|j|g«xs t |||«D]}||vsŒ|j    |«ŒŒ@nt dt|«›d«g}|||<|S)Nrurqz)_get_depend_dict: no dependence info for r¹)rÚisstringÚ word_patternrçr)Ú_get_depend_dictr2rÎ)rqr0ÚdepsÚwordsÚwordrˆs      r)r«r«/    sõ€Ø ˆt|ؐT‘
—‘˜x¨Ó,ˆà $t‘*Ñ ¤X¨d°4©jÔ%9Ü$×,Ñ,¨T°$©Z¸©_Ó=ò 'ð˜uÒ$¨°ª¸$À$»,Ø—L‘L Õ&ð     'ð
™!Hò    $ˆDØ—X‘X˜d BÓ'ò:Ü'¨¨d°DÓ9ò $à˜E’>Ø—L‘L •Oñ $ñ    $ô     Ð;¼DÀ»J¸<ÀrÐJÔK؈؀DˆJØ €Lr(cód—t|j««}i}|D]}t|||«Œ|Sr,)rvrwr«)r0ruÚ depend_dictrªs    r)Ú_calc_depend_dictr±E    s8€Ü —‘“Ó €EØ€KØ ò/ˆÜ˜˜D +Õ.ð/à Ðr(cóv—t|«}g}t|j««D]}||rŒ    |j|«||=Œ|rTt|j    ««D]5\}}|Dcgc]    }||vsŒ|‘Œ }}|s|j|«||=Œ1|||<Œ7|rŒT|Dcgc]    }||vsŒ|‘Œ c}Scc}wcc}wr,)r±rvrwr)rK)r0r°rurqÚlstrªÚnew_lsts       r)Úget_sorted_namesrµM    sӀÜ# DÓ)€KØ €Eܐ[×%Ñ%Ó'Ó(ò"ˆØ˜4Ó Ø L‰L˜Ô ؘDÑ!ð"ñ ܘk×/Ñ/Ó1Ó2ò    ,‰IˆD#Ø"%Ö:˜Q¨¨kÒ)9’qÐ:ˆGÐ:ÙØ— ‘ ˜TÔ"Ø Ñ%à$+ ˜DÒ!ð     ,ò ð#Ö 3T d¨d¢lŠDÒ 3Ð3ùò ;ùò 4sÁ+    B1Á5B1     B6Â*B6có‚—|ddvr|dd}tj|«rytj|«ryd|zdzS)    Nrú'"rr éézkind(r7)rÙrÒÚ real8pattern)rcs r)Ú
_kind_funcr»_    sK€à ˆayEÑØ˜˜"ˆÜ×ј6Ô"ØÜ    ×    Ñ    ˜FÔ    #ØØ VÑ ˜cÑ !Ð!r(cóP—d|z}|dkry|dkry|dkry|dkry    |dd
zkry y ) Nr®érir2lr¹lr¸é€ér r')r™rós  r)Ú_selected_int_kind_funcrÀj    sD€à
ˆa‰€A؈F‚{ØØˆG‚|ØØˆG‚|ØØˆG‚|ØØˆA‰H‚}ØØ r(có¨—|dkry|dkrytj«j«}|jd«r|dkryy    |dkry|dkryy    )
Nér¹r¿r¸)
Úaarch64ÚalphaÚarm64Ú    loongarchÚmipsÚpowerÚppcÚriscvÚs390xÚsparcé!ér®r )ÚplatformÚmachiner¡r‹)Úpr™ÚradixrÐs    r)Ú_selected_real_kind_funcrÓz    sf€ð    ˆ1‚uØØˆ2‚vØÜ×ÑÓ ×&Ñ&Ó(€GØ×ÑÐwÔxØ Š7Øð
ð    
ˆRŠØØ    
ˆbŠØØ r(c    óB—tj|«}tj|«}dtfdtfdtffD]\}}||vsŒ |||<Œg}t    |«D]&}d||vsŒ d||dvsŒ|j |«Œ(t jdt j«}t jdt j«}    t jdt j«}
|D]ñ}d    ||vrÉ||d    } t||«r&| j«} d
D]} | j| Ž} Œ|jd | «} |    jd | «} d } d||vrAd||dvr7t| «}| jd||ddzd«} t| «|k} | ss|
j| «sb| jd«}t|«dkDrCdj!|dd«j«j|dj«d«} t#||«ržt%| «}t&j)| «D]i}t%| |j+«|j-«j«jdd««||j+«|j-«Œkdj!|«} nt/||«rt1d| ›d«||dDcgc]2}|j3d«r|j5d«j7«‘Œ4c}xsdgd}t&j9| «rd} nt:j9| «rd}     t=| |||¬«||<tA||«r$tC||tD«rtG||«||<|j«}||k7sŒË||||<ŒÕtI||«t1d|›d«Œô|Scc}w#t>$r!}| ||<t1d|›d|›d«Yd}~ŒŸd}~wwxYw) NrIÚselected_int_kindÚselected_real_kindrnr 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*\)rq))z.false.ÚFalse)z.true.ÚTruez
kind("\1")zselected_int_kind(\1)Frorðr
rr r#r»zAget_parameters[TODO]: implement evaluation of complex expression r¹rrr¸r¹)Údimspeczget_parameters: got "ú" on zget_parameters:parameter z does not have value?!
)%rÐr»rÀrÓrµr)r¾r¿rÀÚ    islogicalr¡rÐÚsubrXrÒr(rÛÚisdoublervrÙrÚrŽrýÚ    iscomplexr2r‹rãr¦rrºÚ
param_evalrÆr©rër8râr‰)r0Ú global_paramsr‡Úg_paramsrqÚfuncÚ param_namesrªÚkind_reÚselected_int_kind_reÚselected_kind_rerÿÚreplÚ is_replacedÚ
orig_v_lenÚv_rþrór;rÙrìÚnls                      r)r×r׌    s0€Ü Y‰Y}Ó %€F܏y‰y˜Ó'€Hؤ
Ð+Ø+Ô-DÐEØ,Ô.FÐGðKò"‰
ˆˆdð xÒ Ø!ˆHTŠNð    "ð
€KÜ ˜dÓ #ò"ˆØ ˜˜a™Ò   [°D¸±G¸JÑ4GÒ%GØ × Ñ ˜qÕ !ð"ôj‰jÐ<¼b¿d¹dÓC€GÜŸ:™:Ø8¼"¿$¹$ó@Ðä—z‘zØ?ÄÇÁóGÐà óPOˆØ $q‘'Š>ؐQ‘˜‘ ˆAܘ˜a™Ô!Ø—G‘G“Iðò)Dð
"˜Ÿ    ™     4Ð(‘Að )ð— ‘ ˜M¨1Ó-ˆAØ$×(Ñ(Ð)AÀ1ÓEˆAð  ˆKà  a¡Ñ(ð˜T !™W ^Ñ4Ñ4Ü!$ Q£JØŸ    ™     #¨¨Q©°Ñ(?ÀÑ(GÑ"GÈÓLAô#& a£&¨:Ñ"5KáØ'×-Ñ-¨aÔ0ØŸ™ ›Bä˜2“w ’{ØŸG™G B s¨ GÓ,×2Ñ2Ó4×<Ñ<¸RÀ¹V¿\¹\»^ÈRÓP˜ô˜˜Q™Ô Ü˜!“WÜ&×/Ñ/°Ó2òHAÜ,0ؘ!Ÿ'™'›) A§E¡E£GÐ,×2Ñ2Ó4×<Ñ<¸SÀ#ÓFó-HBq—w‘w“y §¡£Ñ)ðHð—G‘G˜B“K‘ä˜4 ™7Ô#ÜðFØFGÀSÈðLôMð"& a¡¨Ñ!4ö5ØØŸ,™, {Ô3🙠{Ó3×9Ñ9Õ;ò5ò?à9=¸ÀñCˆGô ×#Ñ# AÔ&Ø‘Ü×$Ñ$ QÔ'ؐð CÜ& q¨(°FÀGÔLq‘    ô
˜˜Q™Ô ¤Z°°q±    ¼3Ô%?Ü  q¡    ›Nq‘    Ø—‘“ˆBؐQŒwØ# A™Yr“
ä $q‘'ŒNÜ Ð/°¨uÐ4LÐMÖ NðaPOðb €Mùò15øôò Cؐq‘    ÜÐ/°¨u°E¸!¸¸bÐA×BÑBûð CúsË67O/Í(O4Ï4    PÏ=PÐPcó$—|dvryt||«S)N)z(:)ú(*)rrí)Ú _eval_scalar)Úlengthr‡s  r)Ú _eval_lengthrðñ    s€Ø Ð$Ñ$ØÜ ˜ Ó 'Ð'r(z\d+_c óX—t|«r|jd«d}    t|i|«}t|t«rt
nt|«}|S#t ttf$r|cYSt$r7}td|›d|›dt|j««›d«Yd}~|Sd}~wwxYw)Nrðrr*z" in evaluating z (available names: r±) Ú_is_kind_numberr(rÛrërÂrÎrÝrÜrÞrÆrorvrw)rr‡rìs   r)rîrîú    sŸ€ÜuÔØ— ‘ ˜CÓ  Ñ#ˆð    5äU˜B Ó'ˆØ8œ E¬3Ô/•´S¸%Ó@ˆð €Løô ”{¤IÐ .òØŠ Ü ò5Ýâšœt F§K¡K£MÕ2ð4÷    5ð    5ð €Lûð    5ús¡/AÁB)Á*B)Á2,B$Â$B)c 󌠇@‡A—t|«t|«\}}tj|d«}|ddk(r|d|vri||d<d|dvrj|d=d|ddvr]|ddd}t|«|dDchc]}|d’Œ    c}zD]-}dD]&}||vsŒt    |j |i«|«||<Œ(Œ/g}|d    }    |    D]}
    ||
|j |
«Œt|j««D]}||    vsŒ|j |«Œt|t|««} i} tjd
«j} t|j««D]4}| |«}|sŒ||j«|j!«}    | |Œ6|D
]U}|d t|j««vrt    ||||d «||<d ||vr¹d||vr
d||dvs¨|r|d j%«}t||j««D]N}|d k(r |||dk(rŒ|||vr||||||<Œ*|dk(sŒ0|||D]}t    |||«||<ŒŒPn%||d    vrt'dt)|«›d|d›d«d||vr7d||dvr-||dd}    t+t-|i| ««}|||dd<d||vr7d||dvr-||dd}    t+t-|i| ««}|||dd<i}d||vr£||d}|j1«g||d<d\}}}}}|D]m}
|
dddk(r|
ddj3«dd}nŽ|
dddk(r|
ddj3«dd}no|
dddk(r|
ddj3«dd}nP|
dd d!k(r|
d dj3«dd}n1|
dd"d#k(r|
d"dj3«dd}nt    |||
«||<|r€d||vrg||d<t5|«j7d$«Dcgc]}|j3«‘Œc}D]6}|j9d%d«}|||dvsŒ ||dj |«Œ8d}|rN|j9d&d'«}|j9d(d)«}d#||vr
|g||d#<n||d#j |«d}|wd||vrg||d<t;t5|«j7d$«Dcgc]}|j3«‘Œc}«D]$}|||dvsŒ||dj |«Œ&d}|€Œd!||vrg||d!<t5|«j7d$«Dcgc]}|j3«‘Œc}D]$}|||d!vsŒ||d!j |«Œ&d}Œp|rd||vrýg||d<t;t5|«j7d$«Dcgc]}|j3«‘Œc}«D]²}    t=|| «}|d+k(rd+nd,}||k(r|g}nt5|d+«j7d-«}tC|«d.k(r    d,|vrd,g}d,}tC|«dk(r|d |k7rd/|d g}tC|«d.k(rtEtFjHjJ|«\}} | |z
dz}!|!jMtFjNjP¬0«}i}"|dD]³}tGjR|«}#|!jU|#«sŒ*    |!jW|#«\}
}|
|fd1„}$t|
jY««}%|%j[|jY««|%D#chc]}#|#j^|vr |#j^’Œ}'}#|$t|'«f|"|<Œµ|"||<||dj |«Œµd!||vr\d    |vrW||d    vrO||j dg«}(g})tatbtdtf«||«}*ti||«rntk||d«D]X\}+}|j |«Š@‰@€ni|*rf‰@jm«D]R\}\},}-ˆ@ˆAfd2„ŠAt«}.‰A||.«||(vsd3||vsd||vrŒ6|,€||.vr|d4}/|,tGjRd5|›d6|+›d7««}0|0jMtFjNjP¬0«}0|0||d3<|g|-z||d<d!||vrpd5|›d6|+›d8|›g||d!<n]d9}/d||vrg||d<d:||dvr||dj d:«|(j |«|)j d5|›d6|+›d8|›«||j dg«}1d;|1vsd<|1vs|1j |/rd<nd;«|1sŒK|1||d<ŒU‰@€Œ‰‰@jm«D]½\}\},}-||j dg«}'||j dg«D]V}2|2jod«sŒdjq|2j7««}2|'js|2d=dj7d>««ŒX|'rtt|'««||d<||'vsŒ­|(j |«Œ¿Œ[nstu||«red||vr^d,||dvr!tw||dd,| «}3|3||dd,<n3d||dvr)tw||dd| «}3||dd=|3||dd,<|)r|)||d!<|(rtt|(««||d<d3||vs    Œd||vrg||d<d;||dvr!d<||dvr||dj d;«d||vr]g||d<t| jm««D]+\}}|||d3«sŒ||dj |«Œ-||ds||d=ty||«s
Œ>t{||d3| «||d3<
ŒXt|j««D]s}||dk(sŒ d#||vr ||d#|d#<|ddk(sŒ(d?|vr|d?|vrt}||||d?«||<d@|vsŒP|d@}4|4j9dAd«}5|4|5k( }6|5j9dBd«}4|4|5k( }7t~d j|4«}|rºt|jƒdC«|jƒdD««\}8}9}}:t…|8|9«\};}<}=|8||d <    |d?r |8||d?d <|;r d|;vr    t-|;di| «|;d<|;||d<|<r|<||d<|=r|=||dE<|6rt    ||dA«||<|7sŒEt    ||dB«||<ŒYt'dFt)|d@«›dG«Œv|ddHvr¨dI|vrtj|d    |dIz«}>ntj|d    «}>t|j««D]1}tat†tˆ«||«sŒ!|>j |«Œ3dJ|vro|>jst|dJj«««t|dJj««D]%}|dJ|D]}||>vsŒ|>j |«ŒŒ'|ddk(r-d?|vr|>j |d?«n|>j |d«|ddKvr|d}?|?|vrd||?vr ||?d|d<|ddLk(r(|>jst|j«««t|j««D]
}||>vsŒ||=Œ |Scc}w#t$rYŒ„wxYw#t$r8tjd |ztj"«j| |<YŒ)wxYw#t.$rY ŒÓwxYw#t.$rY Œ¥wxYwcc}wcc}wcc}wcc}w#t>t@tf$rt'd*|›d)«Y    ŒÐwxYw#t\$r&}&d}$t|!jY««}%Yd}&~&Œ±d}&~&wwxYwcc}#w#t.$rYŒ,wxYw#t.$rYŒ"wxYw)MzH
    Sets correct dimension information for each variable/parameter
    r0r1rúrqr
rnr/r±r5z[A-Za-z][\w$]*z.*\b%s\brr4rÚ    undefinedz"analyzevars: typespec of variable z is not defined in routine r8rprXrorI)NNNNNNr8rrr r·r
rurrtr¹rsr%r­z\n\nz
 
z\n r¹z4analyzevars: could not parse dimension for variable r¦rz@:@r2Ú1)Úlanguagecó—||z
|z Sr,r')r;r+rls   r)Úsolve_vzanalyzevars.<locals>.solve_v¶
s€Ø01°A±¸©{Ð(:r(có|•—‰j|dgg«dD]!}||vsŒ|j|«‰||«Œ#y)Nr)rÚadd)rÿr¬Úv1Úcoeffs_and_depsÚ compute_depss   €€r)rýz!analyzevars.<locals>.compute_depsä
sDø€Ø*9×*=Ñ*=¸aÀ$ÈÀÓ*LÈQÑ*Oò!? BØ')°¢~Ø(,¯©°¬ Ù(4°R¸Õ(>ñ!?r(rqFzshape(rÂr7z) == TÚinrrrÂr&r©r¨ÚpureÚ    recursiver9rrrzanalyzevars: prefix (z) were not used
)r¤r’rŸržr‹r)rürúrh)ErXr›rÐrrxrr)ÚKeyErrorrvrwr×rcr¾r¿rÒrŽrýrÀr¡r2rÎrÂrÛrÆÚreverser¦r'r(rÐrwÚ param_parserÖrèrXrÌrÚExprÚparseÚtostringÚLanguager´Ú    as_symbolrÚ linear_solveÚsymbolsr\Ú RuntimeErrorr Úl_orÚ isintent_inÚisintent_inoutÚisintent_inplaceÚisarrayrärKr‹rÛrêr©rðÚisscalarrîrrOrÓrÓràÚisintent_callbackÚ isintent_aux)Br1r™ršr0Úgenrlrªr~Úsvarsr5r+r‡Ú dep_matchesÚ
name_matchrÿróÚln0rëÚdimension_exprsröÚdimr
rurtrsrïr³Útmpr#Údim_charrrAÚd2ÚdsizeÚsolver_and_depsr;røÚ all_symbolsrìÚv_depsÚn_depsÚn_checksÚ
n_is_inputrùÚsolverr¬Úall_depsÚ is_requiredr4Úv_attrÚaarïÚprÚpr1ÚispureÚisrecr4rõr÷rrrrÚ
neededvarsrqrürýsB                                                                @@r)rxrx
 
séù€ôÔÜ1°%Ó8Ñ€M9Ü 9‰9U˜6‘]Ó #€DØ ˆW~˜Ò#¨¨f© ¸TÑ(AØ ˆˆU6‰]ÑØ    ˆU6‰]ÑØ ˆHØ ˜˜v™ rÑ*Ñ *ؘ‘- Ñ# JÑ/ˆCܘ“Y°U¸6±]Ö!C° ! F£)Ò!CÑCò BØ.òBAؘC’xÜ"-¨d¯h©h°q¸"«o¸qÓ"A˜˜QšñBð Bð €EØ ‰=€DØ òˆð    Ø ŠGØ L‰L˜Oðô $—)‘)“+Ó òˆØ DŠ=Ø L‰L˜Oðô˜DÔ"3°EÓ":Ó ;€Fð€KÜ—‘Ð-Ó.×4Ñ4€JÜ $—)‘)“+Ó òKˆÙ q‹MˆÚ ؐ!—'‘'“)˜AŸE™E›GÐ$ˆAð KؘA“ð KðóMBˆØ ˆQ‰4”4˜    Ÿ™Ó(Ó)Ñ )Ü! $ q¡'¨9°Q°q±T©?Ó;ˆD‰GØ ˜T !™WÑ $Ø $ q¡'Ñ)¨j¸DÀ¹GÀJÑ<OÑ.O٠ؘA™$Ÿ*™*›,CÜ! -°Ñ"4×"9Ñ"9Ó";Ó<òB˜Ø 
š?¨}¸SÑ/AÀ!Ñ/DÈ Ò/SØ$Ø D¨¡GÑ+Ø)6°sÑ);¸AÑ)>˜D ™G AšJØ *›_Ø%2°3Ñ%7¸Ñ%:òB Ü*5°d¸1±g¸qÓ*A  Q¢ñBñ Bð˜% ™-Ñ'ÝܘQ  v£ð0ô1à ˜T !™WÑ $ؘ˜Q™ Ñ/Ñ/ؘ‘G˜NÑ+¨EÑ2ðÜœD  B¨Ó/Ó0Að23Q‘˜Ñ'¨Ñ.à ˜T !™WÑ $ؘ˜a™ Ñ0Ñ0ؘ‘G˜NÑ+¨FÑ3ðÜœD  B¨Ó/Ó0Að34Q‘˜Ñ'¨Ñ/àˆØ ˜˜a™Ò  Ø˜‘7˜:Ñ&ˆDØ L‰LŒNØ"$ˆD‰GJÑ Ø/KÑ ,ˆC˜ ¨Øó+ !ØRa5˜KÒ'ؘQ˜R˜5Ÿ;™;›=¨!¨BÐ/‘Cؐr˜U˜hÒ&Ø  ˜eŸk™k›m¨Q¨rÐ2‘Fؐr˜U˜hÒ&Ø  ˜eŸk™k›m¨Q¨rÐ2‘Fؐr˜U˜gÒ%ؘq˜r˜UŸ[™[›]¨A¨bÐ1‘Eؐr˜U˜f’_ؘa˜b˜EŸK™K›M¨1¨RÐ0‘Dä)¨$¨q©'°1Ó5D˜‘GÙØ t¨A¡wÑ.Ø,.˜˜Q™ Ñ)Ü1?ÀÓ1G×1MÑ1MÈeÓ1TÖU¨A˜aŸg™giÒUò:˜àŸi™i¨¨RÓ0˜Ø d¨1¡g¨hÑ&7Ò7Ø  ™G HÑ-×4Ñ4°SÕ9ð    :ð
"FÙØŸ<™<¨°&Ó9DØŸ<™<¨°Ó5DØ T¨!¡WÑ,Ø+/¨&˜˜Q™ šà˜Q™ ™×.Ñ.¨tÔ4ؐDØÐ%Ø t¨A¡wÑ.Ø,.˜˜Q™ Ñ)Ü&¼>È&Ó;Q×;WÑ;WÐX]Ó;^Ö'_°a¨¯©­    Ò'_Ó`ò8˜Ø D¨¡G¨HÑ$5Ò5Ø  ™G HÑ-×4Ñ4°QÕ7ð8ð"FØÒ$Ø d¨1¡gÑ-Ø+-˜˜Q™ Ñ(Ü1?ÀÓ1F×1LÑ1LÈUÓ1SÖT¨A˜aŸg™giÒTò7˜Ø D¨¡G¨GÑ$4Ò4Ø  ™G GÑ,×3Ñ3°AÕ6ð7ð!’EðW+ !òX{¨$¨q©'Ò1Ø')Q‘˜ Ñ$Ü"Ü,:¸3Ó,?×,EÑ,EÀeÓ,LÖM q˜Ÿ™ÒMóó?3Að
ô(¨¨6Ó2˜ð'(¨3¢h™s°CHؘH’}Ø&˜Z™ä+¨A¨sÓ3×9Ñ9¸%Ó@˜Ü˜2“w !’|¨¨r©    Ø!˜U˜Ø˜Ü˜2“w !’|¨¨1©°Ò(9Ø! 2 a¡5˜\˜Ü˜2“w !“|Ü!$¤X§]¡]×%8Ñ%8¸"Ó!=™˜˜BØ " R¡¨!¡ ˜Ø!ŸN™N´H×4EÑ4E×4GÑ4G˜NÓH˜ð+-˜Ø!& v¡òK˜AÜ (× 2Ñ 2°1Ó 5˜AØ$Ÿ~™~¨aÕ0ð!GØ+0×+=Ñ+=¸aÓ+@¡D A qà56¸!ó%;ô36°a·i±i³kÓ2B KØ$/×$6Ñ$6°q·y±y³{Ô$Cð5@ö*7Ø/0Ø'(§v¡v°¡~ð%&§F£Fð*7 ð*7ð6=¼dÀ6»lÐ5J °Ò 2ð-Kð:.=˜¨Ñ*ؘ‘G˜KÑ(×/Ñ/°Ö2ð?3ðB ˜$˜q™'Ò ! f°¢o¸!¸uÀV¹}Ò:Lð
˜!‘W—[‘[ ¨2Ó.ˆF؈Hð0œœk¬>Ü.ó0Ø04°Q±ó9ˆJät˜A‘wÕÜ% d¨1¡g¨kÑ&:Ó;óK1‘DAqØ&5×&9Ñ&9¸!Ó&<OØ&Ð.áÚ#ð2A×1FÑ1FÓ1Hó6=Ñ-˜A™~ ¨õ?ô
(+£u˜HÙ(¨¨HÔ5Ø ! V¡ Ø$'¨4°©7¡NØ$,°°Q±Ñ$7ð
!)Ø%Ð1°a¸xÑ6Gð/4  Ù'-¬h×.@Ñ.@Ø&,¨Q¨C¨r°!°°AÐ$6ó/8ó(9 à'+§}¡}Ü-5×->Ñ->×-@Ñ-@ð(5ó(B à/3  Q¡¨¡ ð67°C¸$±J  Q¡¨Ñ 1Ø#*°$°q±'Ñ#9ð+1°°°2°a°S¸¸a¸SÐ(Að8C D¨¡G¨GÒ$4ð /3  Ø#+°4¸±7Ñ#:Ø8: D¨¡G¨HÑ$5Ø#'¨t°A©w°xÑ/@Ñ#@Ø$(¨¡G¨HÑ$5×$<Ñ$<¸TÔ$Bà &§ ¡ ¨aÔ 0Ø (§¡Ø&,¨Q¨C¨r°!°°E¸!¸Ð$=ô!?à%)¨!¡W§[¡[°¸RÓ%@˜FØ$.°&Ñ$8Ø'1°VÑ';Ø &§ ¡ Ù2=¡JÀ:ô!Oã%Ø6<  Q¡¨
Ó 3ðm6=ðn'Ò2à1@×1FÑ1FÓ1Hò    1Ñ-˜A™~ ¨Ø%)¨!¡W§[¡[°¸2Ó%>˜FØ&*¨1¡g§k¡k°*¸bÓ&AòG Ø#%§=¡=°Õ#:Ø)+¯©°·±³Ó)< BØ$*§M¡M°"°Q°r°(·.±.ÀÓ2EÕ$FðGñ &Ü48¼¸V»Ó4E  Q¡¨Ñ 1Ø ¨šØ &§ ¡ ¨aÕ 0ò    1ñEK1ôX˜$˜q™'Ô"Ø! T¨!¡WÑ,ؘd 1™g nÑ5Ñ5Ü!-¨d°1©g°nÑ.EÀcÑ.JØ.4ó"6˜à7=˜˜Q™ Ñ/°Ò4Ø $ q¡'¨.Ñ"9Ñ9Ü!-¨d°1©g°nÑ.EÀeÑ.LØ.4ó"6˜à  ™G NÑ3°EÐ:Ø7=˜˜Q™ Ñ/°Ñ4ÙØ#+Q‘˜Ñ ÙÜ$(¬¨V«Ó$5Q‘˜Ñ!à $q‘'‹>Ø  a¡Ñ(Ø&(Q‘˜
Ñ#Ø $ q¡'¨*Ñ"5Ñ5Ø $ q¡'¨*Ñ"5Ñ5ؐQ‘˜
Ñ#×*Ñ*¨:Ô6ؘt A™wÑ&Ø$&Q‘˜Ñ!Ü  ×!2Ñ!2Ó!4Ó5ò4‘DAqÙ˜˜a™ ™•ؘQ™ Ñ)×0Ñ0°Õ3ð4ð˜A‘w˜xÒ(ؘQ™ Ð)ܘ˜Q™Ö Ü+¨D°©G°C©L¸&ÓAQ‘˜“ ð[MBô^$—)‘)“+Ó ó+^ˆØ f‘ Ó Ø˜˜a™Ñ Ø $ Q¡¨¡f‘ ؐW‰~ Ó+ؘuÑ$¨¨x©¸DÑ)@Ü(¨¨a©°$°u¸X±Ñ2GÓHD˜‘GؘuÒ$ؘx™BØŸ*™* V¨RÓ0CØ"$¨¡)˜mFØŸ™ [°"Ó5BØ!# s¡˜]EÜ$ Q™×-Ñ-¨bÓ1AÙÜ:HØŸG™G F›O¨Q¯W©W°WÓ-=ó;?Ñ7˜ (¨D°%ä;HØ$ hó<0Ñ8˜
 J°à.6˜˜Q™ 
Ñ+ð!Ø$ XšØDL  U¨8¡_Ñ 5°jÑ Añ&Ø%¨Ñ3ð!)Ü9=Ø(2°6Ñ(:¸BÀó:H J¨vÑ$6ð7A˜D ™G NÑ3Ù%Ø6@˜D ™G NÑ3Ù#Ø2:˜D ™G JÑ/Ù!Ü&1°$°q±'¸6Ó&B˜D ™GÛ Ü&1°$°q±'¸;Ó&G˜D ›GäØ3´D¸¸x¹Ó4IÐ3JÐJ[Ð\ö^ðU+^ðX ˆW~ÐVÒVØ ˜5Ñ  ÜŸ™ 5¨¡=°5¸Ñ3FÑ#FÓG‰J䟙 5¨¡=Ó1ˆJܐd—i‘i“kÓ"ò    %ˆAØ4ŒtÔ%¤|Ó4°T¸!±WÕ=Ø×!Ñ! !Õ$ð    %ð eÑ Ø × Ñ œd 5¨¡>×#6Ñ#6Ó#8Ó9Ô :ܘ% ™.×-Ñ-Ó/Ó0ò -Ø˜w™¨Ñ*ò-AØ 
Ò*Ø"×)Ñ)¨!Õ,ñ-ð -𠐉>˜ZÒ 'ؘ5Ñ Ø×!Ñ! %¨¡/Õ2à×!Ñ! %¨¡-Ô0Ø ‰>Ð7Ñ 7ؘ‘=ˆDؐt‰| ¨D°©JÑ 6Ø"& t¡*¨XÑ"6h‘Ø ‰>˜VÒ #Ø × Ñ œd 4§9¡9£;Ó/Ô 0ܐd—i‘i“kÓ"ò    ˆAؘ
Ò"ؘ‘Gð    ð €Kùòi "Døôò    Ú ð    ûô"ò KÜ!#§¡¨K¸1Ñ,=¼r¿t¹tÓ!D×!JÑ!J ˜A”ð Kûô2!òÚðûô!òÚðüò4Vùò"(`ùòUùòNøô'¬
´HÐ=òÜð(Ø() u¨Bð0÷ðûôF(4ò!Gð /3 GÜ25°e·m±m³oÓ2F¦Kûð!Güò*7øôt )ò!Ú ð!ûô(1ò!)Ú$(ð!)úsÊÁ; |8à   |=Æ} Ê4~Ë2~!Ð%~1Ó<~6 Õ2~;×,
Ø ÜA/Ý,!A@!
ó6A@&ô A@6ü=    }
ý    }
ý =~þ ~þ    ~þ~þ!    ~.þ-~.ÿ#,ÿ+,ÿ/    A@    ÿ8A@    Á@A@    Á@&    A@3Á@2A@3Á@6    AAÁAAAz\A[a-z]+[\w$]*\Zc    óv—|€    t|||«}|St|«dks|ddt|«dz
…dk7rt    d|›d    «‚|dd
j d «}t|«dk(rŠ|d j d «}t|«dk(r(t |d |«}tdt|«dz«}nOt |d |«}t |d|«}    tt|«t|    «dz«}nt    d|›d«‚|jd«r|ddn|j d «}g}
|D]!}     t| ||«} |
j| «Œ#tt||
««}|S#t$r}|}td|›d|›d«Yd}~|Sd}~wwxYw#t$r}td|›d| ›d«Yd}~Œud}~wwxYw)aÇ
    Creates a dictionary of indices and values for each parameter in a
    parameter array to be evaluated later.
 
    WARNING: It is not possible to initialize multidimensional array
    parameters e.g. dimension(-3:1, 4, 3:5) at this point. This is because in
    Fortran initialization through array constructor requires the RESHAPE
    intrinsic function. Since the right-hand side of the parameter declaration
    is not executed in f2py, but rather at the compiled c/fortran extension,
    later, it is not possible to execute a reshape of a parameter array.
    One issue remains: if the user wants to access the array parameter from
    python, we should either
    1) allow them to access the parameter array using python standard indexing
       (which is often incompatible with the original fortran indexing)
    2) allow the parameter array to be accessed in python as a dictionary with
       fortran indices as keys
    We are choosing 2 for now.
    Nzparam_eval: got "rÚr¹r2rrhzparam_eval: dimension z can't be parsedr r&rr¦z.param_eval: multidimensional array parameters z not supportedrÁrž) rÛrÆr2rXrÖr(rrÁr8r‹r)ruÚzip) rÿrár‡rÙrÑrìÚdimrangeÚboundÚlboundÚuboundÚv_evalÚitems             r)rßrß” sò€ð&€ð    ;ܐQ˜ &Ó)ˆAðˆô ˆ7ƒ|aÒ˜7Ñ#5¤S¨£\°AÑ%5Ð#5Ñ6¸$Ò>ÜÐ1°'°Ð:KÐLÓMÐMؐq˜ˆ}×"Ñ" 3Ó'€HÜ
ˆ8ƒ}˜Òà˜A‘;×$Ñ$ SÓ)ˆä ˆx‹=˜AÒ Ü ¨¡ ¨VÓ4ˆEܘQ¤ E£
¨Q¡Ó/‰Hä  ¨!¡¨fÓ5ˆFÜ  ¨!¡¨fÓ5ˆFÜœS ›[¬#¨f«+¸©/Ó:‰HäÐIØ#˜9 Nð4ó5ð    5ð—L‘L Ô&ˆˆ1ˆR‰¨A×4Ñ4°SÓ9€AØ €FØòˆð    >ܘ˜h¨Ó/ˆDð     ‰ dÕð ô     ŒS˜6Ó "Ó#€Aà €HøôKò    ;؈AÜ Ð'¨ u¨E°!°°bÐ9× :Ð :؈ûð    ;ûô>ò    >Ü Ð'¨ u¨E°$°¸Ð<× =Ñ =ûð    >ús/„ E(Ä1 FÅ(    FÅ1F Æ FÆ    F8ÆF3Æ3F8có—d|vr`|d|jd«}||jd«dz|jd«}tt||««}t    |||«S||vrt    ||«S|D]†}t j d|zdzt
j«}|j|«}|sŒA|jd«t    ||«z|jd«z}|j|«}|rŒFŒˆ|S)    aƒRecursively parse array dimensions.
 
    Parses the declaration of an array variable or parameter
    `dimension` keyword, and is called recursively if the
    dimension for this array is a previously defined parameter
    (found in `params`).
 
    Parameters
    ----------
    d : str
        Fortran expression describing the dimension of an array.
    params : dict
        Previously parsed parameters declared in the Fortran source file.
 
    Returns
    -------
    out : str
        Parsed dimension expression.
 
    Examples
    --------
 
    * If the line being analyzed is
 
      `integer, parameter, dimension(2) :: pa = (/ 3, 5 /)`
 
      then `d = 2` and we return immediately, with
 
    >>> d = '2'
    >>> param_parse(d, params)
    2
 
    * If the line being analyzed is
 
      `integer, parameter, dimension(pa) :: pb = (/1, 2, 3/)`
 
      then `d = 'pa'`; since `pa` is a previously parsed parameter,
      and `pa = 3`, we call `param_parse` recursively, to obtain
 
    >>> d = 'pa'
    >>> params = {'pa': 3}
    >>> param_parse(d, params)
    3
 
    * If the line being analyzed is
 
      `integer, parameter, dimension(pa(1)) :: pb = (/1, 2, 3/)`
 
      then `d = 'pa(1)'`; since `pa` is a previously parsed parameter,
      and `pa(1) = 3`, we call `param_parse` recursively, to obtain
 
    >>> d = 'pa(1)'
    >>> params = dict(pa={1: 3, 2: 5})
    >>> param_parse(d, params)
    3
    r6Nrr7r r¡rr)
rÕÚrfindr8rrÂr¾r¿rÀrÒrÓ)r#r‡ÚdnameÚddimsr[rÑr`rós        r)rrÒ s€ðr ˆaxà,1—6‘6˜#“;ˆØ!—&‘&˜“+ ‘/ !§'¡'¨#£,Ð/ˆô”K  vÓ.Ó/ˆÜ6˜%‘= Ñ'Ó(Ð(Ø    
ˆf‰Ü6˜!‘9‹~Ðàò    "ˆAÜ—:‘:Ø$ qÑ(Ð+=Ñ=¼r¿t¹tóˆDð—
‘
˜1“ ˆAÚØ—G‘G˜HÓ%ܘ˜q™    “Nñ#Ø%&§W¡W¨WÓ%5ñ6à—J‘J˜q“Móð     "ðˆr(cóŽ—|}tj|« }|r™t|«\}}t||d|«}d}|D]<}    |    j    «}    |    t
j t
jzvrd}    ||    z}Œ>|ddk(r|dz}n|dz}|}||dvs||dvr|dz}||dvrŒ ||dvrŒ||vr6d    }
|t|
«z|vr|
d    z}
|t|
«z|vrŒ|t|
«z}|r
|d|<|S||dvr|dj|i«|d|<d
|vr%||d
|d zvrt|d|d «|d|<|S) Nr0Úe_rðr r»Ú_er5r™rr3r4r) Úanalyzeargs_re_1rÒr›rØr¡rcÚascii_lowercaseÚdigitsrÂrrx) r+r1r5Úorig_aÚ    a_is_exprr™ršÚatÚnar³r~s            r)Ú    expr2namerE" s©€Ø €FÜ$×*Ñ*¨1Ó-Ð-€IÙÜ#5°eÓ#<Ñ ˆ yÜ ˜q %¨¡-°Ó ?ˆØ ˆØò    ˆAØ—‘“    ˆAØœ×.Ñ.´·±Ñ>Ñ>ؐؐa‘‰Bð        ð
ˆb‰6SŠ=ؐc‘‰Bàd‘ˆBØ ˆØ5˜‘=Ñ  A¨¨v©Ñ$6ؐC‘ˆAð5˜‘=Ò  A¨¨v©Ò$6àˆDyØ ˆØ”#a“&‰j˜DѠؐA‘ˆAð”#a“&‰j˜DÒ à ”A“‰JˆÙ؈ˆf‰ aÑð €Hð     E˜&‘MÑ !Ø$ V™}×0Ñ0°¸Ó<ˆE&‰M˜!Ñ Ø ˜%Ñ  F¨e°KÑ.@À5ÈÑCVÑ.VÑ$VÜ*¨5°©=¸Ñ+;¸ZÓHˆE&‰M˜!Ñ Ø €Hr(cóÒ—t|«t|«\}}d|vrg|d<g}|dD] }t|||«}|j|«Œ"||d<d|vr;t    |dj ««D]\}}|D]}||dvsŒ i|d|<ŒŒ|dD]5}|d|vsŒ d|vrg|d<|d|dvsŒ|dj|d«Œ7d|vr|d|dvr i|d|d<|S)Nr5rr0r/rqr3r©)rXr›rEr)rvrK)r1r™rðr5r+r~Úargs1rls        r)rvrvD sG€ÜÔÜ)¨%Ó0Ñ€M1Ø UÑØˆˆf‰ Ø €DØ 6‰]òˆÜ a˜ Ó %ˆØ  ‰ Aðð€Eˆ&Mؐ%ÑܘU 7™^×1Ñ1Ó3Ó4ò    *‰HˆAˆuØò *Ø˜E &™MÒ)Ø')E˜&‘M !Ò$ñ *ð    *ð
6‰]ò5ˆØ ˆV‰9˜Ò Ø %Ñ'Ø%'kÑ"ؐ‰y  kÑ 2Ò2ؐkÑ"×)Ñ)¨!¨F©)Õ4ð 5ð 5јU 8™_°E¸&±MÑAØ)+ˆˆf‰ e˜H‘oÑ&Ø €Lr(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*\ZcóƗt|t«rddiSt|t«rddiSt|t«rddiSt|t«r|St t |««‚)Nr4r7r5r¼)rër8r:r¼ruÚAssertionErrorrÎ)r™s r)Ú_ensure_exprdictrJg s_€Ü!”SÔØ˜IÐ&Ð&ܐ!”UÔØ˜FÐ#Ð#ܐ!”WÔØ˜IÐ&Ð&ܐ!”TÔØˆÜ
œ˜a›Ó
!Ð!r(có —||vrt||«S|j«}tj|«rddiStj|«}|r?d|j «vr)|j d«rtdt|«›d«ddiStj|«}|r?d|j «vr)|j d«rtdt|«›d«ddiSdD][}t||¬    «jd
|zd
z«Dcgc]}|j«‘Œc}D]}||vsŒt||«ccSŒ]i}tj|«rt|d d ||«}ngtj|«}|rP|j d«}t|j d«||«}|rd |vr|d =|s|d|vrt||d«S|ddvrdddidœS|stdt|«›d«|Scc}w)Nr4r¼rqz6determineexprtype: selected kind types not supported (r±r7r5)ú+r¾rrÀr2rirr rnrr·r"r)r4rpz4determineexprtype: could not determine expressions (z) type.
)rJr¦Údetermineexprtype_re_1rÒÚdetermineexprtype_re_2r!rÓr2rÎÚdetermineexprtype_re_3r'r(Údetermineexprtype_re_4rØÚdetermineexprtype_re_5)    r%r0ÚrulesróÚoprïr»rôÚrns             r)rØrØs s€Ø ˆt|Ü  T¡
Ó+Ð+Ø :‰:‹<€DÜ×#Ñ# DÔ)ؘIÐ&Ð&Ü×$Ñ$ TÓ*€AÙØ Q—[‘[“]Ñ " q§w¡w¨v¤Ü ØHÌÈdËÈ ÐTWÐXô Zà˜IÐ&Ð&Ü×$Ñ$ TÓ*€AÙØ Q—[‘[“]Ñ " q§w¡w¨v¤Ü ØHÌÈdËÈ ÐTWÐXô Zà˜FÐ#Ð#Ø"ò1ˆÜ%3°DÀÔ%C×%IÑ%IÈ#ÐPRÉ(ÐUXÉ.Ó%YÖZ !—'‘'•)ÒZò    1ˆAؐDŠyÜ'¨¨Q©Ó0Ô0ñ    1ð1ð     €AÜ×#Ñ# DÔ)Ü ˜d 1 R˜j¨$°Ó 6‰ä "× (Ñ (¨Ó .ˆÙ Ø—‘˜“ˆBÜ! !§'¡'¨&£/°4¸Ó?ˆAِZ 1‘_ؐjMÙØa‘5˜E‘>Ü+¨E°"°Q±%©LÓ9Ð9Ø ˆAw%ÑØ'¸#¸s¸ÑDÐDÙ ÜØBÄ4ÈÃ:À,ÈiÐ Xô    Zà €Hùò+[sÄHr¹có6—t|«d}t|t«rA|D]:}|r%|ddvr|dtvrŒtr |dtvrŒ*|t |||¬«z}Œ<|Sd}d}d}|d}|dk(ryg}    d|vr|d}d|vr[|d}
|dD]/} t | ||    «} t|
| «rŒ|    j| «Œ1|dd    k(s|    rd
d j|    «›d }d} d |vr9t|d j««D]} | ›|tz›| ›d|d | ›} Œ|jdg«dd}|d    k(rd|vr|jd«|r"| ›|tz›dd j|«›d|›} d}d|vrt|d|tz«}d}d|vrt|d|tz«}|dk(rd}d}d|vr$d|d›d }|d|    vr|    j|d«t |d|tz|¬«}t!||d|    |tz|¬«}
d}d|vr
|sd|d›}d|vrNd}t|dj#««D](\} }|›|tz›d| ›d
d j|«›d }Œ*||z}|dk(r|dk(rd}|›|›|›d|›|›|›d|›| ›|›|
›|›|›|›d|›d|›}|S) Nr
r1r«rqrr›r5r0rúr6r&r7rr­r
Úcallbackúintent(z) rrr¥r©z     result (r/rz! in rzentry ržr¡zend )rXrërvr#r$r“rErr)rÛrwrrrÏÚ use2fortranÚcommon2fortranÚ vars2fortranrK)r1rerrirhr¨rqr5Ú    blocktypeÚargslr0r+rr~Ú
intent_lstrrr©r/ÚmessÚ entry_stmtsrùs                      r)r“r“  sS€ôÔØ
€Cܐ%œÔØò    LˆAِQw‘ZÐ#=Ñ=ؐV‘9¤    Ñ)ØÝ  6¡´)Ñ!;ØØÔ(¨¨C¸lÔKÑK‰Cð     Lðˆ
Ø €FØ €DØ €Dؐg‘€IؐIÒØØ €EØ ØV‰}ˆØ ØV‰}ˆØv‘ò     ˆAܘ!˜U EÓ*ˆAÜ$ T¨!¡WÕ-Ø— ‘ ˜Q•ð     ð ‰>˜ZÒ '©5ؐs—x‘x “Ð' qÐ)ˆDØÐؘUÑ"ܐeÐ.Ñ/×4Ñ4Ó6Ó7ò    RˆAá  #¬¢-²°EÐ:LÑ4MÈaÒ4Pð RÑ ð    R𗑘8 RÓ(©Ð+€JؐJÒ :°Ñ#;Ø×ј*Ô%Ùá,¨c´G«mØŸH™H ZÕ0±$ð8Ðð €CØ ~ܘ% ™,¨¬g© Ó6ˆØ €Fؐ5ÑÜ  h¡°´w±Ó?ˆØ Ð"Ò"ØˆØ €Fؐ5ÑØ˜U 8™_Ð-¨QÐ/ˆØ ‰? %Ñ 'Ø L‰L˜˜x™Ô )Ü ˜E &™M¨3´©=À|Ô T€DÜ Ø ˆuV‰}˜e S¬7¡]Àô O€Dà €DØ ™|ؐu˜V‘}oÐ&ˆØ%ÑØˆ ܘ˜w™×-Ñ-Ó/Ó0ò    R‰DˆAˆqØ(˜M¨#´©-¨¸¸q¸cÀÀ3Ç8Á8ÈAÃ;À-ÈqÐQ‰Kð    RàkÑ!ˆØLÒ  T¨^Ò%;Øˆá ‰V’Y¡¡dªF±DÑ:JÉCÑQUÑW]Ñ_cÒehÒjsÑuyð {€Cà €Jr(c
óėd}t|j««D]A}|dk(r|›|›ddj||«›}Œ$|›|›d|›ddj||«›}ŒC|S)Nr
rÈzcommon r&zcommon /z/ )rvrwrÛ)rrerir~s    r)rYrYê s{€Ø
€CÜ &—+‘+“-Ó  òBˆØ Š=ؐE˜#˜˜g c§h¡h¨v°a©yÓ&9Ð%:Ð;‰CàE˜#˜˜h q c¨¨C¯H©H°V¸A±YÓ,?Ð+@ÐA‰Cð    Bð
€Jr(cóœ—d}t|j««D]­}|›|›d|›d}||ik(r|r |ddk(r|dd}Œ%d||vr ||dr|›d}d||vr]||drUd}t||dj««D]1}|||d|k(r |›|›|›}d}Œ|›|›|›d    ||d|›}d}Œ3|sŒ |ddk(sŒ©|dd}Œ¯|S)
Nr
zuse r&r rÊz only:rÌr­z=>rP)rrerirór³r~s      r)rXrXô s4€Ø
€CÜ #—(‘(“*Ó òˆØcU˜$˜q˜c Ð#ˆØ ˆq‰6RŠ<ِs˜2‘w #’~ؘ#˜2hØ Ø S˜‘VÑ   A¡ v¢ØE˜.ˆCØ C˜‘F‰?˜s 1™v eš}؈Aܘ#˜a™& ™-×,Ñ,Ó.Ó/ò Ø˜˜A™˜u™  aÑ(Ò(Ø ˜E !  Q C˜.CØ‘Aà ˜E !  Q C r¨#¨a©&°©-¸Ñ*:Ð);Ð<CØ‘Að  ò 3r‘7˜c“>ؐcr(‰Cð%ð& €Jr(có–—|d}g}|D]-}    t«d|›}||«sŒ|j|«Œ/|S#t$rYŒ=wxYw)Nr
Ú    isintent_)Úglobalsr)r)rjr³rir
rfs     r)Útrue_intent_listre sg€Ø
ˆh‰-€CØ
€CØò#ˆð    #Ü“    ˜I f XÐ.Ñ/ˆAñvØ—
‘
˜6Õ"ð#ð €Jøô ò    Ù ð    úsŽ<¼    AÁAc    ó—t|«d}g}|D]}||dvsŒ |j|«Œd|vr4|dD],}||vr||vsŒ |j|«Œtd|›d«Œ.d|vr|j|d«|s4t    |j ««D]}||vsŒ|j|«Œ|D]/}d||vr7||dD],}||vsŒd||vsŒ|||dvsŒtd|›d    |›d
«Œ.d |vrn||d vrgt ||«r    |›|›d |›}|›|›d |›}t||«r    |›|›d|›}||vrd||vrŒd}    |dD]}
||
dk(sŒ |
ddk(sŒd}    n|    rŒ´||vrt|«td|›d«ŒÓ||dk(r|ddk7s|jd«rŒõd||vr?d||vrd||dvr||vr    |›|›d |›}Œt||«td|›d«Œ;||d} | dk(rd||vr| ›d||d›d} i} d ||vr    ||d } nd!||vr||d!} d"| vr| d"d#vr | ›d$| d"›d} n>| ›d"| d"›} n3d%| vr | ›d&| d%›} d'| vr | ›d(| d'›d} n| ›d} nd'| vr | ›d)| d'›d} d*} d||vrN||dDcgc]}|d+vr|‘Œ
}}|rd,|vrd-|vr|jd-«|r| ›d.d/j|«›} d/} d0||vr!| ›| ›d1d/j||d0«›d} d/} d2||vr+t||«}|r| ›| ›d3d/j|«›d} d/} d4||vr!| ›| ›d5d/j||d4«›d} d/} d||vr!| ›| ›d6d/j||d«›d} d/} d7||vrF||d7}||dd8vr)    t|«}d|j›d/|j ›d}| ›d9|›d7|›} n| ›d9|›} |›|›| ›}Œ2|Scc}w#t"$rYŒ/wxYw):Nr
r0r‹zvars2fortran: Confused?!: "z" is not defined in vars.
rªruz;vars2fortran: Warning: cross-dependence between variables "z" and "r¹r3zintent(callback) z    external z    optional r4rr/rqr1rúrz*vars2fortran: No definition for argument "rmr©rnrz(vars2fortran: No typespec for argument "rhrrr6r7rorpr)rr¦z*(rXz(len=rIz,kind=z(kind=r­)rz
intent(in)z intent(out)rÂr&rr7r
rWrtzcheck(zdepend(rq)r¼r z :: )rXr)rorêrvrwrÚ
isoptionalÚshowr2rrÏrÛrerÛr5ÚimagrÆ)r1r0r5rerriÚnoutr+r#rárlÚvardefrõr³rërör³rÿs                  r)rZrZ s÷€ÜÔØ
€CØ €DØ òˆØ f‘ Ò Ø K‰K˜NððuÑØ|Ñ$ò    RˆAؐD‰yؘD’=Ø—K‘K •NäØ1°!°Ð4OÐPõRð     RðUÑØ  ‰ E˜*Ñ%Ô&٠ܐd—i‘i“kÓ"ò    ˆAؘŠ}Ø— ‘ ˜A•ð    ðód$ˆØ t˜A‘wÑ Ø˜!‘W˜XÑ&ò iØ˜’9 ¨T°!©WÒ!4¸¸dÀ1¹gÀhÑ>OÒ9OÜØUÐVWÐUXÐX_Ð`aÐ_bÐbfÐgõið ið ˜%Ñ  A¨¨{Ñ);Ñ$;Ü   a¡Ô)ؘ˜c˜UÐ"3°A°3Ð7ØE˜#˜˜i¨ sÐ+ˆCܘ$˜q™'Ô"ؘ˜c˜U )¨A¨3Ð/ØD‰y˜Z¨t°A©wÑ6ØØˆDؘ6‘]ò Ø˜˜&™    “> a¨¡j°JÓ&>ؐDÙð ñØØ D‰=Ü ŒJÜ Ð@ÀÀÀ4ÐHÔ IØ Ø f‘ Ò ØW‰~ Ò+¨u¯y©y¸Ô/Bð
Ø ˜T !™WÑ $ؘT !™WÑ$¨°t¸A±w¸zÑ7JÑ)Jؘ‘9Ø ˜E #  i°¨sÐ3CÙÜ a‘ŒMÜ Ð>¸q¸cÀÐFÔ G٠ؐa‘˜Ñ$ˆØ VÒ  
¨d°1©gÑ 5ؐx˜q  a¡¨Ñ!4Р5°QÐ7ˆFØˆØ ˜T !™WÑ $ؘA‘w˜~Ñ.‰HØ ˜t A™wÑ &ؘA‘w˜~Ñ.ˆHØ (‰?ؘ‰} 
Ñ*Ø"˜8 2 h¨s¡m _°AÐ6‘à"˜8 1 X¨c¡] OÐ4‘Ø hÑ Øx˜u X¨e¡_Ð$5Ð6ˆFؘÑ!Ø"˜8 6¨(°6Ñ*:Ð);¸1Ð=‘à"˜8 1˜‘Ø xÑ Øx˜v h¨vÑ&6Ð%7°qÐ9ˆFØ ˆØ ˜˜a™Ñ  Ø# A™w zÑ2ö.˜!Ø  Ñ,òð.ˆDð.á  °Ñ 4¸È$Ñ9Nð — ‘ ˜MÔ*ÙØ"˜8 2 c§h¡h¨t£nÐ%5Ð6ØØ ˜$˜q™'Ñ !ؐx ˜s *¨S¯X©X°d¸1±g¸kÑ6JÓ-KÐ,LÈAÐNˆF؈AØ t˜A‘wÑ Ü" 4¨¡7Ó+ˆCÙØ"˜8 A 3 g¨c¯h©h°s«m¨_¸AÐ>ØˆAØ d˜1‘gÑ Øx ˜s &¨¯©°$°q±'¸'Ñ2BÓ)CÐ(DÀAÐFˆF؈AØ t˜A‘wÑ Øx ˜s '¨#¯(©(°4¸±7¸8Ñ3DÓ*EÐ)FÀaÐHˆF؈AØ $q‘'‰>ؐQ‘˜‘ ˆAؐA‰wzÑ"Ð&CÑCðܘQ›AؘAŸF™F˜8 1 Q§V¡V H¨AÐ.Aðx˜t A 3 a¨ sÐ+‰Fàx˜t A 3Ð'ˆFؐcU˜6˜(Ð#ŠðId$ðJ €JùòM.øô@!òÙðúsÊ O-Î&(O2Ï2    O>Ï=O>có4—tdd«t|t«tdd«gat    t
d«}tdd«t D](}td|j›dd«t||«}Œ*tdd«t|«}t|zS)NzReading fortran codes...
rzPost-processing...
z"Applying post-processing hooks...
z  r¹zPost-processing (stage 2)...
)
r2rÙr<rrtrÚpost_processing_hooksÚ__name__Útraverserg)ÚfilesÚpostlistÚhooks   r)Ú crackfortranrs s–€ô Ð (¨!Ô,ܐEœ9Ô%Ü Ð " AÔ&Ø€KÜœ 1™Ó&€HÜ Ð 1°1Ô5Ü%ò,ˆÜ"T—]‘]O 2Ð&¨Ô*ܘH dÓ+‰ð,ô Ð ,¨aÔ0ܘ(Ó#€HÜ ˜Ñ !Ð!r(cóD—t|«dz}d}dtz}||z|zS)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)r1ÚpyfÚheaderÚfooters    r)Ú crack2fortranry® s<€ô ˜5Ó
! DÑ
(€Cð€Fðôñ    €Fð
C‰<˜&Ñ  Ð r(cóx—t|t«xr)t|«dk(xrt|dttf«S)Nr2r)rëÚtuplerXr8rÂ)Úobjs r)Ú_is_visit_pairr}½ s8€Ü sœEÓ "ò /ܐC“˜A‘ ò /ä˜3˜q™6¤C¬ :Ó.ð0r(cóà—t|«r1|ddk(r|S||||g|¢­i|¤Ž}|t|«sJ‚|S|}|\}}nd|f}d}t|t«rEg}t|«D]4\}    }
t    |    |
f|||gz|g|¢­i|¤Ž\} } | €Œ$|j | «Œ6nPt|t «r>i}|j«D](\} }
t    | |
f|||gz|g|¢­i|¤Ž\}}|€Œ$|||<Œ*n|}|€|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.
        """
    rrZN)r}rërvräror)rurK)r|ÚvisitÚparentsr©r5ÚkwargsÚ
new_resultÚparentÚ
result_keyr[rÚ    new_indexÚnew_itemr”Únew_keyÚ    new_values                r)roroà sg€ô8cÔØ ˆq‰6^Ò #àˆJÙ˜3 ¨ÐA°$ÒA¸&ÑAˆ
Ø Ð !Ü! *Ô-Ð -Ð-ØÐ ؈؉ˆ
‘Cà˜ˆØˆ
ä#”tÔØˆ
Ü% c›Nò    ,‰LˆE5Ü"*¨E°5¨>¸5Ø+2°f°XÑ+=¸vð#<à,0ò#<à4:ñ#<Ñ ˆIxðÑ$Ø×!Ñ! (Õ+ñ     ,ô
CœÔ    Øˆ
ØŸ)™)›+ò    0‰JˆCÜ!)¨3°¨,¸Ø*1°V°HÑ*<¸fð";à+/ò";à39ñ";Ñ ˆGYðÑ"Ø&/
˜7Ò#ñ     0ðˆ
àÐØÐØ zÐ !Ð!r(c óî—|d\}}|\}}d„}    |dvr|dddk(sJ‚|dd}
n|dk(r|d    ddk(sJ‚|d    d}
nd
}
d
} |
0|} |
j«D]\} } t| «sŒ|    | | «} ŒnV|d k(rQ|d    dd}
|} |
j«D]1\} } t| «sŒtjd | zd zd| z| «} Œ3| "| |k7rt    d|›d|›d|›d| ›d    d«|| fSy
)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 cóz—tjd|zdz||«}tjd|zdz||«}|S)Nz[*]\s*\brŸz\b\s*[\[]\s*0\s*[\]])r¾rÜ)Úvarnamers  r)Ú    fix_usagez8character_backward_compatibility_hook.<locals>.fix_usagesB€Ü—‘{ WÑ,¨uÑ4°g¸uÓEˆÜ—‘u˜w‘Ð)@Ñ@Ø ó'ˆàˆ r()rrtéýÿÿÿrr0rrqržNÚ callstatementz
(?<![&])\brŸrŸzcharacter_bc_hook[ršz ]: replaced `z` -> `z`
)rKÚ ischaracterr¾rÜr2)r6r€r©r5rÚ
parent_keyÚ parent_valuer”rrŒÚ    vars_dictrˆr‹Úvds              r)Ú%character_backward_compatibility_hookr”sv€ð ' r™{Ñ€J ؁J€Cˆòð Ð+Ñ+ؐr‰{˜1‰~ Ò'Ð'Ð'ؘB‘K ‘N‰    Ø     ŠØr‰{˜1‰~ Ò'Ð'Ð'ؘB‘K ‘N‰    àˆ    à€IØÐ؈    Ø$Ÿ?™?Ó,ò    :‰KˆGRܘ2Ù% g¨yÓ9‘    ñ    :ð
Ò    Ø˜B‘K ‘N 6Ñ*ˆ    Øˆ    Ø$Ÿ?™?Ó,ò    O‰KˆGRܘ2ôŸF™FØ! GÑ+¨eÑ3°S¸7±]ÀIóO‘    ð        OðÐØ ˜Ò ô
Ð(¨¨ °A°c°Uð;"Ø"' ¨¨y¨k¸ð>Ø?@ô BàYÐÐðr(Ú__main__r¦z-quietz-verboser2z-fixz?Use option -f90 before -fix if Fortran 90 code is in fix form.
z-skipemptyendsz--ignore-containsz-f77z-f90r°z-hz-showz-mr¾zUnknown option 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).
zWriting fortran code to file rˆ)r)r)r&)rUr,)r
N)Nr
)r
)NN)rr)r¹F)r
F)×Ú__doc__rŒrÐrÃr†rÏr¾rcr-ÚpathlibrrƒÚ ImportErrorr
rrÚauxfuncsÚversionrur rrrrrrrrrrr½r!rrr rr>rrr=r%rr$r&rr#r"rr*r2Ú    _MAXCACHEr˜r³rnrzrªrrrwr{r}r¿rÀrr¤r¥rËrÒr§r¢rÊr—r«rhrÙÚbeforethisafterÚ fortrantypesrOrßrLrMÚ groupbegins77rÌÚ groupbegins90rÍÚ    groupendsrJÚendifsrIÚmoduleproceduresrUrNr?r@rBrCrFrGrHrArDrErQrTrXrPrRrSrKÚSr:r;rÑr,rVÚcrackline_bind_1rÒr<rWr'rlrr#rˆr”r•r–rÙrºr‚r„r‹r‘r˜rYrìrÓrÖrorprLr9r'r0rÔràrxryrzrVrXr[rcrgrtryrwrzr›rr¢r§rªr«r±rµr»rÀrÓr×rðròrîrxr>rßrrErvrMrNrOrPrQrJrØr“rYrXrerZrmrsryr}ror”r)rnrpÚfuncsrfÚf2Úf3Ú showblocklistÚargvrërorÎr‰rÝÚOSErrorÚdetailrqrvr/r'r(r)ú<module>r¬sã ðñIóTÛ ÛÛ    ÛÛ    Û Û
ÝðÛ÷$ô
à×"Ñ"€ ð €    Ø€Ø    €Ø
ۯ
€Ø€ Ø€ Ø€ ؀؀ Ø
€ð€ ؀؀ Ø€ ØÐØ€ Ø €
Ø€ Ü ˜2Ð €    Ø €    Ø€ Ø€ Ø €    ØÐØ€Ø €    Ø€ Ø€ ò#óLð€„ ØÐØ    !ò3€AØ)¨6Ð2ИÒð3à    ò6€AØ)¨9Ð5ИÒð6à €Ø€ ð
€Aðe‘)€HˆQKØ€KE‘    Òð
òò,òò1ð—
‘
Ð3°R·T±TÓ:×AÑA€ ؐ"—*‘*Ð1°2·4±4Ó8×?Ñ?€Ø"—*‘*Ð1°2·4±4Ó8×?Ñ?€Ø"—*‘*Ð1°2·4±4Ó8×>Ñ>€ò:ÐÚ8Ðò3ò>ð4'+°!ó_DðF€ðD€ ؈rz‰zؐr˜<¨°tÐ<Ñ<¸b¿d¹dóDØEKðL€ à"˜Ÿ
™
 ?؈ Ð4Ñ4°lÐEbÑ6bÐdhð6jñ$jØkm×koÑkoóqÐð"—*‘*˜_ð0?ñ?Ø@BÇÁóFØGNðO€àB—J‘J˜ð24ñ 4Ø57·T±Tó;Ø<CðDÐð(€ ؐ—‘ؐr˜=¨-¸Ð>Ñ>ÀÇÁóFØGNðO€àðñ€ 𐗑ؐr˜=¨-¸Ð>Ñ>ÀÇÁóFØGNðO€ð7€    à ˆRZ‰Zؐr˜9 i°Ð6Ñ6¸¿¹ó>Ø?DðE€
ð
 €àˆrz‰zؐy &¨&°$Ð7Ñ7¸¿¹ó?Ø@GðH€ ð)ÐØ#˜Ÿ™ØrÐ+Ð-=¸tÐDÑDÀbÇdÁdóLàðÐð"—*‘*ØÐ8Ñ8¸"¿$¹$ó@ØAKðL€à2—:‘:˜oð18ñ8Ø9;¿¹ó?Ø@KðLÐà"—*‘*ØÐ8Ñ8¸"¿$¹$ó@ØAKðL€à"—*‘*ØÐ8Ñ8¸"¿$¹$ó@ØAKðL€à"—*‘*ØÐ8Ñ8¸"¿$¹$ó@ØAKðL€à—
‘
ØÐ4Ñ4°b·d±dó<Ø=EðF€ à—‘ØÐ6Ñ6¸¿¹ó>Ø?HðI€à2—:‘:ØÐ:Ñ:¸B¿D¹DóBØCNðOÐà—
‘
˜?ð.QñQØRT×RVÑRVóXØYaðb€ à2—:‘:ØÐ@Ñ@À"Ç$Á$óHØITðUÐàˆbj‰jØÐ0Ñ0°"·$±$ó8Ø9?ð@€ àˆbj‰jØÐ0Ñ0°"·$±$ó8Ø9?ð@€ àˆrz‰zØÐ2Ñ2°B·D±Dó:Ø;BðC€ à—‘ØÐ6Ñ6¸¿¹ó>Ø?HðI€à—
‘
ØÐ4Ñ4°b·d±dó<Ø=EðF€ à ˆRZ‰ZØÐ.Ñ.°·±ó6Ø7<ð=€
à"—*‘*ØÐ6Ñ6¸¿¹ó>Ø?IðJ€à—
‘
ØÐ4Ñ4°b·d±dó<Ø=EðF€ ð%˜"Ÿ*™* _ð8Mñ&MðOQ÷OSñOSðVX÷VZñVZñOZó[ð]oðoÐà2—:‘:Ø9¸2¿4¹4óAØBMðNÐòò(𐗑ÐAÀ2Ç4Á4ÓH€Ø2—:‘:ÐAÀ2Ç4Á4ÓHÐØR—Z‘ZРkÐmo×mqÑmqÓrÐó[%ò| ó$ ò& ó
ð@—
‘
ØKÈRÏTÉTóS€ à—‘ð%Ø&(§d¡dó,€ð"—*‘*ðrðtv÷txñtxóy€à"—*‘*ð*Ø+-¯4©4ó1€ð!b—j‘jØ@À"Ç$Á$óHÐà—
‘
Ø;ó=€ àˆrz‰zØHóJ€ ð$˜Ÿ™Ð$AÀ2Ç4Á4ÓHÐò òò ò  ò u@òpò(ð8ˆbj‰jÐEÀrÇtÁtÓL€ ؈rz‰zØIÈ2Ï4É4óQ€ àˆrz‰zØ9¸2¿4¹4óA€ à—‘ð2à35·4±4ó9€ð"—*‘*ðGðIK÷IMñIMóN€ò ò"òJfòR7,óvó6 ó óò òóó<ó@\ò~òD'óT*òZ$ó&!ð"—*‘*˜^¨R¯T©TÓ2€òAðHˆrz‰zÐ,¨b¯d©dÓ3€ òò,ò4ò$"ò ó ð$(*óbòJ(ð "—*‘*˜WÓ%×+Ñ+€ò ò DðN 2—:‘:Ð1°2·4±4Ó8Ðó; ò|Mð` ó òDð6$˜Ÿ™Ð$6¸¿¹Ó=ÐØ#˜Ÿ™Ð$DÀbÇdÁdÓKÐØ#˜Ÿ™Ø1°2·4±4ó9Ðà#˜Ÿ™ M°2·4±4Ó8ÐØ#˜Ÿ™Ð$EÀrÇtÁtÓLÐò    "ð)+ó( óZGóTóò0 ózð@Ðò"ò" !ò0ð "$¨Dó?"òD9 õx×ÒÐBÔCð ˆzÓØ €EØ €EØ    €AØ    
€BØ    
€BØ€MØ XŠXabˆ\ò1ˆØ Š7Ø Ø ˆq‰TSŠ[؉AØ (Š]؈E؉GØ *Š_؈G؉EØ &Š[ÝÙØVÐXYô[àˆMØ"‰NØ Ð"Ò "؉MØ Ð%Ò %؉NØ &Š[؈IØ"‰NØ &Š[؈IØ#ˆN؉MØ $ŠY؉BØ 'Š\؉MØ $ŠY؉BØ ˆq‰TSŠ[Ù o¡d¨1£g Y¨bÐ1Õ 2٠؈B؉K٠؈B؉MÙ ð 2ِQ“— ’ ”Ø— ’ ˜Q•ð LŠL˜Oðc1õd ­}Ùðð ô     ñ˜EÓ"€HÝÙÐ/±´[Ó0AÐ/BÀ"ÐEÀqÔIÙ˜HÓ%ˆÙ ”+˜sÓ #ð     qØ GŠGCŒL÷    áÙ ˆXððQøð[mòØÓðûðDoò 2Ù˜) F :¨RÐ0×1Ò1ûð 2ú÷"    ð    ús5ªk
è)kê"k7ë
këkëk4ë k/ë/k4ë7l