+
    /if                        ^ RI t ^ RIt^ RIt^ RIt^ RIt . R*Ot] P                  ! R4      t] P                  ! R4      t	] P                  ! R4      t
] P                  ! R4      t] P                  ! R	4      t] P                  ! R
4      t] P                  ! R4      t] P                  ! R4      t] P                  ! R4      t] P                  ! R4      t] P                  ! R4      t ! R R]4      t ! R R]4      t ! R R4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      tR tR tR  tR+R! ltR" t R# t!R$ t"R% t#R& t$ ! R' R4      t%R( t&R) t'R# ),    NMetaData	ArffErrorParseArffErrorz^\s*@z^%z^\s+$z^\s*@\S*z^@[Dd][Aa][Tt][Aa]z*^@[Rr][Ee][Ll][Aa][Tt][Ii][Oo][Nn]\s*(\S*)z2^\s*@[Aa][Tt][Tt][Rr][Ii][Bb][Uu][Tt][Ee]\s*(..*$)z{(.+)}z%[Dd][Aa][Tt][Ee]\s+[\"']?(.+?)[\"']?$z'(..+)'\s+(..+$)z(\S+)\s+(..+$)c                       ] tR t^6tRtRtR# )r   z
Base exception for errors when reading ARFF files.

Raised when an ARFF file cannot be read due to file access issues,
corruption, or unsupported features.
 N__name__
__module____qualname____firstlineno____doc____static_attributes__r       U/var/www/html/photoedit/myenv/lib/python3.14/site-packages/scipy/io/arff/_arffread.pyr   r   6        	r   c                       ] tR t^@tRtRtR# )r   z
Exception for syntax and parsing errors in ARFF files.

Raised when an ARFF file has invalid syntax, malformed attributes,
or data that doesn't match the expected format.
r   Nr   r   r   r   r   r   @   r   r   c                   F   a  ] tR t^Mt o RtR t]R 4       tR tR t	Rt
V tR# )	AttributeNc                J    Wn         R V n        \        P                  V n        R # N)namerangenpobject_dtype)selfr   s   &&r   __init__Attribute.__init__Q   s    	
ZZ
r   c                    R# )zR
Parse the attribute line if it knows how. Returns the parsed
attribute, or None.
Nr   clsr   attr_strings   &&&r   parse_attributeAttribute.parse_attributeV   s     r   c                    R# )
Parse a value of this type.
Nr   r   data_strs   &&r   
parse_dataAttribute.parse_data^   s     r   c                J    V P                   R,           V P                  ,           # )r&   ,)r   	type_namer   s   &r   __str__Attribute.__str__d   s     yy3//r   )r   r   r   )r	   r
   r   r   r-   r   classmethodr#   r)   r/   r   __classdictcell____classdict__s   @r   r   r   M   s2     I 
  0 0r   r   c                   b   a a ] tR t^kt oRtV 3R lt]R 4       t]R 4       t	R t
R tRtVtV ;t# )NominalAttributenominalc                   < \         SV `  V4       W n        W n        \        P
                  \        R  V 4       4      3V n        R# )c              3   8   "   T F  p\        V4      x  K  	  R # 5ir   )len).0is   & r   	<genexpr>,NominalAttribute.__init__.<locals>.<genexpr>s   s     $<VSVVV   N)superr   valuesr   r   bytes_maxr   )r   r   rA   	__class__s   &&&r   r   NominalAttribute.__init__o   s5    
ii$<V$<!<=
r   c                    \         P                  V 4      pV'       d(   \        VP                  ^4      4      w  r#\	        V4      # \        R4      h)a  Given a string containing a nominal type, returns a tuple of the
possible values.

A nominal type is defined as something framed between braces ({}).

Parameters
----------
atrv : str
   Nominal type definition

Returns
-------
poss_vals : tuple
   possible values

Examples
--------
>>> from scipy.io.arff._arffread import NominalAttribute
>>> NominalAttribute._get_nom_val("{floup, bouga, fl, ratata}")
('floup', 'bouga', 'fl', 'ratata')
z(This does not look like a nominal string)	r_nominalmatchsplit_data_linegrouptuple
ValueError)atrvmattrs_s   &   r   _get_nom_valNominalAttribute._get_nom_valu   s?    . OOD!&qwwqz2HE<GHHr   c                T    V^ ,          R8X  d   V P                  V4      pV ! W4      # R# )z
Parse the attribute line if it knows how. Returns the parsed
attribute, or None.

For nominal attributes, the attribute string would be like '{<attr_1>,
 <attr2>, <attr_3>}'.
{N)rQ   )r!   r   r"   rA   s   &&& r   r#    NominalAttribute.parse_attribute   s.     q>S %%k2Ft$$r   c                    WP                   9   d   V# VR8X  d   V# \        \        V4       R\        V P                   4       24      h)r&   ?z value not in )rA   rL   strr'   s   &&r   r)   NominalAttribute.parse_data   sC     {{"O_OHnS=M<NOPPr   c                   V P                   R ,           p\        \        V P                  4      ^,
          4       F#  pWP                  V,          R,           ,          pK%  	  WP                  R,          ,          pVR,          pV# )z,{r,   })r   r   r:   rA   r   msgr<   s   &  r   r/   NominalAttribute.__str__   s`    ii$s4;;')*A;;q>C''C +{{2s

r   )r   r   rA   )r	   r
   r   r   r-   r   staticmethodrQ   r1   r#   r)   r/   r   r2   __classcell__rD   r4   s   @@r   r6   r6   k   sI     I> I I:  	Q r   r6   c                   N   a a ] tR t^t oV 3R lt]R 4       tR tR tRt	Vt
V ;t# )NumericAttributec                ^   < \         SV `  V4       R V n        \        P                  V n        R# )numericN)r@   r   r-   r   float64r   r   r   rD   s   &&r   r   NumericAttribute.__init__   s"    "ZZ
r   c                    VP                  4       P                  4       pVR\        R4       R8X  g'   VR\        R4       R8X  g   VR\        R4       R8X  d	   V ! V4      # R# )z
Parse the attribute line if it knows how. Returns the parsed
attribute, or None.

For numeric attributes, the attribute string would be like
'numeric' or 'int' or 'real'.
Nrf   intreallowerstripr:   r    s   &&&r   r#    NumericAttribute.parse_attribute   sa     "'')//1Y(I5{E
#u,|F$.t9r   c                F    RV9   d   \         P                  # \        V4      # )aS  
Parse a value of this type.

Parameters
----------
data_str : str
   string to convert

Returns
-------
f : float
   where float can be nan

Examples
--------
>>> from scipy.io.arff._arffread import NumericAttribute
>>> atr = NumericAttribute('atr')
>>> atr.parse_data('1')
1.0
>>> atr.parse_data('1\n')
1.0
>>> atr.parse_data('?\n')
nan
rW   )r   nanfloatr'   s   &&r   r)   NumericAttribute.parse_data   s    2 (?66M?"r   c                   VP                   R ,          VP                   ^,
          ,          p\        P                  ! V4      \        P                  ! V4      \        P                  ! V4      \        P
                  ! V4      V,          3# )g      ?)sizer   nanminnanmaxmeanstd)r   datanbfacs   && r   _basic_statsNumericAttribute._basic_stats   sU    		B$))a-0		$4rvvd|e35 	5r   )r   r-   )r	   r
   r   r   r   r1   r#   r)   r}   r   r2   ra   rb   s   @@r   rd   rd      s-      
  $#<5 5r   rd   c                   B   a a ] tR t^t oV 3R lt]R 4       tRtVtV ;t	# )StringAttributec                4   < \         SV `  V4       R V n        R# )stringN)r@   r   r-   rh   s   &&r   r   StringAttribute.__init__   s    !r   c                x    VP                  4       P                  4       pVR\        R4       R8X  d	   V ! V4      # R# )z
Parse the attribute line if it knows how. Returns the parsed
attribute, or None.

For string attributes, the attribute string would be like
'string'.
Nr   rm   r    s   &&&r   r#   StringAttribute.parse_attribute   s;     "'')//1~H&(2t9r   )r-   )
r	   r
   r   r   r   r1   r#   r   r2   ra   rb   s   @@r   r   r      s#     "   r   r   c                   d   a a ] tR tRt oV 3R lt]R 4       t]R 4       tR t	V 3R lt
RtVtV ;t# )DateAttributei  c                   < \         SV `  V4       W n        W0n        R V n        W n        \        P                  ! ^ V P                  4      V n        R# )dateN)	r@   r   date_formatdatetime_unitr-   r   r   
datetime64r   )r   r   r   r   rD   s   &&&&r   r   DateAttribute.__init__  s@    &* 
]]1d&8&89
r   c                \   \         P                  V 4      pV'       Ed   VP                  ^4      P                  4       pRpRV9   d   VP	                  RR4      pRpM VP	                  RR4      pRpRV9   d   VP	                  RR4      pR	pR
V9   d   VP	                  R
R4      pRpRV9   d   VP	                  RR4      pRpRV9   d   VP	                  RR4      pRpRV9   d   VP	                  RR4      pRpRV9   g   RV9   d   \        R4      hVf   \        R4      hW#3# \        R4      h)   Nyyyyz%YYyyz%yMMz%mMddz%dDHHz%Hhmmz%MrN   ssz%SszZz6Date type attributes with time zone not supported, yetz"Invalid or unsupported date formatzInvalid or no date format)r_daterH   rJ   ro   replacerL   )rM   rN   patternr   s   &   r   _get_date_formatDateAttribute._get_date_format  s9   LL1ggaj&&(G M !//&$7 #!//$5 #w!//$5 #w!//$5 #w!//$5 #w!//$5 #w!//$5 #g~  "2 3 3 $ !EFF))899r   c                    VP                  4       P                  4       pVR\        R4       R8X  d   V P                  V4      w  rEV ! WV4      # R# )
Parse the attribute line if it knows how. Returns the parsed
attribute, or None.

For date attributes, the attribute string would be like
'date <format>'.
Nr   )rn   ro   r:   r   )r!   r   r"   attr_string_lowerr   r   s   &&&   r   r#   DateAttribute.parse_attribute=  sR     (--/557\c&k*f4),)=)=k)J&Kt-88r   c                f   VP                  4       P                  R4      P                  R4      pVR8X  d"   \        P                  ! RV P                  4      # \        P                  P                  W P                  4      p\        P                  ! V4      P                  RV P                   R24      # )r&   '"rW   NaTzdatetime64[])ro   r   r   r   datetimestrptimer   astype)r   r(   date_strdts   &&  r   r)   DateAttribute.parse_dataO  s     >>#))#.44S9s?==(:(:;;""++H6F6FGB==$++d00135 5r   c                P   < \         SV `  4       R ,           V P                  ,           # r,   )r@   r/   r   r   rD   s   &r   r/   DateAttribute.__str__[  s     w 3&)9)999r   )r   r   r   r   r-   )r	   r
   r   r   r   r`   r   r1   r#   r)   r/   r   r2   ra   rb   s   @@r   r   r     sB     : $: $:L  "
5: :r   r   c                   T   a a ] tR tRt oV 3R lt]R 4       tR tV 3R ltRt	Vt
V ;t# )RelationalAttributei_  c                z   < \         SV `  V4       R V n        \        P                  V n        . V n        RV n        R# )
relationalN)r@   r   r-   r   r   r   
attributesdialectrh   s   &&r   r   RelationalAttribute.__init__a  s0    %ZZ
r   c                x    VP                  4       P                  4       pVR\        R4       R8X  d	   V ! V4      # R# )r   Nr   rm   )r!   r   r"   r   s   &&& r   r#   #RelationalAttribute.parse_attributeh  s>     (--/557/c,/0L@t9r   c                8   \        \        \        V P                  4      4      4      pVP	                  4       P                  R 4      p. pVP                  R4       Fn  p\        WPP                  4      w  q`n        TP                  \        V Uu. uF*  qpP                  V,          P                  Wg,          4      NK,  	  up4      4       Kp  	  \        P                  ! TV P                   Uu. uF  qP                  VP                  3NK  	  up4      # u upi u upi )zunicode-escape
)listr   r:   r   encodedecodesplitrI   r   appendrK   r)   r   arrayr   r   )	r   r(   elemsescaped_string
row_tuplesrawrowr<   as	   &&       r   r)   RelationalAttribute.parse_datay  s    U3t/01!*112BC
!''-C /\\ BCe@EF1#..sv6FH I . xx
48OODOq&&!''*ODF 	F G Es   0D+ D
c                |   < \         SV `  4       R ,           R P                  R V P                   4       4      ,           # )z
	c              3   8   "   T F  p\        V4      x  K  	  R # 5ir   )rX   )r;   r   s   & r   r=   .RelationalAttribute.__str__.<locals>.<genexpr>  s     <OqCFFOr?   )r@   r/   joinr   r   s   &r   r/   RelationalAttribute.__str__  s2    !F*<DOO<<= 	>r   )r   r   r   r-   )r	   r
   r   r   r   r1   r#   r)   r/   r   r2   ra   rb   s   @@r   r   r   _  s.        F"> >r   r   c                     \         \        \        \        \        3pV F  pVP                  W4      pVf   K  Vu # 	  \        RV 24      h)Nzunknown attribute )r6   rd   r   r   r   r#   r   )r   r"   attr_classesr!   attrs   &&   r   to_attributer     sS    $&6#%8:L ""45K 
 -k];
<<r   c                     \        \        RR4      p V fM   \        P                  ! 4       P	                  R4      pVP
                  R8g  \        n        \        P                  p V # )zD
Checks if the bug https://bugs.python.org/issue30157 is unpatched.
has_bugNz3, 'a'r   )getattrcsv_sniffer_has_bug_last_fieldcsvSniffersniff	quotecharr   )r   r   s     r   r   r     sR     4iFG++-%%h/181B1Bc1I&.088Nr   c                |   \        4       '       Ed   RpRRVR3 FX  p\        P                  ! V\        P                  \        P                  ,          4      pVP                  V 4      pV'       g   KX   M	  XV8w  d   R# XP                  p\        X4      ^8X  g   Q hV^ ,          pVR,          ^,
          p	W,          p
VR,          ^,
          p	W,          pVR,          ^,
          p	\        W,          4      p\        P                  ! R	\        P                  ! V4       R
V
 R\        P                  ! V4       RV
 R\        P                  ! V4       RV
 R\        P                  ! V4       R2\        P                  4      p\        VP                  V 4      4      pWn        W9   d   Wn        Wn        Wn        R# R# )zL
Workaround for the bug https://bugs.python.org/issue30157 if is unpatched.
zG(?P<delim>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?:$|\n)zI(?P<delim>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?P=delim)zG(?:^|\n)(?P<quote>["\']).*?(?P=quote)(?P<delim>[^\w\n"\'])(?P<space> ?)z-(?:^|\n)(?P<quote>["\']).*?(?P=quote)(?:$|\n)Nquotedelimspacez((z)|^)\W*z[^z\n]*z\W*((z)|$))r   recompileDOTALL	MULTILINEfindall
groupindexr:   boolescapesearchr   	delimiterdoublequoteskipinitialspace)
sniff_liner   
delimitersright_regexrestrregexpmatchesr   rN   nr   r   r   	dq_regexpr   s   &&&            r   %workaround_csv_sniffer_bug_last_fieldr     s    &''`b`!FHE ZZryy2<<'?@FnnZ0GwH K&&
 7|q   AJw!#w!#w!#QT
JJ"))E"#75'BIIe4D3ET%PRSUS\S\]bScRddhinhootuwu~u~  @E  vF  uG  GK  L  NP  NZ  NZ
	 9++J78! %)#( W (r   c                 "  a  R p\         P                  ! \        \        P                  ! R	4      P
                  ^,          4      4       S R	,          R8X  d   S RR	 o S P                  4       o S p\        ;QJ d    V 3R lV 4       F  '       g   K   RM	  RM! V 3R lV 4       4      '       g
   VR,          pVf4   \         P                  ! 4       P                  W2R7      p\        VVVR7       \        \         P                  ! S .V4      4      pWA3# )
z,	r   Nc              3   ,   <"   T F	  qS9   x  K  	  R # 5ir   r   )r;   dlines   & r   r=   "split_data_line.<locals>.<genexpr>  s     -*QDy*s   TFr,   )r   )r   r   r   r\   )r   field_size_limitrk   ctypesc_ulongvaluero   anyr   r   r   nextreader)r   r   r   r   r   s   f&   r   rI   rI     s    J V^^B/55:;< Bx4CRy ::<DJ 3-*-333-*---c
++-%%j%H-6=9C	E szz4&'*
+C<r   c                   VP                  4       p\        P                  V4      pV'       d   VP                  ^4      p\        P                  V4      '       d   \        V4      w  rV\        V 4      pMM\        P                  V4      '       d   \        V4      w  rV\        V 4      pM\        R4      h\        RV 24      h\        WV4      pVP                  4       R8X  d   \        WV4      pW3# )a.  Parse a raw string in header (e.g., starts by @attribute).

Given a raw string attribute, try to get the name and type of the
attribute. Constraints:

* The first line must start with @attribute (case insensitive, and
  space like characters before @attribute are allowed)
* Works also if the attribute is spread on multilines.
* Works if empty lines or comments are in between

Parameters
----------
attribute : str
   the attribute string.

Returns
-------
name : str
   name of the attribute
value : str
   value of the attribute
next : str
   next line to be parsed

Examples
--------
If attribute is a string defined in python as r"floupi real", will
return floupi as name, and real as value.

>>> from scipy.io.arff._arffread import tokenize_attribute
>>> iterable = iter([0] * 10) # dummy iterator
>>> tokenize_attribute(iterable, r"@attribute floupi real")
('floupi', 'real', 0)

If attribute is r"'floupi 2' real", will return 'floupi 2' as name,
and real as value.

>>> tokenize_attribute(iterable, r"  @attribute 'floupi 2' real   ")
('floupi 2', 'real', 0)

zmulti line not supported yetzFirst line unparsable: r   )ro   r_attributerH   rJ   r_comattrvaltokenize_single_commar  r_wcomattrvaltokenize_single_wcommarL   r   rn   read_relational_attribute)iterable	attributesattrmattrrM   r   type	next_items   &&      r   tokenize_attributer    s    T OOEe$E{{1~d##.t4JDXI  &&/5JDXI ;<<25':;;T(Izz||#-h9M	 r   c                    \         P                  V 4      pV'       dC    VP                  ^4      P                  4       pVP                  ^4      P                  4       pW#3# \        RV  24      h  \         d   p\        R4      ThRp?ii ; ir   z Error while tokenizing attributeNzError while tokenizing single )r  rH   rJ   ro   
IndexErrorrL   valrN   r   r  es   &    r   r  r  H  s     	3A	H771:##%D771:##%D
 : 9#?@@  	H?@aG	H   >A. .B
9BB
c                    \         P                  V 4      pV'       dC    VP                  ^4      P                  4       pVP                  ^4      P                  4       pW#3# \        RV  24      h  \         d   p\        R4      ThRp?ii ; ir  )r  rH   rJ   ro   r  rL   r  s   &    r   r	  r	  W  s     	C A	H771:##%D771:##%D
 : 9#?@@  	H?@aG	Hr  c                   \         P                  ! RVP                  ,           R,           4      pVP                  V4      '       g   \        P                  V4      pV'       dV   \
        P                  V4      pV'       d+   \        W4      w  rbVP                  P                  V4       K{  \        RV 24      h\        V 4      pK  \        V 4      pV# )z4Read the nested attributes of a relational attributez^@[Ee][Nn][Dd]\s*z\s*$Error parsing line )r   r   r   rH   r_headerliner  r  r   r   rL   r  )ofilerelational_attributer<   r_end_relationalrN   isattrr   s   &&&    r   r
  r
  f  s     zz"6"6";";#<>E#F G $$Q''q! &&q)F,U6$//66t< #6qc!:;;UAUAHr   c                   \        V 4      p\        P                  V4      '       d   \        V 4      pK(  Rp. p\        P                  V4      '       g   \        P                  V4      pV'       d   \
        P                  V4      pV'       d!   \        W4      w  raVP                  V4       Ku  \        P                  V4      pV'       d   VP                  ^4      pM\        RV 24      h\        V 4      pK  \        V 4      pK  W#3# )z&Read the header of the iterable ofile.Nr  )r  	r_commentrH   
r_datametar  r  r  r   
r_relationrJ   rL   )r  r<   relationr   rN   r   r   isrels   &       r   read_headerr'  |  s    UA //!

K HJq!!q! &&q)F,U6!!$'"((+${{1~H$':1#%>??KUAr   c                   H   a  ] tR tRt o RtR tR tR tR tR t	R t
R	tV tR
# )r   i  aO  Small container to keep useful information on a ARFF dataset.

Knows about attributes names and types.

Examples
--------
::

    data, meta = loadarff('iris.arff')
    # This will print the attributes names of the iris.arff dataset
    for i in meta:
        print(i)
    # This works too
    meta.names()
    # Getting attribute type
    types = meta.types()

Methods
-------
names
types

Notes
-----
Also maintains the list of attributes in order, i.e., doing for i in
meta, where meta is an instance of MetaData, will return the
different attribute names in the order they were defined.
c                ^    Wn         V Uu/ uF  q3P                   VbK  	  upV n        R # u upi r   )r   _attributes)r   relr   r   s   &&& r   r   MetaData.__init__  s'    	/34t!FFAIt44s   *c                j   R pVRV P                    R2,          pV P                   F  pVRV RV P                  V,          P                   2,          pV P                  V,          P                  '       d1   VR\	        V P                  V,          P                  4       2,          pVR,          pK  	  V# ) z	Dataset: r   	z's type is z, range is )r   r*  r-   r   rX   r]   s   &  r   __repr__MetaData.__repr__  s    499+R((!!ARs+d&6&6q&9&C&C%DEEC"(((S)9)9!)<)B)B%C$DEE4KC	 "
 
r   c                ,    \        V P                  4      # r   )iterr*  r.   s   &r   __iter__MetaData.__iter__  s    D$$%%r   c                X    V P                   V,          pVP                  VP                  3# r   )r*  r-   r   )r   keyr   s   && r   __getitem__MetaData.__getitem__  s%    $

++r   c                ,    \        V P                  4      # )zfReturn the list of attribute names.

Returns
-------
attrnames : list of str
    The attribute names.
)r   r*  r.   s   &r   namesMetaData.names  s     D$$%%r   c                |    V P                    Uu. uF   pV P                   V,          P                  NK"  	  ppV# u upi )zgReturn the list of attribute types.

Returns
-------
attr_types : list of str
    The attribute types.
)r*  r-   )r   r   
attr_typess   &  r   typesMetaData.types  sF     #'"2"24"2$ &&t,66"2 	 44s   &9)r*  r   N)r	   r
   r   r   r   r   r0  r4  r8  r;  r?  r   r2   r3   s   @r   r   r     s-     85&,
&
 
r   c                    \        V R4      '       d   T pM\        V 4      p \        V4      WJd   VP                  4        # #   YJd   TP                  4        i i ; i)a@  
Read an arff file.

The data is returned as a record array, which can be accessed much like
a dictionary of NumPy arrays. For example, if one of the attributes is
called 'pressure', then its first 10 data points can be accessed from the
``data`` record array like so: ``data['pressure'][0:10]``


Parameters
----------
f : file-like or str
   File-like object to read from, or filename to open.

Returns
-------
data : record array
   The data of the arff file, accessible by attribute names.
meta : `MetaData`
   Contains information about the arff file such as name and
   type of attributes, the relation (name of the dataset), etc.

Raises
------
ParseArffError
    This is raised if the given file is not ARFF-formatted.
NotImplementedError
    The ARFF file has an attribute which is not supported yet.

Notes
-----

This function should be able to read most arff files. Not
implemented functionality include:

* date type attributes
* string type attributes

It can read files with numeric and nominal attributes. It cannot read
files with sparse data ({} in the file). However, this function can
read files with missing data (? in the file), representing the data
points as NaNs.

Examples
--------
>>> from scipy.io import arff
>>> from io import StringIO
>>> content = """
... @relation foo
... @attribute width  numeric
... @attribute height numeric
... @attribute color  {red,green,blue,yellow,black}
... @data
... 5.0,3.25,blue
... 4.5,3.75,green
... 3.0,4.00,red
... """
>>> f = StringIO(content)
>>> data, meta = arff.loadarff(f)
>>> data
array([(5.0, 3.25, 'blue'), (4.5, 3.75, 'green'), (3.0, 4.0, 'red')],
      dtype=[('width', '<f8'), ('height', '<f8'), ('color', '|S6')])
>>> meta
Dataset: foo
    width's type is numeric
    height's type is numeric
    color's type is nominal, range is ('red', 'green', 'blue', 'yellow', 'black')

read)hasattropen	_loadarffclose)fr  s   & r   loadarffrH    sT    L q&Q>KKM 5>KKM s   
A Ac                   a	a
  \        V 4      w  po	RpS	 F  p\	        T\
        4      '       g   K  RpK  	  \        TS	4      pT'       d   \        R4      h\        S	4      o
RT	T
3R llp\        T! T 4      4      p\        P                  ! TS	 Uu. uF  qUP                  TP                  3NK  	  up4      pY3#   \         d$   pR \        T4      ,           p\        T4      ThRp?ii ; iu upi )z'Error while parsing header, error was: NFTz*String attributes not supported yet, sorryc           
   3   T  <"   \        \        S4      4      pR pV  F  p\        P                  V4      '       g   \        P                  V4      '       d   K;  \        WC4      w  rS\        V Uu. uF!  pSV,          P                  WV,          4      NK#  	  up4      x  K  	  R # u upi 5ir   )r   r   r"  rH   r_emptyrI   rK   r)   )	row_iterr   r   r   r   r   r<   r   nis	   &&     r   	generator_loadarff.<locals>.generatorU  s      U2YC s##w}}S'9'9*38LCUCUa++CF3UCDD  Ds   AB(B(-'B#
B(r   )r'  rL   rX   r   
isinstancer   r   NotImplementedErrorr:   r   r   r   r   r   )r  r+  r  r^   hasstrr   metarN  r{   r   rM  s   &        @@r   rE  rE  6  s    )&	T Fa))F  CD  ""NOO	TBE E8 	YuA88A484a)489D:u  )7#a&@S!q()r 9s   B:  C+
:C(C##C()r   rH  r   r   r   )(r   r   numpyr   r   r   __all__r   r_metar"  rK  r  r#  r$  r  rG   r   r  r  OSErrorr   r   r   r6   rd   r   r   r   r   r   r   rI   r  r  r	  r
  r'  r   rH  rE  r   r   r   <module>rX     sp   	   
  "
A$ 
H	JJu	
**X
zz+&ZZ-.
ZZEF
jjNOJJy!		<	= zz-.

,-	 		Y 	0 0<Hy HV;5y ;5|i 0P:I P:f->) ->f	= /)dFB J, >G GTNb>r   