### Install fcd_torch from source Source: https://github.com/insilicomedicine/fcd_torch/blob/master/README.md Installs the fcd_torch library by cloning the repository and running the setup script. Requires RDKit to be installed first. ```bash git clone https://github.com/insilicomedicine/fcd_torch.git cd fcd_torch python setup.py install ``` -------------------------------- ### Precalculate Statistics with fcd_torch.precalc() Source: https://context7.com/insilicomedicine/fcd_torch/llms.txt Precalculates the mean and covariance matrix of ChemNet activations for a reference set of molecules using the `precalc` method. This optimizes comparisons when evaluating multiple generated sets against the same reference data. ```python from fcd_torch import FCD fcd = FCD(device='cpu', n_jobs=4) # Reference dataset (compute once) reference_smiles = [ 'COc1cccc(NC(=O)Cc2coc3ccc(OC)cc23)c1', 'Cc1noc(C)c1CN(C)C(=O)Nc1cc(F)cc(F)c1', 'Oc1ccccc1-c1cccc2cnccc12', 'Cc1nc(NCc2ccccc2)no1-c1ccccc1', 'CC(C)Cc1ccc(C(C)C(=O)O)cc1' ] # Precalculate reference statistics (do this once) pref = fcd.precalc(reference_smiles) print(f"Reference mu shape: {pref['mu'].shape}") # (512,) print(f"Reference sigma shape: {pref['sigma'].shape}") # (512, 512) # Evaluate multiple generated sets efficiently generated_sets = [ ['CNC', 'CCCP', 'CCO', 'CCCO', 'CCCCO'], ['c1ccccc1', 'c1ccncc1', 'c1ccc2ccccc2c1', 'CCN', 'CCNC'], ['CC(=O)O', 'CC(=O)N', 'CC(=O)Nc1ccccc1', 'CCCC', 'CCCCC'] ] for i, gen_smiles in enumerate(generated_sets): pgen = fcd.precalc(gen_smiles) distance = fcd(pref=pref, pgen=pgen) print(f"Generated set {i+1} FCD: {distance:.4f}") ``` -------------------------------- ### Compute FCD Distance with fcd_torch Source: https://context7.com/insilicomedicine/fcd_torch/llms.txt Initializes the FCD class and computes the Fréchet ChemNet Distance between reference and generated sets of molecules represented as SMILES strings. Supports CPU and GPU computation with configurable batch sizes and job counts. ```python from fcd_torch import FCD # Initialize FCD with default settings (CPU) fcd = FCD(device='cpu', n_jobs=1, batch_size=512) # Reference molecules (e.g., from a training set) reference_smiles = [ 'COc1cccc(NC(=O)Cc2coc3ccc(OC)cc23)c1', 'Cc1noc(C)c1CN(C)C(=O)Nc1cc(F)cc(F)c1', 'Oc1ccccc1-c1cccc2cnccc12', 'Cc1nc(NCc2ccccc2)no1-c1ccccc1' ] # Generated molecules (e.g., from a generative model) generated_smiles = [ 'Oc1ccccc1-c1cccc2cnccc12', 'Cc1noc(C)c1CN(C)C(=O)Nc1cc(F)cc(F)c1', 'CNC', 'CCCP' ] # Compute FCD directly (lower values indicate more similar distributions) distance = fcd(reference_smiles, generated_smiles) print(f"FCD Score: {distance:.4f}") # Output: FCD Score: 52.8313 # For GPU acceleration with multiple workers fcd_gpu = FCD(device='cuda:0', n_jobs=8, batch_size=512) distance_gpu = fcd_gpu(reference_smiles, generated_smiles) print(f"FCD Score (GPU): {distance_gpu:.4f}") ``` -------------------------------- ### Calculate FCD with precalculated statistics (PyTorch) Source: https://github.com/insilicomedicine/fcd_torch/blob/master/README.md Calculates the Fréchet ChemNet Distance using precalculated statistics for one of the SMILES lists. This is useful for reusing statistics across multiple calculations, improving efficiency. ```python from fcd_torch import FCD fcd = FCD(device='cuda:0', n_jobs=8) smiles_list1 = ['COc1cccc(NC(=O)Cc2coc3ccc(OC)cc23)c1', 'Cc1noc(C)c1CN(C)C(=O)Nc1cc(F)cc(F)c1'] smiles_list2 = ['Oc1ccccc1-c1cccc2cnccc12', 'Cc1noc(C)c1CN(C)C(=O)Nc1cc(F)cc(F)c1'] pgen = fcd.precalc(smiles_list2) fcd(smiles_list1, pgen=pgen) ``` -------------------------------- ### Extract ChemNet Activations with fcd_torch.get_predictions() Source: https://context7.com/insilicomedicine/fcd_torch/llms.txt Extracts the raw 512-dimensional ChemNet activation vectors for a given list of SMILES strings using the `get_predictions` method. These activations can be used for custom analyses or alternative similarity calculations. ```python from fcd_torch import FCD import numpy as np fcd = FCD(device='cpu', n_jobs=2) smiles_list = [ 'COc1cccc(NC(=O)Cc2coc3ccc(OC)cc23)c1', 'Cc1noc(C)c1CN(C)C(=O)Nc1cc(F)cc(F)c1', 'Oc1ccccc1-c1cccc2cnccc12' ] # Get ChemNet activations (512-dimensional feature vectors) activations = fcd.get_predictions(smiles_list) print(f"Activations shape: {activations.shape}") # (3, 512) print(f"Activation dtype: {activations.dtype}") # float32 # Compute pairwise cosine similarities from numpy.linalg import norm for i in range(len(smiles_list)): for j in range(i+1, len(smiles_list)): cos_sim = np.dot(activations[i], activations[j]) / (norm(activations[i]) * norm(activations[j])) print(f"Cosine similarity [{i}] vs [{j}]: {cos_sim:.4f}") # Handle empty input gracefully empty_activations = fcd.get_predictions([]) print(f"Empty activations shape: {empty_activations.shape}") # (0, 512) ``` -------------------------------- ### Calculate Fréchet Distance Between Gaussians using Python Source: https://context7.com/insilicomedicine/fcd_torch/llms.txt Computes the Fréchet distance between two multivariate Gaussians defined by their means and covariance matrices. This function is the core of the FCD metric and can be used independently. It takes the means (mu1, mu2) and covariance matrices (sigma1, sigma2) as input. ```python from fcd_torch import FCD, calculate_frechet_distance import numpy as np fcd = FCD(device='cpu') # Get statistics for two molecule sets smiles_set1 = [ 'COc1cccc(NC(=O)Cc2coc3ccc(OC)cc23)c1', 'Cc1noc(C)c1CN(C)C(=O)Nc1cc(F)cc(F)c1' ] smiles_set2 = [ 'Oc1ccccc1-c1cccc2cnccc12', 'Cc1noc(C)c1CN(C)C(=O)Nc1cc(F)cc(F)c1', 'CNC', 'CCCP', 'Cc1nc(NCc2ccccc2)no1-c1ccccc1' ] stats1 = fcd.precalc(smiles_set1) stats2 = fcd.precalc(smiles_set2) # Compute Fréchet distance directly distance = calculate_frechet_distance( mu1=stats1['mu'], sigma1=stats1['sigma'], mu2=stats2['mu'], sigma2=stats2['sigma'] ) print(f"Fréchet Distance: {distance:.4f}") # Output: Fréchet Distance: 52.8313 # Verify it matches the FCD class output fcd_distance = fcd(smiles_set1, smiles_set2) print(f"FCD class output: {fcd_distance:.4f}") assert np.isclose(distance, fcd_distance, rtol=1e-5) ``` -------------------------------- ### Calculate FCD with direct SMILES lists (PyTorch) Source: https://github.com/insilicomedicine/fcd_torch/blob/master/README.md Calculates the Fréchet ChemNet Distance between two lists of SMILES strings using the fcd_torch library. It initializes the FCD object with specified device and number of jobs, then computes the distance. ```python from fcd_torch import FCD fcd = FCD(device='cuda:0', n_jobs=8) smiles_list1 = ['COc1cccc(NC(=O)Cc2coc3ccc(OC)cc23)c1', 'Cc1noc(C)c1CN(C)C(=O)Nc1cc(F)cc(F)c1'] smiles_list2 = ['Oc1ccccc1-c1cccc2cnccc12', 'Cc1noc(C)c1CN(C)C(=O)Nc1cc(F)cc(F)c1'] fcd(smiles_list1, smiles_list2) ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.