/** * 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 tatkalika mitra. Planets 3 houses away on either sides adjacent to it * are its tatkalika mitra (temporary friend) and render considerable strength. * * @return array */ public function getTatkalikaMitra($withoutChaya = true) { $mitraBhava = [-4, -3, -2, 1, 2, 3]; foreach ($mitraBhava as $distance) { $rashi = Math::numberInCycle($this->objectRashi, $distance); $mitraRashi[$rashi] = $distance; } $listOption = $withoutChaya ? Graha::LIST_SAPTA : Graha::LIST_NAVA; $grahas = Graha::listGraha($listOption); foreach ($grahas as $key => $name) { $rashi = $this->getEnvironment()['graha'][$key]['rashi']; if (array_key_exists($rashi, $mitraRashi)) { $mitraGraha[$key] = $mitraRashi[$rashi]; } } return $mitraGraha; }
/** * 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; }
/** * Generate list of Parivarthana yogas. * * @return \Iterator * @see Mantreswara. Phaladeepika. Chapter 6, Verse 32. */ public function generateYoga() { $saptaGraha = Graha::listGraha(Graha::LIST_SAPTA); foreach ($saptaGraha as $key1 => $name1) { $grahaChecked[] = $key1; foreach ($saptaGraha as $key2 => $name2) { if (in_array($key2, $grahaChecked)) { continue; } if ($subtype = $this->hasParivarthana($key1, $key2)) { $result = ['graha1' => $key1, 'graha2' => $key2]; if ($this->options['outputAmple']) { $result = array_merge($result, ['subtype' => $subtype]); } (yield $result); } } } }
/** * 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; }
/** * Get lord of hora. * * @param int $horaNumber Number of hora * @param int $varaKey Key of vara * @return string */ public static function getLord($horaNumber, $varaKey) { $lords = Math::shiftArray(Graha::listGraha(Graha::LIST_CHESHTA), $varaKey); $lordsKeys = array_keys($lords); $numLord = Math::numberInCycle(1, $horaNumber, 7) - 1; return $lordsKeys[$numLord]; }
/** * 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; }
/** * Determine if the jyotish object is affected. * * @param null|string $feature Feature of graha (optional) * @param null|string $value Value of feature (optional) * @return bool|array */ public function isAffected($feature = null, $value = null) { if (is_null($feature)) { $grahas = Graha::$graha; } else { $grahas = Graha::listGrahaByFeature($feature, $value); } $grahaAspected = array_intersect_key($this->isAspectedByGraha(), $grahas); $grahaAspected1 = array_intersect($grahaAspected, [1]); if (count($grahaAspected1)) { $isAspected = $grahaAspected1; } else { $isAspected = false; } $grahaConjuncted = array_intersect_key($this->isConjuncted(), $grahas); if (count($grahaConjuncted)) { $isConjuncted = $grahaConjuncted; } else { $isConjuncted = false; } $grahaHemmed = array_intersect_key($this->isHemmed(), $grahas); if (array_search('prev', $grahaHemmed) && array_search('next', $grahaHemmed)) { $isHemmed = $grahaHemmed; } else { $isHemmed = false; } if ($isHemmed || $isAspected || $isConjuncted) { return ['aspect' => $isAspected, 'conjunct' => $isConjuncted, 'hem' => $isHemmed]; } else { return false; } }
/** * 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; } }