/** * Generate list of Raja yogas. * * @return \Iterator * @see Maharishi Parashara. Brihat Parashara Hora Shastra. Chapter 41, Verse 28. */ public function generateYoga() { $Analysis = new Analysis($this->Data); $bhavaKendra = Bhava::$bhavaKendra; array_shift($bhavaKendra); $kendraRulers = $Analysis->getBhavaRulers($bhavaKendra); $trikonaRulers = $Analysis->getBhavaRulers(Bhava::$bhavaTrikona); foreach ($kendraRulers as $kendraRuler) { foreach ($trikonaRulers as $trikonaRuler) { $KendraRuler = Graha::getInstance($kendraRuler); $KendraRuler->setEnvironment($this->Data); $TrikonaRuler = Graha::getInstance($trikonaRuler); $TrikonaRuler->setEnvironment($this->Data); // Parivarthana if ($this->hasParivarthana($kendraRuler, $trikonaRuler)) { (yield ['kendra' => $kendraRuler, 'trikona' => $trikonaRuler, 'interplay' => Yoga::INTERPLAY_PARIVARTHANA]); } // Conjunct $kendraRulerIsConjuncted = $KendraRuler->isConjuncted(); if (isset($kendraRulerIsConjuncted[$trikonaRuler])) { (yield ['kendra' => $kendraRuler, 'trikona' => $trikonaRuler, 'interplay' => Yoga::INTERPLAY_CONJUNCT]); } // Aspect $kendraRulerIsAspected = $KendraRuler->isAspectedByGraha(); $trikonaRulerIsAspected = $TrikonaRuler->isAspectedByGraha(); if ($kendraRulerIsAspected[$trikonaRuler] == 1 && $trikonaRulerIsAspected[$kendraRuler] == 1) { (yield ['kendra' => $kendraRuler, 'trikona' => $trikonaRuler, 'interplay' => Yoga::INTERPLAY_ASPECT]); } } } }
/** * This kind of strength is based on the planets placed in different houses * in the chart. * * @return array */ protected function balaMulatrikonadi() { foreach ($this->balaGraha as $key => $name) { $Graha = Graha::getInstance($key)->setEnvironment($this->Data); $rashiAvastha = $Graha->getRashiAvastha(); switch ($rashiAvastha) { case Rashi::GRAHA_UCHA: $bala[$key] = 70; break; case Rashi::GRAHA_MOOL: $bala[$key] = 60; break; case Rashi::GRAHA_SWA: $bala[$key] = 50; break; case Rashi::GRAHA_FRIEND: $bala[$key] = 40; break; case Rashi::GRAHA_NEUTRAL: $bala[$key] = 30; break; case Rashi::GRAHA_ENEMY: $bala[$key] = 20; break; case Rashi::GRAHA_NEECHA: $bala[$key] = 10; } } return $bala; }
/** * Get aspect by grahas. * * @param null|array $options Options to set (optional) * @return array */ public function isAspectedByGraha($options = null) { foreach (Graha::$graha as $key => $name) { $Graha = Graha::getInstance($key, $options); $grahaDrishti = $Graha->grahaDrishti; $distanse = Math::distanceInCycle($this->getEnvironment()['graha'][$key]['rashi'], $this->objectRashi); if ($key == $this->objectKey || !isset($grahaDrishti[$distanse])) { $isAspected[$key] = null; } else { $isAspected[$key] = $grahaDrishti[$distanse]; } } return $isAspected; }
/** * Get varga rashi. * * @param array $ganitaRashi * @return array * @see Maharishi Parashara. Brihat Parashara Hora Shastra. Chapter 6, Verse 27-28. */ public function getVargaRashi(array $ganitaRashi) { $amshaSize = 30 / $this->vargaAmsha; $result = Math::partsToUnits($ganitaRashi['degree'], $amshaSize, 'floor'); $vargaRashi = []; $vargaRashi['degree'] = $result['parts'] * 30 / $amshaSize; if ($ganitaRashi['degree'] < 5) { if ($ganitaRashi['rashi'] % 2) { $lord = Graha::KEY_MA; } else { $lord = Graha::KEY_SK; } } elseif ($ganitaRashi['degree'] >= 5 && $ganitaRashi['degree'] < 10) { if ($ganitaRashi['rashi'] % 2) { $lord = Graha::KEY_SA; } else { $lord = Graha::KEY_BU; } } elseif ($ganitaRashi['degree'] >= 10 && $ganitaRashi['degree'] < 18) { $lord = Graha::KEY_GU; } elseif ($ganitaRashi['degree'] >= 18 && $ganitaRashi['degree'] < 25) { if ($ganitaRashi['rashi'] % 2) { $lord = Graha::KEY_BU; } else { $lord = Graha::KEY_SA; } } else { if ($ganitaRashi['rashi'] % 2) { $lord = Graha::KEY_SK; } else { $lord = Graha::KEY_MA; } } if ($ganitaRashi['rashi'] % 2) { $trait = 'positive'; } else { $trait = 'negative'; } $grahaObject = Graha::getInstance($lord); $grahaSwaRashi = $grahaObject->grahaSwa; $vargaRashi['rashi'] = $grahaSwaRashi[$trait]['rashi']; return $vargaRashi; }
/** * Get start period. * * @return array */ public function getStartPeriod() { $nakshatra = $this->getData()['panchanga']['nakshatra']; $keysNakshatra = array_keys($this->orderNakshatra); $indexNum = array_search($nakshatra['key'], $keysNakshatra) + 1; $partSum = 0; foreach ($this->durationGraha as $key => $value) { $G = Graha::getInstance($key); $part = $G->grahaCharacter == Graha::CHARACTER_PAPA ? 4 : 3; $partSum += $part; if ($partSum >= $indexNum) { break; } } $num = $part - ($partSum - $indexNum); $result['graha'] = $key; $result['total'] = $this->durationTotal * Astro::DURATION_YEAR_GREGORIAN * 86400; $duration = round($this->durationGraha[$key] * Astro::DURATION_YEAR_GREGORIAN * 86400 / $part); $result['start'] = $duration * ($num - 1) + round($duration * (100 - $nakshatra['left']) / 100); return $result; }
/** * Return body label. * * @param string $body * @param array $options * @return string */ protected function getBodyLabel($body, array $options) { switch ($options['labelGrahaType']) { case 0: $label = $body; break; case 1: if (array_key_exists($body, Graha::$graha)) { $grahaObject = Graha::getInstance($body); $label = Utility::unicodeToHtml($grahaObject->grahaUnicode); } else { $label = $body; } break; case 2: $label = call_user_func($options['labelGrahaCallback'], $body); break; default: $label = $body; break; } $data = $this->Data->getData(); if (array_key_exists($body, Graha::listGraha(Graha::LIST_SAPTA))) { $vakraCheshta = $data['graha'][$body]['speed'] < 0 ? true : false; } else { $vakraCheshta = false; } $grahaLabel = $vakraCheshta ? '(' . $label . ')' : $label; return $grahaLabel; }
/** * Set naisargika (natural) relations. * * @see Maharishi Parashara. Brihat Parashara Hora Shastra. Chapter 3, Verse 55. */ protected function setGrahaRelation() { $relation = []; $friendsFromMt = [2, 4, 5, 8, 9, 12]; $enemiesFromMt = [3, 6, 7, 10, 11]; $rashiMool = $this->grahaMool['rashi']; $rashiUcha = $this->grahaUcha['rashi']; $friends = []; $R = Rashi::getInstance($rashiUcha); $gFriend = $R->rashiRuler; if ($this->objectKey != $gFriend) { $friends[] = $gFriend; } $getRelation = function ($distance) use($rashiMool) { $grahas = []; foreach ($distance as $step) { $r = Math::numberInCycle($rashiMool, $step); $R = Rashi::getInstance((int) $r); $gRuler = $R->rashiRuler; if ($this->objectKey == $gRuler) { continue; } $grahas[] = $gRuler; } return $grahas; }; $friends = array_unique(array_merge($friends, $getRelation($friendsFromMt))); $enemies = array_unique($getRelation($enemiesFromMt)); foreach (Graha::$graha as $key => $name) { if ($this->objectKey == $key) { continue; } if (in_array($key, $friends) && in_array($key, $enemies)) { $relation[$key] = 0; } elseif (in_array($key, $friends)) { $relation[$key] = 1; } elseif (in_array($key, $enemies)) { $relation[$key] = -1; } else { $G = Graha::getInstance($key, $this->getOptions()); $relation[$key] = $G->grahaRelation[$this->objectKey]; } } $relation[$this->objectKey] = $this->optionRelationSame ? 1 : null; $this->grahaRelation = $relation; }
/** * Is there Mahapurusha yoga for the graha. * * @param string $key Key of graha. * @return bool * @see Maharishi Parashara. Brihat Parashara Hora Shastra. Chapter 75, Verse 1-2. * @see Mantreswara. Phaladeepika. Chapter 6, Verse 1. */ public function hasMahapurusha($key) { $Graha = Graha::getInstance($key); $Graha->setEnvironment($this->Data); $grahaBhava = $Graha->getBhava(); $grahaAvastha = $Graha->getRashiAvastha(); if (in_array($grahaBhava, Bhava::$bhavaKendra) && in_array($grahaAvastha, [Rashi::GRAHA_UCHA, Rashi::GRAHA_MOOL, Rashi::GRAHA_SWA])) { return true; } else { return false; } }
/** * Lagna at the end of a sign with a benefic in it and Jupiter in a * Kendra/Trikona. * * @return bool * @see Mantreswara. Phaladeepika. Chapter 27, Verse 1. */ public function hasLgEndPBenGuInKnTr() { $lagnaDegree = $this->getData()[Data::BLOCK_LAGNA]['Lg']['degree']; $lagnaRashi = $this->getData()[Data::BLOCK_LAGNA]['Lg']['rashi']; if ($lagnaDegree < $this->optionLagnaEnd) { return false; } $Gu = Graha::getInstance(Graha::KEY_GU)->setEnvironment($this->Data); $guBhava = $Gu->getBhava(); $isGuInKendraTrikona = in_array($guBhava, $this->temp['kendraAndTrikona']) ? true : false; $hasYoga = false; if ($guBhava == 1) { $hasYoga = true; } elseif ($isGuInKendraTrikona) { foreach (Graha::$graha as $grahaKey => $grahaName) { if ($grahaKey == Graha::KEY_GU) { continue; } $Graha = Graha::getInstance($grahaKey)->setEnvironment($this->Data); $grahaChracter = $Graha->grahaCharacter; if ($grahaChracter == Graha::CHARACTER_SHUBHA) { $grahaRashi = $this->getData()[Data::BLOCK_GRAHA][$grahaKey]['rashi']; if ($grahaRashi == $lagnaRashi) { $hasYoga = true; break; } } } } return $hasYoga; }
/** * Get graha character depending on the conjuntion with the other planets. * * @return string */ protected function getConjunctCharacter() { $benefic = 0; $malefic = 0; foreach ($this->getEnvironment()['graha'] as $key => $params) { if ($key == $this->objectKey) { continue; } if ($params['rashi'] == $this->objectRashi) { $G = Graha::getInstance($key); $G->setEnvironment($this->Data); if ($G->grahaCharacter == Graha::CHARACTER_SHUBHA) { $benefic = $benefic + 1; } else { $malefic = $malefic + 1; } } } if ($benefic > 0 && $malefic > 0 || $benefic == 0 && $malefic == 0) { $character = Graha::CHARACTER_MISHRA; } elseif ($malefic > 0) { $character = Graha::CHARACTER_PAPA; } else { $character = Graha::CHARACTER_SHUBHA; } return $character; }
/** * Is there Mahapurusha yoga for the graha. * * @param string $key Key of graha. * @return bool * @throws Exception\InvalidArgumentException * @see Maharishi Parashara. Brihat Parashara Hora Shastra. Chapter 75, Verse 1-2. * @see Mantreswara. Phaladeepika. Chapter 6, Verse 1. */ public function hasMahapurusha($key) { $panchaGraha = Graha::listGraha(Graha::LIST_PANCHA); if (!array_key_exists($key, $panchaGraha)) { throw new \Jyotish\Yoga\Exception\InvalidArgumentException("For {$key} Mahapurusha yoga is not available."); } $Graha = Graha::getInstance($key); $Graha->setEnvironment($this->Data); $grahaBhava = $Graha->getBhava(); $grahaAvastha = $Graha->getRashiAvastha(); if (in_array($grahaBhava, Bhava::$bhavaKendra) && in_array($grahaAvastha, [Rashi::GRAHA_UCHA, Rashi::GRAHA_MOOL, Rashi::GRAHA_SWA])) { return true; } else { return false; } }