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 Compiler.Stablehlo.Dialect.StablehloOps
  18 |
  19 | import Compiler.FFI
  20 | import Compiler.Array
  21 | import Compiler.MLIR.IR.BuiltinAttributes
  22 | import Compiler.MLIR.IR.Builders
  23 | import Compiler.MLIR.IR.Location
  24 | import Compiler.MLIR.IR.MLIRContext
  25 | import Compiler.MLIR.IR.OpDefinition
  26 | import Compiler.MLIR.IR.Operation
  27 | import Compiler.MLIR.IR.Region
  28 | import Compiler.MLIR.IR.Types
  29 | import Compiler.MLIR.IR.Value
  30 | import Compiler.MLIR.IR.ValueRange
  31 | import Compiler.Stablehlo.Dialect.StablehloAttrs
  32 | import 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 "BitcastConvertOp_delete")
 884 | prim__deleteBitcastConvertOp : AnyPtr -> PrimIO ()
 885 |
 886 | public export
 887 | data BitcastConvertOp = MkBitcastConvertOp GCAnyPtr
 888 |
 889 | %foreign (ffi "BitcastConvertOp_create")
 890 | prim__bitcastConvertOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 891 |
 892 | namespace BitcastConvertOp
 893 |   export
 894 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io BitcastConvertOp
 895 |   create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue operand _) = do
 896 |     op <- primIO $ prim__bitcastConvertOpCreate builder location resultType operand
 897 |     op <- onCollectAny' op (primIO . prim__deleteBitcastConvertOp)
 898 |     pure (MkBitcastConvertOp op)
 899 |
 900 | %foreign (ffi "BitcastConvertOp_getOperation")
 901 | prim__bitcastConvertOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 902 |
 903 | export
 904 | Op BitcastConvertOp where
 905 |   getOperation (MkBitcastConvertOp op) = getOperationAux op prim__bitcastConvertOpGetOperation
 906 |
 907 | %foreign (ffi "BroadcastInDimOp_delete")
 908 | prim__deleteBroadcastInDimOp : AnyPtr -> PrimIO ()
 909 |
 910 | public export
 911 | data BroadcastInDimOp = MkBroadcastInDimOp GCAnyPtr
 912 |
 913 | %foreign (ffi "BroadcastInDimOp_create")
 914 | prim__broadcastInDimOpCreate :
 915 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
 916 |
 917 | namespace BroadcastInDimOp
 918 |   export
 919 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> List Nat -> io BroadcastInDimOp
 920 |   create
 921 |     (MkOpBuilder builder)
 922 |     (MkLocation location)
 923 |     (MkType_ resultType0 _)
 924 |     (MkValue operand _)
 925 |     dimensions = do
 926 |       MkArray dimensions dimensionsLen <- fromList $ cast {to = Int64} <$> dimensions
 927 |       op <- primIO $ prim__broadcastInDimOpCreate
 928 |         builder location resultType0 operand dimensions dimensionsLen
 929 |       op <- onCollectAny' op (primIO . prim__deleteBroadcastInDimOp)
 930 |       pure (MkBroadcastInDimOp op)
 931 |
 932 | %foreign (ffi "BroadcastInDimOp_getOperation")
 933 | prim__broadcastInDimOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 934 |
 935 | export
 936 | Op BroadcastInDimOp where
 937 |   getOperation (MkBroadcastInDimOp op) = getOperationAux op prim__broadcastInDimOpGetOperation
 938 |
 939 | %foreign (ffi "CholeskyOp_delete")
 940 | prim__deleteCholeskyOp : AnyPtr -> PrimIO ()
 941 |
 942 | public export
 943 | data CholeskyOp = MkCholeskyOp GCAnyPtr
 944 |
 945 | %foreign (ffi "CholeskyOp_create")
 946 | prim__choleskyOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> PrimIO AnyPtr
 947 |
 948 | namespace CholeskyOp
 949 |   export
 950 |   create : HasIO io => OpBuilder -> Location -> Value -> Bool -> io CholeskyOp
 951 |   create (MkOpBuilder builder) (MkLocation location) (MkValue value _) lower = do
 952 |     op <- primIO $ prim__choleskyOpCreate builder location value (boolToCInt lower)
 953 |     op <- onCollectAny' op (primIO . prim__deleteCholeskyOp)
 954 |     pure (MkCholeskyOp op)
 955 |
 956 | %foreign (ffi "CholeskyOp_getOperation")
 957 | prim__choleskyOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 958 |
 959 | export
 960 | Op CholeskyOp where
 961 |   getOperation (MkCholeskyOp op) = getOperationAux op prim__choleskyOpGetOperation
 962 |
 963 | %foreign (ffi "ConcatenateOp_delete")
 964 | prim__deleteConcatenateOp : AnyPtr -> PrimIO ()
 965 |
 966 | public export
 967 | data ConcatenateOp = MkConcatenateOp GCAnyPtr
 968 |
 969 | %foreign (ffi "ConcatenateOp_create")
 970 | prim__concatenateOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int64 -> PrimIO AnyPtr
 971 |
 972 | namespace ConcatenateOp
 973 |   export
 974 |   create : HasIO io => OpBuilder -> Location -> ValueRange -> Nat -> io ConcatenateOp
 975 |   create (MkOpBuilder builder) (MkLocation location) (MkValueRange inputs) dimension = do
 976 |     op <- primIO $ prim__concatenateOpCreate builder location inputs (cast dimension)
 977 |     op <- onCollectAny' op (primIO . prim__deleteConcatenateOp)
 978 |     pure (MkConcatenateOp op)
 979 |
 980 | %foreign (ffi "ConcatenateOp_getOperation")
 981 | prim__concatenateOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 982 |
 983 | export
 984 | Op ConcatenateOp where
 985 |   getOperation (MkConcatenateOp op) = getOperationAux op prim__concatenateOpGetOperation
 986 |
 987 | %foreign (ffi "DotGeneralOp_delete")
 988 | prim__deleteDotGeneralOp : AnyPtr -> PrimIO ()
 989 |
 990 | public export
 991 | data DotGeneralOp = MkDotGeneralOp GCAnyPtr
 992 |
 993 | %foreign (ffi "DotGeneralOp_create")
 994 | prim__dotGeneralOpCreate :
 995 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr ->  GCAnyPtr -> PrimIO AnyPtr
 996 |
 997 | namespace DotGeneralOp
 998 |   export
 999 |   create :
1000 |     HasIO io =>
1001 |     OpBuilder ->
1002 |     Location ->
1003 |     Type_ ->
1004 |     Value ->
1005 |     Value ->
1006 |     DotDimensionNumbersAttr ->
1007 |     io DotGeneralOp
1008 |   create
1009 |     (MkOpBuilder builder)
1010 |     (MkLocation location)
1011 |     (MkType_ resultType0 _)
1012 |     (MkValue lhs _)
1013 |     (MkValue rhs _)
1014 |     (MkDotDimensionNumbersAttr ddn) = do
1015 |       op <- primIO $ prim__dotGeneralOpCreate builder location resultType0 lhs rhs ddn
1016 |       op <- onCollectAny' op (primIO . prim__deleteDotGeneralOp)
1017 |       pure (MkDotGeneralOp op)
1018 |
1019 | %foreign (ffi "DotGeneralOp_getOperation")
1020 | prim__dotGeneralOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1021 |
1022 | export
1023 | Op DotGeneralOp where
1024 |   getOperation (MkDotGeneralOp op) = getOperationAux op prim__dotGeneralOpGetOperation
1025 |
1026 | %foreign (ffi "MapOp_delete")
1027 | prim__deleteMapOp : AnyPtr -> PrimIO ()
1028 |
1029 | public export
1030 | data MapOp = MkMapOp GCAnyPtr
1031 |
1032 | %foreign (ffi "MapOp_create")
1033 | prim__mapOpCreate :
1034 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1035 |
1036 | namespace MapOp
1037 |   export
1038 |   create : HasIO io => OpBuilder -> Location -> Type_ -> ValueRange -> List Nat -> io MapOp
1039 |   create
1040 |     (MkOpBuilder builder)
1041 |     (MkLocation location)
1042 |     (MkType_ resultType _)
1043 |     (MkValueRange inputs)
1044 |     dimensions = do
1045 |       MkArray dimensions dimensionsLen <- fromList $ cast {to = Int64} <$> dimensions
1046 |       op <- primIO $ prim__mapOpCreate builder location resultType inputs dimensions dimensionsLen
1047 |       op <- onCollectAny' op (primIO . prim__deleteMapOp)
1048 |       pure (MkMapOp op)
1049 |
1050 | %foreign (ffi "MapOp_getComputation")
1051 | prim__mapOpGetComputation : GCAnyPtr -> AnyPtr
1052 |
1053 | export
1054 | getComputation : MapOp -> Region
1055 | getComputation (MkMapOp op) = MkRegion $ prim__mapOpGetComputation op
1056 |
1057 | %foreign (ffi "MapOp_getOperation")
1058 | prim__mapOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1059 |
1060 | export
1061 | Op MapOp where
1062 |   getOperation (MkMapOp op) = getOperationAux op prim__mapOpGetOperation
1063 |
1064 | %foreign (ffi "ReshapeOp_delete")
1065 | prim__deleteReshapeOp : AnyPtr -> PrimIO ()
1066 |
1067 | public export
1068 | data ReshapeOp = MkReshapeOp GCAnyPtr
1069 |
1070 | %foreign (ffi "ReshapeOp_create")
1071 | prim__reshapeOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1072 |
1073 | namespace ReshapeOp
1074 |   export
1075 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io ReshapeOp
1076 |   create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue value _) = do
1077 |     op <- primIO $ prim__reshapeOpCreate builder location resultType value
1078 |     op <- onCollectAny' op (primIO . prim__deleteReshapeOp)
1079 |     pure (MkReshapeOp op)
1080 |
1081 | %foreign (ffi "ReshapeOp_getOperation")
1082 | prim__reshapeOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1083 |
1084 | export
1085 | Op ReshapeOp where
1086 |   getOperation (MkReshapeOp op) = getOperationAux op prim__reshapeOpGetOperation
1087 |
1088 | %foreign (ffi "SelectOp_delete")
1089 | prim__deleteSelectOp : AnyPtr -> PrimIO ()
1090 |
1091 | public export
1092 | data SelectOp = MkSelectOp GCAnyPtr
1093 |
1094 | %foreign (ffi "SelectOp_create")
1095 | prim__selectOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1096 |
1097 | namespace SelectOp
1098 |   export
1099 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> Value -> io SelectOp
1100 |   create
1101 |     (MkOpBuilder builder)
1102 |     (MkLocation location)
1103 |     (MkValue pred _)
1104 |     (MkValue onTrue _)
1105 |     (MkValue onFalse _) = do
1106 |       op <- primIO $ prim__selectOpCreate builder location pred onTrue onFalse
1107 |       op <- onCollectAny' op (primIO . prim__deleteSelectOp)
1108 |       pure (MkSelectOp op)
1109 |
1110 | %foreign (ffi "SelectOp_getOperation")
1111 | prim__selectOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1112 |
1113 | export
1114 | Op SelectOp where
1115 |   getOperation (MkSelectOp op) = getOperationAux op prim__selectOpGetOperation
1116 |
1117 | %foreign (ffi "SortOp_delete")
1118 | prim__deleteSortOp : AnyPtr -> PrimIO ()
1119 |
1120 | public export
1121 | data SortOp = MkSortOp GCAnyPtr
1122 |
1123 | %foreign (ffi "SortOp_create")
1124 | prim__sortOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int64 -> Int -> PrimIO AnyPtr
1125 |
1126 | namespace SortOp
1127 |   export
1128 |   create : HasIO io => OpBuilder -> Location -> Value -> Nat -> Bool -> io SortOp
1129 |   create (MkOpBuilder builder) (MkLocation location) (MkValue value _) dimension isStable = do
1130 |     op <- primIO $ prim__sortOpCreate builder location value (cast dimension) (boolToCInt isStable)
1131 |     op <- onCollectAny' op (primIO . prim__deleteSortOp)
1132 |     pure (MkSortOp op)
1133 |
1134 | %foreign (ffi "SortOp_getComparator")
1135 | prim__sortOpGetComparator : GCAnyPtr -> AnyPtr
1136 |
1137 | export
1138 | getComparator : SortOp -> Region
1139 | getComparator (MkSortOp op) = MkRegion $ prim__sortOpGetComparator op
1140 |
1141 | %foreign (ffi "SortOp_getOperation")
1142 | prim__sortOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1143 |
1144 | export
1145 | Op SortOp where
1146 |   getOperation (MkSortOp op) = getOperationAux op prim__sortOpGetOperation
1147 |
1148 | %foreign (ffi "ReverseOp_delete")
1149 | prim__deleteReverseOp : AnyPtr -> PrimIO ()
1150 |
1151 | public export
1152 | data ReverseOp = MkReverseOp GCAnyPtr
1153 |
1154 | %foreign (ffi "ReverseOp_create")
1155 | prim__reverseOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1156 |
1157 | namespace ReverseOp
1158 |   export
1159 |   create : HasIO io => OpBuilder -> Location -> Value -> List Nat -> io ReverseOp
1160 |   create (MkOpBuilder builder) (MkLocation location) (MkValue operand _) dimensions = do
1161 |     MkArray dimensions dimensionsLen <- fromList $ cast {to = Int64} <$> dimensions
1162 |     op <- primIO $ prim__reverseOpCreate builder location operand dimensions dimensionsLen
1163 |     op <- onCollectAny' op (primIO . prim__deleteReverseOp)
1164 |     pure (MkReverseOp op)
1165 |
1166 | %foreign (ffi "ReverseOp_getOperation")
1167 | prim__reverseOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1168 |
1169 | export
1170 | Op ReverseOp where
1171 |   getOperation (MkReverseOp op) = getOperationAux op prim__reverseOpGetOperation
1172 |
1173 | %foreign (ffi "TransposeOp_delete")
1174 | prim__deleteTransposeOp : AnyPtr -> PrimIO ()
1175 |
1176 | public export
1177 | data TransposeOp = MkTransposeOp GCAnyPtr
1178 |
1179 | %foreign (ffi "TransposeOp_create")
1180 | prim__transposeOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1181 |
1182 | namespace TransposeOp
1183 |   export
1184 |   create : HasIO io => OpBuilder -> Location -> Value -> List Nat -> io TransposeOp
1185 |   create (MkOpBuilder builder) (MkLocation location) (MkValue operand _) permutation = do
1186 |     MkArray permutation permutationLen <- fromList $ cast {to = Int64} <$> permutation
1187 |     op <- primIO $ prim__transposeOpCreate builder location operand permutation permutationLen
1188 |     op <- onCollectAny' op (primIO . prim__deleteTransposeOp)
1189 |     pure (MkTransposeOp op)
1190 |
1191 | %foreign (ffi "TransposeOp_getOperation")
1192 | prim__transposeOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1193 |
1194 | export
1195 | Op TransposeOp where
1196 |   getOperation (MkTransposeOp op) = getOperationAux op prim__transposeOpGetOperation
1197 |
1198 | %foreign (ffi "TriangularSolveOp_delete")
1199 | prim__deleteTriangularSolveOp : AnyPtr -> PrimIO ()
1200 |
1201 | public export
1202 | data TriangularSolveOp = MkTriangularSolveOp GCAnyPtr
1203 |
1204 | %foreign (ffi "TriangularSolveOp_create")
1205 | prim__triangularSolveOpCreate :
1206 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> Int -> Int -> Int -> PrimIO AnyPtr
1207 |
1208 | namespace TriangularSolveOp
1209 |   export
1210 |   create :
1211 |     HasIO io =>
1212 |     OpBuilder ->
1213 |     Location ->
1214 |     Value ->
1215 |     Value ->
1216 |     Bool ->
1217 |     Bool ->
1218 |     Bool ->
1219 |     Transpose ->
1220 |     io TriangularSolveOp
1221 |   create
1222 |     (MkOpBuilder builder)
1223 |     (MkLocation location)
1224 |     (MkValue a _)
1225 |     (MkValue b _)
1226 |     leftSide
1227 |     lower
1228 |     unitDiagonal
1229 |     transposeA = do
1230 |       let leftSide = boolToCInt leftSide
1231 |           lower = boolToCInt lower
1232 |           unitDiagonal = boolToCInt unitDiagonal
1233 |           transposeA = cast transposeA
1234 |       op <- primIO $ prim__triangularSolveOpCreate
1235 |         builder location a b leftSide lower unitDiagonal transposeA
1236 |       op <- onCollectAny' op (primIO . prim__deleteTriangularSolveOp)
1237 |       pure (MkTriangularSolveOp op)
1238 |
1239 | %foreign (ffi "TriangularSolveOp_getOperation")
1240 | prim__triangularSolveOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1241 |
1242 | export
1243 | Op TriangularSolveOp where
1244 |   getOperation (MkTriangularSolveOp op) = getOperationAux op prim__triangularSolveOpGetOperation
1245 |
1246 | %foreign (ffi "StableHLO_ReturnOp_delete")
1247 | prim__deleteReturnOp : AnyPtr -> PrimIO ()
1248 |
1249 | public export
1250 | data ReturnOp = MkReturnOp GCAnyPtr
1251 |
1252 | %foreign (ffi "StableHLO_ReturnOp_create")
1253 | prim__returnOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1254 |
1255 | namespace ReturnOp
1256 |   export
1257 |   create : HasIO io => OpBuilder -> Location -> ValueRange -> io ReturnOp
1258 |   create (MkOpBuilder builder) (MkLocation location) (MkValueRange results) = do
1259 |     op <- primIO $ prim__returnOpCreate builder location results
1260 |     op <- onCollectAny' op (primIO . prim__deleteReturnOp)
1261 |     pure (MkReturnOp op)
1262 |
1263 | %foreign (ffi "StableHLO_ReturnOp_getOperation")
1264 | prim__returnOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1265 |
1266 | export
1267 | Op ReturnOp where
1268 |   getOperation (MkReturnOp op) = getOperationAux op prim__returnOpGetOperation
1269 |
1270 | %foreign (ffi "RngBitGeneratorOp_delete")
1271 | prim__deleteRngBitGeneratorOp : AnyPtr -> PrimIO ()
1272 |
1273 | public export
1274 | data RngBitGeneratorOp = MkRngBitGeneratorOp GCAnyPtr
1275 |
1276 | %foreign (ffi "RngBitGeneratorOp_create")
1277 | prim__rngBitGeneratorOpCreate :
1278 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> GCAnyPtr -> PrimIO AnyPtr
1279 |
1280 | namespace RngBitGeneratorOp
1281 |   export
1282 |   create :
1283 |     HasIO io =>
1284 |     OpBuilder ->
1285 |     Location ->
1286 |     Type_ ->
1287 |     Type_ ->
1288 |     RngAlgorithm ->
1289 |     Value ->
1290 |     io RngBitGeneratorOp
1291 |   create
1292 |     (MkOpBuilder builder)
1293 |     (MkLocation location)
1294 |     (MkType_ outputState _)
1295 |     (MkType_ output _)
1296 |     rngAlgorithm
1297 |     (MkValue state _) = do
1298 |       op <- primIO $ prim__rngBitGeneratorOpCreate
1299 |         builder location outputState output (cast rngAlgorithm) state
1300 |       op <- onCollectAny' op (primIO . prim__deleteRngBitGeneratorOp)
1301 |       pure (MkRngBitGeneratorOp op)
1302 |
1303 | %foreign (ffi "RngBitGeneratorOp_getOperation")
1304 | prim__rngBitGeneratorOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1305 |
1306 | export
1307 | Op RngBitGeneratorOp where
1308 |   getOperation (MkRngBitGeneratorOp op) = getOperationAux op prim__rngBitGeneratorOpGetOperation
1309 |