mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 21:43:02 +12:00
51 lines
1.8 KiB
Elixir
51 lines
1.8 KiB
Elixir
cond do
|
|
Application.compile_env(:ash, :sat_testing) ->
|
|
defmodule Ash.SatSolver.Implementation do
|
|
@moduledoc false
|
|
def solve_expression(cnf) do
|
|
Module.concat([System.get_env("SAT_SOLVER") || "Picosat"]).solve(cnf)
|
|
end
|
|
end
|
|
|
|
Code.ensure_loaded?(Picosat) ->
|
|
defmodule Ash.SatSolver.Implementation do
|
|
@moduledoc false
|
|
def solve_expression(cnf) do
|
|
Picosat.solve(cnf)
|
|
end
|
|
end
|
|
|
|
Code.ensure_loaded?(SimpleSat) ->
|
|
defmodule Ash.SatSolver.Implementation do
|
|
@moduledoc false
|
|
def solve_expression(cnf) do
|
|
SimpleSat.solve(cnf)
|
|
end
|
|
end
|
|
|
|
true ->
|
|
defmodule Ash.SatSolver.Implementation do
|
|
@moduledoc false
|
|
def solve_expression(_cnf) do
|
|
if Code.ensure_loaded?(Picosat) || Code.ensure_loaded?(SimpleSat) do
|
|
raise """
|
|
No SAT solver available, although one was loaded. This typically means you need to run `mix deps.compile ash --force`
|
|
|
|
If that doesn't work, please ensure that one of the following dependencies is present in your application to use sat solver features:
|
|
|
|
* `:picosat_elixir` (recommended) - A NIF wrapper around the PicoSAT SAT solver. Fast, production ready, battle tested.
|
|
* `:simple_sat` - A pure Elixir SAT solver. Slower than PicoSAT, but no NIF dependency.
|
|
"""
|
|
else
|
|
raise """
|
|
No SAT solver available.
|
|
|
|
Please add one of the following dependencies to your application to use sat solver features:
|
|
|
|
* `:picosat_elixir` (recommended) - A NIF wrapper around the PicoSAT SAT solver. Fast, production ready, battle tested.
|
|
* `:simple_sat` - A pure Elixir SAT solver. Slower than PicoSAT, but no NIF dependency.
|
|
"""
|
|
end
|
|
end
|
|
end
|
|
end
|