{-
   httpstan

   No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

   OpenAPI Version: 3.0.1
   httpstan API version: 4.10.0
   Generated by OpenAPI Generator (https://openapi-generator.tech)
-}

{-|
Module : Httpstan.API.ApiDefault
-}

{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing -fno-warn-unused-binds -fno-warn-unused-imports #-}

module Httpstan.API.ApiDefault where

import Httpstan.Core
import Httpstan.MimeTypes
import Httpstan.Model as M

import qualified Data.Aeson as A
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as BL
import qualified Data.Data as P (Typeable, TypeRep, typeOf, typeRep)
import qualified Data.Foldable as P
import qualified Data.Map as Map
import qualified Data.Maybe as P
import qualified Data.Proxy as P (Proxy(..))
import qualified Data.Set as Set
import qualified Data.String as P
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Encoding as TL
import qualified Data.Time as TI
import qualified Network.HTTP.Client.MultipartFormData as NH
import qualified Network.HTTP.Media as ME
import qualified Network.HTTP.Types as NH
import qualified Web.FormUrlEncoded as WH
import qualified Web.HttpApiData as WH

import Data.Text (Text)
import GHC.Base ((<|>))

import Prelude ((==),(/=),($), (.),(<$>),(<*>),(>>=),Maybe(..),Bool(..),Char,Double,FilePath,Float,Int,Integer,String,fmap,undefined,mempty,maybe,pure,Monad,Applicative,Functor)
import qualified Prelude as P

-- * Operations


-- ** Default

-- *** v1HealthGet

-- | @GET \/v1\/health@
-- 
-- Check if service is running.
-- 
v1HealthGet
  :: HttpstanRequest V1HealthGet MimeNoContent NoContent MimeNoContent
v1HealthGet :: HttpstanRequest V1HealthGet MimeNoContent NoContent MimeNoContent
v1HealthGet =
  forall req contentType res accept.
Method
-> [ByteString] -> HttpstanRequest req contentType res accept
_mkRequest Method
"GET" [ByteString
"/v1/health"]

data V1HealthGet  
instance Produces V1HealthGet MimeNoContent


-- *** v1ModelsGet

-- | @GET \/v1\/models@
-- 
-- List cached models.
-- 
v1ModelsGet
  :: HttpstanRequest V1ModelsGet MimeNoContent V1ModelsGet200Response MimeJSON
v1ModelsGet :: HttpstanRequest
  V1ModelsGet MimeNoContent V1ModelsGet200Response MimeJSON
v1ModelsGet =
  forall req contentType res accept.
Method
-> [ByteString] -> HttpstanRequest req contentType res accept
_mkRequest Method
"GET" [ByteString
"/v1/models"]

data V1ModelsGet  
-- | @application/json@
instance Produces V1ModelsGet MimeJSON


-- *** v1ModelsModelIdDelete

-- | @DELETE \/v1\/models\/{model_id}@
-- 
-- Delete a model and any associated fits.
-- 
-- Delete a model which has been saved in the cache.
-- 
v1ModelsModelIdDelete
  :: ModelId -- ^ "modelId" -  ID of Stan model
  -> HttpstanRequest V1ModelsModelIdDelete MimeNoContent NoContent MimeNoContent
v1ModelsModelIdDelete :: ModelId
-> HttpstanRequest
     V1ModelsModelIdDelete MimeNoContent NoContent MimeNoContent
v1ModelsModelIdDelete (ModelId Text
modelId) =
  forall req contentType res accept.
Method
-> [ByteString] -> HttpstanRequest req contentType res accept
_mkRequest Method
"DELETE" [ByteString
"/v1/models/",forall a. ToHttpApiData a => a -> ByteString
toPath Text
modelId]

data V1ModelsModelIdDelete  
instance Produces V1ModelsModelIdDelete MimeNoContent


-- *** v1ModelsModelIdFitsFitIdDelete

-- | @DELETE \/v1\/models\/{model_id}\/fits\/{fit_id}@
-- 
-- Delete a fit.
-- 
-- Delete a fit which has been saved in the cache.
-- 
v1ModelsModelIdFitsFitIdDelete
  :: ModelId -- ^ "modelId" -  ID of Stan model associated with the fit.
  -> FitId -- ^ "fitId" -  ID of fit to be deleted.
  -> HttpstanRequest V1ModelsModelIdFitsFitIdDelete MimeNoContent NoContent MimeNoContent
v1ModelsModelIdFitsFitIdDelete :: ModelId
-> FitId
-> HttpstanRequest
     V1ModelsModelIdFitsFitIdDelete
     MimeNoContent
     NoContent
     MimeNoContent
v1ModelsModelIdFitsFitIdDelete (ModelId Text
modelId) (FitId Text
fitId) =
  forall req contentType res accept.
Method
-> [ByteString] -> HttpstanRequest req contentType res accept
_mkRequest Method
"DELETE" [ByteString
"/v1/models/",forall a. ToHttpApiData a => a -> ByteString
toPath Text
modelId,ByteString
"/fits/",forall a. ToHttpApiData a => a -> ByteString
toPath Text
fitId]

data V1ModelsModelIdFitsFitIdDelete  
instance Produces V1ModelsModelIdFitsFitIdDelete MimeNoContent


-- *** v1ModelsModelIdFitsFitIdGet

-- | @GET \/v1\/models\/{model_id}\/fits\/{fit_id}@
-- 
-- Get results returned by a function.
-- 
-- Result (draws, logger messages) from calling a function defined in stan::services.
-- 
v1ModelsModelIdFitsFitIdGet
  :: ModelId -- ^ "modelId" -  ID of Stan model associated with the result
  -> FitId -- ^ "fitId" -  ID of Stan result (\"fit\") desired
  -> HttpstanRequest V1ModelsModelIdFitsFitIdGet MimeNoContent NoContent MimeNoContent
v1ModelsModelIdFitsFitIdGet :: ModelId
-> FitId
-> HttpstanRequest
     V1ModelsModelIdFitsFitIdGet MimeNoContent NoContent MimeNoContent
v1ModelsModelIdFitsFitIdGet (ModelId Text
modelId) (FitId Text
fitId) =
  forall req contentType res accept.
Method
-> [ByteString] -> HttpstanRequest req contentType res accept
_mkRequest Method
"GET" [ByteString
"/v1/models/",forall a. ToHttpApiData a => a -> ByteString
toPath Text
modelId,ByteString
"/fits/",forall a. ToHttpApiData a => a -> ByteString
toPath Text
fitId]

data V1ModelsModelIdFitsFitIdGet  
instance Produces V1ModelsModelIdFitsFitIdGet MimeNoContent


-- *** v1ModelsModelIdFitsPost

-- | @POST \/v1\/models\/{model_id}\/fits@
-- 
-- Call function defined in stan::services.
-- 
-- A request to this endpoint starts a long-running operation. Users can retrieve information about the status of the operation by making a GET request to the operations resource endpoint. When the operation is `done`, the \"fit\" may be downloaded. (A \"fit\" collects all logger and writer messages from Stan.) ``function`` indicates the name of the ``stan::services function`` which should be called given the Stan model associated with the id ``model_id``. For example, if sampling using ``stan::services::sample::hmc_nuts_diag_e_adapt`` then ``function`` is the full function name ``stan::services::sample::hmc_nuts_diag_e_adapt``.  Sampler parameters which are not supplied will be given default values taken from CmdStan.  For example, if ``stan::services::sample::hmc_nuts_diag_e_adapt`` is the function called and the parameter ``num_samples`` is not specified, the value 1000 will be used. For a full list of default values consult the CmdStan documentation.
-- 
v1ModelsModelIdFitsPost
  :: (Consumes V1ModelsModelIdFitsPost MimeJSON, MimeRender MimeJSON CreateFitRequest)
  => CreateFitRequest -- ^ "body" -  Full stan::services function name and associated arguments to call with Stan model.
  -> ModelId -- ^ "modelId" -  ID of Stan model to use
  -> HttpstanRequest V1ModelsModelIdFitsPost MimeJSON Fit MimeJSON
v1ModelsModelIdFitsPost :: (Consumes V1ModelsModelIdFitsPost MimeJSON,
 MimeRender MimeJSON CreateFitRequest) =>
CreateFitRequest
-> ModelId
-> HttpstanRequest V1ModelsModelIdFitsPost MimeJSON Fit MimeJSON
v1ModelsModelIdFitsPost CreateFitRequest
body (ModelId Text
modelId) =
  forall req contentType res accept.
Method
-> [ByteString] -> HttpstanRequest req contentType res accept
_mkRequest Method
"POST" [ByteString
"/v1/models/",forall a. ToHttpApiData a => a -> ByteString
toPath Text
modelId,ByteString
"/fits"]
    forall req param contentType res accept.
(HasBodyParam req param, Consumes req contentType,
 MimeRender contentType param) =>
HttpstanRequest req contentType res accept
-> param -> HttpstanRequest req contentType res accept
`setBodyParam` CreateFitRequest
body

data V1ModelsModelIdFitsPost 

-- | /Body Param/ "body" - Full stan::services function name and associated arguments to call with Stan model.
instance HasBodyParam V1ModelsModelIdFitsPost CreateFitRequest 

-- | @application/json@
instance Consumes V1ModelsModelIdFitsPost MimeJSON

-- | @application/json@
instance Produces V1ModelsModelIdFitsPost MimeJSON


-- *** v1ModelsModelIdLogProbGradPost

-- | @POST \/v1\/models\/{model_id}\/log_prob_grad@
-- 
-- Return the gradient of the log posterior evaluated at the unconstrained parameters.
-- 
-- Returns the output of Stan C++ `stan::model::log_prob_grad`.
-- 
v1ModelsModelIdLogProbGradPost
  :: (Consumes V1ModelsModelIdLogProbGradPost MimeJSON)
  => ModelId -- ^ "modelId" -  ID of Stan model to use
  -> HttpstanRequest V1ModelsModelIdLogProbGradPost MimeJSON V1ModelsModelIdLogProbGradPost200Response MimeJSON
v1ModelsModelIdLogProbGradPost :: Consumes V1ModelsModelIdLogProbGradPost MimeJSON =>
ModelId
-> HttpstanRequest
     V1ModelsModelIdLogProbGradPost
     MimeJSON
     V1ModelsModelIdLogProbGradPost200Response
     MimeJSON
v1ModelsModelIdLogProbGradPost (ModelId Text
modelId) =
  forall req contentType res accept.
Method
-> [ByteString] -> HttpstanRequest req contentType res accept
_mkRequest Method
"POST" [ByteString
"/v1/models/",forall a. ToHttpApiData a => a -> ByteString
toPath Text
modelId,ByteString
"/log_prob_grad"]

data V1ModelsModelIdLogProbGradPost 

-- | /Body Param/ "adjust_transform" - Boolean to control whether we apply a Jacobian adjust transform.
instance HasBodyParam V1ModelsModelIdLogProbGradPost AdjustTransform 

-- | @application/json@
instance Consumes V1ModelsModelIdLogProbGradPost MimeJSON

-- | @application/json@
instance Produces V1ModelsModelIdLogProbGradPost MimeJSON


-- *** v1ModelsModelIdLogProbPost

-- | @POST \/v1\/models\/{model_id}\/log_prob@
-- 
-- Return the log probability of the unconstrained parameters.
-- 
-- Returns the output of Stan C++ ``log_prob`` model class method.
-- 
v1ModelsModelIdLogProbPost
  :: (Consumes V1ModelsModelIdLogProbPost MimeJSON)
  => ModelId -- ^ "modelId" -  ID of Stan model to use
  -> HttpstanRequest V1ModelsModelIdLogProbPost MimeJSON V1ModelsModelIdLogProbPost200Response MimeJSON
v1ModelsModelIdLogProbPost :: Consumes V1ModelsModelIdLogProbPost MimeJSON =>
ModelId
-> HttpstanRequest
     V1ModelsModelIdLogProbPost
     MimeJSON
     V1ModelsModelIdLogProbPost200Response
     MimeJSON
v1ModelsModelIdLogProbPost (ModelId Text
modelId) =
  forall req contentType res accept.
Method
-> [ByteString] -> HttpstanRequest req contentType res accept
_mkRequest Method
"POST" [ByteString
"/v1/models/",forall a. ToHttpApiData a => a -> ByteString
toPath Text
modelId,ByteString
"/log_prob"]

data V1ModelsModelIdLogProbPost 

-- | /Body Param/ "adjust_transform" - Boolean to control whether we apply a Jacobian adjust transform.
instance HasBodyParam V1ModelsModelIdLogProbPost AdjustTransform 

-- | @application/json@
instance Consumes V1ModelsModelIdLogProbPost MimeJSON

-- | @application/json@
instance Produces V1ModelsModelIdLogProbPost MimeJSON


-- *** v1ModelsModelIdParamsPost

-- | @POST \/v1\/models\/{model_id}\/params@
-- 
-- Get parameter names and dimensions.
-- 
-- Returns the output of Stan C++ model class methods: ``constrained_param_names``, ``get_param_names`` and ``get_dims``.
-- 
v1ModelsModelIdParamsPost
  :: (Consumes V1ModelsModelIdParamsPost MimeJSON, MimeRender MimeJSON ParamData)
  => ParamData -- ^ "_data" -  Data for Stan Model. Needed to calculate param names and dimensions.
  -> ModelId -- ^ "modelId" -  ID of Stan model to use
  -> HttpstanRequest V1ModelsModelIdParamsPost MimeJSON V1ModelsModelIdParamsPost200Response MimeJSON
v1ModelsModelIdParamsPost :: (Consumes V1ModelsModelIdParamsPost MimeJSON,
 MimeRender MimeJSON ParamData) =>
ParamData
-> ModelId
-> HttpstanRequest
     V1ModelsModelIdParamsPost
     MimeJSON
     V1ModelsModelIdParamsPost200Response
     MimeJSON
v1ModelsModelIdParamsPost ParamData
_data (ModelId Text
modelId) =
  forall req contentType res accept.
Method
-> [ByteString] -> HttpstanRequest req contentType res accept
_mkRequest Method
"POST" [ByteString
"/v1/models/",forall a. ToHttpApiData a => a -> ByteString
toPath Text
modelId,ByteString
"/params"]
    forall req param contentType res accept.
(HasBodyParam req param, Consumes req contentType,
 MimeRender contentType param) =>
HttpstanRequest req contentType res accept
-> param -> HttpstanRequest req contentType res accept
`setBodyParam` ParamData
_data

data V1ModelsModelIdParamsPost 

-- | /Body Param/ "data" - Data for Stan Model. Needed to calculate param names and dimensions.
instance HasBodyParam V1ModelsModelIdParamsPost ParamData 

-- | @application/json@
instance Consumes V1ModelsModelIdParamsPost MimeJSON

-- | @application/json@
instance Produces V1ModelsModelIdParamsPost MimeJSON


-- *** v1ModelsModelIdTransformInitsPost

-- | @POST \/v1\/models\/{model_id}\/transform_inits@
-- 
-- Return a sequence of unconstrained parameters.
-- 
-- Returns the output of Stan C++ ``transform_inits`` model class method.
-- 
v1ModelsModelIdTransformInitsPost
  :: (Consumes V1ModelsModelIdTransformInitsPost MimeJSON, MimeRender MimeJSON ConstrainedParameters)
  => ConstrainedParameters -- ^ "constrainedParameters" -  Constrained parameter values and their specified context
  -> ModelId -- ^ "modelId" -  ID of Stan model to use
  -> HttpstanRequest V1ModelsModelIdTransformInitsPost MimeJSON V1ModelsModelIdTransformInitsPost200Response MimeJSON
v1ModelsModelIdTransformInitsPost :: (Consumes V1ModelsModelIdTransformInitsPost MimeJSON,
 MimeRender MimeJSON ConstrainedParameters) =>
ConstrainedParameters
-> ModelId
-> HttpstanRequest
     V1ModelsModelIdTransformInitsPost
     MimeJSON
     V1ModelsModelIdTransformInitsPost200Response
     MimeJSON
v1ModelsModelIdTransformInitsPost ConstrainedParameters
constrainedParameters (ModelId Text
modelId) =
  forall req contentType res accept.
Method
-> [ByteString] -> HttpstanRequest req contentType res accept
_mkRequest Method
"POST" [ByteString
"/v1/models/",forall a. ToHttpApiData a => a -> ByteString
toPath Text
modelId,ByteString
"/transform_inits"]
    forall req param contentType res accept.
(HasBodyParam req param, Consumes req contentType,
 MimeRender contentType param) =>
HttpstanRequest req contentType res accept
-> param -> HttpstanRequest req contentType res accept
`setBodyParam` ConstrainedParameters
constrainedParameters

data V1ModelsModelIdTransformInitsPost 

-- | /Body Param/ "constrained_parameters" - Constrained parameter values and their specified context
instance HasBodyParam V1ModelsModelIdTransformInitsPost ConstrainedParameters 

-- | @application/json@
instance Consumes V1ModelsModelIdTransformInitsPost MimeJSON

-- | @application/json@
instance Produces V1ModelsModelIdTransformInitsPost MimeJSON


-- *** v1ModelsModelIdWriteArrayPost

-- | @POST \/v1\/models\/{model_id}\/write_array@
-- 
-- Return a sequence of constrained parameters.
-- 
-- Returns the output of Stan C++ ``write_array`` model class method.
-- 
v1ModelsModelIdWriteArrayPost
  :: (Consumes V1ModelsModelIdWriteArrayPost MimeJSON, MimeRender MimeJSON IncludeGqs)
  => IncludeGqs -- ^ "includeGqs" -  Boolean to control whether we include generated quantities.
  -> ModelId -- ^ "modelId" -  ID of Stan model to use
  -> HttpstanRequest V1ModelsModelIdWriteArrayPost MimeJSON V1ModelsModelIdWriteArrayPost200Response MimeJSON
v1ModelsModelIdWriteArrayPost :: (Consumes V1ModelsModelIdWriteArrayPost MimeJSON,
 MimeRender MimeJSON IncludeGqs) =>
IncludeGqs
-> ModelId
-> HttpstanRequest
     V1ModelsModelIdWriteArrayPost
     MimeJSON
     V1ModelsModelIdWriteArrayPost200Response
     MimeJSON
v1ModelsModelIdWriteArrayPost IncludeGqs
includeGqs (ModelId Text
modelId) =
  forall req contentType res accept.
Method
-> [ByteString] -> HttpstanRequest req contentType res accept
_mkRequest Method
"POST" [ByteString
"/v1/models/",forall a. ToHttpApiData a => a -> ByteString
toPath Text
modelId,ByteString
"/write_array"]
    forall req param contentType res accept.
(HasBodyParam req param, Consumes req contentType,
 MimeRender contentType param) =>
HttpstanRequest req contentType res accept
-> param -> HttpstanRequest req contentType res accept
`setBodyParam` IncludeGqs
includeGqs

data V1ModelsModelIdWriteArrayPost 

-- | /Body Param/ "include_gqs" - Boolean to control whether we include generated quantities.
instance HasBodyParam V1ModelsModelIdWriteArrayPost IncludeGqs 

-- | @application/json@
instance Consumes V1ModelsModelIdWriteArrayPost MimeJSON

-- | @application/json@
instance Produces V1ModelsModelIdWriteArrayPost MimeJSON


-- *** v1ModelsPost

-- | @POST \/v1\/models@
-- 
-- Compile a Stan model
-- 
v1ModelsPost
  :: (Consumes V1ModelsPost MimeJSON, MimeRender MimeJSON CreateModelRequest)
  => CreateModelRequest -- ^ "body" -  Stan program code to compile
  -> HttpstanRequest V1ModelsPost MimeJSON Model MimeJSON
v1ModelsPost :: (Consumes V1ModelsPost MimeJSON,
 MimeRender MimeJSON CreateModelRequest) =>
CreateModelRequest
-> HttpstanRequest V1ModelsPost MimeJSON Model MimeJSON
v1ModelsPost CreateModelRequest
body =
  forall req contentType res accept.
Method
-> [ByteString] -> HttpstanRequest req contentType res accept
_mkRequest Method
"POST" [ByteString
"/v1/models"]
    forall req param contentType res accept.
(HasBodyParam req param, Consumes req contentType,
 MimeRender contentType param) =>
HttpstanRequest req contentType res accept
-> param -> HttpstanRequest req contentType res accept
`setBodyParam` CreateModelRequest
body

data V1ModelsPost 

-- | /Body Param/ "body" - Stan program code to compile
instance HasBodyParam V1ModelsPost CreateModelRequest 

-- | @application/json@
instance Consumes V1ModelsPost MimeJSON

-- | @application/json@
instance Produces V1ModelsPost MimeJSON


-- *** v1OperationsOperationIdGet

-- | @GET \/v1\/operations\/{operation_id}@
-- 
-- Get Operation details.
-- 
-- Return Operation details. Details about an Operation include whether or not the operation is `done` and information about the progress of sampling.
-- 
v1OperationsOperationIdGet
  :: OperationId -- ^ "operationId" -  ID of Operation
  -> HttpstanRequest V1OperationsOperationIdGet MimeNoContent Operation MimeJSON
v1OperationsOperationIdGet :: OperationId
-> HttpstanRequest
     V1OperationsOperationIdGet MimeNoContent Operation MimeJSON
v1OperationsOperationIdGet (OperationId Text
operationId) =
  forall req contentType res accept.
Method
-> [ByteString] -> HttpstanRequest req contentType res accept
_mkRequest Method
"GET" [ByteString
"/v1/operations/",forall a. ToHttpApiData a => a -> ByteString
toPath Text
operationId]

data V1OperationsOperationIdGet  
-- | @application/json@
instance Produces V1OperationsOperationIdGet MimeJSON