mini-matrix 0.1.6

A mini linear algebra library implemented in Rust.
Documentation
�

v%�f�P���ddlZddlmZmZddlmZddlmZmZm	Z	m
Z
ddlmZddl
mZgd�Ze	�ZeevrdZd	Znd
ZdZdZd
ZdZdZdZdZd\ZZZZZddddd�Zddd�Zd�Z e d.d��Z!e dddd�d��Z"e ddd�d ��Z#e ddd�d!��Z$e d/d"��Z%e d0d#��Z&e ddd$�d%��Z'e dd&d'd(�d)��Z(e d*��Z)e d+��Z*e d,��Z+e,d-k(ryy)1�N)�inv�eig)�ceil)�pyplot�ticker�get_backend�rc)�Axes3D)�cycle)�GTK3Agg�	GTK3Cairo�MacOSX�nbAgg�Qt4Agg�Qt4Cairo�Qt5Agg�Qt5Cairo�TkAgg�TkCairo�WebAgg�WX�WXAgg�WXCairo�g�?��z#808080z#cab18cz#0096d6z#008367z#E31937z#004065)z#ef7b9dz#fbd349z#ffa500z#a35cffz#731d1d�xyg�~j�t��?)�angles�scale_units�scale�widthg�?皙�����?)�	linewidth�alphac����fd�}|S)Nc���tddt��tdd��tddd	�
�tdd�
��|i|��y)N�font�serif)�family�size�figure��)�dpi�axesTr)�	axisbelow�	titlesize�linesr)r#)r	�fontsize)�args�kwargs�funcs  ��D/Users/m0saan/Cursus/matrix/notes/notebook/../scripts/plot_helper.py�wrapperzset_rc.<locals>.wrapper(s<���
�6�'��1�
�8���
�6�T�Q�/�
�7�a� ��d��f���)r5r7s` r6�set_rcr:'s�����Nr8c
�V�tj|�}|jddk(sJd��|�.tj|�}|jddk(sJd��tj|�}|jd}|jd}|dk(r|dkDrtj||df�}nC|dk(r|dkDrtj||df�}n |j|jk(sJd��||z}tj
tjtj||f���}tj|dz�}tjddg�tz}tj|�	�\}}|j|dd�df|dd�df|dd�df|dd�dftd
d
d��|j||g�|j||g�|j!d�|j#�}	|j%�}
|	d|	dz
}|
d|
dz
}tt't)||��d�}
t+j,|
�
�}|j.j1|�|j2j1|�|j4dit6��|j8dj;d�|j8dj;d�|j8dj=d�|j8dj=d�y)a� Draw 2d vectors based on the values of the vectors and the position of their tails.
    
    Parameters
    ----------
    vectors : list.
        List of 2-element array-like structures, each represents a 2d vector.
    
    tails : list, optional.
        List of 2-element array-like structures, each represents the coordinates of the tail
        of the corresponding vector in vectors. If None (default), all tails are set at the
        origin (0,0). If len(tails) is 1, all tails are set at the same position. Otherwise,
        vectors and tails must have the same length.
    
    Examples
    --------
    >>> v = [(1, 3), (3, 3), (4, 6)]
    >>> plot_vector(v)      # draw 3 vectors with their tails at origin
    >>> t = [numpy.array((2, 2))]
    >>> plot_vector(v, t)   # draw 3 vectors with their tails at (2,2)
    >>> t = [[3, 2], [-1, -2], [3, 5]]
    >>> plot_vector(v, t)   # draw 3 vectors with 3 different tails

    r�z#Each vector should have 2 elements.Nz!Each tail should have 2 elements.rz'vectors and tail must have a same shapeg333333�?��figsizer)�colorrrr �equal)�base�left�center�bottom�right�none�top)T)�numpy�array�shape�
zeros_like�tile�max�abs�hstackr�	fig_scaler�subplots�quiver�darkblue�set_xlim�set_ylim�
set_aspect�
get_xticks�
get_yticks�int�minr�MultipleLocator�xaxis�set_major_locator�yaxis�grid�grid_params�spines�set_position�	set_color)�vectors�tails�nvectors�ntails�heads�limitr>r+�axis�xticks�yticks�dx�dyrA�locs               r6�plot_vectorrp0s���2�k�k�'�"�G��=�=���q� �G�"G�G� ������E�"���{�{�1�~��"�G�$G�G�"�� � ��)���}�}�Q��H�
�[�[��^�F��1�}��!���*�*�W�v�q�k�2��	�1���A���
�
�5�8�Q�-�0���{�{�g�m�m�+�V�-V�V�+�
�G�O�E��I�I�e�i�i����e�U�^� <�=�>�E��J�J�u�s�{�#�E��k�k�1�Q�%� �9�,�G��?�?�7�3�L�F�D��K�K��a��c�
�E�!�A�#�J���!���g�a��c�l�(��4�q��:��M�M�E�6�5�/�"��M�M�E�6�5�/�"��O�O�G���_�_�
�F�
�_�_�
�F�	���V�A�Y�	�B�	���V�A�Y�	�B��s�3�r�2�;���#�D�
�
 �
 �d�
+�C��J�J� � ��%��J�J� � ��%�
�D�I�I�"�k�"�	�K�K���$�$�X�.��K�K���&�&�x�0��K�K���"�"�6�*��K�K��� � ��(r8TF��unit_vector�unit_circle�titlec��|jdk(sJd��d}tj||dz�}tj||�\}}	|dd�df}
|dd�df}|
d|z|d|	zz}|
d|z|d|	zz}
tjd�}t|j�D]Z}|j||dd�f|
|dd�ffdtit��|j|dd�|f|
dd�|ffdtit���\|rP|j|||
dg|
dgfdtit��|j|||dg|dgfdtit��tt t"t$t&t(g�}|rK|D]F}t+|�}||j-d	d�z}|j|||dg|dgfd|it���H|r�tj.dd
tj0zd�}tj2tj4|�tj6|�f�}||z}|j|d|dtd�
�d}|j8dj;d�|j8dj;d�|j8dj=d�|j8dj=d�|j8dj?d�|j8dj?d�|jA||g�|jC||g�|�|jE|�yy)a A helper function to plot the linear transformation defined by a 2x2 matrix.
    
    Parameters
    ----------
    axis : class matplotlib.axes.Axes.
        The axes to plot on.

    matrix : class numpy.ndarray.
        The 2x2 matrix to visualize.

    *vectors : class numpy.ndarray.
        The vector(s) to plot along with the linear transformation. Each array denotes a vector's
        coordinates before the transformation and must have a shape of (2,). Accept any number of vectors. 
    
    unit_vector : bool, optional.
        Whether to plot unit vectors of the standard basis, default to True.
    
    unit_circle: bool, optional.
        Whether to plot unit circle, default to False.
    
    title: str, optional.
        Title of the plot.

    �r<r<z+the input matrix must have a shape of (2,2)�rNr�cr?�����r<�)r"�r?�lwrrBrCrDg333333�?rErFrG)#rJrH�arange�meshgrid�zeros�ranger*�plot�goldr`�	lightbluerR�green�
quiver_params�redr�pinkrS�orange�purple�brown�next�reshape�linspace�pi�vstack�cos�sinrarb�
set_linewidthrcrTrU�	set_title)rj�matrixrrrsrtrd�
grid_range�x�X_�Y_�I�J�X�Y�origin�i�color_cycle�vectorr?�vector_r$�circle�circle_transris                        r6�plot_transformation_helperr�ys��4�<�<�5� �O�"O�O� ��J�
���j�[�*�Q�,�/�A�
�^�^�A�a�
 �F�B���q��s��A��q��s��A�	�!��R��!�A�$�r�'��A�	�!��R��!�A�$�r�'��A�
�[�[��^�F��1�6�6�]�>����	�	�!�A�a�C�&�!�A�a�C�&�8�D�8�K�8���	�	�!�A�a�C�&�!�A�a�C�&�=�I�=��=�>�
�����F�F�Q�q�T�F�Q�q�T�F�Q�%�Q�=�Q�����F�F�Q�q�T�F�Q�q�T�F�O�#�O��O���x����?�@�K���	b�F���%�E��v�~�~�b��3�3�G��D�K�K�������w�q�z�l�a�%�a�S`�a�	b������1�U�X�X�:�r�2�����u�y�y��/����5�1A�B�C�������	�	�,�q�/�<��?�#�#�	�F�
�E��K�K���$�$�X�.��K�K���&�&�x�0��K�K���%�%�c�*��K�K���'�'��,��K�K���"�"�6�*��K�K��� � ��(��M�M�E�6�5�/�"��M�M�E�6�5�/�"������u��r8)rrrsc���tjddg�tz}tjdd|��\}\}}t|tjd�g|��||dd��t||g|��||dd��y)	a Plot the linear transformation defined by a 2x2 matrix using the helper
    function plot_transformation_helper(). It will create 2 subplots to visualize some
    vectors before and after the transformation.
    
    Parameters
    ----------
    matrix : class numpy.ndarray.
        The 2x2 matrix to visualize.

    *vectors : class numpy.ndarray.
        The vector(s) to plot along with the linear transformation. Each array denotes a vector's
        coordinates before the transformation and must have a shape of (2,). Accept any number of vectors.
    
    unit_vector : bool, optional.
        Whether to plot unit vectors of the standard basis, default to True.
    
    unit_circle: bool, optional.
        Whether to plot unit circle, default to False.
    
    rr<rr=�Before transformationrqzAfter transformationN)rHrIrPrrQr��identity)r�rrrsrdr>r+�axis1�axis2s        r6�plot_linear_transformationr��s���,�k�k�1�Q�%� �9�,�G�#�_�_�Q��7�C��F�N�U�E��u�e�n�n�Q�&7�T�'�T�{�hs�|S�T��u�f�H�w�H�K�]h�qG�Hr8c���t|�dz}d}t||z�}tjd|zd|zg�tz}tj|||��\}}t|�D]m}	|	dk(rtjd�}
d}n3||	dz

z}
|	dk(rdj|	�}ndj|	�}t||	|z|	|zf|
|||���o||z|kDr|d	jd
�yy)aJ Plot the linear transformation defined by a sequence of n 2x2 matrices using the helper
    function plot_transformation_helper(). It will create n+1 subplots to visualize some
    vectors before and after each transformation.

    Parameters
    ----------
    *matrices : class numpy.ndarray.
        The 2x2 matrices to visualize. Accept any number of matrices.
    
    unit_vector : bool, optional.
        Whether to plot unit vectors of the standard basis, default to True.
    
    unit_circle: bool, optional.
        Whether to plot unit circle, default to False.
      
    rr<r=rr��After {} transformation�After {} transformationsrq)ryry�offN)�lenrrHrIrPrrQr�r��formatr�rj)rrrs�matrices�nplots�nx�nyr>r+r.r��matrix_transrts            r6�plot_linear_transformationsr��s��$��]�Q�
�F�	
�B�	
�f�R�i��B��k�k�1�R�4��2��,�'�)�3�G��?�?�2�r�7�;�L�F�D�
�6�]�
C����6� �>�>�!�,�L�+�E�#�A�a�C�=�<�7�L��A�v�1�8�8��;��2�9�9�!�<��"�4��2��q��t��#4�l�P[�it�}B�	C�
C�
�"�u�v�~��U������r8c�4�|jdk(sJd��d\}}}d}|�rCd}	tj|	|	dz�}
tj|
|
|
�\}}}
|d|z|d|zz|d	|
zz}|d
|z|d|zz|d|
zz}|d
|z|d|zz|d|
zz}t	|
j
�D]�}t	|
j
�D]�}|j
|dd�||f|dd�||f|dd�||f||��|j
||dd�|f||dd�|f||dd�|f||��|j
|||dd�f|||dd�f|||dd�f||������|�r�tjddtjzd�}tjdtjd�}dtjtj|�tj|��z}dtjtj|�tj|��z}dtjtjtj
|��tj|��z}
|d|z|d|zz|d	|
zz}|d
|z|d|zz|d|
zz}|d
|z|d|zz|d|
zz}|j|||ddddd��|�|j|�d}|s|r?fD]6}tjtj |��}t||�}�8nd}|j#||�|j%||�|j'||�dD]}|j)|d���y)a� A helper function to plot the linear transformation defined by a 3x3 matrix.
    
    Parameters
    ----------
    axis : class matplotlib.axes.Axes.
        The axes to plot on.

    matrix : class numpy.ndarray.
        The 3x3 matrix to visualize.

    grid : bool, optional.
        Whether to plot 3d grid lines, default to True.
    
    unit_sphere : bool, optional.
        Whether to plot unit sphere, default to False.
    
    title : str, optional.
        Title of the plot.

    )�r�z+the input matrix must have a shape of (3,3))z#0084b6z#d8a322z#FF3333�ffffff�?r<r�rr�rr)rr<�rr�rr)rr<)r<r)r<rrvN)r?r#r�dr�oceang333333�?)�rstride�cstrider#�cmapr$)r��y�z�����)rj�pad)rJrHr}r~r�r*r�r�r��outerr�r��ones�plot_surfacer�rMrNrTrU�set_zlim�tick_params)rjr�r_�unit_spherert�xcolor�ycolor�zcolorr#r�r�r�r��Z�X_new�Y_new�Z_newr��j�u�vrirI�limit_�axis_strs                         r6�plot_3d_transformation_helperr�s���,�<�<�5� �O�"O�O� �<��F�F�F��I���
��L�L�*��j��l�3���.�.��1�Q�'���1�a��s��A�
��s��A�
�-��s��A�
�=���s��A�
��s��A�
�-��s��A�
�=���s��A�
��s��A�
�-��s��A�
�=���q�v�v��	g�A��1�6�6�]�
g���	�	�%��!�A��,��a��!�e��e�A�a��E�l�&�\e�	�f��	�	�%��!�A��,��a��!�e��e�A�a��E�l�&�\e�	�f��	�	�%��!�A��,��a��!�e��e�A�a��E�l�&�\e�	�f�
g�	g���N�N�1�a�%�(�(�l�C�0���N�N�1�e�h�h��,��
����E�I�I�a�L�%�)�)�A�,�7�7��
����E�I�I�a�L�%�)�)�A�,�7�7��
����E�J�J�u�z�z�!�}�5�u�y�y��|�D�D���s��A�
��s��A�
�-��s��A�
�=���s��A�
��s��A�
�-��s��A�
�=���s��A�
��s��A�
�-��s��A�
�=�����%���q�!�q�W^�fi��j������u��
�E��{��U�E�*�	'�E��Y�Y�u�y�y��/�0�F���v�&�E�	'����M�M�5�&�%� ��M�M�5�&�%� ��M�M�5�&�%� �#�0�����h�B��/�0r8c�&�tjddg�tz}tj|��}|jdddd��}|jdddd��}t
|tjd�||d�	�t
||||d
�	�y)a� Plot the linear transformation defined by a 3x3 matrix using the helper
    function plot_3d_transformation_helper(). It will create 2 subplots to visualize some
    vectors before and after the transformation.
    
    Parameters
    ----------
    matrix : class numpy.ndarray.
        The 3x3 matrix to visualize.

    grid : bool, optional.
        Whether to plot 3d grid lines, default to True.
    
    unit_sphere : bool, optional.
        Whether to plot unit sphere, default to False.

    rr<r=r�3d��
projectionr�zbefore transformation�r_r�rtzafter transformationN)rHrIrPrr+�add_subplotr�r�)r�r_r�r>r+r�r�s       r6�plot_3d_linear_transformationr�Gs���&�k�k�1�Q�%� �9�,�G�
�]�]�7�
+�F����q�!�Q�4��8�E����q�!�Q�4��8�E�!�%�����):��S^�f}�~�!�%��d��[q�rr8)r_r�c���t|�dz}d}t||z�}tjd|zd|zg�tz}tj|��}t|�D]z}|j|||dzd��}	|dk(rtjd�}
d}n3||dz

z}
|dk(rd	j|�}nd
j|�}t|	|
|||���|y)
a. Plot the linear transformation defined by a sequence of n 3x3 matrices using the helper
    function plot_3d_transformation_helper(). It will create n+1 subplots to visualize some
    vectors before and after each transformation.
    
    Parameters
    ----------
    *matrices : class numpy.ndarray.
        The 3x3 matrices to visualize. Accept any number of matrices. 

    grid : bool, optional.
        Whether to plot 3d grid lines, default to False.
    
    unit_sphere : bool, optional.
        Whether to plot unit sphere, default to False.

    rr<r=r�r�rr�r�r�r�r�N)r�rrHrIrPrr+r�r�r�r�r�)r_r�r�r�r�r�r>r+r�rjr�rts            r6�plot_3d_linear_transformationsr�as���$��]�Q�
�F�	
�B�	
�f�R�i��B��k�k�1�R�4��2��,�'�)�3�G�
�]�]�7�
+�F�
�6�]�k���!�!�"�b�!�A�#�$�!�?����6� �>�>�!�,�L�+�E�#�A�a�C�=�<�7�L��A�v�1�8�8��;��2�9�9�!�<��%�d�L�t�Q\�di�j�kr8r�r��rt�I_label�J_labelc
�t�d}tj||dz�}tj||�\}	}
|d|	z|d|
zz}|d|	z|d|
zz}tjd�}
|j	|
|
dd��d}t|j�D]P}|j||dd�f||dd�ft|�	�|j|dd�|f|dd�|ft|�	��Rd
}tj|dk(�dd}|j||dd�f||dd�ft|�	�|j|dd�|f|dd�|ft|�	�|j|
|
|dg|dgfdtit��|j|
|
|dg|dgfdtit��d}|r�|D]�}tjtj||f��}||j!d
d�z}|j|
|
|dg|dgfdt"it��t%t'tj$tj(|���|�}��|j+||g�|j-||g�|j/d�|�|j1|�dddd�}|j2|d|dz
dzdz|d|dz
dzdzdj5|�fdti|��|j2|d|dz
dzdz|d|dz
dzdzdj5|�fdti|��y)a� A helper function to plot the 2D coordinate system determined by the basis I,J.
    
    Parameters
    ----------
    axis : class matplotlib.axes.Axes.
        The axes to plot on.

    I, J: class numpy.ndarray.
        The coordinates of the basis vector in the standard basis.

    *vectors : class numpy.ndarray.
        The vector(s) to plot along with the change of basis. Each array denotes a vector's
        coordinates in I-J coordinate system (not in the standard basis). Each vector must have
        a shape of (2,). Accept any number of vectors.
    
    I_label, J_label : str, optional.
        Label of the new basis, default to 'i' and 'j'.
    
    title: str, optional.
        Title of the plot.

    rwrr�blackr�)rx�sg�������?N)rxr|r�r?rryr�rC�)�ha�var*r<g�������?z${}$)rHr}r~r�scatterr�r*r��grey�wherer�r�rRr��	transposer�r�r�rMrrNrTrUrjr��textr�)rjr�r�rtr�r�rdr�r�r�r�r�r�r��lw_gridr��lw_spine�zero_id�boundr��M�text_paramss                      r6�plot_basis_helperr��s=��0�J�
���j�[�*�Q�,�/�A�
�^�^�A�a�
 �F�B��	�!��R��!�A�$�r�'��A�	�!��R��!�A�$�r�'��A��[�[��^�F��L�L���7�a�L�0��G�
�1�6�6�]�6���	�	�!�A�a�C�&�!�A�a�C�&�D�W�	�5��	�	�!�A�a�C�&�!�A�a�C�&�D�W�	�5�6�
�H��k�k�!�Q�$���"�1�%�G��I�I�a���	�l�A�g�a�i�L�D�X�I�>��I�I�a��'�	�l�A�a��i�L�I�(�I�C��D�K�K����1����1���L�d�L�m�L��D�K�K����1����1���Q�i�Q�=�Q�
�E���	C�F�������a��U� 3�4�A������1�-�-�F��D�K�K�������f�Q�i�[�]��]�}�]���U�Y�Y�u�y�y��'8�9�:�E�B�E�		C�	�M�M�E�6�5�/�"��M�M�E�6�5�/�"��I�I�e�������u��"��A�>�K�
�D�I�I�q��t�A�a�D�y�!�m�C��!�A�$�q��t�)�Q��s�!2�G�N�N�7�4K�g�SW�g�[f�g�
�D�I�I�q��t�A�a�D�y�!�m�C��!�A�$�q��t�)�Q��s�!2�G�N�N�7�4K�l�S\�l�`k�lr8c��tjddg�tz}tj|��\}}t|||g|���y)a Plot 2d vectors on the coordinates system defined by basis I and J using the helper funtion
    plot_basis_helper().
    
    Parameters
    ----------
    I, J: class numpy.ndarray.
        The coordinates of the basis vector in the standard basis.

    *vectors : class numpy.ndarray.
        The vector(s) to plot along with the change of basis. Each array denotes a vector's
        coordinates in I-J coordinate system (not in the standard basis). Each vector must have
        a shape of (2,). Accept any number of vectors.

    r<r=N)rHrIrPrrQr�)r�r�rdr>r+rjs      r6�
plot_basisr��s>�� �k�k�1�Q�%� �9�,�G��?�?�7�3�L�F�D��d�A�q�+�7�+r8c���tjddg�tz}tjdd|��\}\}}tj
tj||f��}t|�}|D�	cgc]}	||	jdd�z��}
}	t|tjddg�tjddg�g|��ddi�t|||g|
��d	d
dd��y
cc}	w)aE Create a side-by-side plot of some vectors both on the standard basis and on the new basis
    defined by I and J, using the helper function plot_basis_helper().
    
    Parameters
    ----------
    I, J: class numpy.ndarray.
        The coordinates of the basis vector in the standard basis.

    *vectors : class numpy.ndarray.
        The vector(s) to plot along with the change of basis. Each array denotes a vector's
        coordinates in I-J coordinate system (not in the standard basis). Each vector must have
        a shape of (2,). Accept any number of vectors.

    rr<rr=ryrrtzstandard basisz	new basis�a�br�N)
rHrIrPrrQr�r�rr�r�)r�r�rdr>r+r�r�r��M_invr��vectors_s           r6�plot_change_basisr��s��� �k�k�1�Q�%� �9�,�G�#�_�_�Q��7�C��F�N�U�E�
������a��U�+�,�A���F�E�=D�F�6������A�.�.�F�H�F��e�U�[�[�!�A��/����a��U�1C�f�g�f�Ue�f��e�Q��Z�H�Z�K��VY�Z��Gs�6C#c���tjddg�tz}tjdd|��\}}t|�\}}|}tj|�}t|�}tjddtjzd�}	tjtj|	�tj|	�f�}
t|dtjddg�tjddg�d�	�t|d
|dd�df|dd�dfdd
d��t|d|dd�df|dd�dfdd
d��t|dtjddg�tjddg�d�	�||
z}|dD]!}|j|
d|
dtd���#|dD]!}|j|d|dtd���#y)a Visualize the eigendecomposition of a 2x2 matrix as a combination of changing basis 
    and scaling transformation, using the helper function plot_basis_helper().

    Parameters
    ----------
    matrix : class numpy.ndarray.
        The 2x2 matrix to visualize.

    rr<r=rrzr�rz%coords in standard basis $\mathbf{x}$)rtr�Nz&change to new basis $C^{-1}\mathbf{x}$r�r�r�r�z)scale along new basis $DC^{-1}\mathbf{x}$r�z2change back to standard basis $CDC^{-1}\mathbf{x}$r"r{)rHrIrPrrQr�diagrr�r�r�r�r�r�r�r�)
r�r>r+r.�eigenvalues�eigenvectors�C�D�C_invr$r�r�rjs
             r6�
plot_eigenr�s����k�k�1�Q�%� �9�,�G��?�?�1�a��9�L�F�D� #�F���K���A�
�
�
�;��A���F�E�
�^�^�A�q����z�2�
.�E�
�\�\�5�9�9�U�+�U�Y�Y�u�-=�>�
?�F��d�3�i����a��U�!3�U�[�[�!�A��5G�Ow�x��d�3�i��1�Q�3���1�Q�3��7`�jm�wz�{��d�3�i��1�Q�3���1�Q�3��7c�mp�z}�~��d�3�i����a��U�!3�U�[�[�!�A��5G�PE�F��F�?�L��Q��;���	�	�&��)�V�A�Y�c�c�	�:�;��Q��G���	�	�,�q�/�<��?�#�#�	�F�Gr8�__main__)N)TFN)TF)-rH�numpy.linalgrr�mathr�
matplotlibrrrr	�mpl_toolkits.mplot3dr
�	itertoolsr�
_int_backends�_backendr2rPr�r�r�r�r�rSr��yellowr�r�r�r�r`r:rpr�r�r�r�r�r�r�r�r�r�__name__r9r8r6�<module>rs����!��6�6�'��I�
��=���}���H��I��H��I������	�������&[�#��f�f�f�e�� $���!�
�
 ������F)��F)�P�CG�UZ�bf�G��G�R�=A�u�H��H�4�7;��$ ��$ �L�?0��?0�B�s��s�2�38�e�"k��"k�H�26��S�Dm��Dm�L�,��,�&�[��[�.�G��G�@�z���r8