From e982f653f8be957cbd06f0faffd0818ee703a2d6 Mon Sep 17 00:00:00 2001 From: cjgo Date: Thu, 13 Jun 2024 17:49:36 -0500 Subject: [PATCH] fix trait phenotype bug --- nbs/marl.ipynb | 618 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 514 insertions(+), 104 deletions(-) diff --git a/nbs/marl.ipynb b/nbs/marl.ipynb index c3c1b07..4a94029 100644 --- a/nbs/marl.ipynb +++ b/nbs/marl.ipynb @@ -2,16 +2,25 @@ "cells": [ { "cell_type": "code", - "execution_count": null, - "id": "6d33fb6a", + "execution_count": 18, + "id": "8d6b4579", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (1120692752.py, line 196)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m Cell \u001b[0;32mIn[18], line 196\u001b[0;36m\u001b[0m\n\u001b[0;31m assert\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "from fastcore.basics import patch\n", - "import uuid\n", - "\n", + " \n", + " \n", + " \n", "class ChewC:\n", " def __init___(self):\n", " self.trait = None\n", @@ -38,7 +47,6 @@ " founder_scores = np.array([random_effects @ x.haplotype for x in population.individuals])\n", " founder_mean, founder_var = founder_scores.mean(), founder_scores.var()\n", " #scale the random effects to match our target variance\n", - "# import pdb;pdb.set_trace()\n", " scaling_factors = np.sqrt(self.target_variance / founder_var)\n", " random_effects *= scaling_factors\n", " self.effects = random_effects\n", @@ -52,30 +60,19 @@ " return np.sum(np.array([self @ ind + self.intercept for ind in other.individuals]), axis=(1,2))\n", " \n", "class Population:\n", - " def __init__(self, genome, size=None):\n", + " def __init__(self, genome, size):\n", " self.genome = genome\n", + " self.size = size\n", " self.ploidy = 2\n", - " if size:\n", - " self.size = size\n", - " self.individuals = self._create_initial_population()\n", - " else:\n", - " pass\n", + " self.individuals = self._create_initial_population()\n", + " self.chewc = None\n", "\n", " def _create_initial_population(self):\n", " \"\"\"Create an initial population of founder individuals.\"\"\"\n", - " return [Individual(self.genome) for _ in range(self.size)]\n", + " return [Individual(self.genome, chewc=self) for _ in range(self.size)]\n", " \n", " def get_haplo(self):\n", " return np.array([x.haplotype for x in self.individuals])\n", - " \n", - " def get_pheno(self):\n", - " return np.array([x.fitness for x in self.individuals])\n", - " \n", - " def trial(self, h2):\n", - " [x.phenotype(h2) for x in self.individuals]\n", - "\n", - " def __getitem__(self, index):\n", - " return self.individuals[index]\n", "\n", " def __repr__(self):\n", " return f'Population of size: {self.size}'\n", @@ -87,23 +84,24 @@ " self.target_variance = target_variance\n", " \n", " #sample initial random effects\n", - " initial_effects = np.random.randn(g.n_chr * g.n_loci)\n", - " initial_effects -= initial_effects.mean()\n", + " random_effects = np.random.randn(g.n_chr, g.n_loci)\n", " #calculate the founder_population mean and var given these effects\n", - " founder_scores = np.einsum('i,kij->k',initial_effects, np.sum(population.get_haplo(),axis=1))\n", + " \n", + " founder_scores = np.einsum('ij,kij->k',random_effects, np.sum(population.get_haplo(),axis=1))\n", " founder_mean, founder_var = founder_scores.mean(), founder_scores.var()\n", + " #scale the random effects to match our target variance\n", " scaling_factors = np.sqrt(self.target_variance / founder_var)\n", - " initial_effects *= scaling_factors\n", - " scaled_effects = initial_effects # ADDS A FIXED EFFECT SOMEHOW????\n", - " self.effects = scaled_effects\n", + " random_effects *= scaling_factors\n", + " self.effects = random_effects\n", + " \n", " self.intercept = target_mean - founder_mean\n", - "\n", + " \n", " def __matmul__(self,other):\n", " if isinstance(other,Individual):\n", - "# print(f' intercept {self.intercept}')\n", - " return self.effects * other.haplotype \n", - " else:\n", - " print('ffff')\n", + " return self.effects * other.haplotype\n", + " elif isinstance(other, Population):\n", + " return np.sum(np.array([self @ ind for ind in other.individuals]), axis=(1,2,3))\n", + " \n", "class Individual:\n", " def __init__(self, genome,haplotype=None, mother = None, father = None, descendants = 0, source='founder', chewc=None):\n", " self.genome = genome # must be Genome class\n", @@ -111,19 +109,26 @@ " self.source = source # 'founder', 'cross', 'self', 'dh'\n", " self.descendents = []\n", " self.fitness = 0\n", - " self.mother, self.father = mother, father\n", "\n", + " \n", " # Logic for setting haplotype,mother,father\n", " if self.source == 'founder':\n", " self.haplotype= self._generate_random_haplotype()\n", - " else:\n", + " self.mother = None\n", + " self.father = None\n", + " elif self.source == 'cross':\n", " self.haplotype = haplotype\n", - " \n", + " self.mother = mother\n", + " self.father = father\n", + " elif self.source == 'dh' or self.source == 'self':\n", + " self.haplotype = haplotype\n", + " self.mother = mother\n", + " self.father = mother\n", + " else:\n", + " raise ValueError(f\"Invalid source: {source}\")\n", + " \n", " def __repr__(self):\n", " return f'Individual with haplotype shape: {self.haplotype.shape}'\n", - " \n", - " def make_id(self):self.id = uuid.uuid4().hex\n", - "\n", "\n", " def _generate_random_haplotype(self):\n", " \"\"\"Generate a random haplotype for the individual.\"\"\"\n", @@ -131,94 +136,487 @@ " \n", " def __mul__(self, partner):\n", " if isinstance(partner,Individual):\n", - " source = 'cross'\n", - " mother, father = self.gamete(), partner.gamete()\n", - "\n", - " def phenotype(self, h2):\n", - "# import pdb ; pdb.set_trace()\n", - " breeding_value = chewc.trait @ self\n", - " genetic_variance = np.var(breeding_value, ddof=1)\n", - " environmental_variance = (1 - h2) / h2 * genetic_variance\n", - " phenotype_value = breeding_value + np.random.normal(0, np.sqrt(environmental_variance))\n", - " self.fitness = np.sum(phenotype_value)\n", - "\n", + " priint('pair')\n", + " \n", " \n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from fastcore.basics import patch\n", - "\n", + " def gametes(self):\n", + " haplotypes = self.haplotype\n", + " def shuffle_chr(chromosome_pair):\n", + " \"\"\"\n", + " Perform crossover on a pair of chromosomes.\n", "\n", - "# to do move this in another module\n", - "@patch\n", - "def gamete(self:Individual):\n", - " haplotypes = self.haplotype\n", - " def shuffle_chr(chromosome_pair):\n", - " \"\"\"\n", - " Perform crossover on a pair of chromosomes.\n", + " Parameters:\n", + " chromosome_pair (list): A list of two equal length lists representing chromosomes.\n", "\n", - " Parameters:\n", - " chromosome_pair (list): A list of two equal length lists representing chromosomes.\n", + " Returns:\n", + " list: A new chromosome formed by shuffling the given chromosome pair.\n", + " \"\"\"\n", + " # Ensure the chromosome pair contains two chromosomes of equal length\n", + " assert len(chromosome_pair) == 2\n", + " assert len(chromosome_pair[0]) == len(chromosome_pair[1])\n", "\n", - " Returns:\n", - " list: A new chromosome formed by shuffling the given chromosome pair.\n", - " \"\"\"\n", - " # Ensure the chromosome pair contains two chromosomes of equal length\n", - " assert len(chromosome_pair) == 2\n", - " assert len(chromosome_pair[0]) == len(chromosome_pair[1])\n", + " # Number of crossover points, sampled from a Poisson distribution with λ=1.3\n", + " n_crossover = np.random.poisson(1.3)\n", "\n", - " # Number of crossover points, sampled from a Poisson distribution with λ=1.3\n", - " n_crossover = np.random.poisson(1.3)\n", + " # Determine crossover locations, sampled without replacement from chromosome length\n", + " chromosome_length = len(chromosome_pair[0])\n", + " crossover_locs = np.sort(np.random.choice(chromosome_length, n_crossover, replace=False))\n", "\n", - " # Determine crossover locations, sampled without replacement from chromosome length\n", - " chromosome_length = len(chromosome_pair[0])\n", - " crossover_locs = np.sort(np.random.choice(chromosome_length, n_crossover, replace=False))\n", + " # Initialize the new chromosome and set the current chromosome to the first one\n", + " new_chromosome = []\n", + " current_chr = 0\n", "\n", - " # Initialize the new chromosome and set the current chromosome to the first one\n", - " new_chromosome = []\n", - " current_chr = 0\n", + " # Perform crossover by alternating segments between the two chromosomes\n", + " last_loc = 0\n", + " for loc in crossover_locs:\n", + " new_chromosome.extend(chromosome_pair[current_chr][last_loc:loc])\n", + " current_chr = 1 - current_chr # Switch to the other chromosome\n", + " last_loc = loc\n", "\n", - " # Perform crossover by alternating segments between the two chromosomes\n", - " last_loc = 0\n", - " for loc in crossover_locs:\n", - " new_chromosome.extend(chromosome_pair[current_chr][last_loc:loc])\n", - " current_chr = 1 - current_chr # Switch to the other chromosome\n", - " last_loc = loc\n", + " # Append the remaining segment\n", + " new_chromosome.extend(chromosome_pair[current_chr][last_loc:])\n", + " return np.array(new_chromosome)\n", "\n", - " # Append the remaining segment\n", - " new_chromosome.extend(chromosome_pair[current_chr][last_loc:])\n", - " return np.array(new_chromosome)\n", "\n", + " # Initialize an empty array to store the shuffled chromosomes\n", + " shuffled_haplotypes = np.zeros_like(haplotypes)\n", + " ploidy, n_chr, n_loci = chewc.genome.shape\n", + " # Iterate over each chromosome and apply the shuffle_chr function\n", + " for i in range(haplotypes.shape[1]): # Iterate over the chromosomes\n", + " chromosome_pair = haplotypes[:, i, :] # Extract the chromosome pair (2, 77)\n", + " shuffled_chromosome = shuffle_chr(chromosome_pair) # Shuffle the chromosome pair \n", + " shuffled_haplotypes[:, i, :] = np.array(shuffled_chromosome).reshape(1, n_loci) # Store the shuffled chromosome\n", + " return shuffled_haplotypes[0,:,:]\n", "\n", - " # Initialize an empty array to store the shuffled chromosomes\n", - " shuffled_haplotypes = np.zeros_like(haplotypes)\n", - " ploidy, n_chr, n_loci = chewc.genome.shape\n", - " # Iterate over each chromosome and apply the shuffle_chr function\n", - " for i in range(haplotypes.shape[1]): # Iterate over the chromosomes\n", - " chromosome_pair = haplotypes[:, i, :] # Extract the chromosome pair (2, 77)\n", - " shuffled_chromosome = shuffle_chr(chromosome_pair) # Shuffle the chromosome pair \n", - " shuffled_haplotypes[:, i, :] = np.array(shuffled_chromosome).reshape(1, n_loci) # Store the shuffled chromosome\n", - " return shuffled_haplotypes[0,:,:]\n", - "\n", + " def phenotype(self, h2):\n", + " breeding_value = chewc.trait @ self\n", + " print(breeding_value.shape)\n", + " genetic_variance = np.var(breeding_value, ddof=1)\n", + " return breeding_value\n", + " \n", " \n", "\n", - "#Define the Simulation Parameters\n", - "g = Genome(1, 1000)\n", - "population = Population(g, size=1000)\n", + " # Example usage\n", + "g = Genome(3, 77)\n", + "#make population with 100 founder individuals\n", + "population = Population(g, size=100)\n", + "#make a trait\n", "trait = Trait(g, population,0,1)\n", + "# how to do trait @ population to get the trait values for a population?\n", "\n", - "#Plug them into ChewC\n", "chewc = ChewC()\n", "chewc.trait = trait\n", "chewc.population = population\n", "chewc.genome = g\n", + "trait @ chewc.population\n", + "#check phenotype 1 == the breeding value\n", "\n", - "chewc.population.trial(h2=1)" + "assert " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "830b944e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(2, 3, 77)\n" + ] + }, + { + "data": { + "text/plain": [ + "array([[[ True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, + True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True],\n", + " [ True, True, True, True, True, True, True, True, True,\n", + " + True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True],\n", + " [ True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True]],\n", + "\n", + " [[ True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True],\n", + " [ True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True],\n", + " [ True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True, True, True, True, True,\n", + " True, True, True, True, True]]])" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chewc.population.individuals[0].phenotype(1) ==chewc.trait @ chewc.population.individuals[0]" ] }, + { + "cell_type": "code", + "execution_count": 20, + "id": "666468ef", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[-2.68120494e-02, 0.00000000e+00, 0.00000000e+00,\n", + " 4.48314843e-02, -0.00000000e+00, -1.40263682e-03,\n", + " -2.85083371e-02, 1.16716842e-01, -9.89938278e-02,\n", + " 0.00000000e+00, -6.82592449e-02, 2.83807666e-02,\n", + " 3.86640320e-02, -0.00000000e+00, -1.32702802e-01,\n", + " 0.00000000e+00, 0.00000000e+00, -4.92034027e-02,\n", + " 0.00000000e+00, -0.00000000e+00, -1.03527434e-02,\n", + " -0.00000000e+00, 0.00000000e+00, 2.41044304e-01,\n", + " -0.00000000e+00, 0.00000000e+00, 9.56769319e-02,\n", + " 0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n", + " 0.00000000e+00, -0.00000000e+00, 0.00000000e+00,\n", + " 7.26828949e-02, -4.26477243e-02, 0.00000000e+00,\n", + " 1.20369348e-01, 0.00000000e+00, 0.00000000e+00,\n", + " 3.30028538e-02, -1.73430499e-04, -1.17729358e-01,\n", + " 0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n", + " -0.00000000e+00, -1.57723841e-01, 0.00000000e+00,\n", + " -6.02946215e-02, -0.00000000e+00, -0.00000000e+00,\n", + " -0.00000000e+00, 5.69298713e-02, 1.30096779e-01,\n", + " 1.23684330e-01, 0.00000000e+00, -0.00000000e+00,\n", + " 1.67586190e-01, -0.00000000e+00, -0.00000000e+00,\n", + " -0.00000000e+00, 7.30072251e-03, -0.00000000e+00,\n", + " -9.56408538e-02, -0.00000000e+00, -1.72019611e-01,\n", + " 0.00000000e+00, -4.55028808e-02, 0.00000000e+00,\n", + " 2.51351516e-02, -3.71521046e-02, -0.00000000e+00,\n", + " -0.00000000e+00, 7.67120869e-02, -9.35997799e-02,\n", + " 6.20164003e-02, -1.66008458e-02],\n", + " [-7.07261651e-02, 0.00000000e+00, -0.00000000e+00,\n", + " 0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n", + " 0.00000000e+00, 1.67499952e-03, -1.43709791e-02,\n", + " 0.00000000e+00, -1.58381933e-01, -1.84366703e-01,\n", + " 0.00000000e+00, 1.24433453e-01, 2.84595190e-02,\n", + " 0.00000000e+00, -0.00000000e+00, -1.54817718e-01,\n", + " 4.80978358e-02, -3.32246056e-02, 0.00000000e+00,\n", + " 0.00000000e+00, -4.49317075e-03, 0.00000000e+00,\n", + " 5.90320272e-02, -1.90930530e-02, 7.14058205e-02,\n", + " -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n", + " 0.00000000e+00, 0.00000000e+00, -2.11890780e-01,\n", + " 2.40863854e-01, 1.81035669e-02, 7.95793429e-02,\n", + " -0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", + " 0.00000000e+00, 0.00000000e+00, -0.00000000e+00,\n", + " -2.66024989e-02, -6.20859160e-02, -0.00000000e+00,\n", + " 1.72005317e-01, -3.61747077e-02, -0.00000000e+00,\n", + " -1.45992446e-01, 0.00000000e+00, -4.12639952e-02,\n", + " 8.45965124e-02, 8.86717681e-03, -9.71271863e-02,\n", + " -0.00000000e+00, 2.03733699e-02, 0.00000000e+00,\n", + " -3.53706113e-02, -0.00000000e+00, 7.87362637e-02,\n", + " -4.30000580e-02, 0.00000000e+00, -0.00000000e+00,\n", + " -3.39183691e-02, 4.51099206e-02, -0.00000000e+00,\n", + " -0.00000000e+00, -3.50261347e-03, -0.00000000e+00,\n", + " 5.46120553e-02, 1.57607736e-01, 0.00000000e+00,\n", + " -0.00000000e+00, 1.58467627e-02, 0.00000000e+00,\n", + " 0.00000000e+00, 0.00000000e+00],\n", + " [-6.01405574e-02, 0.00000000e+00, -5.40744232e-02,\n", + " 0.00000000e+00, 0.00000000e+00, 6.22154946e-02,\n", + " 1.45872853e-01, -0.00000000e+00, 0.00000000e+00,\n", + " -2.23737757e-01, -6.02382466e-02, 1.00190512e-01,\n", + " -0.00000000e+00, -0.00000000e+00, -3.47203990e-03,\n", + " -2.79579367e-02, -1.64573708e-02, 1.66491136e-02,\n", + " 3.68341838e-02, -9.26502154e-02, 2.60475266e-02,\n", + " 0.00000000e+00, 0.00000000e+00, -0.00000000e+00,\n", + " -1.72629001e-01, -1.62649599e-02, -1.03599161e-01,\n", + " 0.00000000e+00, 7.39986663e-02, -0.00000000e+00,\n", + " -0.00000000e+00, 0.00000000e+00, -0.00000000e+00,\n", + " -6.38350951e-02, 0.00000000e+00, 0.00000000e+00,\n", + " -0.00000000e+00, -0.00000000e+00, 3.20377698e-02,\n", + " -2.24438174e-02, -6.68304850e-03, -0.00000000e+00,\n", + " 1.23306447e-02, -1.31129986e-01, -0.00000000e+00,\n", + " -1.04469328e-01, -2.41460779e-02, 0.00000000e+00,\n", + " 9.22784489e-04, 0.00000000e+00, -0.00000000e+00,\n", + " 0.00000000e+00, 4.25727490e-02, 8.74138388e-02,\n", + " -4.89991941e-02, -0.00000000e+00, 6.04650550e-03,\n", + " 6.15462346e-02, 1.53657114e-03, 0.00000000e+00,\n", + " -0.00000000e+00, 0.00000000e+00, -2.75103508e-03,\n", + " 9.66631890e-02, 8.35185986e-02, 0.00000000e+00,\n", + " -9.57847349e-02, -9.25490783e-02, 1.64671421e-01,\n", + " -0.00000000e+00, -1.90410135e-01, 0.00000000e+00,\n", + " -1.32624248e-01, -0.00000000e+00, 6.28612885e-02,\n", + " 0.00000000e+00, -9.44104178e-02]],\n", + "\n", + " [[-2.68120494e-02, 4.76903810e-02, 2.33180521e-01,\n", + " 4.48314843e-02, -0.00000000e+00, -1.40263682e-03,\n", + " -0.00000000e+00, 1.16716842e-01, -9.89938278e-02,\n", + " 5.14514059e-02, -0.00000000e+00, 2.83807666e-02,\n", + " 0.00000000e+00, -0.00000000e+00, -1.32702802e-01,\n", + " 4.65406628e-02, 0.00000000e+00, -4.92034027e-02,\n", + " 2.12877951e-01, -0.00000000e+00, -1.03527434e-02,\n", + " -0.00000000e+00, 1.57589542e-01, 0.00000000e+00,\n", + " -7.62393013e-02, 0.00000000e+00, 0.00000000e+00,\n", + " 0.00000000e+00, -0.00000000e+00, -8.79463300e-02,\n", + " 0.00000000e+00, -0.00000000e+00, 2.57460232e-02,\n", + " 7.26828949e-02, -4.26477243e-02, 1.39335943e-01,\n", + " 0.00000000e+00, 5.92964126e-02, 0.00000000e+00,\n", + " 0.00000000e+00, -0.00000000e+00, -1.17729358e-01,\n", + " 0.00000000e+00, -0.00000000e+00, -1.30108192e-01,\n", + " -0.00000000e+00, -1.57723841e-01, 0.00000000e+00,\n", + " -6.02946215e-02, -0.00000000e+00, -0.00000000e+00,\n", + " -0.00000000e+00, 0.00000000e+00, 1.30096779e-01,\n", + " 1.23684330e-01, 0.00000000e+00, -0.00000000e+00,\n", + " 1.67586190e-01, -7.31684047e-02, -6.35025308e-02,\n", + " -0.00000000e+00, 0.00000000e+00, -0.00000000e+00,\n", + " -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n", + " 0.00000000e+00, -4.55028808e-02, 9.88882350e-02,\n", + " 2.51351516e-02, -3.71521046e-02, -8.22854100e-03,\n", + " -0.00000000e+00, 0.00000000e+00, -9.35997799e-02,\n", + " 6.20164003e-02, -1.66008458e-02],\n", + " [-7.07261651e-02, 1.82714160e-02, -3.73282792e-03,\n", + " 2.91735737e-02, -6.46168614e-02, -0.00000000e+00,\n", + " 4.71328999e-02, 1.67499952e-03, -0.00000000e+00,\n", + " 0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n", + " 0.00000000e+00, 1.24433453e-01, 2.84595190e-02,\n", + " 0.00000000e+00, -1.15709394e-01, -1.54817718e-01,\n", + " 4.80978358e-02, -0.00000000e+00, 1.08347655e-02,\n", + " 1.03489591e-01, -4.49317075e-03, 1.22495305e-02,\n", + " 0.00000000e+00, -0.00000000e+00, 0.00000000e+00,\n", + " -4.71223915e-02, -0.00000000e+00, -0.00000000e+00,\n", + " 0.00000000e+00, 8.74298899e-02, -2.11890780e-01,\n", + " 2.40863854e-01, 0.00000000e+00, 7.95793429e-02,\n", + " -0.00000000e+00, 0.00000000e+00, 1.28126709e-01,\n", + " 0.00000000e+00, 0.00000000e+00, -0.00000000e+00,\n", + " -0.00000000e+00, -6.20859160e-02, -0.00000000e+00,\n", + " 0.00000000e+00, -3.61747077e-02, -7.28418369e-02,\n", + " -1.45992446e-01, 1.03782513e-01, -0.00000000e+00,\n", + " 0.00000000e+00, 0.00000000e+00, -0.00000000e+00,\n", + " -1.39222369e-01, 0.00000000e+00, 0.00000000e+00,\n", + " -0.00000000e+00, -0.00000000e+00, 7.87362637e-02,\n", + " -0.00000000e+00, 0.00000000e+00, -4.85799908e-02,\n", + " -0.00000000e+00, 0.00000000e+00, -0.00000000e+00,\n", + " -2.81904254e-02, -0.00000000e+00, -1.02338970e-02,\n", + " 5.46120553e-02, 1.57607736e-01, 8.89522024e-02,\n", + " -0.00000000e+00, 1.58467627e-02, 0.00000000e+00,\n", + " 0.00000000e+00, 0.00000000e+00],\n", + " [-0.00000000e+00, 7.18134989e-03, -0.00000000e+00,\n", + " 0.00000000e+00, 0.00000000e+00, 6.22154946e-02,\n", + " 1.45872853e-01, -1.77690693e-03, 1.44881023e-02,\n", + " -0.00000000e+00, -0.00000000e+00, 1.00190512e-01,\n", + " -0.00000000e+00, -0.00000000e+00, -0.00000000e+00,\n", + " -2.79579367e-02, -1.64573708e-02, 1.66491136e-02,\n", + " 0.00000000e+00, -9.26502154e-02, 2.60475266e-02,\n", + " 0.00000000e+00, 1.30332254e-01, -0.00000000e+00,\n", + " -1.72629001e-01, -0.00000000e+00, -0.00000000e+00,\n", + " 0.00000000e+00, 7.39986663e-02, -0.00000000e+00,\n", + " -0.00000000e+00, 0.00000000e+00, -3.05860678e-01,\n", + " -6.38350951e-02, 1.21758839e-01, 0.00000000e+00,\n", + " -1.08594136e-02, -1.43361423e-02, 0.00000000e+00,\n", + " -0.00000000e+00, -0.00000000e+00, -3.15963079e-03,\n", + " 0.00000000e+00, -0.00000000e+00, -8.39775366e-02,\n", + " -1.04469328e-01, -2.41460779e-02, 6.31449336e-02,\n", + " 0.00000000e+00, 8.15046397e-02, -4.38014392e-02,\n", + " 5.31569497e-02, 4.25727490e-02, 0.00000000e+00,\n", + " -4.89991941e-02, -0.00000000e+00, 6.04650550e-03,\n", + " 6.15462346e-02, 1.53657114e-03, 0.00000000e+00,\n", + " -1.71322013e-01, 0.00000000e+00, -0.00000000e+00,\n", + " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", + " -0.00000000e+00, -9.25490783e-02, 1.64671421e-01,\n", + " -9.19848940e-04, -0.00000000e+00, 9.10320014e-02,\n", + " -1.32624248e-01, -8.46548674e-02, 0.00000000e+00,\n", + " 0.00000000e+00, -0.00000000e+00]]])" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "e4cb0c2a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[-0.14894147, -0. , -0. , -0. ,\n", + " -0.09779028, -0. , -0. , 0.00803607,\n", + " 0.13781323, 0.19323974, -0.01533188, 0.0572313 ,\n", + " 0. , -0. , -0.00123983, 0. ,\n", + " 0.03666625, 0. , 0. , -0. ,\n", + " 0. , -0. , -0.00260077, -0. ,\n", + " 0.08315015, 0.01043025, 0. , -0.13046964,\n", + " -0. , 0.0828973 , 0. , 0. ,\n", + " -0. , -0. , 0.04319013, 0.07105163,\n", + " -0. , -0. , 0.16442746, 0.04977496,\n", + " 0. , 0. , -0.02037713, 0.02244742,\n", + " -0.11786928, 0. , -0.02321121, 0. ,\n", + " 0.0357598 , -0.0912522 , 0. , -0. ,\n", + " 0.04894399, 0. , 0.15656811, -0. ,\n", + " -0.21907765, -0. , -0. , -0.16295134,\n", + " -0.04947984, 0.04374277, 0. , 0.16786104,\n", + " 0. , 0. , -0.02966977, -0. ,\n", + " 0. , -0.16186373, 0. , 0. ,\n", + " -0. , -0.00701991, -0. , 0. ,\n", + " -0.15248401],\n", + " [ 0.03643118, -0.04186115, 0.01930684, 0.07145101,\n", + " -0. , 0.05059842, -0. , 0.0307579 ,\n", + " 0.03721552, 0. , -0.11937443, 0.08640503,\n", + " 0. , 0. , 0.00069762, 0. ,\n", + " -0.00384033, 0. , -0. , -0. ,\n", + " 0.14507943, 0.01297678, -0. , -0.21611443,\n", + " 0.03216006, -0. , 0.01790073, -0. ,\n", + " 0. , -0. , -0.00459861, -0. ,\n", + " -0. , 0.01140717, -0.07974255, -0. ,\n", + " 0. , -0.10013736, -0.10589928, -0.00916196,\n", + " 0.04657115, -0. , -0. , -0. ,\n", + " 0.03039961, 0.0914015 , -0. , -0. ,\n", + " 0.00466334, -0.10876433, -0.0446009 , 0.07723708,\n", + " 0. , 0.04578521, 0. , 0. ,\n", + " 0. , 0.0077643 , 0.00737937, 0. ,\n", + " 0. , 0. , -0.02326119, 0.07467842,\n", + " 0.04089532, -0. , -0. , -0. ,\n", + " 0.21097365, -0. , -0.0035641 , 0.09294166,\n", + " -0. , 0.02473243, 0. , -0. ,\n", + " -0.10387271],\n", + " [-0. , -0.18855963, 0.09642158, -0.15418529,\n", + " 0.09642431, -0.04668276, -0. , -0. ,\n", + " 0. , -0.14711473, 0.0069383 , 0. ,\n", + " 0. , -0. , 0.06291967, -0.05209201,\n", + " 0. , -0.03487049, 0. , -0.11875419,\n", + " -0. , -0.02035346, -0.09669162, 0.04167512,\n", + " -0.00959279, -0.00529409, 0. , 0. ,\n", + " 0.01931781, 0.04378452, 0. , -0. ,\n", + " -0.03832108, 0. , -0.1372192 , -0. ,\n", + " 0. , 0. , -0.11956325, -0.18742249,\n", + " 0. , -0. , 0. , 0. ,\n", + " -0.00785733, 0.136826 , 0.09363695, -0.07585415,\n", + " -0.05106304, 0.05158221, 0.02325281, -0. ,\n", + " -0.10400051, -0.08093313, -0.10379424, 0.05014376,\n", + " -0.19660086, 0. , -0. , 0.24442962,\n", + " -0. , -0. , 0.08197937, 0. ,\n", + " 0. , -0. , -0.11794841, -0. ,\n", + " 0. , -0.14832498, 0. , -0.08098952,\n", + " -0. , -0. , 0. , 0. ,\n", + " -0.26840134]],\n", + "\n", + " [[-0. , -0. , -0.13200627, -0. ,\n", + " -0. , -0. , -0. , 0.00803607,\n", + " 0.13781323, 0. , -0. , 0. ,\n", + " 0.07689073, -0.03460474, -0. , 0.08444442,\n", + " 0.03666625, 0.07293253, 0.01359509, -0. ,\n", + " 0. , -0.00285178, -0. , -0.08631508,\n", + " 0. , 0. , 0.09848241, -0. ,\n", + " -0. , 0.0828973 , 0.01811219, 0.03073995,\n", + " -0. , -0. , 0. , 0. ,\n", + " -0. , -0. , 0.16442746, 0.04977496,\n", + " 0.05152314, 0. , -0. , +0. ,\n", + " -0.11786928, 0.040656 , -0.02321121, 0. ,\n", + " 0.0357598 , -0. , 0.06605035, -0.05017772,\n", + " 0.04894399, 0. , 0. , -0.19002041,\n", + " -0.21907765, -0.05487241, -0.00206813, -0. ,\n", + " -0. , 0. , 0. , 0.16786104,\n", + " 0.03204194, 0. , -0. , -0. ,\n", + " 0. , -0.16186373, 0. , 0.08059882,\n", + " -0.09379185, -0.00701991, -0. , 0. ,\n", + " -0. ],\n", + " [ 0. , -0. , 0. , 0. ,\n", + " -0. , 0. , -0. , 0. ,\n", + " 0.03721552, 0.06670669, -0.11937443, 0. ,\n", + " 0. , 0.0110916 , 0. , 0.07227028,\n", + " -0. , 0.05341562, -0. , -0. ,\n", + " 0.14507943, 0.01297678, -0.04479125, -0.21611443,\n", + " 0.03216006, -0. , 0. , -0.03860232,\n", + " 0.07523394, -0.04664728, -0. , -0. ,\n", + " -0. , 0.01140717, -0.07974255, -0. ,\n", + " 0. , -0. , -0. , -0. ,\n", + " 0.04657115, -0.15883335, -0.01329811, -0.06401072,\n", + " 0.03039961, 0. , -0.02166176, -0.07820453,\n", + " 0. , -0. , -0.0446009 , 0. ,\n", + " 0. , 0.04578521, 0. , 0. ,\n", + " 0.05044135, 0.0077643 , 0. , 0. ,\n", + " 0.09074423, 0. , -0. , 0. ,\n", + " 0. , -0. , -0.04314556, -0. ,\n", + " 0.21097365, -0.02955303, -0.0035641 , 0. ,\n", + " -0.04837281, 0. , 0. , -0. ,\n", + " -0. ],\n", + " [-0.03718985, -0. , 0. , -0.15418529,\n", + " 0. , -0. , -0. , -0. ,\n", + " 0.05990717, -0.14711473, 0. , 0. ,\n", + " 0. , -0. , 0.06291967, -0. ,\n", + " 0.08849705, -0. , 0.10378054, -0.11875419,\n", + " -0. , -0.02035346, -0.09669162, 0.04167512,\n", + " -0. , -0. , 0. , 0.01224728,\n", + " 0.01931781, 0. , 0.1156815 , -0.00365699,\n", + " -0.03832108, 0.04513425, -0.1372192 , -0. ,\n", + " 0.01407433, 0. , -0. , -0.18742249,\n", + " 0.12025073, -0.06765038, 0. , 0. ,\n", + " -0.00785733, 0. , 0. , -0.07585415,\n", + " -0. , 0. , 0.02325281, -0.08577434,\n", + " -0.10400051, -0. , -0.10379424, 0. ,\n", + " -0.19660086, 0.06593293, -0.12349573, 0.24442962,\n", + " -0. , -0.00543907, 0.08197937, 0.03619001,\n", + " 0. , -0.17853623, -0. , -0.05963894,\n", + " 0.04579109, -0.14832498, 0.05528753, -0. ,\n", + " -0. , -0.0317296 , 0. , 0. ,\n", + " -0.26840134]]])" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, { "cell_type": "code", "execution_count": null, - "id": "cfc3b120", + "id": "a0c7b773", "metadata": {}, "outputs": [], "source": [] @@ -226,9 +624,21 @@ ], "metadata": { "kernelspec": { - "display_name": "python3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" } }, "nbformat": 4,