import unittest from unittest.mock import patch import pandas as pd import torch from utils import pipeline class FakeEmbeddingModel: def __init__(self, vectors): self.vectors = vectors self.calls = [] def __call__(self, text, pooling='mean'): self.calls.append((text, pooling)) return torch.tensor(self.vectors[text]) class PipelineFactoryTest(unittest.TestCase): def test_originality_uses_embedding_factory(self): model = FakeEmbeddingModel( { 'prompt': [1.0, 0.0], 'response': [0.0, 1.0], } ) df = pd.DataFrame({'prompt': ['prompt'], 'response': ['response']}) with patch.object(pipeline, 'get_embedding_model', return_value=model) as factory: result = pipeline.p0_originality(df, 'fake-model', 'mean') factory.assert_called_once_with('fake-model') self.assertAlmostEqual(result.loc[0, 'originality'], 1.0) self.assertEqual(model.calls, [('prompt', 'mean'), ('response', 'mean')]) def test_flexibility_uses_embedding_factory(self): model = FakeEmbeddingModel( { 'p': [1.0, 0.0], 'a': [1.0, 0.0], 'b': [0.0, 1.0], } ) df = pd.DataFrame( { 'id': [1, 1, 1], 'prompt': ['p', 'p', 'p'], 'response': ['a', 'b', 'a'], } ) with patch.object(pipeline, 'get_embedding_model', return_value=model) as factory: result = pipeline.p1_flexibility(df, 'fake-model', 'cls') factory.assert_called_once_with('fake-model') self.assertEqual(len(result), 1) self.assertAlmostEqual(result.loc[0, 'flexibility'], 2.0) self.assertEqual(model.calls, [('a', 'cls'), ('b', 'cls'), ('a', 'cls')]) if __name__ == '__main__': unittest.main()