defmodule Evision.SmartCell do @moduledoc """ Evision SmartCell Collection To use smartcell in Livebook, `:kino >= 0.7` is required ```elixir defp deps do [ # ... {:kino, "~> 0.7"}, # ... ] end ``` """ @doc """ Get all available smartcells. To register smartcells to `:kino`, please use `Evision.SmartCell.register_smartcells/1`. """ @spec available_smartcells :: [module()] def available_smartcells do [ Evision.SmartCell.ML.TrainData, Evision.SmartCell.ML.SVM, Evision.SmartCell.ML.DTrees, Evision.SmartCell.ML.RTrees, Evision.SmartCell.Zoo ] end @compile {:no_warn_undefined, Kino.SmartCell} @doc """ Register Smartcells It will register all available smartcells by default. To see all available smartcells, please use `Evision.SmartCell.available_smartcells/0`. """ @spec register_smartcells([module()] | module()) :: :ok def register_smartcells(smartcells \\ available_smartcells()) def register_smartcells(smartcells) when is_list(smartcells) do if Code.ensure_loaded?(Kino.SmartCell) do Enum.each(smartcells, fn sc -> if Code.ensure_loaded?(sc) do Kino.SmartCell.register(sc) else raise RuntimeError, "Cannot register smartcell: #{inspect(sc)}" end end) else raise RuntimeError, """ `:kino >= 0.7` is required to use smartcells in Livebook. Please add `{:kino, "~> 0.7"}` to the dependency list. Note that `Evision.SmartCell.Zoo` has a another optional dependency, `{:progress_bar, "~> 2.0}`, which is used for displaying the model download progress. """ end end def register_smartcells(smartcell) when is_atom(smartcell) do register_smartcells([smartcell]) end end