§
    ¢éUg·K  ã                   óð   — d Z ddlZddlZddlmZ ddlmZmZm	Z	 ddgZ
 G d„ d	e¦  «        Z G d
„ de¦  «        Zd„ Z G d„ d¦  «        Zdd„Zd„ Zd„ Z G d„ d¦  «        Z G d„ d¦  «        Zd„ Zdd„ZdS )a  
Implementation of Harwell-Boeing read/write.

At the moment not the full Harwell-Boeing format is supported. Supported
features are:

    - assembled, non-symmetric, real matrices
    - integer for pointer/indices
    - exponential format for float values, and int format

é    N)Ú
csc_matrixé   )ÚFortranFormatParserÚ	IntFormatÚ	ExpFormatÚhb_readÚhb_writec                   ó   — e Zd ZdS )ÚMalformedHeaderN©Ú__name__Ú
__module__Ú__qualname__© ó    úZ/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/io/_harwell_boeing/hb.pyr   r      ó   € € € € € Ø€Dr   r   c                   ó   — e Zd ZdS )ÚLineOverflowNr   r   r   r   r   r   "   r   r   r   c                 ó2   — | j         | j        z  dz   |dz
  z  S )zcReturn the number of bytes to read to get every full lines for the
    given parsed fortran format.r   )ÚrepeatÚwidth)ÚfmtÚnliness     r   Ú_nbytes_fullr   &   s!   € ð ŒJ˜œÑ" QÑ&¨6°A©:Ñ6Ð6r   c                   óL   — e Zd Zed	d„¦   «         Zed„ ¦   «         Z	 d
d„Zd„ ZdS )ÚHBInfoúDefault titleÚ0Nc                 óæ  — |                      d¬¦  «        }|j        }|j        }|j        }|j        \  }	}
|j        }|�€!t          j        t          j	        |dz   ¦  «        ¦  «        }t          j        t          j	        |dz   ¦  «        ¦  «        }|j
        j        t          j        d         v r:t          j        t          j	        t          j        |¦  «        ¦  «         ¦  «        }n†|j
        j        t          j        d         v r:t          j        t          j	        t          j        |¦  «        ¦  «         ¦  «        }n.d|j
        j        › d�}t          |¦  «        ‚t          d	¦  «        ‚|€Žt          j        |¦  «        st#          d
¦  «        ‚|j
        j        t          j        d         v rd}n8|j
        j        t          j        d         v rd}nt          d|j
        z  ¦  «        ‚t%          |dd¦  «        }nt#          d¦  «        ‚d„ } |||j        ¦  «        } |||j        ¦  «        } |||j        ¦  «        }||z   |z   } | ||||||||	|
||j        |j        |j        ¦  «        S )aÙ  Create a HBInfo instance from an existing sparse matrix.

        Parameters
        ----------
        m : sparse matrix
            the HBInfo instance will derive its parameters from m
        title : str
            Title to put in the HB header
        key : str
            Key
        mxtype : HBMatrixType
            type of the input matrix
        fmt : dict
            not implemented

        Returns
        -------
        hb_info : HBInfo instance
        F©ÚcopyNr   ÚAllFloatÚ
AllIntegerztype z not implemented yetzfmt argument not supported yet.z Complex values not supported yetÚintegerÚrealz"type %s for values not implementedÚunsymmetricÚ	assembledz mxtype argument not handled yet.c                 ó@   — || j         z  }|| j         z  |k    r|dz  }|S )Nr   )r   )r   Úsizer   s      r   Ú_nlinesz!HBInfo.from_data.<locals>._nlinesi   s.   € Ø˜SœZÑ'ˆFØ˜œ
Ñ" dÒ*Ð*Ø˜!‘�ØˆMr   )ÚtocscÚindptrÚindicesÚdataÚshapeÚnnzr   Úfrom_numberÚnpÚmaxÚdtypeÚkindÚ	typecodesr   ÚabsÚNotImplementedErrorÚ	isrealobjÚ
ValueErrorÚHBMatrixTyper*   Úfortran_format)ÚclsÚmÚtitleÚkeyÚmxtyper   Úpointerr.   ÚvaluesÚnrowsÚncolsÚ
nnon_zerosÚpointer_fmtÚindices_fmtÚ
values_fmtÚmessageÚtpr+   Úpointer_nlinesÚindices_nlinesÚvalues_nlinesÚtotal_nliness                         r   Ú	from_datazHBInfo.from_data-   sg  € ð* �GŠG˜ˆGÑÔˆà”(ˆØ”)ˆØ”ˆà”w‰ˆˆuØ”Uˆ
à‰;õ $Ô/µ´°w¸q±yÑ0AÔ0AÑBÔBˆKÝ#Ô/µ´°w¸q±yÑ0AÔ0AÑBÔBˆKàŒ|Ô ¥B¤L°Ô$<Ð<Ð<Ý&Ô2µB´F½2¼6À&¹>¼>Ñ4JÔ4JÐ3JÑKÔK�
�
Ø”Ô"¥b¤l°<Ô&@Ð@Ð@Ý&Ô2µB´F½2¼6À&¹>¼>Ñ4JÔ4JÐ3JÑKÔK�
�
àI &¤,Ô"3ÐIÐIÐI�Ý)¨'Ñ2Ô2Ð2å%Ð&GÑHÔHÐHàˆ>Ý”< Ñ'Ô'ð EÝ Ð!CÑDÔDÐDØŒ|Ô ¥B¤L°Ô$>Ð>Ð>Ø��Ø”Ô"¥b¤l°:Ô&>Ð>Ð>Ø��å)Ð*NØ,2¬Lñ+9ñ :ô :ð :å! " m°[ÑAÔAˆFˆFåÐ?Ñ@Ô@Ð@ð	ð 	ð 	ð !˜ ¨g¬lÑ;Ô;ˆØ ˜ ¨g¬lÑ;Ô;ˆØ˜ 
¨F¬KÑ8Ô8ˆà%¨Ñ6¸ÑFˆàˆs�5˜#Ø˜.¨.¸-Ø�E˜5 *ØÔ&¨Ô(BØÔ%ñ	'ô 'ð 	'r   c                 óò  — |                      ¦   «                              d¦  «        }t          |¦  «        dk    st          d|z  ¦  «        ‚|dd…         }|dd…         }|                      ¦   «                              d¦  «        }t          |                     ¦   «         ¦  «        dk    st          d|z  ¦  «        ‚t          |dd…         ¦  «        }t          |dd…         ¦  «        }t          |dd	…         ¦  «        }t          |d	d…         ¦  «        }|dd…                              ¦   «         }	|	d
k    rd}	nt          |	¦  «        }	|	dk    st          d¦  «        ‚|                      ¦   «                              d¦  «        }t          |¦  «        dk    st          d|z  ¦  «        ‚|dd…                              ¦   «         }
t          |
¦  «        dk    st          d¦  «        ‚t                               |
¦  «        }|j	        dvrt          d|z  ¦  «        ‚|j
        dk    st          d|z  ¦  «        ‚|j        dk    st          d¦  «        ‚|dd…         dk    st          d|z  ¦  «        ‚t          |dd…         ¦  «        }t          |dd	…         ¦  «        }t          |d	d…         ¦  «        }t          |dd…         ¦  «        }|dk    st          d|z  ¦  «        ‚|                      ¦   «                              d¦  «        }|                     ¦   «         }t          |¦  «        dk    st          d|z  ¦  «        ‚ | |||||||||||d         |d         |d         |	|¦  «        S )a6  Create a HBInfo instance from a file object containing a matrix in the
        HB format.

        Parameters
        ----------
        fid : file-like matrix
            File or file-like object containing a matrix in the HB format.

        Returns
        -------
        hb_info : HBInfo instance
        ú
éH   z8Expected at least 72 characters for first line, got: 
%sNé8   z9Expected at least 56 characters for second line, got: 
%sé   é   é*   Ú r   z5Only files without right hand side supported for now.éF   z6Expected at least 72 character for third line, got:
%sé   z'mxtype expected to be 3 characters long)r&   r%   z=Only real or integer matrices supported for now (detected %s)r'   z9Only unsymmetric matrices supported for now (detected %s)r(   z)Only assembled matrices supported for nowz           z!Malformed data for third line: %sz4Unexpected value %d for nltvl (last entry of line 3)zExpected 3 formats, got %sr   é   )ÚreadlineÚstripÚlenr;   ÚrstripÚ_expect_intÚupperr<   Úfrom_fortranÚ
value_typeÚ	structureÚstorageÚsplit)r>   ÚfidÚliner@   rA   rP   rM   rN   rO   Ú
rhs_nlinesÚmxtype_srB   rE   rF   rG   ÚnelementalsÚcts                    r   Ú	from_filezHBInfo.from_file{   sª  € ð �|Š|‰~Œ~×#Ò# DÑ)Ô)ˆÝ�4‰yŒy˜2Š~ˆ~Ýð )Ø+/ñ0ñ 1ô 1ð 1à�S�b�S”	ˆØ�2�3�3Œiˆð �|Š|‰~Œ~×#Ò# DÑ)Ô)ˆÝ�4—;’;‘=”=Ñ!Ô! RÒ'Ð'Ýð )Ø+/ñ0ñ 1ô 1ð 1å" 4¨¨¨¤9Ñ-Ô-ˆÝ$ T¨"¨R¨%¤[Ñ1Ô1ˆÝ$ T¨"¨R¨%¤[Ñ1Ô1ˆÝ# D¨¨B¨¤KÑ0Ô0ˆà˜"˜R˜%”[×&Ò&Ñ(Ô(ˆ
Ø˜ÒÐØˆJˆJå$ ZÑ0Ô0ˆJØ˜QŠˆÝð $ñ %ô %ð %ð �|Š|‰~Œ~×#Ò# DÑ)Ô)ˆÝ�4‰yŒy˜BŠˆÝð "Ø$(ñ)ñ *ô *ð *ð ˜˜˜”8—>’>Ñ#Ô#ˆÝ�8‰}Œ} Ò!Ð!ÝÐFÑGÔGÐGå×*Ò*¨8Ñ4Ô4ˆØÔÐ$7Ð7Ð7Ýð 1Ø39ñ:ñ ;ô ;ð ;àÔ =Ò0Ð0Ýð 1Ø39ñ:ñ ;ô ;ð ;àŒ~ Ò,Ð,ÝÐHÑIÔIÐIà�A�b�DŒz˜XÒ%Ð%ÝÐ@À4ÑGÑHÔHÐHå˜D  B œKÑ(Ô(ˆÝ˜D  B œKÑ(Ô(ˆÝ   b¨ e¤Ñ-Ô-ˆ
Ý! $ r¨" u¤+Ñ.Ô.ˆØ˜aÒÐÝÐSØ*ñ+ñ ,ô ,ð ,ð �|Š|‰~Œ~×#Ò# DÑ)Ô)ˆà�ZŠZ‰\Œ\ˆÝ�2‰wŒw˜!Š|ˆ|ÝÐ9¸BÑ>Ñ?Ô?Ð?àˆs�5˜#Ø °ÀØ˜5 %¨Ø�a”5˜"˜Qœ%  A¤Ø˜{ñ	,ô ,ð 	,r   r   c                 óÌ  — || _         || _        |€d}t          |¦  «        dk    rt          d¦  «        ‚|€d}t          |¦  «        dk    rt	          j        d|z  t          d¬	¦  «         || _        || _        || _	        || _
        t          ¦   «         }|                     |¦  «        }t          |t          ¦  «        st          d
|z  ¦  «        ‚|                     |¦  «        }t          |t          ¦  «        st          d|z  ¦  «        ‚|                     |¦  «        }t          |t          ¦  «        r+|j        dvrt          d|› d|› �¦  «        ‚t"          j        }nMt          |t          ¦  «        r&|j        dvrt          d|› d|› �¦  «        ‚t&          }nt          d|›�¦  «        ‚|| _        || _        || _        t"          j        | _        t"          j        | _        || _        || _        t7          ||¦  «        | _        || _	        t7          ||¦  «        | _        || _
        t7          ||¦  «        | _        || _        |	| _         |
| _!        || _"        || _#        dS )z@Do not use this directly, but the class ctrs (from_* functions).NzNo TitlerT   ztitle cannot be > 72 charactersz|No Keyé   z!key is > 8 characters (key is %s)r[   )Ú
stacklevelz.Expected int format for pointer format, got %sz.Expected int format for indices format, got %s)r&   Úcomplexz"Inconsistency between matrix type z and value type )r%   zUnsupported format for values )$r@   rA   r_   r;   ÚwarningsÚwarnr   rP   rM   rN   rO   r   ÚparseÚ
isinstancer   r   rd   r3   Úfloat64ÚintÚpointer_formatÚindices_formatÚvalues_formatÚint32Úpointer_dtypeÚindices_dtypeÚvalues_dtyper   Úpointer_nbytes_fullÚindices_nbytes_fullÚvalues_nbytes_fullrE   rF   rG   rl   rB   )Úselfr@   rA   rP   rM   rN   rO   rB   rE   rF   rG   Úpointer_format_strÚindices_format_strÚvalues_format_strÚright_hand_sides_nlinesrl   Úparserry   rz   r{   r   s                        r   Ú__init__zHBInfo.__init__Ð   sº  € ð ˆŒ
ØˆŒØˆ=ØˆEÝˆu‰:Œ:˜Š?ˆ?ÝÐ>Ñ?Ô?Ð?àˆ;ØˆCÝˆs‰8Œ8�aŠ<ˆ<ÝŒMÐ=ÀÑCÝ&°1ð6ñ 6ô 6ð 6ð )ˆÔØ,ˆÔØ,ˆÔØ*ˆÔå$Ñ&Ô&ˆØŸšÐ&8Ñ9Ô9ˆÝ˜.­)Ñ4Ô4ð 	/ÝÐMØ-ñ.ñ /ô /ð /ð  ŸšÐ&8Ñ9Ô9ˆÝ˜.­)Ñ4Ô4ð 	-ÝÐMØ+ñ,ñ -ô -ð -ð ŸšÐ%6Ñ7Ô7ˆÝ�m¥YÑ/Ô/ð 	QØÔ Ð(;Ð;Ð;Ý ð "?Àfð "?ð "?Ø/<ð"?ð "?ñ @ô @ð @åœ:ˆLˆLÝ˜¥yÑ1Ô1ð 	QØÔ ¨Ð3Ð3Ý ð "?Àfð "?ð "?Ø/<ð"?ð "?ñ @ô @ð @õ ˆLˆLåÐO¸mÐOÐOÑPÔPÐPà,ˆÔØ,ˆÔØ*ˆÔåœXˆÔÝœXˆÔØ(ˆÔà,ˆÔÝ#/°ÀÑ#OÔ#OˆÔ à,ˆÔÝ#/°ÀÑ#OÔ#OˆÔ à*ˆÔÝ".¨}¸mÑ"LÔ"LˆÔàˆŒ
ØˆŒ
Ø$ˆŒØ&ˆÔØˆŒˆˆr   c                 ó€  — | j                              d¦  «        | j                             d¦  «        z   g}|                     d| j        | j        | j        | j        fz  ¦  «         |                     d| j        j	                             d¦  «        | j
        | j        | j        dfz  ¦  «         | j        j	        }| j        j	        }| j        j	        }|                     |                     d¦  «        d›|                     d¦  «        d›|                     d	¦  «        d
›�¦  «         d                     |¦  «        S )z<Gives the header corresponding to this instance as a string.rT   rp   z%14d%14d%14d%14dz%14s%14d%14d%14d%14drV   r   é   z>16é   z>20rS   )r@   ÚljustrA   ÚappendrP   rM   rN   rO   rB   r=   rE   rF   rG   ry   rz   r{   Újoin)rƒ   ÚheaderÚpffmtÚiffmtÚvffmts        r   ÚdumpzHBInfo.dump  s:  € à”*×"Ò" 2Ñ&Ô&¨¬¯ª¸Ñ):Ô):Ñ:Ð;ˆà�ŠÐ(ØÔ(¨$Ô*=ØÔ*¨DÔ,>ð@ñ@ñ 	Aô 	Að 	Að 	�ŠÐ,Ø”{Ô1×7Ò7¸Ñ;Ô;¸T¼ZØ”z 4¤?°Að7ñ7ñ 	8ô 	8ð 	8ð Ô#Ô2ˆØÔ#Ô2ˆØÔ"Ô1ˆØ�ŠØ—{’{ 2‘”��¨¯ª°B©¬¨¨¸¿ºÀR¹¼¸¸ðJñ 	Kô 	Kð 	Kà�yŠy˜Ñ Ô Ð r   )r   r   NN)r   r   )r   r   r   ÚclassmethodrQ   rn   r‰   r”   r   r   r   r   r   ,   sƒ   € € € € € ØðK'ð K'ð K'ñ „[ðK'ðZ ðR,ð R,ñ „[ðR,ðp 45ð	Gð Gð Gð GðR!ð !ð !ð !ð !r   r   c                 ót   — 	 t          | ¦  «        S # t          $ r}|€d}t          || z  ¦  «        |‚d }~ww xY w)NzExpected an int, got %s)rx   r;   )ÚvalueÚmsgÚes      r   ra   ra   ,  sP   € ð-Ý�5‰zŒzÐøÝð -ð -ð -Øˆ;Ø+ˆCÝ˜˜u™Ñ%Ô%¨1Ð,øøøøð-øøøs   ‚ ‘
7›2²7c                 ó¦  — d                      |                      |j        ¦  «        |                      ¦   «         g¦  «        }t	          j        |t          d¬¦  «        }d                      |                      |j        ¦  «        |                      ¦   «         g¦  «        }t	          j        |t          d¬¦  «        }d                      |                      |j        ¦  «        |                      ¦   «         g¦  «        }t	          j        ||j	        d¬¦  «        }	 t          ||dz
  |dz
  f|j        |j        f¬¦  «        S # t          $ r}|‚d }~ww xY w)NrY   ú )r5   Úsepr   )r0   )r�   Úreadr€   r]   r3   Ú
fromstringrx   r�   r‚   r   r   rE   rF   r;   )	Úcontentr�   Ú
ptr_stringÚptrÚ
ind_stringÚindÚ
val_stringÚvalr™   s	            r   Ú_read_hb_datar¦   5  se  € à—’˜'Ÿ,š, vÔ'AÑBÔBØ"×+Ò+Ñ-Ô-ð/ñ 0ô 0€Jå
Œ-˜
Ý˜3ð ñ  ô  €Cð —’˜'Ÿ,š, vÔ'AÑBÔBØ×'Ò'Ñ)Ô)ð+ñ ,ô ,€Jå
Œ-˜
Ý˜3ð ñ  ô  €Cð —’˜'Ÿ,š, vÔ'@ÑAÔAØ!×*Ò*Ñ,Ô,ð.ñ /ô /€Jå
Œ-˜
ØÔ%¨3ð0ñ 0ô 0€CðÝ˜3  A¡ s¨1¡uÐ-Ø!'¤¨v¬|Ð <ð>ñ >ô >ð 	>øåð ð ð Øˆøøøøðøøøs   Ä%D? Ä?
EÅ	EÅEc                 ój  — |                       d¬¦  «        } d„ }|                     |                     ¦   «         ¦  «         |                     d¦  «          ||| j        dz   |j        |j        ¦  «          ||| j        dz   |j        |j        ¦  «          ||| j	        |j
        |j        ¦  «         d S )NFr!   c                 óŠ  — |j         }||j        z  }|d |dz
  |j        z  …         }|                     |dz
  |j        f¦  «        D ]*}|                      |t	          |¦  «        z  dz   ¦  «         Œ+|j        |j        z
  }|dk    r=|                      ||z  t	          ||j        |z
  d …         ¦  «        z  dz   ¦  «         d S d S )Nr   rS   r   )Úpython_formatr   ÚreshapeÚwriteÚtupler*   )	ÚfÚarr   r   ÚpyfmtÚ
pyfmt_fullÚfullÚrowÚnremains	            r   Úwrite_arrayz _write_data.<locals>.write_arrayP  sÞ   € ð Ô!ˆØ˜SœZÑ'ˆ
ð Ð,�F˜Q‘J #¤*Ñ,Ð,Ô-ˆØ—<’< ¨¡¨3¬:Ð 6Ñ7Ô7ð 	4ð 	4ˆCØ�GŠG�J¥ s¡¤Ñ+¨dÑ2Ñ3Ô3Ð3Ð3Ø”'˜DœIÑ%ˆØ�QŠ;ˆ;Ø�GŠG�U˜W‘_­¨b°´¸7Ñ1BÐ1CÐ1CÔ.DÑ(EÔ(EÑEÈÑLÑMÔMÐMÐMÐMð ˆ;r   rS   r   )r,   r«   r”   r-   rM   ry   r.   rN   rz   r/   rO   r{   )r?   rh   r�   r´   s       r   Ú_write_datarµ   M  sÓ   € Ø	�Š�UˆÑÔ€AðNð Nð Nð ‡I‚Iˆf�kŠk‰mŒmÑÔÐØ‡I‚Iˆd�O„O€Oà€K��Q”X˜a‘Z Ô!6ØÔ%ñ'ô 'ð 'à€K��Q”Y˜q‘[ &Ô"7ØÔ%ñ'ô 'ð 'à€K��Q”V˜VÔ1ØÔ$ñ&ô &ð &ð &ð &r   c                   ó(  — e Zd ZdZdddddœZddd	d
ddœZdddœZd„ e                     ¦   «         D ¦   «         Zd„ e                     ¦   «         D ¦   «         Z	d„ e                     ¦   «         D ¦   «         Z
ed„ ¦   «         Zdd„Zed„ ¦   «         Zd„ ZdS )r<   zClass to hold the matrix type.ÚRÚCÚPÚI)r&   rr   Úpatternr%   ÚSÚUÚHÚZ)Ú	symmetricr'   Ú	hermitianÚskewsymmetricÚrectangularÚAÚE)r(   Ú	elementalc                 ó   — i | ]\  }}||“Œ	S r   r   ©Ú.0ÚiÚjs      r   ú
<dictcomp>zHBMatrixType.<dictcomp>  s   € Ð4Ð4Ð4™$˜!˜Q��AÐ4Ð4Ð4r   c                 ó   — i | ]\  }}||“Œ	S r   r   rÈ   s      r   rÌ   zHBMatrixType.<dictcomp>€  s   € Ð>Ð>Ð>™t˜q !�a˜Ð>Ð>Ð>r   c                 ó   — i | ]\  }}||“Œ	S r   r   rÈ   s      r   rÌ   zHBMatrixType.<dictcomp>�  s   € Ð:Ð:Ð:™T˜Q �A�qÐ:Ð:Ð:r   c                 ó  — t          |¦  «        dk    st          d¦  «        ‚	 | j        |d                  }| j        |d                  }| j        |d                  } | |||¦  «        S # t
          $ r}t          d|z  ¦  «        |‚d }~ww xY w)Nr[   z:Fortran format for matrix type should be 3 characters longr   r   r\   zUnrecognized format %s)r_   r;   Ú	_f2q_typeÚ_f2q_structureÚ_f2q_storageÚKeyError)r>   r   rd   re   rf   r™   s         r   rc   zHBMatrixType.from_fortranƒ  s­   € å�3‰xŒx˜1Š}ˆ}Ýð /ñ 0ô 0ð 0ð	DØœ s¨1¤vÔ.ˆJØÔ*¨3¨q¬6Ô2ˆIØÔ& s¨1¤vÔ.ˆGØ�3�z 9¨gÑ6Ô6Ð6øÝð 	Dð 	Dð 	DÝÐ5¸Ñ;Ñ<Ô<À!ÐCøøøøð	Døøøs   ¤AA* Á*
BÁ4BÂBr(   c                 óÒ   — || _         || _        || _        || j        vrt	          d|z  ¦  «        ‚|| j        vrt	          d|z  ¦  «        ‚|| j        vrt	          d|z  ¦  «        ‚d S )NzUnrecognized type %szUnrecognized structure %szUnrecognized storage %s)rd   re   rf   Ú	_q2f_typer;   Ú_q2f_structureÚ_q2f_storage)rƒ   rd   re   rf   s       r   r‰   zHBMatrixType.__init__�  s„   € Ø$ˆŒØ"ˆŒØˆŒà˜Tœ^Ð+Ð+ÝÐ3°jÑ@ÑAÔAÐAØ˜DÔ/Ð/Ð/ÝÐ8¸9ÑDÑEÔEÐEØ˜$Ô+Ð+Ð+ÝÐ6¸Ñ@ÑAÔAÐAð ,Ð+r   c                 ór   — | j         | j                 | j        | j                 z   | j        | j                 z   S ©N)rÕ   rd   rÖ   re   r×   rf   ©rƒ   s    r   r=   zHBMatrixType.fortran_formatœ  s7   € àŒ~˜dœoÔ.ØÔ" 4¤>Ô2ñ3àÔ  ¤Ô.ñ/ð 	/r   c                 ó8   — d| j         › d| j        › d| j        › d�S )NzHBMatrixType(z, ú))rd   re   rf   rÚ   s    r   Ú__repr__zHBMatrixType.__repr__¢  s)   € ØS˜tœÐSÐS°$´.ÐSÐSÀDÄLÐSÐSÐSÐSr   N)r(   )r   r   r   Ú__doc__rÕ   rÖ   r×   ÚitemsrÐ   rÑ   rÒ   r•   rc   r‰   Úpropertyr=   rÝ   r   r   r   r<   r<   j  s%  € € € € € Ø(Ð(ð ØØØð	ð €Ið ØØØ Øðð €Nð Øðð €Lð
 5Ð4 )§/¢/Ñ"3Ô"3Ð4Ñ4Ô4€IØ>Ð> ~×';Ò';Ñ'=Ô'=Ð>Ñ>Ô>€NØ:Ð: \×%7Ò%7Ñ%9Ô%9Ð:Ñ:Ô:€Làð
Dð 
Dñ „[ð
Dð
Bð 
Bð 
Bð 
Bð ð/ð /ñ „Xð/ð
Tð Tð Tð Tð Tr   r<   c                   ó�   — e Zd Zd
d„Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	d„ Z
d	„ ZdS )ÚHBFileNc                 óh   — || _         |€!t                               |¦  «        | _        dS || _        dS )a  Create a HBFile instance.

        Parameters
        ----------
        file : file-object
            StringIO work as well
        hb_info : HBInfo, optional
            Should be given as an argument for writing, in which case the file
            should be writable.
        N)Ú_fidr   rn   Ú_hb_info)rƒ   ÚfileÚhb_infos      r   r‰   zHBFile.__init__§  s6   € ð ˆŒ	Øˆ?Ý"×,Ò,¨TÑ2Ô2ˆDŒMˆMˆMð $ˆDŒMˆMˆMr   c                 ó   — | j         j        S rÙ   )rå   r@   rÚ   s    r   r@   zHBFile.titleº  s   € àŒ}Ô"Ð"r   c                 ó   — | j         j        S rÙ   )rå   rA   rÚ   s    r   rA   z
HBFile.key¾  s   € àŒ}Ô Ð r   c                 ó$   — | j         j        j        S rÙ   )rå   rB   rd   rÚ   s    r   ÚtypezHBFile.typeÂ  s   € àŒ}Ô#Ô.Ð.r   c                 ó$   — | j         j        j        S rÙ   )rå   rB   re   rÚ   s    r   re   zHBFile.structureÆ  s   € àŒ}Ô#Ô-Ð-r   c                 ó$   — | j         j        j        S rÙ   )rå   rB   rf   rÚ   s    r   rf   zHBFile.storageÊ  s   € àŒ}Ô#Ô+Ð+r   c                 ó6   — t          | j        | j        ¦  «        S rÙ   )r¦   rä   rå   rÚ   s    r   Úread_matrixzHBFile.read_matrixÎ  s   € Ý˜TœY¨¬Ñ6Ô6Ð6r   c                 ó8   — t          || j        | j        ¦  «        S rÙ   )rµ   rä   rå   )rƒ   r?   s     r   Úwrite_matrixzHBFile.write_matrixÑ  s   € Ý˜1˜dœi¨¬Ñ7Ô7Ð7r   rÙ   )r   r   r   r‰   rà   r@   rA   rë   re   rf   rï   rñ   r   r   r   râ   râ   ¦  sÍ   € € € € € ð$ð $ð $ð $ð& ð#ð #ñ „Xð#ð ð!ð !ñ „Xð!ð ð/ð /ñ „Xð/ð ð.ð .ñ „Xð.ð ð,ð ,ñ „Xð,ð7ð 7ð 7ð8ð 8ð 8ð 8ð 8r   râ   c                 ó¦   — d„ }t          | d¦  «        r || ¦  «        S t          | ¦  «        5 } ||¦  «        cddd¦  «         S # 1 swxY w Y   dS )ah  Read HB-format file.

    Parameters
    ----------
    path_or_open_file : path-like or file-like
        If a file-like object, it is used as-is. Otherwise, it is opened
        before reading.

    Returns
    -------
    data : scipy.sparse.csc_matrix instance
        The data read from the HB file as a sparse matrix.

    Notes
    -----
    At the moment not the full Harwell-Boeing format is supported. Supported
    features are:

        - assembled, non-symmetric, real matrices
        - integer for pointer/indices
        - exponential format for float values, and int format

    Examples
    --------
    We can read and write a harwell-boeing format file:

    >>> from scipy.io import hb_read, hb_write
    >>> from scipy.sparse import csr_array, eye
    >>> data = csr_array(eye(3))  # create a sparse array
    >>> hb_write("data.hb", data)  # write a hb file
    >>> print(hb_read("data.hb"))  # read a hb file
    <Compressed Sparse Column sparse matrix of dtype 'float64'
        with 3 stored elements and shape (3, 3)>
        Coords	Values
        (0, 0)	1.0
        (1, 1)	1.0
        (2, 2)	1.0
    c                 óH   — t          | ¦  «        }|                     ¦   «         S rÙ   )râ   rï   )rh   Úhbs     r   Ú_get_matrixzhb_read.<locals>._get_matrixü  s   € Ý�C‰[Œ[ˆØ�~Š~ÑÔÐr   r�   N)ÚhasattrÚopen)Úpath_or_open_filerõ   r­   s      r   r   r   Õ  s³   € ðN ð  ð  õ Ð  &Ñ)Ô)ð "Øˆ{Ð,Ñ-Ô-Ð-åÐ#Ñ$Ô$ð 	"¨Ø�;˜q‘>”>ð	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"s   ®AÁA
ÁA
c                 ó  ‡‡— ‰                      d¬¦  «        Š‰€t                               ‰¦  «        Šˆˆfd„}t          | d¦  «        r || ¦  «        S t	          | d¦  «        5 } ||¦  «        cddd¦  «         S # 1 swxY w Y   dS )a‚  Write HB-format file.

    Parameters
    ----------
    path_or_open_file : path-like or file-like
        If a file-like object, it is used as-is. Otherwise, it is opened
        before writing.
    m : sparse-matrix
        the sparse matrix to write
    hb_info : HBInfo
        contains the meta-data for write

    Returns
    -------
    None

    Notes
    -----
    At the moment not the full Harwell-Boeing format is supported. Supported
    features are:

        - assembled, non-symmetric, real matrices
        - integer for pointer/indices
        - exponential format for float values, and int format

    Examples
    --------
    We can read and write a harwell-boeing format file:

    >>> from scipy.io import hb_read, hb_write
    >>> from scipy.sparse import csr_array, eye
    >>> data = csr_array(eye(3))  # create a sparse array
    >>> hb_write("data.hb", data)  # write a hb file
    >>> print(hb_read("data.hb"))  # read a hb file
    <Compressed Sparse Column sparse matrix of dtype 'float64'
        with 3 stored elements and shape (3, 3)>
        Coords	Values
        (0, 0)	1.0
        (1, 1)	1.0
        (2, 2)	1.0
    Fr!   Nc                 óN   •— t          | ‰¦  «        }|                     ‰¦  «        S rÙ   )râ   rñ   )rh   rô   rç   r?   s     €€r   Ú_set_matrixzhb_write.<locals>._set_matrix6  s$   ø€ Ý�C˜Ñ!Ô!ˆØ�Š˜qÑ!Ô!Ð!r   r«   Úw)r,   r   rQ   rö   r÷   )rø   r?   rç   rû   r­   s    ``  r   r	   r	     só   øø€ ðT 	
�Š�UˆÑÔ€Aà€Ý×"Ò" 1Ñ%Ô%ˆð"ð "ð "ð "ð "ð "õ Ð  'Ñ*Ô*ð "Øˆ{Ð,Ñ-Ô-Ð-åÐ# SÑ)Ô)ð 	"¨QØ�;˜q‘>”>ð	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"s   Á&A>Á>BÂBrÙ   )rÞ   rs   Únumpyr3   Úscipy.sparser   Ú_fortran_format_parserr   r   r   Ú__all__Ú	Exceptionr   ÚWarningr   r   r   ra   r¦   rµ   r<   râ   r   r	   r   r   r   ú<module>r     s®  ðð
ð 
ð( €€€à Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mà�jÐ
!€ð	ð 	ð 	ð 	ð 	�iñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�7ñ 	ô 	ð 	ð7ð 7ð 7ð}!ð }!ð }!ð }!ð }!ñ }!ô }!ð }!ð@-ð -ð -ð -ðð ð ð0&ð &ð &ð:9Tð 9Tð 9Tð 9Tð 9Tñ 9Tô 9Tð 9Tðx,8ð ,8ð ,8ð ,8ð ,8ñ ,8ô ,8ð ,8ð^/"ð /"ð /"ðd7"ð 7"ð 7"ð 7"ð 7"ð 7"r   