o
    iB                    @   s  d dl Zd dlZd dlmZ ddlmZ ddlmZ ddl	m
Z
mZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: e;ej<dZ=G d d! d!Z>G d"d# d#Z?dS )$    N)JSONDecodeError   )core)ApiError)AsyncClientWrapperSyncClientWrapper)serialize_datetime)AsyncHttpResponseHttpResponse)jsonable_encoder)RequestOptions)construct_type)BadRequestError)ClientClosedRequestError)ForbiddenError)GatewayTimeoutError)InternalServerError)InvalidTokenError)NotFoundError)NotImplementedError)ServiceUnavailableError)TooManyRequestsError)UnauthorizedError)UnprocessableEntityError)DatasetType)DatasetValidationStatus   )DatasetsCreateResponse)DatasetsGetResponse)DatasetsGetUsageResponse)DatasetsListResponse.c                   @     e Zd ZdefddZdddddddddeje dejej	 dejej	 d	eje
 d
eje
 deje deje dee fddZddddddedddededejdeje deje dejejeeje f  dejejeeje f  deje deje dejej deje dee fddZdddeje dee fddZddd edeje dee fd!d"Zddd edeje deejeejej f  fd#d$ZdS )%RawDatasetsClientclient_wrapperc                C   
   || _ d S N_client_wrapperselfr#    r*   `/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/cohere/datasets/raw_client.py__init__'      
zRawDatasetsClient.__init__Ndataset_typebeforeafterlimitoffsetvalidation_statusrequest_optionsr/   r0   r1   r2   r3   r4   r5   returnc             
   C   s  | j jjdd||durt|nd|durt|nd|||d|d}zd|j  kr/dk rDn ntttt|	 d}	t
||	d	W S |jd
krdtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkr&tt|jttjtj ttjtj |	 dd|jdkrGtt|jttjtj ttjtj |	 dd|jdkrhtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|	 }
W n ty   t|jt|j|jdw t|jt|j|
d)ad  
        List datasets that have been created.

        Parameters
        ----------
        dataset_type : typing.Optional[str]
            optional filter by dataset type

        before : typing.Optional[dt.datetime]
            optional filter before a date

        after : typing.Optional[dt.datetime]
            optional filter after a date

        limit : typing.Optional[float]
            optional limit to number of results

        offset : typing.Optional[float]
            optional offset to start of results

        validation_status : typing.Optional[DatasetValidationStatus]
            optional filter by validation status

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        HttpResponse[DatasetsListResponse]
            A successful response.
        v1/datasetsGETNdatasetTyper0   r1   r2   r3   validationStatusmethodparamsr5      ,  type_object_responsedata  headersbody                      status_coderI   rJ   )r'   httpx_clientrequestr   rW   typingcastr    r   jsonr
   r   dictrI   OptionalAnyr   r   r   r   r   r   r   r   r   r   r   r   r   textr)   r/   r0   r1   r2   r3   r4   r5   	_response_data_response_jsonr*   r*   r+   list*   s>  *








































zRawDatasetsClient.listkeep_original_fileskip_malformed_inputkeep_fieldsoptional_fieldstext_separatorcsv_delimiter	eval_datar5   nametyperF   rg   rh   ri   rj   rk   rl   rm   c                C   s  | j jjdd||||||||	di d|i|
durd|
ini |tdd}zd	|j  kr1d
k rFn ntttt|	 d}t
||dW S |jdkrftt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkr(tt|jttjtj ttjtj |	 dd|jdkrItt|jttjtj ttjtj |	 dd|jdkrjtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|	 }W n ty   t|jt|j|jdw t|jt|j|d)a	  
        Create a dataset by uploading a file. See ['Dataset Creation'](https://docs.cohere.com/docs/datasets#dataset-creation) for more information.

        Parameters
        ----------
        name : str
            The name of the uploaded dataset.

        type : DatasetType
            The dataset type, which is used to validate the data. The only valid type is `embed-input` used in conjunction with the Embed Jobs API.

        data : core.File
            See core.File for more documentation

        keep_original_file : typing.Optional[bool]
            Indicates if the original file should be stored.

        skip_malformed_input : typing.Optional[bool]
            Indicates whether rows with malformed input should be dropped (instead of failing the validation check). Dropped rows will be returned in the warnings field.

        keep_fields : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            List of names of fields that will be persisted in the Dataset. By default the Dataset will retain only the required fields indicated in the [schema for the corresponding Dataset type](https://docs.cohere.com/docs/datasets#dataset-types). For example, datasets of type `embed-input` will drop all fields other than the required `text` field. If any of the fields in `keep_fields` are missing from the uploaded file, Dataset validation will fail.

        optional_fields : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            List of names of fields that will be persisted in the Dataset. By default the Dataset will retain only the required fields indicated in the [schema for the corresponding Dataset type](https://docs.cohere.com/docs/datasets#dataset-types). For example, Datasets of type `embed-input` will drop all fields other than the required `text` field. If any of the fields in `optional_fields` are missing from the uploaded file, Dataset validation will pass.

        text_separator : typing.Optional[str]
            Raw .txt uploads will be split into entries using the text_separator value.

        csv_delimiter : typing.Optional[str]
            The delimiter used for .csv uploads.

        eval_data : typing.Optional[core.File]
            See core.File for more documentation

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        HttpResponse[DatasetsCreateResponse]
            A successful response.
        r7   POSTrn   ro   rg   rh   ri   rj   rk   rl   rF   Nrm   Tr=   r>   rF   filesr5   omitforce_multipartr?   r@   rA   rD   rG   rH   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   )r'   rX   rY   OMITrW   rZ   r[   r   r   r\   r
   r   r]   rI   r^   r_   r   r   r   r   r   r   r   r   r   r   r   r   r   r`   r)   rn   ro   rF   rg   rh   ri   rj   rk   rl   rm   r5   rb   rc   rd   r*   r*   r+   create   sP  :









































zRawDatasetsClient.creater5   c             	   C   s  | j jjdd|d}zd|j  krdk r,n ntttt| d}t	||dW S |jdkrLt
t|jttjtj ttjtj | dd	|jd
krltt|jttjtj ttjtj | dd	|jdkrtt|jttjtj ttjtj | dd	|jdkrtt|jttjtj ttjtj | dd	|jdkrtt|jttjtj ttjtj | dd	|jdkrtt|jttjtj ttjtj | dd	|jdkrtt|jttjtj ttjtj | dd	|jdkr.tt|jttjtj ttjtj | dd	|jdkrOtt|jttjtj ttjtj | dd	|jdkrptt|jttjtj ttjtj | dd	|jdkrtt|jttjtj ttjtj | dd	|jdkrtt|jttjtj ttjtj | dd	| }W n ty   t|jt|j|jdw t|jt|j|d)a  
        View the dataset storage usage for your Organization. Each Organization can have up to 10GB of storage across all their users.

        Parameters
        ----------
        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        HttpResponse[DatasetsGetUsageResponse]
            A successful response.
        v1/datasets/usager8   r=   r5   r?   r@   rA   rD   rG   rH   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   )r'   rX   rY   rW   rZ   r[   r   r   r\   r
   r   r]   rI   r^   r_   r   r   r   r   r   r   r   r   r   r   r   r   r   r`   r)   r5   rb   rc   rd   r*   r*   r+   	get_usage  s0  









































zRawDatasetsClient.get_usageidc             	   C   s  | j jjdt| d|d}zd|j  krdk r1n ntttt|	 d}t
||dW S |jdkrQtt|jttjtj ttjtj |	 dd	|jd
krqtt|jttjtj ttjtj |	 dd	|jdkrtt|jttjtj ttjtj |	 dd	|jdkrtt|jttjtj ttjtj |	 dd	|jdkrtt|jttjtj ttjtj |	 dd	|jdkrtt|jttjtj ttjtj |	 dd	|jdkrtt|jttjtj ttjtj |	 dd	|jdkr3tt|jttjtj ttjtj |	 dd	|jdkrTtt|jttjtj ttjtj |	 dd	|jdkrutt|jttjtj ttjtj |	 dd	|jdkrtt|jttjtj ttjtj |	 dd	|jdkrtt|jttjtj ttjtj |	 dd	|	 }W n ty   t|jt|j|jdw t|jt|j|d)a  
        Retrieve a dataset by ID. See ['Datasets'](https://docs.cohere.com/docs/datasets) for more information.

        Parameters
        ----------
        id : str

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        HttpResponse[DatasetsGetResponse]
            A successful response.
        v1/datasets/r8   r{   r?   r@   rA   rD   rG   rH   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   )r'   rX   rY   r   rW   rZ   r[   r   r   r\   r
   r   r]   rI   r^   r_   r   r   r   r   r   r   r   r   r   r   r   r   r   r`   r)   r~   r5   rb   rc   rd   r*   r*   r+   get  s0  









































zRawDatasetsClient.getc             	   C   s  | j jjdt| d|d}zd|j  krdk rCn n%ttjttj	tj
 f ttjttj	tj
 f | d}t||dW S |jdkrctt|jttj	tj
 ttj	tj
 | dd	|jd
krtt|jttj	tj
 ttj	tj
 | dd	|jdkrtt|jttj	tj
 ttj	tj
 | dd	|jdkrtt|jttj	tj
 ttj	tj
 | dd	|jdkrtt|jttj	tj
 ttj	tj
 | dd	|jdkrtt|jttj	tj
 ttj	tj
 | dd	|jdkr%tt|jttj	tj
 ttj	tj
 | dd	|jdkrFtt|jttj	tj
 ttj	tj
 | dd	|jdkrgtt|jttj	tj
 ttj	tj
 | dd	|jdkrtt|jttj	tj
 ttj	tj
 | dd	|jdkrtt|jttj	tj
 ttj	tj
 | dd	|jdkrtt|jttj	tj
 ttj	tj
 | dd	| }W n ty   t|jt|j|jdw t|jt|j|d)a  
        Delete a dataset by ID. Datasets are automatically deleted after 30 days, but they can also be deleted manually.

        Parameters
        ----------
        id : str

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        HttpResponse[typing.Dict[str, typing.Optional[typing.Any]]]
            A successful response.
        r   DELETEr{   r?   r@   rA   rD   rG   rH   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   )r'   rX   rY   r   rW   rZ   r[   Dictstrr^   r_   r   r\   r
   r   r]   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   r`   r   r*   r*   r+   delete)  s0  








































zRawDatasetsClient.delete) __name__
__module____qualname__r   r,   rZ   r^   r   dtdatetimefloatr   r   r
   r    re   rv   r   r   FileboolUnionSequencer   rx   r   r}   r   r   r   r_   r   r*   r*   r*   r+   r"   &       

	

 Q	


 e
 *
 ,r"   c                   @   r!   )%AsyncRawDatasetsClientr#   c                C   r$   r%   r&   r(   r*   r*   r+   r,     r-   zAsyncRawDatasetsClient.__init__Nr.   r/   r0   r1   r2   r3   r4   r5   r6   c             
      s  | j jjdd||durt|nd|durt|nd|||d|dI dH }zd|j  kr3dk rHn ntttt|	 d}	t
||	d	W S |jd
krhtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkr	tt|jttjtj ttjtj |	 dd|jdkr*tt|jttjtj ttjtj |	 dd|jdkrKtt|jttjtj ttjtj |	 dd|jdkrltt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|	 }
W n ty   t|jt|j|jdw t|jt|j|
d)ai  
        List datasets that have been created.

        Parameters
        ----------
        dataset_type : typing.Optional[str]
            optional filter by dataset type

        before : typing.Optional[dt.datetime]
            optional filter before a date

        after : typing.Optional[dt.datetime]
            optional filter after a date

        limit : typing.Optional[float]
            optional limit to number of results

        offset : typing.Optional[float]
            optional offset to start of results

        validation_status : typing.Optional[DatasetValidationStatus]
            optional filter by validation status

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        AsyncHttpResponse[DatasetsListResponse]
            A successful response.
        r7   r8   Nr9   r<   r?   r@   rA   rD   rG   rH   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   )r'   rX   rY   r   rW   rZ   r[   r    r   r\   r	   r   r]   rI   r^   r_   r   r   r   r   r   r   r   r   r   r   r   r   r   r`   ra   r*   r*   r+   re     s@  *








































zAsyncRawDatasetsClient.listrf   rn   ro   rF   rg   rh   ri   rj   rk   rl   rm   c                   s  | j jjdd||||||||	di d|i|
durd|
ini |tddI dH }zd	|j  kr5d
k rJn ntttt|	 d}t
||dW S |jdkrjtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkr,tt|jttjtj ttjtj |	 dd|jdkrMtt|jttjtj ttjtj |	 dd|jdkrntt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|jdkrtt|jttjtj ttjtj |	 dd|	 }W n ty   t|jt|j|jdw t|jt|j|d)a	  
        Create a dataset by uploading a file. See ['Dataset Creation'](https://docs.cohere.com/docs/datasets#dataset-creation) for more information.

        Parameters
        ----------
        name : str
            The name of the uploaded dataset.

        type : DatasetType
            The dataset type, which is used to validate the data. The only valid type is `embed-input` used in conjunction with the Embed Jobs API.

        data : core.File
            See core.File for more documentation

        keep_original_file : typing.Optional[bool]
            Indicates if the original file should be stored.

        skip_malformed_input : typing.Optional[bool]
            Indicates whether rows with malformed input should be dropped (instead of failing the validation check). Dropped rows will be returned in the warnings field.

        keep_fields : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            List of names of fields that will be persisted in the Dataset. By default the Dataset will retain only the required fields indicated in the [schema for the corresponding Dataset type](https://docs.cohere.com/docs/datasets#dataset-types). For example, datasets of type `embed-input` will drop all fields other than the required `text` field. If any of the fields in `keep_fields` are missing from the uploaded file, Dataset validation will fail.

        optional_fields : typing.Optional[typing.Union[str, typing.Sequence[str]]]
            List of names of fields that will be persisted in the Dataset. By default the Dataset will retain only the required fields indicated in the [schema for the corresponding Dataset type](https://docs.cohere.com/docs/datasets#dataset-types). For example, Datasets of type `embed-input` will drop all fields other than the required `text` field. If any of the fields in `optional_fields` are missing from the uploaded file, Dataset validation will pass.

        text_separator : typing.Optional[str]
            Raw .txt uploads will be split into entries using the text_separator value.

        csv_delimiter : typing.Optional[str]
            The delimiter used for .csv uploads.

        eval_data : typing.Optional[core.File]
            See core.File for more documentation

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        AsyncHttpResponse[DatasetsCreateResponse]
            A successful response.
        r7   rp   rq   rF   Nrm   Trr   r?   r@   rA   rD   rG   rH   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   )r'   rX   rY   rv   rW   rZ   r[   r   r   r\   r	   r   r]   rI   r^   r_   r   r   r   r   r   r   r   r   r   r   r   r   r   r`   rw   r*   r*   r+   rx     sR  :









































zAsyncRawDatasetsClient.createry   c             	      s  | j jjdd|dI dH }zd|j  krdk r0n ntttt| d}t	||dW S |jd	krPt
t|jttjtj ttjtj | dd
|jdkrptt|jttjtj ttjtj | dd
|jdkrtt|jttjtj ttjtj | dd
|jdkrtt|jttjtj ttjtj | dd
|jdkrtt|jttjtj ttjtj | dd
|jdkrtt|jttjtj ttjtj | dd
|jdkrtt|jttjtj ttjtj | dd
|jdkr2tt|jttjtj ttjtj | dd
|jdkrStt|jttjtj ttjtj | dd
|jdkrttt|jttjtj ttjtj | dd
|jdkrtt|jttjtj ttjtj | dd
|jdkrtt|jttjtj ttjtj | dd
| }W n ty   t|jt|j|jdw t|jt|j|d)a  
        View the dataset storage usage for your Organization. Each Organization can have up to 10GB of storage across all their users.

        Parameters
        ----------
        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        AsyncHttpResponse[DatasetsGetUsageResponse]
            A successful response.
        rz   r8   r{   Nr?   r@   rA   rD   rG   rH   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   )r'   rX   rY   rW   rZ   r[   r   r   r\   r	   r   r]   rI   r^   r_   r   r   r   r   r   r   r   r   r   r   r   r   r   r`   r|   r*   r*   r+   r}     s2  









































z AsyncRawDatasetsClient.get_usager~   c             	      s  | j jjdt| d|dI dH }zd|j  kr dk r5n ntttt|	 d}t
||dW S |jd	krUtt|jttjtj ttjtj |	 dd
|jdkrutt|jttjtj ttjtj |	 dd
|jdkrtt|jttjtj ttjtj |	 dd
|jdkrtt|jttjtj ttjtj |	 dd
|jdkrtt|jttjtj ttjtj |	 dd
|jdkrtt|jttjtj ttjtj |	 dd
|jdkrtt|jttjtj ttjtj |	 dd
|jdkr7tt|jttjtj ttjtj |	 dd
|jdkrXtt|jttjtj ttjtj |	 dd
|jdkrytt|jttjtj ttjtj |	 dd
|jdkrtt|jttjtj ttjtj |	 dd
|jdkrtt|jttjtj ttjtj |	 dd
|	 }W n ty   t|jt|j|jdw t|jt|j|d)a  
        Retrieve a dataset by ID. See ['Datasets'](https://docs.cohere.com/docs/datasets) for more information.

        Parameters
        ----------
        id : str

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        AsyncHttpResponse[DatasetsGetResponse]
            A successful response.
        r   r8   r{   Nr?   r@   rA   rD   rG   rH   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   )r'   rX   rY   r   rW   rZ   r[   r   r   r\   r	   r   r]   rI   r^   r_   r   r   r   r   r   r   r   r   r   r   r   r   r   r`   r   r*   r*   r+   r   -  s2  









































zAsyncRawDatasetsClient.getc             	      s  | j jjdt| d|dI dH }zd|j  kr dk rGn n%ttjttj	tj
 f ttjttj	tj
 f | d}t||dW S |jd	krgtt|jttj	tj
 ttj	tj
 | dd
|jdkrtt|jttj	tj
 ttj	tj
 | dd
|jdkrtt|jttj	tj
 ttj	tj
 | dd
|jdkrtt|jttj	tj
 ttj	tj
 | dd
|jdkrtt|jttj	tj
 ttj	tj
 | dd
|jdkrtt|jttj	tj
 ttj	tj
 | dd
|jdkr)tt|jttj	tj
 ttj	tj
 | dd
|jdkrJtt|jttj	tj
 ttj	tj
 | dd
|jdkrktt|jttj	tj
 ttj	tj
 | dd
|jdkrtt|jttj	tj
 ttj	tj
 | dd
|jdkrtt|jttj	tj
 ttj	tj
 | dd
|jdkrtt|jttj	tj
 ttj	tj
 | dd
| }W n ty   t|jt|j|jdw t|jt|j|d)a  
        Delete a dataset by ID. Datasets are automatically deleted after 30 days, but they can also be deleted manually.

        Parameters
        ----------
        id : str

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        AsyncHttpResponse[typing.Dict[str, typing.Optional[typing.Any]]]
            A successful response.
        r   r   r{   Nr?   r@   rA   rD   rG   rH   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   )r'   rX   rY   r   rW   rZ   r[   r   r   r^   r_   r   r\   r	   r   r]   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   r`   r   r*   r*   r+   r     s2  








































zAsyncRawDatasetsClient.delete) r   r   r   r   r,   rZ   r^   r   r   r   r   r   r   r	   r    re   rv   r   r   r   r   r   r   r   rx   r   r}   r   r   r   r_   r   r*   r*   r*   r+   r     r   r   )@r   r   rZ   json.decoderr    r   core.api_errorr   core.client_wrapperr   r   core.datetime_utilsr   core.http_responser	   r
   core.jsonable_encoderr   core.request_optionsr   core.unchecked_base_modelr   errors.bad_request_errorr   "errors.client_closed_request_errorr   errors.forbidden_errorr   errors.gateway_timeout_errorr   errors.internal_server_errorr   errors.invalid_token_errorr   errors.not_found_errorr   errors.not_implemented_errorr    errors.service_unavailable_errorr   errors.too_many_requests_errorr   errors.unauthorized_errorr   !errors.unprocessable_entity_errorr   types.dataset_typer   types.dataset_validation_statusr   types.datasets_create_responser   types.datasets_get_responser   !types.datasets_get_usage_responser   types.datasets_list_responser    r[   r_   rv   r"   r   r*   r*   r*   r+   <module>   sN          5