0 | {--
   1 | Copyright (C) 2025  Joel Berkeley
   2 |
   3 | This program is free software: you can redistribute it and/or modify
   4 | it under the terms of the GNU Affero General Public License as published
   5 | by the Free Software Foundation, either version 3 of the License, or
   6 | (at your option) any later version.
   7 |
   8 | This program is distributed in the hope that it will be useful,
   9 | but WITHOUT ANY WARRANTY; without even the implied warranty of
  10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11 | GNU Affero General Public License for more details.
  12 |
  13 | You should have received a copy of the GNU Affero General Public License
  14 | along with this program.  If not, see <https://www.gnu.org/licenses/>.
  15 | --}
  16 | ||| For internal spidr use only.
  17 | module Spidr.Compiler.Stablehlo.Dialect.StablehloOps
  18 |
  19 | import Spidr.Compiler.FFI
  20 | import Spidr.Compiler.Array
  21 | import Spidr.Compiler.MLIR.IR.BuiltinAttributes
  22 | import Spidr.Compiler.MLIR.IR.Builders
  23 | import Spidr.Compiler.MLIR.IR.Location
  24 | import Spidr.Compiler.MLIR.IR.MLIRContext
  25 | import Spidr.Compiler.MLIR.IR.OpDefinition
  26 | import Spidr.Compiler.MLIR.IR.Operation
  27 | import Spidr.Compiler.MLIR.IR.Region
  28 | import Spidr.Compiler.MLIR.IR.Types
  29 | import Spidr.Compiler.MLIR.IR.Value
  30 | import Spidr.Compiler.MLIR.IR.ValueRange
  31 | import Spidr.Compiler.Stablehlo.Dialect.StablehloAttrs
  32 | import Spidr.Compiler.Stablehlo.Dialect.StablehloEnums
  33 |
  34 | ffi : String -> String
  35 | ffi = libxla "c/stablehlo/dialect/StablehloOps.h"
  36 |
  37 | export
  38 | getOperationAux : HasIO io => GCAnyPtr -> (GCAnyPtr -> PrimIO AnyPtr) -> io Operation
  39 | getOperationAux op f = MkOperation <$> (primIO $ f op)
  40 |
  41 | %foreign (ffi "MLIRContext_loadDialect_StablehloDialect")
  42 | prim__loadDialectStablehloDialect : AnyPtr -> PrimIO ()
  43 |
  44 | export
  45 | loadDialectStablehloDialect : HasIO io => MLIRContext -> io ()
  46 | loadDialectStablehloDialect (MkMLIRContext ctx) = primIO $ prim__loadDialectStablehloDialect ctx
  47 |
  48 | %foreign (ffi "ConstantOp_delete")
  49 | prim__deleteConstantOp : AnyPtr -> PrimIO ()
  50 |
  51 | public export
  52 | data ConstantOp = MkConstantOp GCAnyPtr
  53 |
  54 | %foreign (ffi "ConstantOp_create")
  55 | prim__constantOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
  56 |
  57 | namespace ConstantOp
  58 |   export
  59 |   create : HasIO io => OpBuilder -> Location -> DenseElementsAttr -> io ConstantOp
  60 |   create (MkOpBuilder builder) (MkLocation location) (MkDenseElementsAttr attr) = do
  61 |     op <- primIO $ prim__constantOpCreate builder location attr
  62 |     op <- onCollectAny' op (primIO . prim__deleteConstantOp)
  63 |     pure (MkConstantOp op)
  64 |
  65 | %foreign (ffi "ConstantOp_getOperation")
  66 | prim__constantOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
  67 |
  68 | export
  69 | Op ConstantOp where
  70 |   getOperation (MkConstantOp op) = getOperationAux op prim__constantOpGetOperation
  71 |
  72 | %foreign (ffi "IotaOp_delete")
  73 | prim__deleteIotaOp : AnyPtr -> PrimIO ()
  74 |
  75 | public export
  76 | data IotaOp = MkIotaOp GCAnyPtr
  77 |
  78 | %foreign (ffi "IotaOp_create")
  79 | prim__iotaOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
  80 |
  81 | namespace IotaOp
  82 |   export
  83 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Nat -> io IotaOp
  84 |   create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) iotaDimension = do
  85 |     op <- primIO $ prim__iotaOpCreate builder location resultType (cast iotaDimension)
  86 |     op <- onCollectAny' op (primIO . prim__deleteIotaOp)
  87 |     pure (MkIotaOp op)
  88 |
  89 | %foreign (ffi "IotaOp_getOperation")
  90 | prim__iotaOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
  91 |
  92 | export
  93 | Op IotaOp where
  94 |   getOperation (MkIotaOp op) = getOperationAux op prim__iotaOpGetOperation
  95 |
  96 | namespace UnaryElementwiseOp
  97 |   export
  98 |   create :
  99 |     (GCAnyPtr -> opTy) ->
 100 |     (GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr) ->
 101 |     (AnyPtr -> PrimIO ()) ->
 102 |     HasIO io => OpBuilder -> Location -> Value -> io opTy
 103 |   create
 104 |     constructor_
 105 |     prim__create
 106 |     prim__delete
 107 |     (MkOpBuilder builder)
 108 |     (MkLocation location)
 109 |     (MkValue operand _) = do
 110 |       op <- primIO $ prim__create builder location operand
 111 |       op <- onCollectAny' op (primIO . prim__delete)
 112 |       pure $ constructor_ op
 113 |
 114 | %foreign (ffi "AbsOp_delete")
 115 | prim__deleteAbsOp : AnyPtr -> PrimIO ()
 116 |
 117 | public export
 118 | data AbsOp = MkAbsOp GCAnyPtr
 119 |
 120 | %foreign (ffi "AbsOp_create")
 121 | prim__absOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 122 |
 123 | namespace AbsOp
 124 |   export
 125 |   create : HasIO io => OpBuilder -> Location -> Value -> io AbsOp
 126 |   create = UnaryElementwiseOp.create MkAbsOp prim__absOpCreate prim__deleteAbsOp
 127 |
 128 | %foreign (ffi "AbsOp_getOperation")
 129 | prim__absOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 130 |
 131 | export
 132 | Op AbsOp where
 133 |   getOperation (MkAbsOp op) = getOperationAux op prim__absOpGetOperation
 134 |
 135 | %foreign (ffi "CeilOp_delete")
 136 | prim__deleteCeilOp : AnyPtr -> PrimIO ()
 137 |
 138 | public export
 139 | data CeilOp = MkCeilOp GCAnyPtr
 140 |
 141 | %foreign (ffi "CeilOp_create")
 142 | prim__ceilOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 143 |
 144 | namespace CeilOp
 145 |   export
 146 |   create : HasIO io => OpBuilder -> Location -> Value -> io CeilOp
 147 |   create = UnaryElementwiseOp.create MkCeilOp prim__ceilOpCreate prim__deleteCeilOp
 148 |
 149 | %foreign (ffi "CeilOp_getOperation")
 150 | prim__ceilOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 151 |
 152 | export
 153 | Op CeilOp where
 154 |   getOperation (MkCeilOp op) = getOperationAux op prim__ceilOpGetOperation
 155 |
 156 | %foreign (ffi "ConvertOp_delete")
 157 | prim__deleteConvertOp : AnyPtr -> PrimIO ()
 158 |
 159 | public export
 160 | data ConvertOp = MkConvertOp GCAnyPtr
 161 |
 162 | %foreign (ffi "ConvertOp_create")
 163 | prim__convertOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 164 |
 165 | namespace ConvertOp
 166 |   export
 167 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io ConvertOp
 168 |   create (MkOpBuilder builder) (MkLocation location) (MkType_ result _) (MkValue operand _) = do
 169 |     op <- primIO $ prim__convertOpCreate builder location result operand
 170 |     op <- onCollectAny' op (primIO . prim__deleteConvertOp)
 171 |     pure $ MkConvertOp op
 172 |
 173 | %foreign (ffi "ConvertOp_getOperation")
 174 | prim__convertOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 175 |
 176 | export
 177 | Op ConvertOp where
 178 |   getOperation (MkConvertOp op) = getOperationAux op prim__convertOpGetOperation
 179 |
 180 | %foreign (ffi "CosineOp_delete")
 181 | prim__deleteCosineOp : AnyPtr -> PrimIO ()
 182 |
 183 | public export
 184 | data CosineOp = MkCosineOp GCAnyPtr
 185 |
 186 | %foreign (ffi "CosineOp_create")
 187 | prim__cosineOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 188 |
 189 | namespace CosineOp
 190 |   export
 191 |   create : HasIO io => OpBuilder -> Location -> Value -> io CosineOp
 192 |   create = UnaryElementwiseOp.create MkCosineOp prim__cosineOpCreate prim__deleteCosineOp
 193 |
 194 | %foreign (ffi "CosineOp_getOperation")
 195 | prim__cosineOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 196 |
 197 | export
 198 | Op CosineOp where
 199 |   getOperation (MkCosineOp op) = getOperationAux op prim__cosineOpGetOperation
 200 |
 201 | %foreign (ffi "ExpOp_delete")
 202 | prim__deleteExpOp : AnyPtr -> PrimIO ()
 203 |
 204 | public export
 205 | data ExpOp = MkExpOp GCAnyPtr
 206 |
 207 | %foreign (ffi "ExpOp_create")
 208 | prim__expOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 209 |
 210 | namespace ExpOp
 211 |   export
 212 |   create : HasIO io => OpBuilder -> Location -> Value -> io ExpOp
 213 |   create = UnaryElementwiseOp.create MkExpOp prim__expOpCreate prim__deleteExpOp
 214 |
 215 | %foreign (ffi "ExpOp_getOperation")
 216 | prim__expOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 217 |
 218 | export
 219 | Op ExpOp where
 220 |   getOperation (MkExpOp op) = getOperationAux op prim__expOpGetOperation
 221 |
 222 | %foreign (ffi "FloorOp_delete")
 223 | prim__deleteFloorOp : AnyPtr -> PrimIO ()
 224 |
 225 | public export
 226 | data FloorOp = MkFloorOp GCAnyPtr
 227 |
 228 | %foreign (ffi "FloorOp_create")
 229 | prim__floorOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 230 |
 231 | namespace FloorOp
 232 |   export
 233 |   create : HasIO io => OpBuilder -> Location -> Value -> io FloorOp
 234 |   create = UnaryElementwiseOp.create MkFloorOp prim__floorOpCreate prim__deleteFloorOp
 235 |
 236 | %foreign (ffi "FloorOp_getOperation")
 237 | prim__floorOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 238 |
 239 | export
 240 | Op FloorOp where
 241 |   getOperation (MkFloorOp op) = getOperationAux op prim__floorOpGetOperation
 242 |
 243 | %foreign (ffi "LogOp_delete")
 244 | prim__deleteLogOp : AnyPtr -> PrimIO ()
 245 |
 246 | public export
 247 | data LogOp = MkLogOp GCAnyPtr
 248 |
 249 | %foreign (ffi "LogOp_create")
 250 | prim__logOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 251 |
 252 | namespace LogOp
 253 |   export
 254 |   create : HasIO io => OpBuilder -> Location -> Value -> io LogOp
 255 |   create = UnaryElementwiseOp.create MkLogOp prim__logOpCreate prim__deleteLogOp
 256 |
 257 | %foreign (ffi "LogOp_getOperation")
 258 | prim__logOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 259 |
 260 | export
 261 | Op LogOp where
 262 |   getOperation (MkLogOp op) = getOperationAux op prim__logOpGetOperation
 263 |
 264 | %foreign (ffi "LogisticOp_delete")
 265 | prim__deleteLogisticOp : AnyPtr -> PrimIO ()
 266 |
 267 | public export
 268 | data LogisticOp = MkLogisticOp GCAnyPtr
 269 |
 270 | %foreign (ffi "LogisticOp_create")
 271 | prim__logisticOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 272 |
 273 | namespace LogisticOp
 274 |   export
 275 |   create : HasIO io => OpBuilder -> Location -> Value -> io LogisticOp
 276 |   create = UnaryElementwiseOp.create MkLogisticOp prim__logisticOpCreate prim__deleteLogisticOp
 277 |
 278 | %foreign (ffi "LogisticOp_getOperation")
 279 | prim__logisticOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 280 |
 281 | export
 282 | Op LogisticOp where
 283 |   getOperation (MkLogisticOp op) = getOperationAux op prim__logisticOpGetOperation
 284 |
 285 | %foreign (ffi "NotOp_delete")
 286 | prim__deleteNotOp : AnyPtr -> PrimIO ()
 287 |
 288 | public export
 289 | data NotOp = MkNotOp GCAnyPtr
 290 |
 291 | %foreign (ffi "NotOp_create")
 292 | prim__notOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 293 |
 294 | namespace NotOp
 295 |   export
 296 |   create : HasIO io => OpBuilder -> Location -> Value -> io NotOp
 297 |   create = UnaryElementwiseOp.create MkNotOp prim__notOpCreate prim__deleteNotOp
 298 |
 299 | %foreign (ffi "NotOp_getOperation")
 300 | prim__notOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 301 |
 302 | export
 303 | Op NotOp where
 304 |   getOperation (MkNotOp op) = getOperationAux op prim__notOpGetOperation
 305 |
 306 | %foreign (ffi "NegOp_delete")
 307 | prim__deleteNegOp : AnyPtr -> PrimIO ()
 308 |
 309 | public export
 310 | data NegOp = MkNegOp GCAnyPtr
 311 |
 312 | %foreign (ffi "NegOp_create")
 313 | prim__negOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 314 |
 315 | namespace NegOp
 316 |   export
 317 |   create : HasIO io => OpBuilder -> Location -> Value -> io NegOp
 318 |   create = UnaryElementwiseOp.create MkNegOp prim__negOpCreate prim__deleteNegOp
 319 |
 320 | %foreign (ffi "NegOp_getOperation")
 321 | prim__negOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 322 |
 323 | export
 324 | Op NegOp where
 325 |   getOperation (MkNegOp op) = getOperationAux op prim__negOpGetOperation
 326 |
 327 | %foreign (ffi "SineOp_delete")
 328 | prim__deleteSineOp : AnyPtr -> PrimIO ()
 329 |
 330 | public export
 331 | data SineOp = MkSineOp GCAnyPtr
 332 |
 333 | %foreign (ffi "SineOp_create")
 334 | prim__sineOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 335 |
 336 | namespace SineOp
 337 |   export
 338 |   create : HasIO io => OpBuilder -> Location -> Value -> io SineOp
 339 |   create = UnaryElementwiseOp.create MkSineOp prim__sineOpCreate prim__deleteSineOp
 340 |
 341 | %foreign (ffi "SineOp_getOperation")
 342 | prim__sineOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 343 |
 344 | export
 345 | Op SineOp where
 346 |   getOperation (MkSineOp op) = getOperationAux op prim__sineOpGetOperation
 347 |
 348 | %foreign (ffi "SqrtOp_delete")
 349 | prim__deleteSqrtOp : AnyPtr -> PrimIO ()
 350 |
 351 | public export
 352 | data SqrtOp = MkSqrtOp GCAnyPtr
 353 |
 354 | %foreign (ffi "SqrtOp_create")
 355 | prim__sqrtOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 356 |
 357 | namespace SqrtOp
 358 |   export
 359 |   create : HasIO io => OpBuilder -> Location -> Value -> io SqrtOp
 360 |   create = UnaryElementwiseOp.create MkSqrtOp prim__sqrtOpCreate prim__deleteSqrtOp
 361 |
 362 | %foreign (ffi "SqrtOp_getOperation")
 363 | prim__sqrtOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 364 |
 365 | export
 366 | Op SqrtOp where
 367 |   getOperation (MkSqrtOp op) = getOperationAux op prim__sqrtOpGetOperation
 368 |
 369 | %foreign (ffi "TanOp_delete")
 370 | prim__deleteTanOp : AnyPtr -> PrimIO ()
 371 |
 372 | public export
 373 | data TanOp = MkTanOp GCAnyPtr
 374 |
 375 | %foreign (ffi "TanOp_create")
 376 | prim__tanOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 377 |
 378 | namespace TanOp
 379 |   export
 380 |   create : HasIO io => OpBuilder -> Location -> Value -> io TanOp
 381 |   create = UnaryElementwiseOp.create MkTanOp prim__tanOpCreate prim__deleteTanOp
 382 |
 383 | %foreign (ffi "TanOp_getOperation")
 384 | prim__tanOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 385 |
 386 | export
 387 | Op TanOp where
 388 |   getOperation (MkTanOp op) = getOperationAux op prim__tanOpGetOperation
 389 |
 390 | %foreign (ffi "TanhOp_delete")
 391 | prim__deleteTanhOp : AnyPtr -> PrimIO ()
 392 |
 393 | public export
 394 | data TanhOp = MkTanhOp GCAnyPtr
 395 |
 396 | %foreign (ffi "TanhOp_create")
 397 | prim__tanhOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 398 |
 399 | namespace TanhOp
 400 |   export
 401 |   create : HasIO io => OpBuilder -> Location -> Value -> io TanhOp
 402 |   create = UnaryElementwiseOp.create MkTanhOp prim__tanhOpCreate prim__deleteTanhOp
 403 |
 404 | %foreign (ffi "TanhOp_getOperation")
 405 | prim__tanhOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 406 |
 407 | export
 408 | Op TanhOp where
 409 |   getOperation (MkTanhOp op) = getOperationAux op prim__tanhOpGetOperation
 410 |
 411 | namespace BinaryElementwiseOp
 412 |   export
 413 |   create :
 414 |     (GCAnyPtr -> opTy) ->
 415 |     (GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr) ->
 416 |     (AnyPtr -> PrimIO ()) ->
 417 |     HasIO io => OpBuilder -> Location -> Value -> Value -> io opTy
 418 |   create
 419 |     constructor_
 420 |     prim__create
 421 |     prim__delete
 422 |     (MkOpBuilder builder)
 423 |     (MkLocation location)
 424 |     (MkValue x _)
 425 |     (MkValue y _) = do
 426 |       op <- primIO $ prim__create builder location x y
 427 |       op <- onCollectAny' op (primIO . prim__delete)
 428 |       pure $ constructor_ op
 429 |
 430 | %foreign (ffi "AddOp_delete")
 431 | prim__deleteAddOp : AnyPtr -> PrimIO ()
 432 |
 433 | public export
 434 | data AddOp = MkAddOp GCAnyPtr
 435 |
 436 | %foreign (ffi "AddOp_create")
 437 | prim__addOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 438 |
 439 | namespace AddOp
 440 |   export
 441 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io AddOp
 442 |   create = BinaryElementwiseOp.create MkAddOp prim__addOpCreate prim__deleteAddOp
 443 |
 444 | %foreign (ffi "AddOp_getOperation")
 445 | prim__addOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 446 |
 447 | export
 448 | Op AddOp where
 449 |   getOperation (MkAddOp op) = getOperationAux op prim__addOpGetOperation
 450 |
 451 | %foreign (ffi "DivOp_delete")
 452 | prim__deleteDivOp : AnyPtr -> PrimIO ()
 453 |
 454 | public export
 455 | data DivOp = MkDivOp GCAnyPtr
 456 |
 457 | %foreign (ffi "DivOp_create")
 458 | prim__divOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 459 |
 460 | namespace DivOp
 461 |   export
 462 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io DivOp
 463 |   create = BinaryElementwiseOp.create MkDivOp prim__divOpCreate prim__deleteDivOp
 464 |
 465 | %foreign (ffi "DivOp_getOperation")
 466 | prim__divOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 467 |
 468 | export
 469 | Op DivOp where
 470 |   getOperation (MkDivOp op) = getOperationAux op prim__divOpGetOperation
 471 |
 472 | %foreign (ffi "MaxOp_delete")
 473 | prim__deleteMaxOp : AnyPtr -> PrimIO ()
 474 |
 475 | public export
 476 | data MaxOp = MkMaxOp GCAnyPtr
 477 |
 478 | %foreign (ffi "MaxOp_create")
 479 | prim__maxOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 480 |
 481 | namespace MaxOp
 482 |   export
 483 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MaxOp
 484 |   create = BinaryElementwiseOp.create MkMaxOp prim__maxOpCreate prim__deleteMaxOp
 485 |
 486 | %foreign (ffi "MaxOp_getOperation")
 487 | prim__maxOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 488 |
 489 | export
 490 | Op MaxOp where
 491 |   getOperation (MkMaxOp op) = getOperationAux op prim__maxOpGetOperation
 492 |
 493 | %foreign (ffi "MinOp_delete")
 494 | prim__deleteMinOp : AnyPtr -> PrimIO ()
 495 |
 496 | public export
 497 | data MinOp = MkMinOp GCAnyPtr
 498 |
 499 | %foreign (ffi "MinOp_create")
 500 | prim__minOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 501 |
 502 | namespace MinOp
 503 |   export
 504 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MinOp
 505 |   create = BinaryElementwiseOp.create MkMinOp prim__minOpCreate prim__deleteMinOp
 506 |
 507 | %foreign (ffi "MinOp_getOperation")
 508 | prim__minOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 509 |
 510 | export
 511 | Op MinOp where
 512 |   getOperation (MkMinOp op) = getOperationAux op prim__minOpGetOperation
 513 |
 514 | %foreign (ffi "MulOp_delete")
 515 | prim__deleteMulOp : AnyPtr -> PrimIO ()
 516 |
 517 | public export
 518 | data MulOp = MkMulOp GCAnyPtr
 519 |
 520 | %foreign (ffi "MulOp_create")
 521 | prim__mulOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 522 |
 523 | namespace MulOp
 524 |   export
 525 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MulOp
 526 |   create = BinaryElementwiseOp.create MkMulOp prim__mulOpCreate prim__deleteMulOp
 527 |
 528 | %foreign (ffi "MulOp_getOperation")
 529 | prim__mulOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 530 |
 531 | export
 532 | Op MulOp where
 533 |   getOperation (MkMulOp op) = getOperationAux op prim__mulOpGetOperation
 534 |
 535 | %foreign (ffi "PowOp_delete")
 536 | prim__deletePowOp : AnyPtr -> PrimIO ()
 537 |
 538 | public export
 539 | data PowOp = MkPowOp GCAnyPtr
 540 |
 541 | %foreign (ffi "PowOp_create")
 542 | prim__powOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 543 |
 544 | namespace PowOp
 545 |   export
 546 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io PowOp
 547 |   create = BinaryElementwiseOp.create MkPowOp prim__powOpCreate prim__deletePowOp
 548 |
 549 | %foreign (ffi "PowOp_getOperation")
 550 | prim__powOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 551 |
 552 | export
 553 | Op PowOp where
 554 |   getOperation (MkPowOp op) = getOperationAux op prim__powOpGetOperation
 555 |
 556 | %foreign (ffi "RemOp_delete")
 557 | prim__deleteRemOp : AnyPtr -> PrimIO ()
 558 |
 559 | public export
 560 | data RemOp = MkRemOp GCAnyPtr
 561 |
 562 | %foreign (ffi "RemOp_create")
 563 | prim__remOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 564 |
 565 | namespace RemOp
 566 |   export
 567 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io RemOp
 568 |   create = BinaryElementwiseOp.create MkRemOp prim__remOpCreate prim__deleteRemOp
 569 |
 570 | %foreign (ffi "RemOp_getOperation")
 571 | prim__remOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 572 |
 573 | export
 574 | Op RemOp where
 575 |   getOperation (MkRemOp op) = getOperationAux op prim__remOpGetOperation
 576 |
 577 | %foreign (ffi "ShiftRightLogicalOp_delete")
 578 | prim__deleteShiftRightLogicalOp : AnyPtr -> PrimIO ()
 579 |
 580 | public export
 581 | data ShiftRightLogicalOp = MkShiftRightLogicalOp GCAnyPtr
 582 |
 583 | %foreign (ffi "ShiftRightLogicalOp_create")
 584 | prim__shiftRightLogicalOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 585 |
 586 | namespace ShiftRightLogicalOp
 587 |   export
 588 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io ShiftRightLogicalOp
 589 |   create = BinaryElementwiseOp.create
 590 |     MkShiftRightLogicalOp prim__shiftRightLogicalOpCreate prim__deleteShiftRightLogicalOp
 591 |
 592 | %foreign (ffi "ShiftRightLogicalOp_getOperation")
 593 | prim__shiftRightLogicalOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 594 |
 595 | export
 596 | Op ShiftRightLogicalOp where
 597 |   getOperation (MkShiftRightLogicalOp op) = getOperationAux op prim__shiftRightLogicalOpGetOperation
 598 |
 599 | %foreign (ffi "SubtractOp_delete")
 600 | prim__deleteSubtractOp : AnyPtr -> PrimIO ()
 601 |
 602 | public export
 603 | data SubtractOp = MkSubtractOp GCAnyPtr
 604 |
 605 | %foreign (ffi "SubtractOp_create")
 606 | prim__subtractOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 607 |
 608 | namespace SubtractOp
 609 |   export
 610 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io SubtractOp
 611 |   create = BinaryElementwiseOp.create MkSubtractOp prim__subtractOpCreate prim__deleteSubtractOp
 612 |
 613 | %foreign (ffi "SubtractOp_getOperation")
 614 | prim__subtractOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 615 |
 616 | export
 617 | Op SubtractOp where
 618 |   getOperation (MkSubtractOp op) = getOperationAux op prim__subtractOpGetOperation
 619 |
 620 | %foreign (ffi "AndOp_delete")
 621 | prim__deleteAndOp : AnyPtr -> PrimIO ()
 622 |
 623 | public export
 624 | data AndOp = MkAndOp GCAnyPtr
 625 |
 626 | %foreign (ffi "AndOp_create")
 627 | prim__andOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 628 |
 629 | namespace AndOp
 630 |   export
 631 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io AndOp
 632 |   create = BinaryElementwiseOp.create MkAndOp prim__andOpCreate prim__deleteAndOp
 633 |
 634 | %foreign (ffi "AndOp_getOperation")
 635 | prim__andOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 636 |
 637 | export
 638 | Op AndOp where
 639 |   getOperation (MkAndOp op) = getOperationAux op prim__andOpGetOperation
 640 |
 641 | %foreign (ffi "OrOp_delete")
 642 | prim__deleteOrOp : AnyPtr -> PrimIO ()
 643 |
 644 | public export
 645 | data OrOp = MkOrOp GCAnyPtr
 646 |
 647 | %foreign (ffi "OrOp_create")
 648 | prim__orOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 649 |
 650 | namespace OrOp
 651 |   export
 652 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io OrOp
 653 |   create = BinaryElementwiseOp.create MkOrOp prim__orOpCreate prim__deleteOrOp
 654 |
 655 | %foreign (ffi "OrOp_getOperation")
 656 | prim__orOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 657 |
 658 | export
 659 | Op OrOp where
 660 |   getOperation (MkOrOp op) = getOperationAux op prim__orOpGetOperation
 661 |
 662 | %foreign (ffi "IfOp_delete")
 663 | prim__deleteIfOp : AnyPtr -> PrimIO ()
 664 |
 665 | public export
 666 | data IfOp = MkIfOp GCAnyPtr
 667 |
 668 | %foreign (ffi "IfOp_create")
 669 | prim__ifOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 670 |
 671 | namespace IfOp
 672 |   export
 673 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io IfOp
 674 |   create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue pred _) = do
 675 |     op <- primIO $ prim__ifOpCreate builder location resultType pred
 676 |     op <- onCollectAny' op (primIO . prim__deleteIfOp)
 677 |     pure (MkIfOp op)
 678 |
 679 | %foreign (ffi "IfOp_getTrueBranch")
 680 | prim__ifOpGetTrueBranch : GCAnyPtr -> AnyPtr
 681 |
 682 | export
 683 | getTrueBranch : IfOp -> Region
 684 | getTrueBranch (MkIfOp op) = MkRegion $ prim__ifOpGetTrueBranch op
 685 |
 686 | %foreign (ffi "IfOp_getFalseBranch")
 687 | prim__ifOpGetFalseBranch : GCAnyPtr -> AnyPtr
 688 |
 689 | export
 690 | getFalseBranch : IfOp -> Region
 691 | getFalseBranch (MkIfOp op) = MkRegion $ prim__ifOpGetFalseBranch op
 692 |
 693 | %foreign (ffi "IfOp_getOperation")
 694 | prim__ifOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 695 |
 696 | export
 697 | Op IfOp where
 698 |   getOperation (MkIfOp op) = getOperationAux op prim__ifOpGetOperation
 699 |
 700 | %foreign (ffi "WhileOp_delete")
 701 | prim__deleteWhileOp : AnyPtr -> PrimIO ()
 702 |
 703 | public export
 704 | data WhileOp = MkWhileOp GCAnyPtr
 705 |
 706 | %foreign (ffi "WhileOp_create")
 707 | prim__whileOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 708 |
 709 | namespace WhileOp
 710 |   export
 711 |   create : HasIO io => OpBuilder -> Location -> ValueRange -> io WhileOp
 712 |   create (MkOpBuilder builder) (MkLocation location) (MkValueRange inputs) = do
 713 |     op <- primIO $ prim__whileOpCreate builder location inputs
 714 |     op <- onCollectAny' op (primIO . prim__deleteWhileOp)
 715 |     pure (MkWhileOp op)
 716 |
 717 | %foreign (ffi "WhileOp_getCond")
 718 | prim__whileOpGetCond : GCAnyPtr -> AnyPtr
 719 |
 720 | export
 721 | getCond : WhileOp -> Region
 722 | getCond (MkWhileOp op) = MkRegion $ prim__whileOpGetCond op
 723 |
 724 | %foreign (ffi "WhileOp_getBody")
 725 | prim__whileOpGetBody : GCAnyPtr -> AnyPtr
 726 |
 727 | namespace WhileOp
 728 |   export
 729 |   getBody : WhileOp -> Region
 730 |   getBody (MkWhileOp op) = MkRegion $ prim__whileOpGetBody op
 731 |
 732 | %foreign (ffi "WhileOp_getOperation")
 733 | prim__whileOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 734 |
 735 | export
 736 | Op WhileOp where
 737 |   getOperation (MkWhileOp op) = getOperationAux op prim__whileOpGetOperation
 738 |
 739 | %foreign (ffi "ReduceOp_delete")
 740 | prim__deleteReduceOp : AnyPtr -> PrimIO ()
 741 |
 742 | public export
 743 | data ReduceOp = MkReduceOp GCAnyPtr
 744 |
 745 | %foreign (ffi "ReduceOp_create")
 746 | prim__reduceOpCreate :
 747 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
 748 |
 749 | namespace ReduceOp
 750 |   export
 751 |   create : HasIO io => OpBuilder -> Location -> ValueRange -> ValueRange -> List Nat -> io ReduceOp
 752 |   create
 753 |     (MkOpBuilder builder)
 754 |     (MkLocation location)
 755 |     (MkValueRange inputs)
 756 |     (MkValueRange inits)
 757 |     dimensions = do
 758 |       MkArray dimensions dimensionsLen <- fromList $ cast {to = Int64} <$> dimensions
 759 |       op <- primIO $ prim__reduceOpCreate builder location inputs inits dimensions dimensionsLen
 760 |       op <- onCollectAny' op (primIO . prim__deleteReduceOp)
 761 |       pure (MkReduceOp op)
 762 |
 763 | %foreign (ffi "ReduceOp_getBody")
 764 | prim__reduceOpGetBody : GCAnyPtr -> AnyPtr
 765 |
 766 | namespace ReduceOp
 767 |   export
 768 |   getBody : ReduceOp -> Region
 769 |   getBody (MkReduceOp op) = MkRegion $ prim__reduceOpGetBody op
 770 |
 771 | %foreign (ffi "ReduceOp_getOperation")
 772 | prim__reduceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 773 |
 774 | export
 775 | Op ReduceOp where
 776 |   getOperation (MkReduceOp op) = getOperationAux op prim__reduceOpGetOperation
 777 |
 778 | %foreign (ffi "CompareOp_delete")
 779 | prim__deleteCompareOp : AnyPtr -> PrimIO ()
 780 |
 781 | public export
 782 | data CompareOp = MkCompareOp GCAnyPtr
 783 |
 784 | %foreign (ffi "CompareOp_create")
 785 | prim__compareOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> PrimIO AnyPtr
 786 |
 787 | namespace CompareOp
 788 |   export
 789 |   create :
 790 |     HasIO io => OpBuilder -> Location -> Value -> Value -> ComparisonDirection -> io CompareOp
 791 |   create (MkOpBuilder builder) (MkLocation location) (MkValue lhs _) (MkValue rhs _) direction = do
 792 |     op <- primIO $ prim__compareOpCreate builder location lhs rhs (cast direction)
 793 |     op <- onCollectAny' op (primIO . prim__deleteCompareOp)
 794 |     pure (MkCompareOp op)
 795 |
 796 | %foreign (ffi "CompareOp_getOperation")
 797 | prim__compareOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 798 |
 799 | export
 800 | Op CompareOp where
 801 |   getOperation (MkCompareOp op) = getOperationAux op prim__compareOpGetOperation
 802 |
 803 | %foreign (ffi "SliceOp_delete")
 804 | prim__deleteSliceOp : AnyPtr -> PrimIO ()
 805 |
 806 | public export
 807 | data SliceOp = MkSliceOp GCAnyPtr
 808 |
 809 | %foreign (ffi "SliceOp_create")
 810 | prim__sliceOpCreate :
 811 |   GCAnyPtr ->
 812 |   GCAnyPtr ->
 813 |   GCAnyPtr ->
 814 |   GCAnyPtr -> Bits64 ->
 815 |   GCAnyPtr -> Bits64 ->
 816 |   GCAnyPtr -> Bits64 ->
 817 |   PrimIO AnyPtr
 818 |
 819 | namespace SliceOp
 820 |   export
 821 |   create :
 822 |     HasIO io => OpBuilder -> Location -> Value -> List Nat -> List Nat -> List Nat -> io SliceOp
 823 |   create
 824 |     (MkOpBuilder builder)
 825 |     (MkLocation location)
 826 |     (MkValue operand _)
 827 |     startIndices
 828 |     limitIndices
 829 |     strides = do
 830 |       MkArray startIndices startIndicesLen <- fromList $ cast {to = Int64} <$> startIndices
 831 |       MkArray limitIndices limitIndicesLen <- fromList $ cast {to = Int64} <$> limitIndices
 832 |       MkArray strides stridesLen <- fromList $ cast {to = Int64} <$> strides
 833 |       op <- primIO $ prim__sliceOpCreate
 834 |         builder
 835 |         location
 836 |         operand
 837 |         startIndices startIndicesLen
 838 |         limitIndices limitIndicesLen
 839 |         strides stridesLen
 840 |       op <- onCollectAny' op (primIO . prim__deleteSliceOp)
 841 |       pure (MkSliceOp op)
 842 |
 843 | %foreign (ffi "SliceOp_getOperation")
 844 | prim__sliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 845 |
 846 | export
 847 | Op SliceOp where
 848 |   getOperation (MkSliceOp op) = getOperationAux op prim__sliceOpGetOperation
 849 |
 850 | %foreign (ffi "DynamicSliceOp_delete")
 851 | prim__deleteDynamicSliceOp : AnyPtr -> PrimIO ()
 852 |
 853 | public export
 854 | data DynamicSliceOp = MkDynamicSliceOp GCAnyPtr
 855 |
 856 | %foreign (ffi "DynamicSliceOp_create")
 857 | prim__dynamicSliceOpCreate :
 858 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
 859 |
 860 | namespace DynamicSliceOp
 861 |   export
 862 |   create :
 863 |     HasIO io => OpBuilder -> Location -> Value -> ValueRange -> List Nat -> io DynamicSliceOp
 864 |   create
 865 |     (MkOpBuilder builder)
 866 |     (MkLocation location)
 867 |     (MkValue operand _)
 868 |     (MkValueRange startIndices)
 869 |     sliceSizes = do
 870 |       MkArray sliceSizes sliceSizesLen <- fromList $ cast {to = Int64} <$> sliceSizes
 871 |       op <- primIO $ prim__dynamicSliceOpCreate
 872 |         builder location operand startIndices sliceSizes sliceSizesLen
 873 |       op <- onCollectAny' op (primIO . prim__deleteDynamicSliceOp)
 874 |       pure (MkDynamicSliceOp op)
 875 |
 876 | %foreign (ffi "DynamicSliceOp_getOperation")
 877 | prim__dynamicSliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 878 |
 879 | export
 880 | Op DynamicSliceOp where
 881 |   getOperation (MkDynamicSliceOp op) = getOperationAux op prim__dynamicSliceOpGetOperation
 882 |
 883 | %foreign (ffi "DynamicUpdateSliceOp_delete")
 884 | prim__deleteDynamicUpdateSliceOp : AnyPtr -> PrimIO ()
 885 |
 886 | public export
 887 | data DynamicUpdateSliceOp = MkDynamicUpdateSliceOp GCAnyPtr
 888 |
 889 | %foreign (ffi "DynamicUpdateSliceOp_create")
 890 | prim__dynamicUpdateSliceOpCreate :
 891 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 892 |
 893 | namespace DynamicUpdateSliceOp
 894 |   export
 895 |   create :
 896 |     HasIO io => OpBuilder -> Location -> Value -> Value -> ValueRange -> io DynamicUpdateSliceOp
 897 |   create
 898 |     (MkOpBuilder builder)
 899 |     (MkLocation location)
 900 |     (MkValue operand _)
 901 |     (MkValue update _)
 902 |     (MkValueRange startIndices) = do
 903 |       op <- primIO $ prim__dynamicUpdateSliceOpCreate builder location operand update startIndices
 904 |       op <- onCollectAny' op (primIO . prim__deleteDynamicUpdateSliceOp)
 905 |       pure (MkDynamicUpdateSliceOp op)
 906 |
 907 | %foreign (ffi "DynamicUpdateSliceOp_getOperation")
 908 | prim__dynamicUpdateSliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 909 |
 910 | export
 911 | Op DynamicUpdateSliceOp where
 912 |   getOperation (MkDynamicUpdateSliceOp op) =
 913 |     getOperationAux op prim__dynamicUpdateSliceOpGetOperation
 914 |
 915 | %foreign (ffi "BitcastConvertOp_delete")
 916 | prim__deleteBitcastConvertOp : AnyPtr -> PrimIO ()
 917 |
 918 | public export
 919 | data BitcastConvertOp = MkBitcastConvertOp GCAnyPtr
 920 |
 921 | %foreign (ffi "BitcastConvertOp_create")
 922 | prim__bitcastConvertOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 923 |
 924 | namespace BitcastConvertOp
 925 |   export
 926 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io BitcastConvertOp
 927 |   create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue operand _) = do
 928 |     op <- primIO $ prim__bitcastConvertOpCreate builder location resultType operand
 929 |     op <- onCollectAny' op (primIO . prim__deleteBitcastConvertOp)
 930 |     pure (MkBitcastConvertOp op)
 931 |
 932 | %foreign (ffi "BitcastConvertOp_getOperation")
 933 | prim__bitcastConvertOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 934 |
 935 | export
 936 | Op BitcastConvertOp where
 937 |   getOperation (MkBitcastConvertOp op) = getOperationAux op prim__bitcastConvertOpGetOperation
 938 |
 939 | %foreign (ffi "BroadcastInDimOp_delete")
 940 | prim__deleteBroadcastInDimOp : AnyPtr -> PrimIO ()
 941 |
 942 | public export
 943 | data BroadcastInDimOp = MkBroadcastInDimOp GCAnyPtr
 944 |
 945 | %foreign (ffi "BroadcastInDimOp_create")
 946 | prim__broadcastInDimOpCreate :
 947 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
 948 |
 949 | namespace BroadcastInDimOp
 950 |   export
 951 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> List Nat -> io BroadcastInDimOp
 952 |   create
 953 |     (MkOpBuilder builder)
 954 |     (MkLocation location)
 955 |     (MkType_ resultType0 _)
 956 |     (MkValue operand _)
 957 |     dimensions = do
 958 |       MkArray dimensions dimensionsLen <- fromList $ cast {to = Int64} <$> dimensions
 959 |       op <- primIO $ prim__broadcastInDimOpCreate
 960 |         builder location resultType0 operand dimensions dimensionsLen
 961 |       op <- onCollectAny' op (primIO . prim__deleteBroadcastInDimOp)
 962 |       pure (MkBroadcastInDimOp op)
 963 |
 964 | %foreign (ffi "BroadcastInDimOp_getOperation")
 965 | prim__broadcastInDimOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 966 |
 967 | export
 968 | Op BroadcastInDimOp where
 969 |   getOperation (MkBroadcastInDimOp op) = getOperationAux op prim__broadcastInDimOpGetOperation
 970 |
 971 | %foreign (ffi "CholeskyOp_delete")
 972 | prim__deleteCholeskyOp : AnyPtr -> PrimIO ()
 973 |
 974 | public export
 975 | data CholeskyOp = MkCholeskyOp GCAnyPtr
 976 |
 977 | %foreign (ffi "CholeskyOp_create")
 978 | prim__choleskyOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> PrimIO AnyPtr
 979 |
 980 | namespace CholeskyOp
 981 |   export
 982 |   create : HasIO io => OpBuilder -> Location -> Value -> Bool -> io CholeskyOp
 983 |   create (MkOpBuilder builder) (MkLocation location) (MkValue value _) lower = do
 984 |     op <- primIO $ prim__choleskyOpCreate builder location value (boolToCInt lower)
 985 |     op <- onCollectAny' op (primIO . prim__deleteCholeskyOp)
 986 |     pure (MkCholeskyOp op)
 987 |
 988 | %foreign (ffi "CholeskyOp_getOperation")
 989 | prim__choleskyOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 990 |
 991 | export
 992 | Op CholeskyOp where
 993 |   getOperation (MkCholeskyOp op) = getOperationAux op prim__choleskyOpGetOperation
 994 |
 995 | %foreign (ffi "ConcatenateOp_delete")
 996 | prim__deleteConcatenateOp : AnyPtr -> PrimIO ()
 997 |
 998 | public export
 999 | data ConcatenateOp = MkConcatenateOp GCAnyPtr
1000 |
1001 | %foreign (ffi "ConcatenateOp_create")
1002 | prim__concatenateOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int64 -> PrimIO AnyPtr
1003 |
1004 | namespace ConcatenateOp
1005 |   export
1006 |   create : HasIO io => OpBuilder -> Location -> ValueRange -> Nat -> io ConcatenateOp
1007 |   create (MkOpBuilder builder) (MkLocation location) (MkValueRange inputs) dimension = do
1008 |     op <- primIO $ prim__concatenateOpCreate builder location inputs (cast dimension)
1009 |     op <- onCollectAny' op (primIO . prim__deleteConcatenateOp)
1010 |     pure (MkConcatenateOp op)
1011 |
1012 | %foreign (ffi "ConcatenateOp_getOperation")
1013 | prim__concatenateOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1014 |
1015 | export
1016 | Op ConcatenateOp where
1017 |   getOperation (MkConcatenateOp op) = getOperationAux op prim__concatenateOpGetOperation
1018 |
1019 | %foreign (ffi "DotGeneralOp_delete")
1020 | prim__deleteDotGeneralOp : AnyPtr -> PrimIO ()
1021 |
1022 | public export
1023 | data DotGeneralOp = MkDotGeneralOp GCAnyPtr
1024 |
1025 | %foreign (ffi "DotGeneralOp_create")
1026 | prim__dotGeneralOpCreate :
1027 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr ->  GCAnyPtr -> PrimIO AnyPtr
1028 |
1029 | namespace DotGeneralOp
1030 |   export
1031 |   create :
1032 |     HasIO io =>
1033 |     OpBuilder ->
1034 |     Location ->
1035 |     Type_ ->
1036 |     Value ->
1037 |     Value ->
1038 |     DotDimensionNumbersAttr ->
1039 |     io DotGeneralOp
1040 |   create
1041 |     (MkOpBuilder builder)
1042 |     (MkLocation location)
1043 |     (MkType_ resultType0 _)
1044 |     (MkValue lhs _)
1045 |     (MkValue rhs _)
1046 |     (MkDotDimensionNumbersAttr ddn) = do
1047 |       op <- primIO $ prim__dotGeneralOpCreate builder location resultType0 lhs rhs ddn
1048 |       op <- onCollectAny' op (primIO . prim__deleteDotGeneralOp)
1049 |       pure (MkDotGeneralOp op)
1050 |
1051 | %foreign (ffi "DotGeneralOp_getOperation")
1052 | prim__dotGeneralOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1053 |
1054 | export
1055 | Op DotGeneralOp where
1056 |   getOperation (MkDotGeneralOp op) = getOperationAux op prim__dotGeneralOpGetOperation
1057 |
1058 | %foreign (ffi "ReshapeOp_delete")
1059 | prim__deleteReshapeOp : AnyPtr -> PrimIO ()
1060 |
1061 | public export
1062 | data ReshapeOp = MkReshapeOp GCAnyPtr
1063 |
1064 | %foreign (ffi "ReshapeOp_create")
1065 | prim__reshapeOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1066 |
1067 | namespace ReshapeOp
1068 |   export
1069 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io ReshapeOp
1070 |   create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue value _) = do
1071 |     op <- primIO $ prim__reshapeOpCreate builder location resultType value
1072 |     op <- onCollectAny' op (primIO . prim__deleteReshapeOp)
1073 |     pure (MkReshapeOp op)
1074 |
1075 | %foreign (ffi "ReshapeOp_getOperation")
1076 | prim__reshapeOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1077 |
1078 | export
1079 | Op ReshapeOp where
1080 |   getOperation (MkReshapeOp op) = getOperationAux op prim__reshapeOpGetOperation
1081 |
1082 | %foreign (ffi "SelectOp_delete")
1083 | prim__deleteSelectOp : AnyPtr -> PrimIO ()
1084 |
1085 | public export
1086 | data SelectOp = MkSelectOp GCAnyPtr
1087 |
1088 | %foreign (ffi "SelectOp_create")
1089 | prim__selectOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1090 |
1091 | namespace SelectOp
1092 |   export
1093 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> Value -> io SelectOp
1094 |   create
1095 |     (MkOpBuilder builder)
1096 |     (MkLocation location)
1097 |     (MkValue pred _)
1098 |     (MkValue onTrue _)
1099 |     (MkValue onFalse _) = do
1100 |       op <- primIO $ prim__selectOpCreate builder location pred onTrue onFalse
1101 |       op <- onCollectAny' op (primIO . prim__deleteSelectOp)
1102 |       pure (MkSelectOp op)
1103 |
1104 | %foreign (ffi "SelectOp_getOperation")
1105 | prim__selectOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1106 |
1107 | export
1108 | Op SelectOp where
1109 |   getOperation (MkSelectOp op) = getOperationAux op prim__selectOpGetOperation
1110 |
1111 | %foreign (ffi "SortOp_delete")
1112 | prim__deleteSortOp : AnyPtr -> PrimIO ()
1113 |
1114 | public export
1115 | data SortOp = MkSortOp GCAnyPtr
1116 |
1117 | %foreign (ffi "SortOp_create")
1118 | prim__sortOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int64 -> Int -> PrimIO AnyPtr
1119 |
1120 | namespace SortOp
1121 |   export
1122 |   create : HasIO io => OpBuilder -> Location -> Value -> Nat -> Bool -> io SortOp
1123 |   create (MkOpBuilder builder) (MkLocation location) (MkValue value _) dimension isStable = do
1124 |     op <- primIO $ prim__sortOpCreate builder location value (cast dimension) (boolToCInt isStable)
1125 |     op <- onCollectAny' op (primIO . prim__deleteSortOp)
1126 |     pure (MkSortOp op)
1127 |
1128 | %foreign (ffi "SortOp_getComparator")
1129 | prim__sortOpGetComparator : GCAnyPtr -> AnyPtr
1130 |
1131 | export
1132 | getComparator : SortOp -> Region
1133 | getComparator (MkSortOp op) = MkRegion $ prim__sortOpGetComparator op
1134 |
1135 | %foreign (ffi "SortOp_getOperation")
1136 | prim__sortOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1137 |
1138 | export
1139 | Op SortOp where
1140 |   getOperation (MkSortOp op) = getOperationAux op prim__sortOpGetOperation
1141 |
1142 | %foreign (ffi "ReverseOp_delete")
1143 | prim__deleteReverseOp : AnyPtr -> PrimIO ()
1144 |
1145 | public export
1146 | data ReverseOp = MkReverseOp GCAnyPtr
1147 |
1148 | %foreign (ffi "ReverseOp_create")
1149 | prim__reverseOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1150 |
1151 | namespace ReverseOp
1152 |   export
1153 |   create : HasIO io => OpBuilder -> Location -> Value -> List Nat -> io ReverseOp
1154 |   create (MkOpBuilder builder) (MkLocation location) (MkValue operand _) dimensions = do
1155 |     MkArray dimensions dimensionsLen <- fromList $ cast {to = Int64} <$> dimensions
1156 |     op <- primIO $ prim__reverseOpCreate builder location operand dimensions dimensionsLen
1157 |     op <- onCollectAny' op (primIO . prim__deleteReverseOp)
1158 |     pure (MkReverseOp op)
1159 |
1160 | %foreign (ffi "ReverseOp_getOperation")
1161 | prim__reverseOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1162 |
1163 | export
1164 | Op ReverseOp where
1165 |   getOperation (MkReverseOp op) = getOperationAux op prim__reverseOpGetOperation
1166 |
1167 | %foreign (ffi "TransposeOp_delete")
1168 | prim__deleteTransposeOp : AnyPtr -> PrimIO ()
1169 |
1170 | public export
1171 | data TransposeOp = MkTransposeOp GCAnyPtr
1172 |
1173 | %foreign (ffi "TransposeOp_create")
1174 | prim__transposeOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1175 |
1176 | namespace TransposeOp
1177 |   export
1178 |   create : HasIO io => OpBuilder -> Location -> Value -> List Nat -> io TransposeOp
1179 |   create (MkOpBuilder builder) (MkLocation location) (MkValue operand _) permutation = do
1180 |     MkArray permutation permutationLen <- fromList $ cast {to = Int64} <$> permutation
1181 |     op <- primIO $ prim__transposeOpCreate builder location operand permutation permutationLen
1182 |     op <- onCollectAny' op (primIO . prim__deleteTransposeOp)
1183 |     pure (MkTransposeOp op)
1184 |
1185 | %foreign (ffi "TransposeOp_getOperation")
1186 | prim__transposeOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1187 |
1188 | export
1189 | Op TransposeOp where
1190 |   getOperation (MkTransposeOp op) = getOperationAux op prim__transposeOpGetOperation
1191 |
1192 | %foreign (ffi "TriangularSolveOp_delete")
1193 | prim__deleteTriangularSolveOp : AnyPtr -> PrimIO ()
1194 |
1195 | public export
1196 | data TriangularSolveOp = MkTriangularSolveOp GCAnyPtr
1197 |
1198 | %foreign (ffi "TriangularSolveOp_create")
1199 | prim__triangularSolveOpCreate :
1200 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> Int -> Int -> Int -> PrimIO AnyPtr
1201 |
1202 | namespace TriangularSolveOp
1203 |   export
1204 |   create :
1205 |     HasIO io =>
1206 |     OpBuilder ->
1207 |     Location ->
1208 |     Value ->
1209 |     Value ->
1210 |     Bool ->
1211 |     Bool ->
1212 |     Bool ->
1213 |     Transpose ->
1214 |     io TriangularSolveOp
1215 |   create
1216 |     (MkOpBuilder builder)
1217 |     (MkLocation location)
1218 |     (MkValue a _)
1219 |     (MkValue b _)
1220 |     leftSide
1221 |     lower
1222 |     unitDiagonal
1223 |     transposeA = do
1224 |       let leftSide = boolToCInt leftSide
1225 |           lower = boolToCInt lower
1226 |           unitDiagonal = boolToCInt unitDiagonal
1227 |           transposeA = cast transposeA
1228 |       op <- primIO $ prim__triangularSolveOpCreate
1229 |         builder location a b leftSide lower unitDiagonal transposeA
1230 |       op <- onCollectAny' op (primIO . prim__deleteTriangularSolveOp)
1231 |       pure (MkTriangularSolveOp op)
1232 |
1233 | %foreign (ffi "TriangularSolveOp_getOperation")
1234 | prim__triangularSolveOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1235 |
1236 | export
1237 | Op TriangularSolveOp where
1238 |   getOperation (MkTriangularSolveOp op) = getOperationAux op prim__triangularSolveOpGetOperation
1239 |
1240 | %foreign (ffi "StableHLO_ReturnOp_delete")
1241 | prim__deleteReturnOp : AnyPtr -> PrimIO ()
1242 |
1243 | public export
1244 | data ReturnOp = MkReturnOp GCAnyPtr
1245 |
1246 | %foreign (ffi "StableHLO_ReturnOp_create")
1247 | prim__returnOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1248 |
1249 | namespace ReturnOp
1250 |   export
1251 |   create : HasIO io => OpBuilder -> Location -> ValueRange -> io ReturnOp
1252 |   create (MkOpBuilder builder) (MkLocation location) (MkValueRange results) = do
1253 |     op <- primIO $ prim__returnOpCreate builder location results
1254 |     op <- onCollectAny' op (primIO . prim__deleteReturnOp)
1255 |     pure (MkReturnOp op)
1256 |
1257 | %foreign (ffi "StableHLO_ReturnOp_getOperation")
1258 | prim__returnOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1259 |
1260 | export
1261 | Op ReturnOp where
1262 |   getOperation (MkReturnOp op) = getOperationAux op prim__returnOpGetOperation
1263 |
1264 | %foreign (ffi "RngBitGeneratorOp_delete")
1265 | prim__deleteRngBitGeneratorOp : AnyPtr -> PrimIO ()
1266 |
1267 | public export
1268 | data RngBitGeneratorOp = MkRngBitGeneratorOp GCAnyPtr
1269 |
1270 | %foreign (ffi "RngBitGeneratorOp_create")
1271 | prim__rngBitGeneratorOpCreate :
1272 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> GCAnyPtr -> PrimIO AnyPtr
1273 |
1274 | namespace RngBitGeneratorOp
1275 |   export
1276 |   create :
1277 |     HasIO io =>
1278 |     OpBuilder ->
1279 |     Location ->
1280 |     Type_ ->
1281 |     Type_ ->
1282 |     RngAlgorithm ->
1283 |     Value ->
1284 |     io RngBitGeneratorOp
1285 |   create
1286 |     (MkOpBuilder builder)
1287 |     (MkLocation location)
1288 |     (MkType_ outputState _)
1289 |     (MkType_ output _)
1290 |     rngAlgorithm
1291 |     (MkValue state _) = do
1292 |       op <- primIO $ prim__rngBitGeneratorOpCreate
1293 |         builder location outputState output (cast rngAlgorithm) state
1294 |       op <- onCollectAny' op (primIO . prim__deleteRngBitGeneratorOp)
1295 |       pure (MkRngBitGeneratorOp op)
1296 |
1297 | %foreign (ffi "RngBitGeneratorOp_getOperation")
1298 | prim__rngBitGeneratorOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1299 |
1300 | export
1301 | Op RngBitGeneratorOp where
1302 |   getOperation (MkRngBitGeneratorOp op) = getOperationAux op prim__rngBitGeneratorOpGetOperation
1303 |