zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
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
U
O±d¾ã
@sÜ
dZddlZddlZddlZddlZddlZddlZddlZddlmZddl    m
Z
ddl m Z ddl m ZddlmZddlmZddlZdd    lmZdd
lmZdd lmZmZdd lmZmZmZdd lm Z!ddlm"Z#ddlm$Z$ddl%Z&ddl'Z'ddl(Z(dgZ)ddl*Z*dddœZ+e+e* ,¡dZ-da.dd„Z"dd„Z/dd„Z0ej*dkrtdej1 2e 3d¡d¡ga4gZ5ga6dgZ7gZ8gZ9dd gZ:d!gZ;d"d#„e:DƒZ:d$d#„e;DƒZ;d%d&„Z<e( =d'¡Z>e>r.ej1 ?e>¡Z@e* ,¡dd(krèd)ZAnd*ZAej1 2e@d+¡ZBej1 2eBeAd,¡ej1 2eBeAd-¡fD]ZCe<eCƒqe( =d.¡ZDeDr¦ej1 ?eD¡ZEe<ej1 2eEd/d0¡ƒe<ej1 2eEd0¡ƒn2e0d1d2d3d4d5ge-ƒa4gZ5d6d7d8d9d:d;ga6dd<d=d>gZ7e0d?d@d3ge-ƒZ8dAdBgZ9ej1 FdC¡r edDƒZGeGr ej1 HeGd¡dZIe8 JeIdCg¡e9 JdEdFg¡eKejLdGƒˆZMzejNdHdIgejOeMdJZPWneQefk
rNYnNXeReP S¡d T¡ U¡ƒZVePjWdkrœe8ej1 2dKeV¡g7Z8t4ej1 2dKeV¡g7a4W5QRXej1 2ejXd!¡t4krt4 Ydej1 2ejXd!¡¡t6 Zej1 2ejXd¡¡e7 Zej1 2ejXdL¡¡dMd#„t4Dƒa4dNd#„e5DƒZ5dOd#„t6Dƒa6dPd#„e7DƒZ7eƒZ[dQdR„Z\dSdT„Z]d$dUdV„Z^GdWdX„dXeƒZ_GdYdZ„dZeƒZ`Gd[d\„d\e_ƒZaGd]d^„d^e_ƒZbGd_d`„d`e_ƒZcGdadb„dbecƒZdGdcdd„dde_ƒZeGdedf„dfe_ƒZfGdgdh„dhe_ƒZgGdidj„dje_ƒZhGdkdl„dlegƒZiGdmdn„dne_ƒZjGdodp„dpe_ƒZkGdqdr„dre_ƒZlGdsdt„dte_ƒZmGdudv„dve_ƒZnGdwd„dƒZoGdxdy„dyeoƒZpGdzd{„d{eoƒZqGd|d}„d}eqƒZrGd~d„deqƒZsGd€d„deqƒZtGd‚dƒ„dƒeqƒZuGd„d…„d…eqƒZvGd†d‡„d‡eqƒZwGdˆd‰„d‰eqƒZxGdŠd‹„d‹eqƒZyGdŒd„deoƒZzGdŽd„deoƒZ{Gdd‘„d‘e{ƒZ|Gd’d“„d“e{ƒZ}Gd”d•„d•eoƒZ~Gd–d—„d—e~ƒZGd˜d™„d™e~ƒZ€Gdšd›„d›eoƒZGdœd„deƒZ‚GdždŸ„dŸeƒZƒGd d¡„d¡e‚ƒZ„Gd¢d£„d£eƒZ…Gd¤d¥„d¥eƒƒZ†Gd¦d§„d§eƒZ‡Gd¨d©„d©e‡ƒZˆGdªd«„d«e‡ƒZ‰Gd¬d­„d­eˆƒZŠGd®d¯„d¯e‡ƒZ‹Gd°d±„d±e‰ƒZŒGd²d³„d³eoƒZGd´dµ„dµeoƒZŽd¶ZiZd·d¸„Z‘Gd¹dº„dºeoƒZ’Gd»d¼„d¼ƒZ“Gd½d¾„d¾e’e“ƒZ”Gd¿dÀ„dÀe”ƒZ•GdÁd„dÂe”ƒZ–GdÃdĄdÄeoƒZ—GdÅdƄdÆe—e“ƒZ˜GdÇdȄdÈe˜ƒZ™GdÉdʄdÊe˜ƒZšGdËd̄dÌeoƒZ›GdÍd΄dÎeoƒZœGdÏdЄdÐeœƒZGdÑd҄dÒeƒZžGdÓdԄdÔežƒZŸGdÕdքdÖeƒZ Gd×d؄dØe ƒZ¡GdÙdڄdÚe ƒZ¢GdÛd܄dÜe¡e¢ƒZ£GdÝdބdÞeœƒZ¤Gdßdà„dàeoƒZ¥Gdádâ„dâeoƒZ¦Gdãdä„däeoƒZ§Gdådæ„dæeoƒZ¨Gdçdè„dèeoƒZ©Gdédê„dêe©ƒZªGdëdì„dìe©ƒZ«Gdídî„dîe©ƒZ¬Gdïdð„dðeoƒZ­Gdñdò„dòeoƒZ®Gdódô„dôeoƒZ¯Gdõdö„döeoƒZ°Gd÷dø„døeoƒZ±Gdùdú„dúe±ƒZ²Gdûdü„düe±ƒZ³Gdýdþ„dþe±ƒZ´Gdÿd„de±ƒZµGdd„de±ƒZ¶Gdd„de±ƒZ·Gdd„de±ƒZ¸Gdd„de±ƒZ¹Gd    d
„d
e±ƒZºGd d „d e±ƒZ»Gd d„deoƒZ¼Gdd„deoƒZ½dd„Z¾dddddœZ¿dddddœZÀdd„ZÁd%dd „Zd&d!d"„ZÃeĐd#k
rØeÃdS('aZ
This file defines a set of system_info classes for getting
information about various resources (libraries, library directories,
include directories, etc.) in the system. Usage:
    info_dict = get_info(<name>)
  where <name> is a string 'atlas','x11','fftw','lapack','blas',
  'lapack_src', 'blas_src', etc. For a complete list of allowed names,
  see the definition of get_info() function below.
 
  Returned info_dict is a dictionary which is compatible with
  distutils.setup keyword arguments. If info_dict == {}, then the
  asked resource is not available (system_info could not find it).
 
  Several *_info classes specify an environment variable to specify
  the locations of software. When setting the corresponding environment
  variable to 'None' then the software will be ignored, even when it
  is available in system.
 
Global parameters:
  system_info.search_static_first - search static libraries (.a)
             in precedence to shared ones (.so, .sl) if enabled.
  system_info.verbosity - output the results to stdout if enabled.
 
The file 'site.cfg' is looked for in
 
1) Directory of main setup.py file being run.
2) Home directory of user running the setup.py file as ~/.numpy-site.cfg
3) System wide directory (location of this file...)
 
The first one found is used to get system configuration options The
format is that used by ConfigParser (i.e., Windows .INI style). The
section ALL is not intended for general use.
 
Appropriate defaults are used if nothing is specified.
 
The order of finding the locations of resources is the following:
 1. environment variable
 2. section in site.cfg
 3. DEFAULT section in site.cfg
 4. System default search paths (see ``default_*`` variables below).
Only the first complete match is returned.
 
Currently, the following classes are available, along with their section names:
 
    Numeric_info:Numeric
    _numpy_info:Numeric
    _pkg_config_info:None
    accelerate_info:accelerate
    agg2_info:agg2
    amd_info:amd
    atlas_3_10_blas_info:atlas
    atlas_3_10_blas_threads_info:atlas
    atlas_3_10_info:atlas
    atlas_3_10_threads_info:atlas
    atlas_blas_info:atlas
    atlas_blas_threads_info:atlas
    atlas_info:atlas
    atlas_threads_info:atlas
    blas64__opt_info:ALL               # usage recommended (general ILP64 BLAS, 64_ symbol suffix)
    blas_ilp64_opt_info:ALL            # usage recommended (general ILP64 BLAS)
    blas_ilp64_plain_opt_info:ALL      # usage recommended (general ILP64 BLAS, no symbol suffix)
    blas_info:blas
    blas_mkl_info:mkl
    blas_opt_info:ALL                  # usage recommended
    blas_src_info:blas_src
    blis_info:blis
    boost_python_info:boost_python
    dfftw_info:fftw
    dfftw_threads_info:fftw
    djbfft_info:djbfft
    f2py_info:ALL
    fft_opt_info:ALL
    fftw2_info:fftw
    fftw3_info:fftw3
    fftw_info:fftw
    fftw_threads_info:fftw
    flame_info:flame
    freetype2_info:freetype2
    gdk_2_info:gdk_2
    gdk_info:gdk
    gdk_pixbuf_2_info:gdk_pixbuf_2
    gdk_pixbuf_xlib_2_info:gdk_pixbuf_xlib_2
    gdk_x11_2_info:gdk_x11_2
    gtkp_2_info:gtkp_2
    gtkp_x11_2_info:gtkp_x11_2
    lapack64__opt_info:ALL             # usage recommended (general ILP64 LAPACK, 64_ symbol suffix)
    lapack_atlas_3_10_info:atlas
    lapack_atlas_3_10_threads_info:atlas
    lapack_atlas_info:atlas
    lapack_atlas_threads_info:atlas
    lapack_ilp64_opt_info:ALL          # usage recommended (general ILP64 LAPACK)
    lapack_ilp64_plain_opt_info:ALL    # usage recommended (general ILP64 LAPACK, no symbol suffix)
    lapack_info:lapack
    lapack_mkl_info:mkl
    lapack_opt_info:ALL                # usage recommended
    lapack_src_info:lapack_src
    mkl_info:mkl
    numarray_info:numarray
    numerix_info:numerix
    numpy_info:numpy
    openblas64__info:openblas64_
    openblas64__lapack_info:openblas64_
    openblas_clapack_info:openblas
    openblas_ilp64_info:openblas_ilp64
    openblas_ilp64_lapack_info:openblas_ilp64
    openblas_info:openblas
    openblas_lapack_info:openblas
    sfftw_info:fftw
    sfftw_threads_info:fftw
    system_info:ALL
    umfpack_info:umfpack
    wx_info:wx
    x11_info:x11
    xft_info:xft
 
Note that blas_opt_info and lapack_opt_info honor the NPY_BLAS_ORDER
and NPY_LAPACK_ORDER environment variables to determine the order in which
specific BLAS and LAPACK libraries are searched for.
 
This search (or autodetection) can be bypassed by defining the environment
variables NPY_BLAS_LIBS and NPY_LAPACK_LIBS, which should then contain the
exact linker flags to use (language will be set to F77). Building against
Netlib BLAS/LAPACK or stub files, in order to be able to switch BLAS and LAPACK
implementations at runtime. If using this to build NumPy itself, it is
recommended to also define NPY_CBLAS_LIBS (assuming your BLAS library has a
CBLAS interface) to enable CBLAS usage for matrix multiplication (unoptimized
otherwise).
 
Example:
----------
[DEFAULT]
# default section
library_dirs = /usr/lib:/usr/local/lib:/opt/lib
include_dirs = /usr/include:/usr/local/include:/opt/include
src_dirs = /usr/local/src:/opt/src
# search static libraries (.a) in preference to shared ones (.so)
search_static_first = 0
 
[fftw]
libraries = rfftw, fftw
 
[atlas]
library_dirs = /usr/lib/3dnow:/usr/lib/3dnow/atlas
# for overriding the names of the atlas libraries
libraries = lapack, f77blas, cblas, atlas
 
[x11]
library_dirs = /usr/X11R6/lib
include_dirs = /usr/X11R6/include
----------
 
Note that the ``libraries`` key is the default setting for libraries.
 
Authors:
  Pearu Peterson <pearu@cens.ioc.ee>, February 2002
  David M. Cooke <cookedm@physics.mcmaster.ca>, April 2002
 
Copyright 2002 Pearu Peterson all rights reserved,
Pearu Peterson <pearu@cens.ioc.ee>
Permission to use, modify, and distribute this software is given under the
terms of the NumPy (BSD style) license.  See LICENSE.txt that came with
this distribution for specifics.
 
NO WARRANTY IS EXPRESSED OR IMPLIED.  USE AT YOUR OWN RISK.
 
éN)Úglob)Úreduce)Ú NoOptionError)ÚRawConfigParser)ÚDistutilsError)Ú Distribution)Úlog)Ú get_platform)Úfind_executableÚfilepath_from_subprocess_output)Ú is_sequenceÚ    is_stringÚget_shared_lib_extension)Úconfig)Úcustomized_ccompiler)Ú _shell_utilsÚ system_infoé é@)Ú32bitÚ64bitcCsts
tƒatS©N)Úglobal_compilerÚ_customized_ccompiler©rrúRd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\numpy/distutils/system_info.pyrÕsrcCs.| dd¡}| dd¡}| dd¡}d |¡S)zS
    Convert a python string into a literal suitable for inclusion into C code
    ú\z\\ú"z\"Ú
z\nz"{}")ÚreplaceÚformat)ÚsrrrÚ_c_string_literalÜs   r"cCs@|dkrtdƒ‚|dkr|Sg}|D]}| |d|g¡q$|S)aèReturn a list of library paths valid on 32 or 64 bit systems.
 
    Inputs:
      paths : sequence
        A sequence of strings (typically paths)
      bits : int
        An integer, the only valid values are 32 or 64.  A ValueError exception
      is raised otherwise.
 
    Examples:
 
    Consider a list of directories
    >>> paths = ['/usr/X11R6/lib','/usr/X11/lib','/usr/lib']
 
    For a 32-bit platform, this is already valid:
    >>> np.distutils.system_info.libpaths(paths,32)
    ['/usr/X11R6/lib', '/usr/X11/lib', '/usr/lib']
 
    On 64 bits, we prepend the '64' postfix
    >>> np.distutils.system_info.libpaths(paths,64)
    ['/usr/X11R6/lib64', '/usr/X11R6/lib', '/usr/X11/lib64', '/usr/X11/lib',
    '/usr/lib64', '/usr/lib']
    )rrz+Invalid bit size in libpaths: 32 or 64 onlyrÚ64)Ú
ValueErrorÚextend)ÚpathsÚbitsÚoutÚprrrÚlibpathsçsr*Úwin32zC:\Ú exec_prefixÚlibsÚ.Úincludezinclude/suitesparseÚlibcCsg|]}| dtj¡‘qS©ú/©rÚosÚsep©Ú.0ÚdrrrÚ
<listcomp>sr9cCsg|]}| dtj¡‘qSr1r3r6rrrr9 scs@tj ˆ¡‰t ‡fdd„tDƒ¡t ‡fdd„tDƒ¡dS)z5Add a package manager root to the include directoriesc3s|]}tj ˆ|¡VqdSr©r4ÚpathÚjoinr6©Z library_rootrrÚ    <genexpr>(sz"add_system_root.<locals>.<genexpr>c3s|]}tj ˆ|¡VqdSrr:r6r=rrr>*sN)r4r;ÚnormpathÚdefault_lib_dirsr%Ú    _lib_dirsÚdefault_include_dirsÚ _include_dirsr=rr=rÚadd_system_root!s ÿÿrDÚvcpkgrÚx86Úx64Ú    installedz-windowsz-windows-staticÚcondaú..ÚLibraryz/usr/local/libz/opt/libz/usr/libz/opt/local/libz/sw/libz/usr/local/includez /opt/includez/opt/local/include/ufsparsez/opt/local/includez /sw/includez/usr/include/suitesparsez/usr/local/srcz/opt/srcz/sw/srcz/usr/X11R6/libz /usr/X11/libz/usr/X11R6/includez/usr/X11/includez /usr/lib/X11z/usr/lib/*/libX11.soz/usr/lib/X11/includez/usr/include/X11ÚwZgccz-print-multiarch)ÚstdoutÚstderrz    /usr/lib/ÚsrccCsg|]}tj |¡r|‘qSr©r4r;Úisdir©r7Ú_mrrrr9rs cCsg|]}tj |¡r|‘qSrrPrRrrrr9ss cCsg|]}tj |¡r|‘qSrrPrRrrrr9ts cCsg|]}tj |¡r|‘qSrrPrRrrrr9us cCsÐg}zt}Wntk
r*tjd}YnXtj tj tj |¡¡d|¡}tj     |¡rd| 
|¡ztj  d¡}Wnt k
rˆYn&Xtj ||¡}tj     |¡r®| 
|¡tj     |¡rÌ| 
tj |¡¡|S)z¸Returns a list of files named 'fname' from
    1) System-wide directory (directory-location of this module)
    2) Users HOME directory (os.environ['HOME'])
    3) Local directory
    rú~) Ú__file__Ú    NameErrorÚsysÚargvr4r;r<ÚsplitÚabspathÚisfileÚappendÚ
expanduserÚKeyError)ÚfnameÚ    filenamesÚfZsysfileÚ    user_filerrrÚget_standard_filezs(ÿ 
 
 rcc
CsJtj |d¡}dd„|Dƒ}|dkr,|gfS| d¡p>| d¡}t|ƒ}| d¡| d¡}|rŠ|dkr|td|›d|›ƒ‚|dd…}n|d    kr¦td|›d
|›ƒ‚| ¡ d ¡}g}|rü|     ¡}|D]0}    |    sÒqÈ|    |kræ| 
|    ¡qÈ|    |krÈ|  |    ¡qÈnFg}|D]<}    |    sq|    |kr*| 
|    ¡q|    |kr| 
|    ¡q||fS) aK Parse an environment variable `env` by splitting with "," and only returning elements from `base_order`
 
    This method will sequence the environment variable and check for their
    individual elements in `base_order`.
 
    The items in the environment variable may be negated via '^item' or '!itema,itemb'.
    It must start with ^/! to negate all options.
 
    Raises
    ------
    ValueError: for mixed negated and non-negated orders or multiple negated orders
 
    Parameters
    ----------
    base_order : list of str
       the base list of orders
    env : str
       the environment variable to be parsed, if none is found, `base_order` is returned
 
    Returns
    -------
    allow_order : list of str
        allowed orders in lower-case
    unknown_order : list of str
        for values not overlapping with `base_order`
    NcSsg|] }| ¡‘qSr)Úlower)r7Úorderrrrr9»sz$_parse_env_order.<locals>.<listcomp>ú^ú!ézEnvironment variable 'z1' may only contain a single (prefixed) negation: rz,' may not mix negated an non-negated items: ú,) r4ÚenvironÚgetÚ
startswithÚlistÚcountr$rdrYÚcopyr\Úremove)
Z
base_orderÚenvZ    order_strÚnegZ order_str_lZsum_negZordersÚ unknown_orderZ allow_orderrerrrÚ_parse_env_ordersF
 
 
 
rtcOCsºtttttttttt    t
t t t ttttttttttttttttttt t!t"t#t$t%t&t't(t)t*t+t,t-t.t.t/t0t1t2t3t4t5t6t7t8t9t:t;t<t<t=t=t>t?t?t@t@tAtAtBtBtCtDtEtFdœN G| H¡tI¡}|ƒ J|¡S)zg
    notfound_action:
      0 - do nothing
      1 - display warning message
      2 - raise error
    )NÚarmplÚ
blas_armplÚ lapack_armplZ fftw3_armplÚatlasÚ atlas_threadsÚ
atlas_blasÚatlas_blas_threadsÚ lapack_atlasZlapack_atlas_threadsÚ
atlas_3_10Úatlas_3_10_threadsÚatlas_3_10_blasÚatlas_3_10_blas_threadsZlapack_atlas_3_10Zlapack_atlas_3_10_threadsÚflameÚmklÚopenblasÚopenblas_lapackÚopenblas_clapackÚblisÚ
lapack_mklÚblas_mklÚ
accelerateÚ openblas64_Zopenblas64__lapackÚopenblas_ilp64Zopenblas_ilp64_lapackÚx11Zfft_optÚfftwÚfftw2Úfftw3ÚdfftwÚsfftwÚ fftw_threadsÚ dfftw_threadsÚ sfftw_threadsÚdjbfftÚblasÚlapackÚ
lapack_srcÚblas_srcÚnumpyÚf2pyÚNumericÚnumericÚnumarrayÚnumerixZ
lapack_optZlapack_ilp64_optZlapack_ilp64_plain_optZ lapack64__optÚblas_optZblas_ilp64_optZblas_ilp64_plain_optZ blas64__optÚ boost_pythonÚagg2ÚwxÚgdk_pixbuf_xlib_2úgdk-pixbuf-xlib-2.0Ú gdk_pixbuf_2úgdk-pixbuf-2.0ÚgdkÚgdk_2úgdk-2.0Ú    gdk_x11_2ú gdk-x11-2.0Ú
gtkp_x11_2ú gtk+-x11-2.0Úgtkp_2úgtk+-2.0ÚxftÚ    freetype2ÚumfpackÚamd)KÚ
armpl_infoÚblas_armpl_infoÚlapack_armpl_infoÚfftw3_armpl_infoÚ
atlas_infoÚatlas_threads_infoÚatlas_blas_infoÚatlas_blas_threads_infoÚlapack_atlas_infoÚlapack_atlas_threads_infoÚatlas_3_10_infoÚatlas_3_10_threads_infoÚatlas_3_10_blas_infoÚatlas_3_10_blas_threads_infoÚlapack_atlas_3_10_infoÚlapack_atlas_3_10_threads_infoÚ
flame_infoÚmkl_infoÚ openblas_infoÚopenblas_lapack_infoÚopenblas_clapack_infoÚ    blis_infoÚlapack_mkl_infoÚ blas_mkl_infoÚaccelerate_infoÚopenblas64__infoÚopenblas64__lapack_infoÚopenblas_ilp64_infoÚopenblas_ilp64_lapack_infoÚx11_infoÚ fft_opt_infoÚ    fftw_infoÚ
fftw2_infoÚ
fftw3_infoÚ
dfftw_infoÚ
sfftw_infoÚfftw_threads_infoÚdfftw_threads_infoÚsfftw_threads_infoÚ djbfft_infoÚ    blas_infoÚ lapack_infoÚlapack_src_infoÚ blas_src_infoÚ
numpy_infoÚ    f2py_infoÚ Numeric_infoÚ numarray_infoÚ numerix_infoÚlapack_opt_infoÚlapack_ilp64_opt_infoÚlapack_ilp64_plain_opt_infoÚlapack64__opt_infoÚ blas_opt_infoÚblas_ilp64_opt_infoÚblas_ilp64_plain_opt_infoÚblas64__opt_infoÚboost_python_infoÚ    agg2_infoÚwx_infoÚgdk_pixbuf_xlib_2_infoÚgdk_pixbuf_2_infoÚgdk_infoÚ
gdk_2_infoÚgdk_x11_2_infoÚgtkp_x11_2_infoÚ gtkp_2_infoÚxft_infoÚfreetype2_infoÚ umfpack_infoÚamd_inforkrdrÚget_info)ÚnameÚnotfound_actionZclrrrrüñs¦±P°Qrüc@seZdZdZdS)Ú NotFoundErrorz1Some third-party program or library is not found.N©Ú__name__Ú
__module__Ú __qualname__Ú__doc__rrrrrÿLsrÿc@seZdZdZdS)ÚAliasedOptionErrorz‹
    Aliases entries in config files should not be existing.
    In section '{section}' we found multiple appearances of options {options}.NrrrrrrPsrc@seZdZdZdS)ÚAtlasNotFoundErrorzó
    Atlas (http://github.com/math-atlas/math-atlas) libraries not found.
    Directories to search for the libraries can be specified in the
    numpy/distutils/site.cfg file (section [atlas]) or by setting
    the ATLAS environment variable.NrrrrrrVsrc@seZdZdZdS)ÚFlameNotFoundErrorz¿
    FLAME (http://www.cs.utexas.edu/~flame/web/) libraries not found.
    Directories to search for the libraries can be specified in the
    numpy/distutils/site.cfg file (section [flame]).Nrrrrrr^src@seZdZdZdS)ÚLapackNotFoundErrorzì
    Lapack (http://www.netlib.org/lapack/) libraries not found.
    Directories to search for the libraries can be specified in the
    numpy/distutils/site.cfg file (section [lapack]) or by setting
    the LAPACK environment variable.Nrrrrrresrc@seZdZdZdS)ÚLapackSrcNotFoundErrorzð
    Lapack (http://www.netlib.org/lapack/) sources not found.
    Directories to search for the sources can be specified in the
    numpy/distutils/site.cfg file (section [lapack_src]) or by setting
    the LAPACK_SRC environment variable.Nrrrrrr    msr    c@seZdZdZdS)ÚLapackILP64NotFoundErrorz†
    64-bit Lapack libraries not found.
    Known libraries in numpy/distutils/site.cfg file are:
    openblas64_, openblas_ilp64
    Nrrrrrr
usr
c@seZdZdZdS)ÚBlasOptNotFoundErrorzÈ
    Optimized (vendor) Blas libraries are not found.
    Falls back to netlib Blas library which has worse performance.
    A better performance should be easily gained by switching
    Blas library.Nrrrrrr |sr c@seZdZdZdS)ÚBlasNotFoundErrorzä
    Blas (http://www.netlib.org/blas/) libraries not found.
    Directories to search for the libraries can be specified in the
    numpy/distutils/site.cfg file (section [blas]) or by setting
    the BLAS environment variable.Nrrrrrr ƒsr c@seZdZdZdS)ÚBlasILP64NotFoundErrorz„
    64-bit Blas libraries not found.
    Known libraries in numpy/distutils/site.cfg file are:
    openblas64_, openblas_ilp64
    Nrrrrrr Šsr c@seZdZdZdS)ÚBlasSrcNotFoundErrorzè
    Blas (http://www.netlib.org/blas/) sources not found.
    Directories to search for the sources can be specified in the
    numpy/distutils/site.cfg file (section [blas_src]) or by setting
    the BLAS_SRC environment variable.Nrrrrrr‘src@seZdZdZdS)ÚFFTWNotFoundErrorzÝ
    FFTW (http://www.fftw.org/) libraries not found.
    Directories to search for the libraries can be specified in the
    numpy/distutils/site.cfg file (section [fftw]) or by setting
    the FFTW environment variable.Nrrrrrr™src@seZdZdZdS)ÚDJBFFTNotFoundErrorzë
    DJBFFT (https://cr.yp.to/djbfft.html) libraries not found.
    Directories to search for the libraries can be specified in the
    numpy/distutils/site.cfg file (section [djbfft]) or by setting
    the DJBFFT environment variable.Nrrrrrr¡src@seZdZdZdS)ÚNumericNotFoundErrorzw
    Numeric (https://www.numpy.org/) module not found.
    Get it from above location, install it, and retry setup.py.Nrrrrrr©src@seZdZdZdS)ÚX11NotFoundErrorzX11 libraries not found.Nrrrrrr¯src@seZdZdZdS)ÚUmfpackNotFoundErrora
    UMFPACK sparse solver (https://www.cise.ufl.edu/research/sparse/umfpack/)
    not found. Directories to search for the libraries can be specified in the
    numpy/distutils/site.cfg file (section [umfpack]) or by setting
    the UMFPACK environment variable.Nrrrrrr³src@sîeZdZdZdZdZdZiZeZ    e
e fdd„Z dd„Z d    d
„Zd d „Zd d„Zdd„Zdd„Zd6dd„Zdd„Zd7dd„Zd8dd„Zd9dd„Zd:d!d"„Zd#d$„Zd;d&d'„Zd(d)„Zgfd*d+„Zgfd,d-„Zd.d/„Zd0d1„Zd2d3„Z d4d5„Z!dS)<rz= get_info() is the only public method. Don't use others.
    NrÚALLc    Cs²i|j_g|_tj |¡tj |¡tj t¡dtj t¡t|j    ƒdddœ}t
|ƒ|_ g|_ |j   tdƒ¡|j   tdƒ¡| ¡|jdk    rž|j  |jd¡|_    t|j    tƒs®t‚dS)NÚ)Ú library_dirsÚ include_dirsÚruntime_library_dirsÚrpathÚsrc_dirsÚsearch_static_firstÚextra_compile_argsÚextra_link_argsz.numpy-site.cfgzsite.cfgr)Ú    __class__ÚinfoZlocal_prefixesr4Úpathsepr<Údefault_runtime_dirsÚdefault_src_dirsÚstrrÚ ConfigParserÚcpÚfilesr%rcÚparse_config_filesÚsectionÚ
getbooleanÚ
isinstanceÚintÚAssertionError)Úselfr@rBÚdefaultsrrrÚ__init__Ës,
 
 
 
ú
 
ÿzsystem_info.__init__cCs8|j |j¡|j |j¡s4|jdk    r4|j |j¡dSr)r%Úreadr&Ú has_sectionr(Ú add_section©r-rrrr'ãs
zsystem_info.parse_config_filescCs¸| ¡}| ¡}| ¡}| |jdd¡i}|D]€}| ||g¡}|dk    rZt|f|Žnt d|¡|r2| ||g¡}|dk    r¤|d=| d¡|d<t|f|Žq2t d|¡q2|S)Nr)Úkeyz"Library %s was not found. IgnoringÚ    librariesrrz*Runtime library %s was not found. Ignoring)    Ú get_librariesÚ get_lib_dirsÚget_runtime_lib_dirsr%Ú
check_libsÚ dict_appendrrÚpop)r-r-ÚdirsZr_dirsrr0ÚirrrÚcalc_libraries_infoés$zsystem_info.calc_libraries_infocKs>|r,| ¡}t|f|Ž| ¡}t|f|Ž||j|jj<dSr)r>r:Úcalc_extra_infoÚ saved_resultsrr)r-rZlib_infoÚ
extra_inforrrÚset_infos   zsystem_info.set_infocsv‡fdd„|Dƒ}t|ƒdkr,|| d¡St|ƒdkr@|dStjdkrPtƒ‚ttjjˆjd d |¡¡d    ƒ‚dS)
a¸ Ensure that only one of `options` are found in the section
 
        Parameters
        ----------
        *options : list of str
           a list of options to be found in the section (``self.section``)
 
        Returns
        -------
        str :
            the option that is uniquely found in the section
 
        Raises
        ------
        AliasedOptionError :
            in case more than one of the options are found
        csg|]}ˆj ˆj|¡‘qSr)r%Ú
has_optionr()r7Úoptr3rrr9#sz1system_info.get_option_single.<locals>.<listcomp>rhTrNz[{}]z, )r(Úoptions)ÚsumÚindexrrr r(r<)r-rEÚfoundrr3rÚget_option_singles  
ÿzsystem_info.get_option_singlecCs|jj|jkSr)rrr@r3rrrÚhas_info1szsystem_info.has_infocCsFi}dD]8}|j |j|¡}tj |¡}|r||i}t|f|Žq|S)z˜ Updates the information in the current information with
        respect to these flags:
          extra_compile_args
          extra_link_args
        )rr)r%rkr(rZ NativeParserrYr:)r-rr4rDÚtmprrrr?4s zsystem_info.calc_extra_infocCs<d}| ¡s¦d}t |jjd¡t|dƒr4| ¡|r€| ¡s€|dkr\tj|j    j
ddn$|dkrt|     |j    j
¡‚n t t |ƒƒ‚| ¡sœt d¡|  ¡n
t d¡|j |jj¡}t ¡tjkr2|r2| ¡D]R\}}t|ƒ}|d    krt|ƒd
kr|d d …d |dd …}t d||¡qÔt d¡t |¡S)zv Return a dictionary with items that are compatible
            with numpy.distutils.setup keyword arguments.
        rrhú:Ú    calc_infoé©Ú
stacklevelz  NOT AVAILABLEz  FOUND:)Úsourcesr5iNéxz ...
...
...iˆÿÿÿz     %s = %sr)rJrrrrÚhasattrrMÚwarningsÚwarnÚ notfounderrorrr$ÚreprrBr@rkZ get_thresholdÚINFOÚitemsr#ÚlenroÚdeepcopy)r-rþÚflagÚresÚkÚvrrrrüDs4
 
 
 
 
zsystem_info.get_infocCsL|j ||¡ tj¡}|j}|rrt|ƒrr|d}|D]}|tjkr4|}qLq4|d|ksnt     d|d|f¡|}|r¼|tjkr¼tj|}|dkr²t     d|j
j d|f¡gStj   |¡rNtj  |¡g|}t|dgƒ}t|ƒdkr¼tj  |¡}    tj  |    ¡d}    |    dd    …d
kr¼t     d |jd|    d    d…f¡|    d    d…|jd<nn| tj¡}
g} |
D]P}tj  |¡rb|  |¡d D],} tj  || ¡} tj  | ¡r‚|  | ¡q‚qb| |}|j |j|¡ tj¡}| |¡g}|D]L}t|ƒdkrtj  |¡stjd |ddqæ||kræ| |¡qæt d|d |¡¡|S)Néÿÿÿÿrz Setting %s=%sÚNonezDisabled %s: %sz (%s is None)Ú
_lib_namesrhér0z#Replacing _lib_names[0]==%r with %r)r/r0zSpecified path %s is invalid.rNrOz ( %s = %s )rL)r%rkrYr4r Ú dir_env_varr rjrrrrr;r[ÚdirnameÚgetattrrZÚbasenameÚsplitextrbrQr\r<r(r%rTrUÚdebug)r-r(r4r<Úenv_varZe0Úer8ÚlÚbZdsZds2ÚddÚd1Z default_dirsÚretrrrÚ    get_pathshsl
 
ÿÿ  ÿ 
 
 
zsystem_info.get_pathsrcCs| |j|¡Sr©rqr(©r-r4rrrr7Ÿszsystem_info.get_lib_dirsrcCs | |j|¡}|dgkrg}|S)Nrrr)r-r4r;rrrr8¢s
z system_info.get_runtime_lib_dirsrcCs| |j|¡SrrrrsrrrÚget_include_dirs¨szsystem_info.get_include_dirsrcCs| |j|¡SrrrrsrrrÚ get_src_dirs«szsystem_info.get_src_dirscCsjz|j |j|¡}Wn6tk
rJ|s0gYSt|ƒrB|gYS|YSXdd„dd„| d¡DƒDƒS)NcSsg|] }|r|‘qSrr)r7rmrrrr9·sz(system_info.get_libs.<locals>.<listcomp>cSsg|] }| ¡‘qSr)Ústrip)r7Úarrrr9·sri)r%rkr(rr rY)r-r4Údefaultr-rrrÚget_libs®s
 
zsystem_info.get_libsr5cCs*t|dƒr|j||jdS| |d¡SdS)Nrb)rxr)rSryrbrsrrrr6¹s
zsystem_info.get_librariescCsztƒ}g}|jdkr| d¡tjdkr2| d¡|jrD|tg}n
tg|}tjdkrb| d¡tjdkrv| d¡|S)    NÚmsvcú.ar+ú.libÚcygwinú.dll.aÚdarwinz.dylib)rÚ compiler_typer\rWÚplatformrÚso_ext)r-ÚcZ static_extsÚextsrrrÚlibrary_extensions¿s
 
 
 
 
 
 
 
 
zsystem_info.library_extensionscCsP| ¡}d}|D]"}| ||||g¡}|dk    rq4q|sLt dd |¡|¡|S)zåIf static or shared libraries are available then return
        their info dictionary.
 
        Checks for all libraries as shared libraries first, then
        static (or vice versa if self.search_static_first is True).
        Nú  libraries %s not found in %sri©r…Ú _check_libsrrr<)r-Úlib_dirsr-Úopt_libsr„rÚextrrrr9Ñsÿzsystem_info.check_libscCs4| ¡}| ||||¡}|s0t dd |¡|¡|S)z’If static or shared libraries are available then return
        their info dictionary.
 
        Checks each library for shared or static.
        r†rir‡)r-r‰r-rŠr„rrrrÚ check_libs2ãsÿzsystem_info.check_libs2cCs–t|ƒs t‚tjdkr ddg}ndg}|D]f}|D] }| ||||¡}|r2qTq2|r*t|ƒdksht‚|dkrx|d7}|dkrˆ||}|Sq*dS)    Nr+rr0rhr~z.dllr|F)r r,rWrÚ combine_pathsrZ)r-Úlib_dirr0r„Ú lib_prefixesr‹Úprefixr)rrrÚ    _find_libñs" 
 
 
zsystem_info._find_libc    CsXgg}}|D]@}|D]6}| |||¡}|r| |¡||krH| |¡qqq||fSr)r‘r\)    r-r‰r-r„Ú
found_dirsÚ
found_libsr0rŽZ    found_librrrÚ
_find_libs
s
 
 
zsystem_info._find_libsc CsŠt|ƒs|g}| |||¡\}}t|ƒdkr‚t|ƒt|ƒkr‚| |||¡\}}| |¡|D]}    |    |kr\| |    ¡q\||dœ}
|
SdSdS)zxFind mandatory and optional libs in expected paths.
 
        Missing optional libraries are silently forgotten.
        r©r5rN)r r”rZr%r\) r-r‰r-rŠr„r’r“Zopt_found_dirsZopt_found_libsrŽrrrrrˆs
 
zsystem_info._check_libscGst|ŽS)zjReturn a list of existing paths composed by all combinations
        of items from the arguments.
        )r)r-Úargsrrrr,szsystem_info.combine_paths)r)r)r)r)r)r5)"rrrrrdrr(r@rÿrVr@rBr/r'r>rBrIrJr?rürqr7r8rtruryr6r…r9rŒr‘r”rˆrrrrrr»s<þ
     
$7
 
 
 
 
   c@seZdZdd„ZdS)rÓcCsXi}tdƒptdƒptdƒ}tdƒ}|rTt|f|Ž|rDt|f|Ž|jf|ŽdSdS)NrrŽrr•)rür:rB)r-rrÔrÜrrrrM5s   zfft_opt_info.calc_infoN©rrrrMrrrrrÓ3srÓc@sTeZdZdZdZeZddgdgdgdœdddgd    d
gd gdœgZd d „Zdd„Z    dS)rÔrÚFFTWrúfftw3.h©Z SCIPY_FFTW3_HN©rýr-ÚincludesÚmacrosrŽÚrfftwúfftw.húrfftw.h©Z SCIPY_FFTW_HNc    CsÖ| ¡}| ¡}| |jdd¡}| ||d¡}| ||¡}|dk    r¤d}|D]:}t| ||d¡ƒt|dƒkrNt||gdd}qŠqN|r t||d    d
nd}|dk    r¼|j    f|Žd St
  d |d ¡dSdS)z8Returns True on successful version detection, else FalseZ_libsr5r-Nrrœ©rrhr©Ú define_macrosTz  %s not foundrýF) r7rtrIr(ryr9rZrr:rBrr)    r-Z    ver_paramr‰Ú    incl_dirsrDr-rr\r8rrrÚ calc_ver_infoOs, 
ÿ zfftw_info.calc_ver_infocCs|jD]}| |¡rqqdSr)Úver_infor¦)r-r=rrrrMjs
 
zfftw_info.calc_infoN)
rrrr(rdrrVr§r¦rMrrrrrÔAs ýýü    rÔc@s2eZdZdZdZeZdddgddgdgdœgZd    S)
rÕrr˜rŽržrŸr r¡r›N©rrrr(rdrrVr§rrrrrÕpsýrÕc@s.eZdZdZdZeZddgdgdgdœgZdS)rÖrZFFTW3r™ršr›Nr¨rrrrrÖ|sýrÖc@s.eZdZdZdZeZddgdgdgdœgZdS)r¸rÚ    ARMPL_DIRÚ armpl_lp64_mpr™ršr›Nr¨rrrrr¸ˆsýr¸c@s.eZdZdZdZdddgddgdgdœgZd    S)
r×rr˜rZdrfftwzdfftw.hzdrfftw.h)Z SCIPY_DFFTW_HNr›N©rrrr(rdr§rrrrrגsýr×c@s.eZdZdZdZdddgddgdgdœgZd    S)
rØrr˜r‘Zsrfftwzsfftw.hzsrfftw.h)Z SCIPY_SFFTW_HNr›Nr«rrrrr؛sýrØc@s.eZdZdZdZdddgddgdgd    œgZd
S) rÙrr˜z fftw threadsZ rfftw_threadsr’zfftw_threads.hzrfftw_threads.h)ZSCIPY_FFTW_THREADS_HNr›Nr«rrrrrÙ¤sýrÙc@s.eZdZdZdZdddgddgdgd    œgZd
S) rÚrr˜z dfftw threadsZdrfftw_threadsr“zdfftw_threads.hzdrfftw_threads.h)ZSCIPY_DFFTW_THREADS_HNr›Nr«rrrrrÚ­sýrÚc@s.eZdZdZdZdddgddgdgd    œgZd
S) rÛrr˜z sfftw threadsZsrfftw_threadsr”zsfftw_threads.hzsrfftw_threads.h)ZSCIPY_SFFTW_THREADS_HNr›Nr«rrrrrÛ¶sýrÛc@s(eZdZdZdZeZdd„Zdd„ZdS)rÜr•ZDJBFFTcCsDt |||¡}g}|D]}| | |dg¡|g¡qdd„|DƒS)Nr•cSsg|]}tj |¡r|‘qSrrPr6rrrr9És z)djbfft_info.get_paths.<locals>.<listcomp>©rrqr%r©r-r(r4Zpre_dirsr<r8rrrrqÄs
zdjbfft_info.get_pathscCs¼| ¡}| ¡}d}|D]L}| |dg¡}|r:d|i}qf| |ddtg¡}|rdg|gdœ}qfq|dkrrdS|D]@}t| |ddg¡ƒd    krvt||gd
gd |jf|ŽdSqvdS) Nzdjbfft.aÚ extra_objectsz libdjbfft.aZ    libdjbfftr•r•zfftc8.hz    fftfreq.hrN)ZSCIPY_DJBFFT_HN)rr¤)r7rtrr‚rZr:rB)r-r‰r¥rr8r)rrrrMËs,ÿ zdjbfft_info.calc_infoN)    rrrr(rdrrVrqrMrrrrrÜ¿s
rÜc@s2eZdZdZdZdgZdd„Zdd„Zdd    „Zd
S) rÆr‚ÚMKLROOTZmkl_rtc     Cs8tj dd¡}|dk    r|Stj dd¡ tj¡}d}tj |¡rvt|dƒ&}|D]}| ¡}|rP|     |¡qPW5QRXg}|D]P}| tj
¡}|D]:}    |      d¡r’tj
  |d|  |    ¡d…¡}|     |¡q~q’q~|D]^}ttj  |dd¡ƒ}
|
ttj  |d    ¡ƒ7}
|
D]*} tj tj  | d
¡¡r| SqqÔdS) Nr¯ZLD_LIBRARY_PATHrz/etc/ld.so.confÚrr‚rNÚ*zmkl*r0)r4rjrkrYr r;r[Úopenrvr\r5rlr<rGrrQ) r-Úmklrootr&Z
ld_so_confrar8Zintel_mkl_dirsr;Z
path_atomsÚmr<Zsub_dirrrrÚget_mkl_rootdirès4   
 
zmkl_info.get_mkl_rootdircCs~| ¡}|dkrt |¡n^ddlm}| ¡r6d}n| ¡rL| ¡rLd}nd}tj|tj     
|d|¡gtj     
|d¡gddS)    Nrh)Úcpur#Zintel64Ú32r0r/©r@rB) rµrr/Zcpuinfor¶Z
is_ItaniumZis_IntelZis_64bitr4r;r<)r-r³r¶Zpltrrrr/s  ýzmkl_info.__init__cCs~| ¡}| ¡}| dd¡}| ||j¡}| ||¡}|dkrBdSt|ddg|dtjdkr`nt|dgd|j    f|ŽdS)    NÚmkl_libsr5©Z SCIPY_MKL_HN©Z
HAVE_CBLASN©r¤rr+Zpthread©r5)
r7rtrIryÚ_lib_mklrŒr:rWrrB)r-r‰r¥rDr¹rrrrrMs"  ÿý
zmkl_info.calc_infoN)    rrrr(rdr¾rµr/rMrrrrrÆãs rÆc@s eZdZdS)rËN©rrrrrrrrË(srËc@s eZdZdS)rÌNr¿rrrrrÌ,srÌc@s"eZdZdZdZdgZdd„ZdS)rµrur©rªcCsX| ¡}| ¡}| d|j¡}| ||¡}|dkr6dSt|ddg|d|jf|ŽdS)NÚ
armpl_libsrºr»r¼)r7rtryÚ
_lib_armplrŒr:rB)r-r‰r¥rÀrrrrrM5s ÿýzarmpl_info.calc_infoN)rrrr(rdrÁrMrrrrrµ0srµc@s eZdZdS)r·Nr¿rrrrr·Bsr·c@s eZdZdS)r¶Nr¿rrrrr¶Esr¶c@s\eZdZdZdZddgZejdd…dkr8dgZd    gZ    n dgZd
gZ    e
Z d d „Z d d„Z dS)r¹rxÚATLASÚf77blasÚcblasNéZfreebsdZatlas_rZ    alapack_rr—c CsLt |||¡}g}|D]&}| | |dddddg¡|g¡qdd„|DƒS)Núatlas*úATLAS*ZsseZ3dnowZsse2cSsg|]}tj |¡r|‘qSrrPr6rrrr9\s z(atlas_info.get_paths.<locals>.<listcomp>r¬r­rrrrqVsÿÿzatlas_info.get_pathscCs¶| ¡}i}| dd¡}| ||j|j¡}| d|j¡}d}d}d}|D]R}    | |    |g¡}|dk    r”|    g| |    ddg¡}
| |
|g¡}|dk    r”qž|rJ|}qJt     |j
¡|dkr¶|}|dkrÂdS|  ¡} | || d¡pÞdg} | d} | rt j  | ¡} t|| gdd    |d
<|dk    r4t|f|Žt|f|Žnzd |dkrlt|f|Žt|d gd |jf|ŽdSt|f|Žt|dgd t d¡} tj| dd|jf|ŽdS|dd}|dd}d}dg}tjdkræ| d¡| ¡D]L}|D]4}t j  ||||¡}t j  |¡rö|}q,qö|rîq<qî|dk    rŒt  |¡d}|dkr„t d¡||df} tj| ddnd|d
<tf|Ž\}}t|f|Ž|jf|ŽdS)NÚ
atlas_libsr5Ú lapack_libsrÆrÇúcblas.hrr¢rƒÚlanguager|©ZATLAS_WITH_LAPACK_ATLASNr£©ZATLAS_WITHOUT_LAPACKNa
                *********************************************************************
                    Could not find lapack library within the ATLAS installation.
                *********************************************************************
                rNrOrr0r+réi€>aÙ
                    *********************************************************************
                        Lapack library (from ATLAS) is probably incomplete:
                          size of %s is %sk (expected >4000k)
 
                        Follow the instructions in the KNOWN PROBLEMS section of the file
                        numpy/INSTALL.txt.
                    *********************************************************************
                    iÚf77)r7rIryrbÚ
_lib_atlasÚ _lib_lapackrŒrrrrrtr4r;rer:rBÚtextwrapÚdedentrTrUrWrr\r…r<ÚexistsÚstatÚget_atlas_version)r-r‰rrDrÈrÉrxr—Zatlas_1r8Z    lib_dirs2rÚhÚmessageZ
lapack_dirZ lapack_nameZ
lapack_librrkrÚfnÚszÚ atlas_versionÚatlas_extra_inforrrrM^sŒ   
  ÿ  
 
 
 
 
 
 
ø     zatlas_info.calc_info)rrrr(rdrbrWrrÐrÑrrVrqrMrrrrr¹Isr¹c@seZdZddgZdd„ZdS)r»rÃrÄc
CsÒ| ¡}i}| dd¡}| ||j|j¡}| ||g¡}|dkrFdS| ¡}| ||d¡pbdg}|d}|rŠtj     
|¡}t ||gdd|d<dg|d    <t f|Ž\}}    t |f|    Žt |f|Ž|j f|ŽdS)
NrÈr5rÊrr¢rƒrËr»r¤)r7rIryrbrÐrŒrtrr4r;rer:rÖrB©
r-r‰rrDrÈrxrr×rÛrÜrrrrM¹s(  
   zatlas_blas_info.calc_infoN©rrrrbrMrrrrr»¶sr»c@seZdZddgZddgZdS)rºÚPTATLASrÂÚ    ptf77blasÚptcblasN©rrrrdrbrrrrrºÓsrºc@seZdZddgZddgZdS)r¼rßrÂràráNrârrrrr¼Øsr¼c@seZdZdgejZdS)r½r|N)rrrr¹rbrrrrr½Ýsr½c@seZdZdgejZdS)r¾r|N)rrrrºrbrrrrr¾ásr¾c@seZdZdgZeZeZdS)r¿ÚsatlasN)rrrrbrÐrÑrrrrr¿åsr¿c@seZdZdgZdd„ZdS)rÁrãc
CsÌ| ¡}i}| dd¡}| ||j¡}| ||g¡}|dkr@dS| ¡}| ||d¡p\dg}|d}|r„tj     |¡}t
||gdd|d<dg|d    <t f|Ž\}}    t
|f|    Žt
|f|Ž|j f|ŽdS)
NZ    atlas_libr5rÊrr¢rƒrËr»r¤) r7rIryrbrŒrtrr4r;rer:rÖrBrÝrrrrMîs(  
   zatlas_3_10_blas_info.calc_infoNrÞrrrrrÁësrÁc@s"eZdZddgZdgZeZeZdS)rÀrßrÂÚtatlasN)rrrrdrbrÐrÑrrrrrÀsrÀc@seZdZddgZdgZdS)rÂrßrÂräNrârrrrrÂsrÂc@s eZdZdS)rÃNr¿rrrrrÃsrÃc@s eZdZdS)rÄNr¿rrrrrÄsrÄc@s&eZdZdZdZdgZeZdd„ZdS)rÞr—ZLAPACKcCsT| ¡}| dd¡}| ||j¡}| ||g¡}|dkr<dSd|d<|jf|ŽdS)NrÉr5rÏrË)r7rIryrbr9rB)r-r‰rDrÉrrrrrM"s zlapack_info.calc_infoN)    rrrr(rdrbrrVrMrrrrrÞs
rÞc@s(eZdZdZdZeZdd„Zdd„ZdS)rßr˜Z
LAPACK_SRCc    CsFt |||¡}g}|D] }| |g| |ddg¡¡qdd„|DƒS)Nz LAPACK*/SRCZSRCcSsg|]}tj |¡r|‘qSrrPr6rrrr9;s z-lapack_src_info.get_paths.<locals>.<listcomp>r¬r­rrrrq6s
zlapack_src_info.get_pathscsœ| ¡}d‰|D]"}tj tj |d¡¡r|‰q4qˆs<dSd}d}d}d}d}|d}|d    }    ||}
||} ||d
} ||d } d }d }dd„||
 ¡Dƒdd„|    |  ¡Dƒdd„|  ¡Dƒdd„|  ¡Dƒdd„||| ¡Dƒ}‡fdd„|Dƒ}tj ˆdd¡‰|‡fdd„dDƒ7}|‡fdd„dDƒ7}|‡fdd„dDƒ7}|‡fdd„dDƒ7}dd„|Dƒ}|ddœ}|jf|ŽdS)Nrzdgesv.fzB
        ilaenv ieeeck lsame lsamen xerbla
        iparmq
        a
        bdsdc bdsqr disna labad lacpy ladiv lae2 laebz laed0 laed1
        laed2 laed3 laed4 laed5 laed6 laed7 laed8 laed9 laeda laev2
        lagtf lagts lamch lamrg lanst lapy2 lapy3 larnv larrb larre
        larrf lartg laruv las2 lascl lasd0 lasd1 lasd2 lasd3 lasd4
        lasd5 lasd6 lasd7 lasd8 lasd9 lasda lasdq lasdt laset lasq1
        lasq2 lasq3 lasq4 lasq5 lasq6 lasr lasrt lassq lasv2 pttrf
        stebz stedc steqr sterf
 
        larra larrc larrd larr larrk larrj larrr laneg laisnan isnan
        lazq3 lazq4
        a 
        gbbrd gbcon gbequ gbrfs gbsv gbsvx gbtf2 gbtrf gbtrs gebak
        gebal gebd2 gebrd gecon geequ gees geesx geev geevx gegs gegv
        gehd2 gehrd gelq2 gelqf gels gelsd gelss gelsx gelsy geql2
        geqlf geqp3 geqpf geqr2 geqrf gerfs gerq2 gerqf gesc2 gesdd
        gesv gesvd gesvx getc2 getf2 getrf getri getrs ggbak ggbal
        gges ggesx ggev ggevx ggglm gghrd gglse ggqrf ggrqf ggsvd
        ggsvp gtcon gtrfs gtsv gtsvx gttrf gttrs gtts2 hgeqz hsein
        hseqr labrd lacon laein lags2 lagtm lahqr lahrd laic1 lals0
        lalsa lalsd langb lange langt lanhs lansb lansp lansy lantb
        lantp lantr lapll lapmt laqgb laqge laqp2 laqps laqsb laqsp
        laqsy lar1v lar2v larf larfb larfg larft larfx largv larrv
        lartv larz larzb larzt laswp lasyf latbs latdf latps latrd
        latrs latrz latzm lauu2 lauum pbcon pbequ pbrfs pbstf pbsv
        pbsvx pbtf2 pbtrf pbtrs pocon poequ porfs posv posvx potf2
        potrf potri potrs ppcon ppequ pprfs ppsv ppsvx pptrf pptri
        pptrs ptcon pteqr ptrfs ptsv ptsvx pttrs ptts2 spcon sprfs
        spsv spsvx sptrf sptri sptrs stegr stein sycon syrfs sysv
        sysvx sytf2 sytrf sytri sytrs tbcon tbrfs tbtrs tgevc tgex2
        tgexc tgsen tgsja tgsna tgsy2 tgsyl tpcon tprfs tptri tptrs
        trcon trevc trexc trrfs trsen trsna trsyl trti2 trtri trtrs
        tzrqf tzrzf
 
        lacn2 lahr2 stemr laqr0 laqr1 laqr2 laqr3 laqr4 laqr5
        a¾
        laexc lag2 lagv2 laln2 lanv2 laqtr lasy2 opgtr opmtr org2l
        org2r orgbr orghr orgl2 orglq orgql orgqr orgr2 orgrq orgtr
        orm2l orm2r ormbr ormhr orml2 ormlq ormql ormqr ormr2 ormr3
        ormrq ormrz ormtr rscl sbev sbevd sbevx sbgst sbgv sbgvd sbgvx
        sbtrd spev spevd spevx spgst spgv spgvd spgvx sptrd stev stevd
        stevr stevx syev syevd syevr syevx sygs2 sygst sygv sygvd
        sygvx sytd2 sytrd
        a²
        bdsqr hbev hbevd hbevx hbgst hbgv hbgvd hbgvx hbtrd hecon heev
        heevd heevr heevx hegs2 hegst hegv hegvd hegvx herfs hesv
        hesvx hetd2 hetf2 hetrd hetrf hetri hetrs hpcon hpev hpevd
        hpevx hpgst hpgv hpgvd hpgvx hprfs hpsv hpsvx hptrd hptrf
        hptri hptrs lacgv lacp2 lacpy lacrm lacrt ladiv laed0 laed7
        laed8 laesy laev2 lahef lanhb lanhe lanhp lanht laqhb laqhe
        laqhp larcm larnv lartg lascl laset lasr lassq pttrf rot spmv
        spr stedc steqr symv syr ung2l ung2r ungbr unghr ungl2 unglq
        ungql ungqr ungr2 ungrq ungtr unm2l unm2r unmbr unmhr unml2
        unmlq unmql unmqr unmr2 unmr3 unmrq unmrz unmtr upgtr upmtr
        z econd z secnd z  srot srscl z  drot drscl z icmax1 scsum1 z izmax1 dzsum1 cSsg|] }d|‘qS)zs%s.fr©r7rarrrr9‘sz-lapack_src_info.calc_info.<locals>.<listcomp>cSsg|] }d|‘qS)zd%s.frrårrrr9’scSsg|] }d|‘qS)zc%s.frrårrrr9“scSsg|] }d|‘qS)zz%s.frrårrrr9”scSsg|] }d|‘qS)z%s.frrårrrr9•scsg|]}tj ˆ|¡‘qSrr:rå©Úsrc_dirrrr9–srJZINSTALLcsg|]}tj ˆ|d¡‘qS)zlamch.fr:©r7r))Úsrc_dir2rrr9™sZsdczcsg|]}tj ˆ|d¡‘qS)zlarfp.fr:rèrærrr9›scs"g|]}tj ˆd|d¡‘qS)Úilazlr.fr:rèrærrr9œscs"g|]}tj ˆd|d¡‘qS)rêzlc.fr:rèrærrr9scSsg|]}tj |¡r|‘qSr©r4r;r[rårrrr9¡s rÏ©rQrË©rur4r;r[r<rYrB)r-rr8ZallauxZlauxZlasrcZsd_lasrcZcz_lasrcZsclauxZdzlauxZslasrcZdlasrcZclasrcZzlasrcZoclasrcZozlasrcrQrr)rçrérrM=sN        ÿþýü
zlapack_src_info.calc_infoN)    rrrr(rdr    rVrqrMrrrrrß.s
rßzŽ
/* This file is generated from numpy/distutils/system_info.py */
void ATL_buildinfo(void);
int main(void) {
  ATL_buildinfo();
  return 0;
}
c Ksô| dg¡}| dg¡}t|ƒt|ƒf}|tkr8t|Sttƒƒ}d}i}zn|jt||d\}}|r¶t d|tj    ¡r¶|jt|dg|d\}}|s¶t
j t   d¡ddt|d    d
gd Wn˜tk
rP|D]*}t d |¡}    |    rì|     d ¡}|dk    rÎqúqÎ|dkrtj dd¡}|r0t|dt|ƒfgdnt|dgd|pFd|fYSX|stt d|¡}    |    rt|     d ¡}|dkr°t d|tj    ¡r–d}nt d|¡t d|¡n0|dkrÊt|dgdnt|dt|ƒfgd||f}
t|<|
S)Nr5rr•z!undefined reference to `_gfortranZgfortrana¿
                    *****************************************************
                    Linkage with ATLAS requires gfortran. Use
 
                      python setup.py config_fc --fcompiler=gnu95 ...
 
                    when building extension libraries that use ATLAS.
                    Make sure that -lgfortran is used for C++ extensions.
                    *****************************************************
                    rNrOÚf90)ZATLAS_REQUIRES_GFORTRANN)rËr¤z#ATLAS_(?P<version>\d+[.]\d+[.]\d+)_ÚversionZ ATLAS_VERSIONZ
ATLAS_INFOr£)Ú NO_ATLAS_INFOr`z?.?.?z*ATLAS version (?P<version>\d+[.]\d+[.]\d+)zundefined symbol: ATL_buildinfoz3.2.1_pre3.3.6z
Status: %dz
Output: %s)rðéþÿÿÿ)rkÚtupleÚ_cached_atlas_versionÚ
cmd_configrZ
get_outputÚatlas_version_c_textÚreÚsearchÚMrTrUrÒrÓr:Ú    ExceptionÚgroupr4rjr"rr) rr5rr4rƒrÛrr!Úor´ÚresultrrrrÖ±st  
ÿ
þ
     ÷
ÿ
 
 
ÿ  
 
 
ÿ
rÖc@s†eZdZeZdddddddgZdZd    d
„Zd d „Zd d„Z    dd„Z
dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!S)"rærur‚rƒrr‰rxr—ZNPY_LAPACK_ORDERcCs tdƒ}|r|jf|ŽdSdS)NrwTF©rürB©r-rrrrÚ_calc_info_armpls
 z lapack_opt_info._calc_info_armplcCs tdƒ}|r|jf|ŽdSdS)Nr‡TFrýrþrrrÚ_calc_info_mkl    s
 zlapack_opt_info._calc_info_mklcCs<tdƒ}|r|jf|ŽdStdƒ}|r8|jf|ŽdSdS)Nr„Tr…FrýrþrrrÚ_calc_info_openblass  z#lapack_opt_info._calc_info_openblascCs tdƒ}|r|jf|ŽdSdS)NrTFrýrþrrrÚ_calc_info_flames
 z lapack_opt_info._calc_info_flamecCs|tdƒ}|stdƒ}|s tdƒ}|s,tdƒ}|rx| dg¡}d|ksLd|krh| ¡}|s\dSt|f|Ž|jf|Žd    SdS)
Nr~r}ryrxr¤rÌrÍFT)rürkÚ_get_info_lapackr:rB)r-rrlrÞrrrÚ_calc_info_atlas"s& ÿ  z lapack_opt_info._calc_info_atlascCs tdƒ}|r|jf|ŽdSdS©Nr‰TFrýrþrrrÚ_calc_info_accelerate;s
 z%lapack_opt_info._calc_info_acceleratecCsZtdƒ}|sVtjtjpdddtdƒ}|sDtjtjp8dddiSt|d|fgd|S)Nr rrcrOr™Ú    fblas_srcr½)rürTrUr rrr:©r-rZinfo_srcrrrÚ_get_info_blasBszlapack_opt_info._get_info_blascCsZtdƒ}|sVtjtjpdddtdƒ}|sDtjtjp8dddiSt|d|fgd|S)Nr—rrcrOr˜Z flapack_srcr½)rürTrUrrr    r:rrrrrNsz lapack_opt_info._get_info_lapackcCsB| ¡}|r>| ¡}t|f|Žt|dgd|jf|ŽdSdS)N©rðrhr£TF)rr    r:rB)r-rZ    info_blasrrrÚ_calc_info_lapackYs  z!lapack_opt_info._calc_info_lapackcCsFi}d|d<g|d<g|d<g|d<tjd ¡|d<|jf|ŽdS)    NrÏrËr5rr¤ÚNPY_LAPACK_LIBSrT)r4rjrYrBrþrrrÚ_calc_info_from_envvarcs z&lapack_opt_info._calc_info_from_envvarcCst|d |¡ƒƒS©Nz _calc_info_{}©rfr ©r-rýrrrÚ
_calc_infomszlapack_opt_info._calc_infocCst|j|jƒ\}}t|ƒdkr,td |¡ƒ‚dtjkrB| ¡dS|D]}|     |¡rFdSqFd|krŒt
j t j ppdddt
j tj p„ddddS)NrzElapack_opt_info user defined LAPACK order has unacceptable values: {}r r—rrNrO)rtÚ lapack_orderÚorder_env_var_namerZr$r r4rjr rrTrUrrr    )r-rrsr—rrrrMps þ
 
zlapack_opt_info.calc_infoN)rrrrrVrrrÿrrrrrr    rr r rrMrrrrræús&ÿ   
 
ræc@seZdZdZdZdd„ZdS)Ú_ilp64_opt_info_mixinNcCsTt| dg¡ƒ}| dd¡}| dd¡}|jd|fkr:dS|jd|fkrLdSt|ƒS)Nr¤ÚBLAS_SYMBOL_PREFIXrÚBLAS_SYMBOL_SUFFIXF)ÚdictrkÚ symbol_prefixÚ symbol_suffixÚbool)r-rrrÚsuffixrrrÚ _check_infoŒs  z!_ilp64_opt_info_mixin._check_info)rrrrrrrrrrrˆsrc@s$eZdZeZddgZdZdd„ZdS)rçrŠr‹ZNPY_LAPACK_ILP64_ORDERcCs*t|dƒ}| |¡r&|jf|ŽdSdS)NZ_lapackTF©rürrB©r-rýrrrrrŸs
 
 z lapack_ilp64_opt_info._calc_infoN)rrrr
rVrrrrrrrrçšsrçc@seZdZdZdZdS)rèrN©rrrrrrrrrrè§srèc@seZdZdZdZdS)rérÚ64_Nrrrrrré­sréc@sveZdZeZdddddddgZdZd    d
„Zd d „Zd d„Z    dd„Z
dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS)rêrur‚r†rƒr‰rxr–ZNPY_BLAS_ORDERcCs tdƒ}|r|jf|ŽdSdS)NrvTFrýrþrrrrÿºs
 zblas_opt_info._calc_info_armplcCs tdƒ}|r|jf|ŽdSdS)NrˆTFrýrþrrrrÁs
 zblas_opt_info._calc_info_mklcCs tdƒ}|r|jf|ŽdSdS)Nr†TFrýrþrrrÚ_calc_info_blisÈs
 zblas_opt_info._calc_info_bliscCs tdƒ}|r|jf|ŽdSdS)NrƒTFrýrþrrrrÏs
 z!blas_opt_info._calc_info_openblascCsDtdƒ}|stdƒ}|s tdƒ}|s,tdƒ}|r@|jf|ŽdSdS)Nr€rr{rzTFrýrþrrrrÖs zblas_opt_info._calc_info_atlascCs tdƒ}|r|jf|ŽdSdSrrýrþrrrrãs
 z#blas_opt_info._calc_info_acceleratecCsštjtjp dddi}t|dgdtdƒ}|r@t|f|ŽnJtjtjpLdddtdƒ}|sxtjtjplddddSt|d    |fgd
|jf|Žd S) NrrcrOr
r£r–r™Frr½T)    rTrUr rr:rür rrB)r-rr–r™rrrÚ_calc_info_blasês zblas_opt_info._calc_info_blascCsvi}d|d<g|d<g|d<g|d<tjd ¡|d<dtjkrf|d d    ¡|d tjd ¡¡|jf|Žd
S) NrÏrËr5rr¤Ú NPY_BLAS_LIBSrZNPY_CBLAS_LIBSr»T)r4rjrYr\r%rBrþrrrr s
 ÿ z$blas_opt_info._calc_info_from_envvarcCst|d |¡ƒƒSrrrrrrrszblas_opt_info._calc_infocCst|j|jƒ\}}t|ƒdkr,td |¡ƒ‚dtjkrB| ¡dS|D]}|     |¡rFdSqFd|krŒt
j t j ppdddt
j tj p„ddddS)NrzAblas_opt_info user defined BLAS order has unacceptable values: {}r#r–rrNrO)rtÚ
blas_orderrrZr$r r4rjr rrTrUr rr)r-r$rsr–rrrrMs 
 
zblas_opt_info.calc_infoN)rrrr rVr$rrÿrr!rrrr"r rrMrrrrrê²s"ÿ rêc@s$eZdZeZddgZdZdd„ZdS)rërŠr‹ZNPY_BLAS_ILP64_ORDERcCs&t|ƒ}| |¡r"|jf|ŽdSdS)NTFrrrrrr,s
 
 zblas_ilp64_opt_info._calc_infoN)rrrr rVr$rrrrrrrë'srëc@seZdZdZdZdS)rìrNrrrrrrì4srìc@seZdZdZdZdS)rírr Nrrrrrrí9sríc@seZdZdZdZgZeZdS)Ú
cblas_inforÄZCBLASN)rrrr(rdrbr rVrrrrr%>sr%c@s.eZdZdZdZdgZeZdd„Zdd„Z    dS)rÝr–ZBLASc    CsÒ| ¡}| dd¡}| ||j¡}| ||g¡}|dkr<dS| ¡|d<t ¡dkr–d|d<tƒ}| dd¡}| |d¡}|rÂ|||d<dg|d    <n,|     |¡}|dk    rÂd
|d<||d<dg|d    <|j
f|ŽdS) NÚ    blas_libsr5rÚWindowsrÏrËÚ
cblas_libsr»r¤rƒ) r7rIryrbr9rtrÚsystemr%Úget_cblas_libsrB)    r-r‰rDr&rZcblas_info_objZ    cblas_optr(r0rrrrMLs*       
 
zblas_info.calc_infoc    
Cs"tƒ}t ¡}t d¡}tj |d¡}zêt
|dƒ}|  |¡W5QRXz|j |g||  ¡d}Wn&tjjtjjfk
rˆYW¢ŽdSX|ddg|ddg|ddgdgfD]X}z8|j|tj |d    ¡||d
| d g¡d |WW¢"Stjjk
r
Yq´Xq´W5t     |¡XdS) a? Check whether we can link with CBLAS interface
 
        This method will search through several combinations of libraries
        to check whether CBLAS is present:
 
        1. Libraries in ``info['libraries']``, as is
        2. As 1. but also explicitly adding ``'cblas'`` as a library
        3. As 1. but also explicitly adding ``'blas'`` as a library
        4. Check only library ``'cblas'``
        5. Check only library ``'blas'``
 
        Parameters
        ----------
        info : dict
           system information dictionary for compilation and linking
 
        Returns
        -------
        libraries : list of str or None
            a list of libraries that enables the use of CBLAS interface.
            Returns None if not found or a compilation error occurs.
 
            Since 1.17 returns a list.
        zö            #include <cblas.h>
            int main(int argc, const char *argv[])
            {
                double a[4] = {1,2,3,4};
                double b[4] = {5,6,7,8};
                return cblas_ddot(4, a, 1, b, 1) > 10;
            }úsource.cÚwt)Ú
output_dirrNr5rÄr–úa.outrr©r5rZextra_postargs)rÚtempfileÚmkdtemprÒrÓr4r;r<ÚshutilÚrmtreer²ÚwriteÚcompilertÚ    distutilsÚ    ccompilerÚ CompileErrorÚ    LinkErrorÚlink_executablerk)    r-rrƒÚtmpdirr!rOraÚobjr-rrrr*js:
 
ÿ
  ÿ
ý  zblas_info.get_cblas_libsN)
rrrr(rdrbr rVrMr*rrrrrÝFs rÝc@sZeZdZdZdZdgZgZeZe    dd„ƒZ
e    dd„ƒZ dd„Z d    d
„Z d d „Zd d„ZdS)rÇrƒÚOPENBLAScCs.z|j |jd¡WStk
r(YdSXdS)Nrr©r%rkr(rr3rrrr³szopenblas_info.symbol_prefixcCs.z|j |jd¡WStk
r(YdSXdS)Nrrr>r3rrrrºszopenblas_info.symbol_suffixc
Cs tƒ}| ¡}| dd¡}| ||j¡}| ||g¡}|jdkr~|dkr~ddlm}||d}|rŽ|jdkrŽ|     ||¡}d}n|rŽd    }d
|d <|dkršdS| 
¡}    t |f|    Ž|sÀ|  |¡sÀdSd g|d <|j rè|d d|j fg7<|jr|d d|jfg7<|S)NÚ openblas_libsr5rzr)Ú new_fcompiler)Z
c_compilerZgnu95TFrƒrËr»r¤rr)rr7rIryrbr9r€Znumpy.distutils.fcompilerr@Úcheck_msvc_gfortran_libsr?r:Ú check_symbolsrr)
r-rƒr‰rDr?rr@raZskip_symbol_checkrArrrrÁs4  
 
zopenblas_info._calc_infocCs | ¡}|dk    r|jf|ŽdSr)rrBrþrrrrMêszopenblas_info.calc_infoc     Csðg}|D]@}|D]0}tj ||d¡}tj |¡r| |¡qqdSq|jj}tj t ¡d|¡}tj |¡s|t     |¡|g|gddœ}    tj ||d¡}
tj ||d¡} t
|
dƒ} |   d |¡¡W5QRXt
| dƒ} W5QRX|    S)    Nr{ÚbuildrÏ)rr5rËz    .fobjectsz    .cobjectsrLr) r4r;r<r[r\rrÚgetcwdrQÚmakedirsr²r4) r-rr5Z library_pathsZlibraryZ library_dirÚfullpathrgr;rZ fake_lib_fileZfake_clib_filerarrrrAïs. 
 
þ  
z&openblas_info.check_msvc_gfortran_libsc     s(d}tƒ}t ¡}d ‡fdd„ˆjDƒ¡}d ‡fdd„ˆjDƒ¡}t d¡t||d}tj     |d¡}tj     |d    ¡}    z |d
}
Wnt
k
rœg}
YnXzxt |d ƒ} |  |¡W5QRX|j|g|d } z$|j| |    |d |d|
dd}Wntjjk
rd}YnXW5t   |¡X|S)NFrc3s |]}dˆj|ˆjfVqdS)zvoid %s%s%s();N©rr©r7Z symbol_namer3rrr>    s
ýþz.openblas_info.check_symbols.<locals>.<genexpr>c3s |]}dˆj|ˆjfVqdS)z    %s%s%s();NrGrHr3rrr>    s
ýþz            %(prototypes)s
            int main(int argc, const char *argv[])
            {
                %(calls)s
                return 0;
            })Ú
prototypesÚcallsr+r.rr,©r-r5rr/T)rr0r1r<Ú_require_symbolsrÒrÓrr4r;rùr2r3r²r4r5r:r6r7r9) r-rr]rƒr;rIrJr!rOr(Ú
extra_argsrar<rr3rrB    s@ýý
ú 
 þ zopenblas_info.check_symbolsN)rrrr(rdrbrLr rVÚpropertyrrrrMrArBrrrrrǬs
 
) rÇc@s$eZdZdZdZdgZdgZeZdS)rÈrƒr=Úzungqr_N)    rrrr(rdrbrLr rVrrrrrÈ:    s
rÈc@seZdZddgZdS)rÉrƒr—N)rrrrbrrrrrÉA    srÉcs6eZdZdZdZdgZddgZeZ‡fdd„Z    ‡Z
S)rÐr‹ZOPENBLAS_ILP64Z
openblas64Údgemm_Ú cblas_dgemmcs(tƒ ¡}|dk    r$|ddg7<|S)Nr¤)ZHAVE_BLAS_ILP64N©Úsuperrrþ©rrrrK    s
zopenblas_ilp64_info._calc_info) rrrr(rdrbrLr rVrÚ __classcell__rrrTrrÐD    s rÐcs(eZdZddddgZ‡fdd„Z‡ZS)rÑrPrQrOZLAPACKE_zungqrcs$tƒ ¡}|r |ddg7<|S)Nr¤)Z HAVE_LAPACKENrRrþrTrrrT    s
z%openblas_ilp64_lapack_info._calc_info)rrrrLrrUrrrTrrÑQ    s rÑc@s"eZdZdZdZdgZdZdZdS)rÎrŠZ OPENBLAS64_r rN)rrrr(rdrbrrrrrrrÎZ    s
rÎc@s eZdZdS)rÏNr¿rrrrrÏb    srÏc@s&eZdZdZdZdgZeZdd„ZdS)rÊr†ZBLIScCsf| ¡}| dd¡}| ||j¡}| ||g¡}|dkr<dS| ¡}t|ddg|d|jf|ŽdS)NÚ    blis_libsr5rƒr»)rËr¤r)r7rIryrbrŒrtr:rB)r-r‰rDrVrr¥rrrrMk    s ýzblis_info.calc_infoN)    rrrr(rdrbr rVrMrrrrrÊe    s
rÊc@s.eZdZdZdZdgZeZdd„Zdd„Z    dS)rÅa$ Usage of libflame for LAPACK operations
 
    This requires libflame to be compiled with lapack wrappers:
 
    ./configure --enable-lapack2flame ...
 
    Be aware that libflame 5.1.0 has some missing names in the shared library, so
    if you have problems, try the static flame library.
    rc
    CsÌtƒ}t ¡}t d¡}tj |d¡}tj |d¡}| dg¡}zzt |dƒ}|  |¡W5QRX|j |g|d}    z&|j|    ||d|d|d    WW¢&d
Stjjk
r¶YW¢
d SXW5t     
|¡Xd S) zS libflame does not necessarily have a wrapper for fortran LAPACK, we need to check zŸ            void zungqr_();
            int main(int argc, const char *argv[])
            {
                zungqr_();
                return 0;
            }r+r.rr,rKr5rr/TFN)rr0r1rÒrÓr4r;r<rkr2r3r²r4r5r:r6r7r9)
r-rrƒr;r!rOr(rMrar<rrrÚcheck_embedded_lapackŠ    s&
  þ
z flame_info.check_embedded_lapackcCsø| ¡}| d|j¡}| ||g¡}|dkr0dS| ¡}t|f|Ž| |¡r\|jf|Žn˜tdƒ}|sldS|D]l}t    ||t
ƒrœ|  |g¡||||<qpt    ||t ƒrÄ|  |d¡||||<qp|  |d¡||||<qp| |¡rô|jf|ŽdS)Nr5r rr) r7ryrbrŒr?r:rWrBrür*rmrkrò)r-r‰Z
flame_libsrrArÝr4rrrrM¨    s( 
 
zflame_info.calc_infoN)
rrrrr(rbrrVrWrMrrrrrÅ|    s     rÅc@s$eZdZdZddgZeZdd„ZdS)rÍr‰ÚveclibcCs2tj d¡}|r|g}n| d|j¡}dd„|Dƒ}tjdkr.t dd¡s.g}g}tƒdd…dksˆd    tƒksˆd
tƒksˆdt ¡krŽd }nd }tj     
d ¡rÒd|krÒ|r¶|  dg¡|  dg¡|  ddg¡nBtj     
d¡rd|kr|rú|  dg¡|  dg¡|  ddg¡|r.|j ||ddgddS)NZ
ACCELERATEr5cSsg|]}| ¡ ¡‘qSr)rvrd)r7r0rrrr9Ø    sz-accelerate_info.calc_info.<locals>.<listcomp>rÚ_PYTHON_HOST_PLATFORMéüÿÿÿÚi386ÚintelÚx86_64rhrz0/System/Library/Frameworks/Accelerate.framework/r‰z-msse3z5-I/System/Library/Frameworks/vecLib.framework/Headersz-Wl,-frameworkz-Wl,Acceleratez,/System/Library/Frameworks/vecLib.framework/rXz
-Wl,vecLib)rðrcr»)rrr¤) r4rjrkryrbrWrÚgetenvr    r;rÔr%rB)r-r5r–Z    link_argsr\rrrrMÑ    sV  
ÿÿ
þ þ ÿþ ÿÿþzaccelerate_info.calc_infoN)rrrr(rbr rVrMrrrrrÍÌ    srÍc@s(eZdZdZdZeZdd„Zdd„ZdS)ràr™ZBLAS_SRCcCsDt |||¡}g}|D]}| |g| |dg¡¡qdd„|DƒS)Nr–cSsg|]}tj |¡r|‘qSrrPr6rrrr9
s z+blas_src_info.get_paths.<locals>.<listcomp>r¬r­rrrrq
s
zblas_src_info.get_pathscsŽ| ¡}d‰|D]"}tj tj |d¡¡r|‰q4qˆs<dSd}d}d}‡fdd„||| ¡Dƒ}dd„|Dƒ}|d    d
œ}|jf|ŽdS) Nrzdaxpy.fao
        caxpy csscal dnrm2 dzasum saxpy srotg zdotc ccopy cswap drot
        dznrm2 scasum srotm zdotu cdotc dasum drotg icamax scnrm2
        srotmg zdrot cdotu daxpy drotm idamax scopy sscal zdscal crotg
        dcabs1 drotmg isamax sdot sswap zrotg cscal dcopy dscal izamax
        snrm2 zaxpy zscal csrot ddot dswap sasum srot zcopy zswap
        scabs1
        aÐ
        cgbmv chpmv ctrsv dsymv dtrsv sspr2 strmv zhemv ztpmv cgemv
        chpr dgbmv dsyr lsame ssymv strsv zher ztpsv cgerc chpr2 dgemv
        dsyr2 sgbmv ssyr xerbla zher2 ztrmv cgeru ctbmv dger dtbmv
        sgemv ssyr2 zgbmv zhpmv ztrsv chbmv ctbsv dsbmv dtbsv sger
        stbmv zgemv zhpr chemv ctpmv dspmv dtpmv ssbmv stbsv zgerc
        zhpr2 cher ctpsv dspr dtpsv sspmv stpmv zgeru ztbmv cher2
        ctrmv dspr2 dtrmv sspr stpsv zhbmv ztbsv
        zÛ
        cgemm csymm ctrsm dsyrk sgemm strmm zhemm zsyr2k chemm csyr2k
        dgemm dtrmm ssymm strsm zher2k zsyrk cher2k csyrk dsymm dtrsm
        ssyr2k zherk ztrmm cherk ctrmm dsyr2k ssyrk zgemm zsymm ztrsm
        csg|]}tj ˆ|d¡‘qS)z.fr:rårærrr9-
sÿz+blas_src_info.calc_info.<locals>.<listcomp>cSsg|]}tj |¡r|‘qSrrërårrrr90
s rÏrìrí)r-rr8Zblas1Zblas2Zblas3rQrrrærrM
s"    
ÿ
zblas_src_info.calc_infoN)    rrrr(rdrrVrqrMrrrrràþ    s
ràc@s*eZdZdZeZdgZdd„Zdd„ZdS)rÒrŒÚX11cCstj|ttddS)Nr¸)rr/Údefault_x11_lib_dirsÚdefault_x11_include_dirsr3rrrr/:
sþzx11_info.__init__cCsštjdkrdS| ¡}| ¡}| dd¡}| ||j¡}| ||g¡}|dkrRdSd}|D]}| |d¡rZ|}qtqZ|dk    rŠt    ||gd|j
f|ŽdS)N)r+Úx11_libsr5zX11/X.hr¢) rWrr7rtrIryrbr9rr:rB)r-r‰rrDrbrÚinc_dirr8rrrrM?
s"
  zx11_info.calc_infoN)    rrrr(rrVrbr/rMrrrrrÒ5
s
rÒc@s(eZdZdZdZeZdd„Zdd„ZdS)Ú _numpy_inforœcCsg}zxt|jƒ}g}|j tj¡D]}|dkr2q>| |¡q"z| t|dƒƒ¡Wntk
rhYnX| t     
d¡¡Wnt k
rYnXt     
d¡}| |¡t     
d¡}||krÂ| |¡t D],}tj  |tj  |¡¡}||krÆ| |¡qÆtj|g|ddS)Nr0Z get_includer/Ú platincluder¸)Ú
__import__Ú
modulenamerUrYr4r5r\rfÚAttributeErrorÚ    sysconfigÚget_pathÚ ImportErrorrBr;r<rgrr/)r-rÚmodulerrýZ py_incl_dirÚ py_pincl_dirr8rrrr/X
s8
 
 
 
 
 þz_numpy_info.__init__c    Csâzt|jƒ}Wntk
r$YdSXi}g}dD]B}t||dƒ}|dkrLq2|j ¡dt|ƒf|j ¡dfg}qvq2t||d| ¡}d}|D]$}| |t    j
  |jd¡¡r’|}q¸q’|dk    rÎt||gd|rÞ|j f|ŽdS)N)Ú __version__rïZ_VERSIONr£z arrayobject.hr¢) rfrgrkrfÚupperr"r:rtrr4r;r<rB)    r-rlrrr_Zvrsrrcr8rrrrMy
s@  ÿ þ 
ÿÿ z_numpy_info.calc_infoN)    rrrr(rgrrVr/rMrrrrrdS
s
!rdc@seZdZdZdZdS)räržN©rrrr(rgrrrrrä˜
sräc@seZdZdZdZdS)rãrœNrprrrrrã
srãc@seZdZdZdZdS)ráršNrprrrrrá¢
srác@seZdZdZdd„ZdS)rårŸc    Csbd}t d¡rt d¡df}|ddkrþd}zddl}d}WnÀtk
rü}z¢t|ƒ}zddl}d}Wn„tk
rê}zft|ƒ}zddl}d}WnHtk
rØ}z*t|ƒ}t |¡t |¡t |¡W5d}~XYnXW5d}~XYnXW5d}~XYnX|d     ¡ 
¡|df}|dd    kr<t d
|d|dfƒ‚|dtj d<|j ft|dƒŽdS) N)NNZNUMERIXzenvironment varr)ršÚ    defaulted)rrq)ržrqrh)rržršzonumerix selector must be either 'Numeric' or 'numarray' or 'numpy' but the value obtained from the %s was '%s'.)r4r^ršrkr#rœržrrrvrdr$rjrBrü)    r-ÚwhichršrkZmsg1rœZmsg2ržZmsg3rrrrMª
s<
 
 
@þznumerix_info.calc_infoN)rrrr(rMrrrrrå§
sråc@seZdZdd„ZdS)râcCs`zddlm}Wntk
r&YdSXtj tj |j¡d¡}|jtj |d¡g|gddS)NrrOzfortranobject.c©rQr)    Z
numpy.f2pyr›rkr4r;r<rerUrB)r-r›Zf2py_dirrrrrMÍ
sÿzf2py_info.calc_infoNr—rrrrrâÌ
srâc@s$eZdZdZdZdd„Zdd„ZdS)rîr¡ZBOOSTcCsDt |||¡}g}|D]}| |g| |dg¡¡qdd„|DƒS)Nzboost*cSsg|]}tj |¡r|‘qSrrPr6rrrr9á
s z/boost_python_info.get_paths.<locals>.<listcomp>r¬r­rrrrqÜ
s
zboost_python_info.get_pathsc    
CsØ| ¡}d}|D](}tj tj |dddd¡¡r|}q:q|sBdSt d¡g}t d¡}||krj| |¡tj |ddd¡}ttj |d¡ƒ}|ttj |d    d¡ƒ7}d
|g||d œfg|gd œ}|rÔ|j    f|ŽdS) Nrr-ÚpythonrOz
module.cppr/reú*.cppr±Zboost_python_src)rrQ©r5r)
rur4r;r[r<rirjr\rrB)    r-rrçr8Z py_incl_dirsrmZsrcs_dirZbpl_srcsrrrrrMã
s6ÿ 
 
ÿÿü zboost_python_info.calc_infoN©rrrr(rdrqrMrrrrrîØ
srîc@s$eZdZdZdZdd„Zdd„ZdS)rïr¢ZAGG2cCsDt |||¡}g}|D]}| |g| |dg¡¡qdd„|DƒS)Nzagg2*cSsg|]}tj |¡r|‘qSrrPr6rrrr9 s z'agg2_info.get_paths.<locals>.<listcomp>r¬r­rrrrq s
zagg2_info.get_pathscCsÒ| ¡}d}|D]$}tj tj |dd¡¡r|}q6q|s>dStjdkrbttj |dddd¡ƒ}n.ttj |dd¡ƒ}|tj |dddd    ¡g7}d
|tj |d ¡gd œfgtj |d ¡gd œ}|rÎ|jf|ŽdS)NrrOzagg_affine_matrix.cppr+rzagg_win32_bmp.cpprur_zagg_platform_support.cppZagg2_srcr/rsrv)    rur4r;r[r<rWrrrB)r-rrçr8Z    agg2_srcsrrrrrM
s8
ÿþÿÿú zagg2_info.calc_infoNrwrrrrrïÿ
srïc@sDeZdZdZdZdZdZdZdZdZ    dZ
dd„Z d    d
„Z d d „Z dS) Ú_pkg_config_infoNZ
PKG_CONFIGz
pkg-configrz --modversionz--cflagscCs|jtjkrtj|jS|jSr)Úconfig_env_varr4rjÚdefault_config_exer3rrrÚget_config_exe3 s  z_pkg_config_info.get_config_exec    CsP|d|jd|}zt |¡}Wnttjfk
r>YnXt|ƒ}|SdS)Nú )Úappend_config_exeÚ
subprocessÚ check_outputÚOSErrorÚCalledProcessErrorr )r-Ú
config_exeÚoptionÚcmdrûrrrÚget_config_output8 sz"_pkg_config_info.get_config_outputcCs|t| ¡ƒ}|s(t d||jf¡dSi}g}g}g}g}g}g}| ||j¡}    |    r | |jj     
d¡d  ¡t |    ƒf¡|j r | |j d|     dd¡df¡|jrÖ| |d¡}
|
rÖ| |jd|
 dd¡df¡| |d¡} | rL|  
¡D]Z} | dd…d    kr| | dd…¡qð| dd…d
kr@| | dd…¡qð| | ¡qð| ||j¡} | rú|  
¡D]} | dd…d kr’| | dd…¡nd| dd…d krìd | krÔ| dd… 
d ¡\} }| | |f¡n| | dd…df¡n
| | ¡qh|r t||d|rt||d|r0t||d|rBt||d|rTt||d|rft||d|rx|jf|ŽdS)Nz-File not found: %s. Cannot determine %s info.r.r`z_%sÚ_z    --releasez--libsrNz-lz-Lú-Iz-Dú=r£r½)rr¢)r)r)r
r{rrUr(r…Ú version_flagr\rrrYror"Úversion_macro_namerÚrelease_macro_nameÚ cflags_flagr:rB)r-r‚rrr5rrrrrïÚreleaseÚoptsrDÚnr_rrrrMB s„ ÿÿ
 
ÿÿ 
 
ÿÿ    
       z_pkg_config_info.calc_info)rrrr(ryrzr}rŠr‹r‰rŒr{r…rMrrrrrx) s
rxc@s,eZdZdZdZdZdZdZdZdZ    dZ
d    S)
rðr£Z    WX_CONFIGz    wx-configrZ
WX_VERSIONZ
WX_RELEASEz    --versionz
--cxxflagsN) rrrr(ryrzr}rŠr‹r‰rŒrrrrrð‚ srðc@seZdZdZdZdZdS)rñr¤r¥ZGDK_PIXBUF_XLIB_VERSIONN©rrrr(r}rŠrrrrrñ srñc@seZdZdZdZdZdS)ròr¦r§ZGDK_PIXBUF_VERSIONNrrrrrrò“ sròc@seZdZdZdZdZdS)rõr«r¬ZGDK_X11_VERSIONNrrrrrrõ™ srõc@seZdZdZdZdZdS)rôr©rªÚ GDK_VERSIONNrrrrrrôŸ srôc@seZdZdZdZdZdS)rór¨r‘Nrrrrrró¥ sróc@seZdZdZdZdZdS)rör­r®ZGTK_X11_VERSIONNrrrrrrö« sröc@seZdZdZdZdZdS)r÷r¯r°Z GTK_VERSIONNrrrrrr÷± sr÷c@seZdZdZdZdZdS)rør±Z XFT_VERSIONNrrrrrrø· srøc@seZdZdZdZdZdS)rùr²ZFREETYPE2_VERSIONNrrrrrrù½ srùc@s"eZdZdZdZdgZdd„ZdS)rûr´ZAMDc    Cs¨| ¡}| dd¡}| ||j¡}| ||g¡}|dkr<dS| ¡}d}|D](}| |d¡}|rLtj     |d¡}qvqL|dk    r˜t
||gdgd|gd|j f|ŽdS)NÚamd_libsr5zamd.hr)Z SCIPY_AMD_HNr‡©rr¤Ú    swig_opts) r7rIryrbr9rtrr4r;rer:rB)    r-r‰rDr’rrrcr8r)rrrrMÈ s(  þ zamd_info.calc_infoN)rrrr(rdrbrMrrrrrûà srûc@s&eZdZdZdZeZdgZdd„ZdS)rúr³ZUMFPACKc    Cs¾| ¡}| dd¡}| ||j¡}| ||g¡}|dkr<dS| ¡}d}|D].}| |ddgd¡}|rLtj     |d¡}q|qL|dk    ržt
||gdgd|gd    t
|ft d
ƒŽ|j f|ŽdS) NÚ umfpack_libsr5rr³z    umfpack.hr)ZSCIPY_UMFPACK_HNr‡r“r´) r7rIryrbr9rtrr4r;rer:rürB)    r-r‰rDr•rrrcr8r)rrrrMè s* þ zumfpack_info.calc_infoN)    rrrr(rdrrVrbrMrrrrrúâ s
rúc    OsÞg}|D]"}|sqt|ƒr |g}| |¡q|}|s8gSt|ƒdkr`tdd„tt|dƒgƒ}nht|ƒdkr¦g}|dD]*}|dD]}| ttj     ||¡ƒ¡q„qxn"t
t
|d|dƒ|dd…Ž}t   dd     |¡¡|S)    zc Return a list of existing paths composed by all combinations of
        items from arguments.
    rhcSs||Srr)rwrmrrrÚ<lambda> ózcombine_paths.<locals>.<lambda>rrNNz (paths: %s)ri) r r\rZrÚmaprr%r4r;r<rrri)r–Úkwsr°rwrüZa0Za1rrrr s(     "rrhrNrc)rƒúc++rÏrîrƒršrÏrî)rrhrNrcc sŽg}| ¡D]Z\‰}ˆdkr(| |¡q ˆˆkr^ˆdkrN‡‡fdd„|Dƒqfˆˆ |¡q |ˆˆ<q |rŠttdd„|Dƒƒ}|ˆd<dS)NrË)rrrrrr¤cs&g|]}|ˆˆkrˆˆ |¡‘qSr)r\)r7Úvv©r8r^rrr9, s zdict_append.<locals>.<listcomp>cSsg|]}t |d¡‘qS)r)Ú language_maprk)r7rlrrrr92 s)rYr\r%Úinv_language_mapÚmax)r8r™Ú    languagesr_rlrrœrr:" s
 
r:rcCsHddl}| d¡}|jddddddd    |j|d
d…d \}}||fS) Nrzusage: %prog [-v] [info objs]z-vz    --verboseÚ
store_trueÚverboseFz"be verbose and print more messages)ÚactionÚdestrxÚhelprh)r–)ÚoptparseÚ OptionParserÚ
add_optionÚ
parse_args)rXr¦ÚparserrŽr–rrrÚ parseCmdLine7 s
 þr«c Csüddl}|dkrtj}t|ƒ\}}|jr6t tj¡n t tj¡g}|D]&}|dd…dkrf|d}|     |¡qJ| }t
ƒ  ¡}|  ¡D]V\}}    |  |    ¡sžqŠt|    tƒrŠ|    tkr²qŠ|sÌ||krÀqŠ|| |¡=|    ƒ}
d|
_|
 ¡qŠ|røt dd |¡¡dS)NréûÿÿÿÚ_inforNzInfo classes not defined: %sri)ÚinspectrWrXr«r¢rÚ set_thresholdÚDEBUGrXr\ÚglobalsrorYÚisclassÚ
issubclassrrGÚ    verbosityrürr<) rXr®rŽr–Z    show_onlyrÚshow_allZ_gdict_rýrƒÚconfrrrrµB s8   
 
 
rµÚ__main__)r)r)N)ÅrrWr4rörorTr~rÒrÚ    functoolsrÚ configparserrrr$Údistutils.errorsrÚdistutils.distrriZnumpy.distutilsrÚdistutils.utilr    Znumpy.distutils.exec_commandr
r Znumpy.distutils.misc_utilr r rZnumpy.distutils.command.configrrôrrrÚdistutils.ccompilerr6r0r2Ú__all__rZ_bitsÚ architectureZ platform_bitsrr"r*r;r<Úget_config_varr@r!rBr"r`rarCrArDrrrEreZ    vcpkg_dirÚ    specifierZvcpkg_installedZ
vcpkg_rootrIZ    conda_dirrÔZglobbed_x11_dirrYZ
x11_so_dirr%r²ÚdevnullrKÚPopenÚPIPEr)r€r#Ú communicateÚdecodervZtripletÚ
returncoderÚinsertr\r‚rcrtrürÿrrrrr    r
r r r rrrrrrrrÓrÔrÕrÖr¸r×rØrÙrÚrÛrÜrÆrËrÌrµr·r¶r¹r»rºr¼r½r¾r¿rÁrÀrÂrÃrÄrÞrßrõrórÖrærrçrèrérêrërìrír%rÝrÇrÈrÉrÐrÑrÎrÏrÊrÅrÍràrÒrdrärãrárårârîrïrxrðrñròrõrôrórör÷rørùrûrúrrržr:r«rµrrrrrÚ<module>sÆ'           
 ' ÿÿþÿ
 þ 
 ÿÿû ÿÿÿÿ
 #T [z/  
                    $Emw    I u f     P27E% '*Y "   !