Repository: gradsflow/gradsflow-automl (language: python)

Issue:
Add a conda installation option
I believe, adding a `conda` installation option for `gradsflow` will be helpful for growth and adoption of the library. I have started the work on it already. Once the :bulb: [**PR**](https://github.com/conda-forge/staged-recipes/pull/17215) gets approved and merged, you will have gradsflow on conda-forge.

```sh
conda install -c conda-forge gradsflow
```
## :no_entry: :fire: Roadblock to conda-forge packaging
However, there seems to be a problem: it appears that this library is somewhat tightly coupled with `comet_ml` (which has a proprietary license -- NOT OpenSource). If you could work on making this a weak coupling, or better yet make `comet_ml` optional (even for tests), that would allow us to make gradsflow available on conda-forge. 



Discussion / hints:
cc: @aniketmaurya 
Thanks for the Great suggestion @sugatoray 😄 
Would you like to work on making `comet_ml` optional?
> Would you like to work on making comet_ml optional?

@aniketmaurya Although, I would like to, I may not have time to do that now. So, if you, or someone else wants to work on it, please go ahead.
No issues! Let me prioritize this.

Fix patch:
diff --git a/examples/src/models/hello_world.py b/examples/src/models/hello_world.py
index 347f0cf7..40bfcdc0 100644
--- a/examples/src/models/hello_world.py
+++ b/examples/src/models/hello_world.py
@@ -44,7 +44,7 @@
     ),
     ModelCheckpoint(),
     EmissionTrackerCallback(),
-    CometCallback(offline=True),
+    # CometCallback(offline=True),
 ]
 
 if __name__ == "__main__":


Test patch:
diff --git a/tests/callbacks/test_logger.py b/tests/callbacks/test_logger.py
index ae5ae350..c22529b6 100644
--- a/tests/callbacks/test_logger.py
+++ b/tests/callbacks/test_logger.py
@@ -17,8 +17,10 @@
 import pytest
 
 from gradsflow import AutoDataset
+from gradsflow.callbacks import EmissionTrackerCallback
 from gradsflow.callbacks.logger import CometCallback, CSVLogger
 from gradsflow.data.image import image_dataset_from_directory
+from gradsflow.utility.imports import is_installed
 from tests.dummies import DummyModel
 
 data_dir = Path.cwd()
@@ -26,21 +28,35 @@
 data = image_dataset_from_directory(folder, transform=True, ray_data=False)
 
 
-def test_csv_logger():
+@pytest.fixture
+def dummy_model():
+    return DummyModel()
+
+
+@pytest.fixture
+def auto_dataset():
+    return AutoDataset(train_dataloader=data.dataloader, val_dataloader=data.dataloader)
+
+
+def test_csv_logger(dummy_model, auto_dataset):
     csv_logger = CSVLogger(filename="test_csv_logger.csv")
-    autodata = AutoDataset(train_dataloader=data.dataloader, val_dataloader=data.dataloader)
-    model = DummyModel()
-    model.compile()
-    model.fit(autodata, callbacks=csv_logger)
+    dummy_model.compile()
+    dummy_model.fit(auto_dataset, callbacks=csv_logger)
     assert os.path.isfile("test_csv_logger.csv")
 
 
-def test_logger():
+@pytest.mark.skipif(not is_installed("comet_ml"), reason="requires `comet_ml` installed")
+def test_comet(dummy_model, auto_dataset):
     with pytest.raises(ValueError):
         CometCallback()
 
     comet = CometCallback(offline=True)
-    autodata = AutoDataset(train_dataloader=data.dataloader, val_dataloader=data.dataloader)
-    model = DummyModel()
-    model.compile()
-    model.fit(autodata, callbacks=[comet])
+    dummy_model.compile()
+    dummy_model.fit(auto_dataset, callbacks=[comet])
+
+
+@pytest.mark.skipif(not is_installed("codecarbon"), reason="requires `codecarbon` installed")
+def test_emission_tracker(dummy_model, auto_dataset):
+    emission_tracker = EmissionTrackerCallback()
+    dummy_model.compile()
+    dummy_model.fit(auto_dataset, callbacks=[emission_tracker])
diff --git a/tests/models/test_model.py b/tests/models/test_model.py
index 11fcf8ab..4a51d17e 100644
--- a/tests/models/test_model.py
+++ b/tests/models/test_model.py
@@ -15,7 +15,7 @@
 import timm
 import torch
 
-from gradsflow.callbacks import EmissionTrackerCallback, ModelCheckpoint
+from gradsflow.callbacks import ModelCheckpoint
 from gradsflow.data import AutoDataset
 from gradsflow.data.image import get_fake_data
 from gradsflow.models.model import Model
@@ -52,7 +52,6 @@ def test_fit():
 
     autodataset2 = AutoDataset(train_data.dataloader, num_classes=num_classes)
     model.TEST = False
-    emission_cb = EmissionTrackerCallback()
     ckpt_cb = ModelCheckpoint(save_extra=False)
     tracker2 = model.fit(
         autodataset2,
@@ -60,7 +59,7 @@ def test_fit():
         steps_per_epoch=1,
         show_progress=False,
         resume=False,
-        callbacks=[emission_cb, ckpt_cb],
+        callbacks=[ckpt_cb],
     )
     assert isinstance(tracker2, Tracker)