<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: AETHERCORE / Sora Attilas</title>
    <description>The latest articles on DEV Community by AETHERCORE / Sora Attilas (@takatsusora).</description>
    <link>https://dev.to/takatsusora</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3465466%2F9ee27d84-5d14-4e25-b587-c2f0f4ffc16f.png</url>
      <title>DEV Community: AETHERCORE / Sora Attilas</title>
      <link>https://dev.to/takatsusora</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/takatsusora"/>
    <language>en</language>
    <item>
      <title>Why This Astrology Feature Makes No New LLM Call: 386 Fixed Rules and a Separate Explanation Layer</title>
      <dc:creator>AETHERCORE / Sora Attilas</dc:creator>
      <pubDate>Fri, 11 Sep 2026 09:39:01 +0000</pubDate>
      <link>https://dev.to/takatsusora/why-this-astrology-feature-makes-no-new-llm-call-386-fixed-rules-and-a-separate-explanation-layer-1ide</link>
      <guid>https://dev.to/takatsusora/why-this-astrology-feature-makes-no-new-llm-call-386-fixed-rules-and-a-separate-explanation-layer-1ide</guid>
      <description>&lt;p&gt;The fastest way to build an AI astrology feature is obvious: send chart data to a language model and ask for a profile. The result may read well, but several engineering questions immediately become harder.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can the same input reproduce the same judgment?&lt;/li&gt;
&lt;li&gt;Can a sentence on screen be traced back to a calculated condition?&lt;/li&gt;
&lt;li&gt;Can an editor repair an explanation without silently changing the matcher?&lt;/li&gt;
&lt;li&gt;Can a model update change prose while leaving the product's labels untouched?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AETHERCORE operates GenesisCore, a product that calculates Western astrology and Jyotish as separate routes and presents the results on screen and in PDFs. On September 9, 2026, we added a detailed Five Paths view to both paid plans. The new surface includes a radar chart, matched conditions, interpretive notes, reference people, and a one-page PDF.&lt;/p&gt;

&lt;p&gt;The Five Paths judgment itself makes no new LLM call. It uses fixed rules and a prepared explanation dictionary. Existing Western and Jyotish analysis still uses AI; the boundary is local to this feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  The public pipeline
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;birth input
  -&amp;gt; Western / Jyotish chart computation
  -&amp;gt; fixed-rule matching
  -&amp;gt; path-group and detailed-rule IDs
  -&amp;gt; explanation and reference-data lookup
  -&amp;gt; result tabs and one-page PDF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a public behavior model, not a claim that every internal component has been open-sourced. Its purpose is to make the responsibility of each output layer visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three kinds of information share one screen
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0lj4aj2y2rg97uxgdlsh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0lj4aj2y2rg97uxgdlsh.png" alt="Five Paths profile in the live product UI, shown with fictional input" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The radar chart is easy to mistake for a personality or aptitude score. It is neither. The values compare the number of matched path-family types with a 420-person development reference. They are not ability ratings, career recommendations, or success probabilities. A zero means that no current fixed rule matched for that path; it does not mean the person lacks the corresponding ability.&lt;/p&gt;

&lt;p&gt;The page keeps three data layers distinguishable:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Visible material&lt;/th&gt;
&lt;th&gt;Responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Judgment&lt;/td&gt;
&lt;td&gt;placements, rule IDs, match conditions&lt;/td&gt;
&lt;td&gt;what was calculated and matched&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interpretation&lt;/td&gt;
&lt;td&gt;path names, meaning, rationale, practical contexts&lt;/td&gt;
&lt;td&gt;how the symbolic structure is explained&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Record&lt;/td&gt;
&lt;td&gt;occupations, activities, comparison notes, sources&lt;/td&gt;
&lt;td&gt;what was documented about reference people&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That separation matters more than the chart design. It prevents a calculated match from quietly turning into a claim about ability or causation.&lt;/p&gt;

&lt;h2&gt;
  
  
  73 path groups are not 386 independent findings
&lt;/h2&gt;

&lt;p&gt;The product dictionary currently covers 73 path groups and 386 detailed rules.&lt;/p&gt;

&lt;p&gt;A path group is a reading unit that can contain several concrete routes. A detailed rule is the unit used to show which system, chart, position, or relation matched. Several rules may lead to the same social function, and one person may display several functions at once.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flckdmcti3cpk2o9pbc7j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flckdmcti3cpk2o9pbc7j.png" alt="Matched rules and calculated placements in the live product UI, shown with fictional input" width="800" height="853"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The interface preserves distinctions such as D1 versus D10 and the rule position versus a reference position. Display fields vary with the rule. The goal is a traceable answer to “why did this path appear?” rather than a decorative score alone.&lt;/p&gt;

&lt;p&gt;The current dictionary size describes product coverage. It does not mean that all 386 detailed rules have been independently validated one by one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why split matching from explanation?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Reproducibility
&lt;/h3&gt;

&lt;p&gt;With the same input, rule version, and dictionary version, the Five Paths result can follow the same route again. Sampling variation from an LLM does not enter the judgment layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Traceability
&lt;/h3&gt;

&lt;p&gt;A label can be followed back to a path group, a detailed rule, and the calculated placement. When something is wrong, we can ask whether the defect belongs to computation, matching, wording, or reference data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Editorial control
&lt;/h3&gt;

&lt;p&gt;An unclear description or weak source can be corrected without rewriting the matcher. A rule change can be reviewed against the smaller set of affected explanations and screens.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claim control
&lt;/h3&gt;

&lt;p&gt;The product can show three different statements without merging them:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;a condition matched;&lt;/li&gt;
&lt;li&gt;the condition is interpreted in a particular way;&lt;/li&gt;
&lt;li&gt;a documented person provides material for comparison.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those statements have different evidential weight. The UI and the data model should respect that difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does “509 records” count?
&lt;/h2&gt;

&lt;p&gt;The reference-person layer contains 509 edited person-by-path records in Japanese and English. It is not a dataset of 509 unique people, and it is not 509 independent experiments. The same person may contribute material to more than one path.&lt;/p&gt;

&lt;p&gt;This may sound like a small wording detail, but it is a data-contract issue. Once marketing copy calls a join-table row a unique subject, every later interpretation becomes unreliable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we tested—and what we did not
&lt;/h2&gt;

&lt;p&gt;After release, the team checked 40 Japanese and English pages, eight paid-result variants, desktop and mobile rendering, public images, and consistency with the PDF sample. The PDF process included 1,522 layout inspections plus visual checks of representative outputs.&lt;/p&gt;

&lt;p&gt;These checks support implementation, rendering, layout, and document consistency. They do not establish independent scientific replication, causation, personal ability, or future-prediction accuracy. A full production purchase run including paid AI generation and an actual customer email delivery has not yet been completed end to end.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical design rule
&lt;/h2&gt;

&lt;p&gt;An AI product does not need to use generative AI at every layer. Use flexible generation where interpretation benefits from it. Keep deterministic rules where users need stable labels, traceable conditions, and reviewable changes.&lt;/p&gt;

&lt;p&gt;For a domain in which calculation, tradition, interpretation, and personal meaning easily blur together, that boundary is part of the product.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aether-core.org/en/genesiscore/methodology?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=five_paths_architecture" rel="noopener noreferrer"&gt;GenesisCore methodology&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aether-core.org/en/genesiscore/pricing?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=five_paths_architecture#five-paths" rel="noopener noreferrer"&gt;Five Paths screens, plans, and PDF sample&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AETHER-CORE1219/Genesis-Core-route-research-public" rel="noopener noreferrer"&gt;Public research repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AETHER-CORE1219/Genesis-Core-route-research-public/tree/main/independent_social_expression_v7" rel="noopener noreferrer"&gt;Independent social-expression research v7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecture</category>
      <category>ai</category>
      <category>datascience</category>
      <category>opensource</category>
    </item>
    <item>
      <title>When 359 Becomes 2 : Testing Boundary Sensitivity in Circular Features with Python</title>
      <dc:creator>AETHERCORE / Sora Attilas</dc:creator>
      <pubDate>Wed, 09 Sep 2026 15:46:26 +0000</pubDate>
      <link>https://dev.to/takatsusora/when-359deg-becomes-2deg-testing-boundary-sensitivity-in-circular-features-with-python-2j0d</link>
      <guid>https://dev.to/takatsusora/when-359deg-becomes-2deg-testing-boundary-sensitivity-in-circular-features-with-python-2j0d</guid>
      <description>&lt;p&gt;Suppose a feature changes from 359.060 degrees to 2.794 degrees.&lt;/p&gt;

&lt;p&gt;A naive subtraction reports &lt;code&gt;-356.266&lt;/code&gt;. The actual forward movement is &lt;code&gt;+3.734&lt;/code&gt; degrees. If those values are converted into 30-degree categories, the label changes as well—even though the underlying motion is smooth.&lt;/p&gt;

&lt;p&gt;This boundary problem appears in headings, clock time, seasonal phase, hue, and any feature defined on a circle. I encountered it while testing how a ten-minute birth-time shift propagates through an astrological calculation pipeline.&lt;/p&gt;

&lt;p&gt;The astrology context supplies a useful real example. The engineering problem is broader: &lt;strong&gt;how should a system preserve continuous circular data, categorical labels, and uncertainty at the same time?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyquaxd29hyxu4iee0w2r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyquaxd29hyxu4iee0w2r.png" alt="Measured change from the 12:00 baseline" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The experiment
&lt;/h2&gt;

&lt;p&gt;I held the synthetic date and public Tokyo coordinates constant and changed only local time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;date: 2000-01-01
timezone: Asia/Tokyo
latitude: 35.6762
longitude: 139.6503
times: 12:00, 12:10, 13:00, 14:00
sidereal mode: Lahiri
house system: Whole Sign
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No personal birth data are involved.&lt;/p&gt;

&lt;p&gt;The current GenesisCore calculation path produced these values:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Local time&lt;/th&gt;
&lt;th&gt;Sun&lt;/th&gt;
&lt;th&gt;Moon&lt;/th&gt;
&lt;th&gt;Ascendant&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;12:00&lt;/td&gt;
&lt;td&gt;256.130°&lt;/td&gt;
&lt;td&gt;194.948°&lt;/td&gt;
&lt;td&gt;359.060°&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12:10&lt;/td&gt;
&lt;td&gt;256.137°&lt;/td&gt;
&lt;td&gt;195.032°&lt;/td&gt;
&lt;td&gt;2.794°&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13:00&lt;/td&gt;
&lt;td&gt;256.172°&lt;/td&gt;
&lt;td&gt;195.451°&lt;/td&gt;
&lt;td&gt;20.340°&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14:00&lt;/td&gt;
&lt;td&gt;256.215°&lt;/td&gt;
&lt;td&gt;195.954°&lt;/td&gt;
&lt;td&gt;38.752°&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Sun moved about 0.085 degrees over two hours, the Moon about 1.006 degrees, and the Ascendant about 39.692 degrees around the circle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why ordinary subtraction fails
&lt;/h2&gt;

&lt;p&gt;For values normalized to &lt;code&gt;[0, 360)&lt;/code&gt;, a forward angular difference can be calculated with modulo arithmetic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;forward_delta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mf"&gt;360.0&lt;/span&gt;


&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;forward_delta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;359.060&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2.794&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="c1"&gt;# 3.734
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If direction can be positive or negative, use the shortest signed distance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;signed_circular_delta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;180.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mf"&gt;360.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;180.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The right choice depends on the process. In this experiment, time only moves forward and the sampled Ascendant advances around the circle, so the forward delta is the relevant quantity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproduce the source angles
&lt;/h2&gt;

&lt;p&gt;The following function uses Swiss Ephemeris. It converts the local timestamp through an IANA timezone, calculates tropical Sun, Moon, and Ascendant values, and then applies Lahiri ayanāṃśa.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; pip &lt;span class="nb"&gt;install &lt;/span&gt;pyswisseph matplotlib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;zoneinfo&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ZoneInfo&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;swisseph&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;

&lt;span class="n"&gt;LAT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LON&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;35.6762&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;139.6503&lt;/span&gt;
&lt;span class="n"&gt;TZ&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ZoneInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Asia/Tokyo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_sid_mode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SIDM_LAHIRI&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;minute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;local_dt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;minute&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tzinfo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;TZ&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;utc_dt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;local_dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;astimezone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;utc_hour&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;utc_dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hour&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;utc_dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;minute&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;utc_dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt;
    &lt;span class="n"&gt;jd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;julday&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;utc_dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;utc_dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;utc_dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;day&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;utc_hour&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GREG_CAL&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;sun&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;calc_ut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SUN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FLG_SPEED&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;moon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;calc_ut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MOON&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FLG_SPEED&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;ayanamsa&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_ayanamsa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;_cusps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ascmc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;houses_ex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LAT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LON&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;W&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;swe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FLG_SWIEPH&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;minute&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hour&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;minute&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sun&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sun&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ayanamsa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mf"&gt;360.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;moon&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;moon&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ayanamsa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mf"&gt;360.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ascendant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ascmc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ayanamsa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mf"&gt;360.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Plot change, not wrapped position
&lt;/h2&gt;

&lt;p&gt;Plotting the raw Ascendant values would draw a large downward line between 359 and 2 degrees. That line is a coordinate artifact. Convert each series to forward change from the baseline first.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;forward_delta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mf"&gt;360.0&lt;/span&gt;


&lt;span class="n"&gt;minutes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;minute&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;label&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sun&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sun&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;moon&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Moon&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ascendant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ascendant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;baseline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;changes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;forward_delta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;baseline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;minutes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;changes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;marker&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Minutes after 12:00&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Forward angular change (degrees)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Input-time sensitivity of calculated chart features&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;alpha&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;legend&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tight_layout&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This representation preserves the process being measured. It also makes the different sensitivities immediately visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feature engineering near a circular boundary
&lt;/h2&gt;

&lt;p&gt;The example suggests four design rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preserve the original angle
&lt;/h3&gt;

&lt;p&gt;A category such as a zodiac sign or compass sector loses distance information. Store the normalized angle beside the label. If later analysis uses only categories, that should be an explicit modeling choice.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add distance to the nearest boundary
&lt;/h3&gt;

&lt;p&gt;For 30-degree segments:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;boundary_distance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;30.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;offset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;angle&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes boundary sensitivity measurable. A label derived from an angle 0.1 degrees from a boundary should not carry the same stability assumption as one 15 degrees from it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Consider sine/cosine encoding
&lt;/h3&gt;

&lt;p&gt;Many statistical and machine-learning models will treat 359 and 2 as far apart. Circular encoding keeps neighboring angles close:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;math&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;encode_angle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;radians&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;radians&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;radians&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;radians&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This does not solve every domain question, but it removes the artificial discontinuity at zero.&lt;/p&gt;

&lt;h3&gt;
  
  
  Propagate input uncertainty
&lt;/h3&gt;

&lt;p&gt;When the timestamp is uncertain, sample the defensible time interval. A result can then be labeled:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stable throughout the interval;&lt;/li&gt;
&lt;li&gt;continuous but boundary-sensitive;&lt;/li&gt;
&lt;li&gt;category-changing;&lt;/li&gt;
&lt;li&gt;unavailable because the input is insufficient.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A precise-looking category should not hide an imprecise timestamp.&lt;/p&gt;

&lt;h2&gt;
  
  
  The role of astrology in this example
&lt;/h2&gt;

&lt;p&gt;An astronomical position can be reproducible while an astrological interpretation remains unverified. Keeping those layers separate is central to the design.&lt;/p&gt;

&lt;p&gt;AETHERCORE develops GenesisCore with separate Western and Jyotish calculation paths. Shared birth records pass through different declared coordinate and rule systems. The public route-research project then asks whether frozen chart-derived features are associated with documented social classifications.&lt;/p&gt;

&lt;p&gt;The circular-data lesson affects that research directly. A sign-membership feature, a degree-based feature, and a boundary-distance feature are three different hypotheses. Reproduction requires the code and configuration to say which one was tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project and source links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/AETHER-CORE1219/Genesis-Core-route-research-public" rel="noopener noreferrer"&gt;GenesisCore public route-research repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aether-core.org/en/genesiscore?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=circular_feature_sensitivity" rel="noopener noreferrer"&gt;GenesisCore Western and Jyotish analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metawrite5.wordpress.com/2026/09/09/%e5%87%ba%e7%94%9f%e5%9b%b3%e3%81%af%e4%bd%95%e3%82%92%e5%9b%ba%e5%ae%9a%e3%81%99%e3%82%8b%e5%9b%b3%e3%81%aa%e3%81%ae%e3%81%8b-%e7%94%9f%e3%81%be%e3%82%8c%e3%81%9f%e6%99%82%e5%88%bb/" rel="noopener noreferrer"&gt;Canonical Japanese article and full calculation record&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.astro.com/swisseph/swephprg.htm" rel="noopener noreferrer"&gt;Swiss Ephemeris programming documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.iana.org/time-zones" rel="noopener noreferrer"&gt;IANA Time Zone Database&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next useful test is to apply the same stability labels to every time-sensitive output and show them directly in the result UI.&lt;/p&gt;

</description>
      <category>python</category>
      <category>datascience</category>
      <category>opensource</category>
      <category>astrology</category>
    </item>
    <item>
      <title>From 9,999 Sign Vectors to One maxT Threshold: Auditing GenesisCore v7</title>
      <dc:creator>AETHERCORE / Sora Attilas</dc:creator>
      <pubDate>Sat, 29 Aug 2026 11:19:37 +0000</pubDate>
      <link>https://dev.to/takatsusora/from-9999-sign-vectors-to-one-maxt-threshold-auditing-genesiscore-v7-f5f</link>
      <guid>https://dev.to/takatsusora/from-9999-sign-vectors-to-one-maxt-threshold-auditing-genesiscore-v7-f5f</guid>
      <description>&lt;p&gt;The line that matters most in our public reproduction script is not a p-value. It is the matrix multiplication that forces every estimable surface to face the same 9,999 person-level sign vectors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Publisher: AETHERCORE.&lt;/strong&gt; We build GenesisCore, a Western astrology and Jyotish analysis system, and publish the associated empirical research. This article inspects one narrow question in the current 420-person development result: how did the implementation control multiplicity across the declared evaluation package?&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Project and study recap&lt;/li&gt;
&lt;li&gt;What enters the script&lt;/li&gt;
&lt;li&gt;Why the family has 22 surfaces&lt;/li&gt;
&lt;li&gt;The four lines that generate maxT&lt;/li&gt;
&lt;li&gt;Adjusted p-values and simultaneous lower bounds&lt;/li&gt;
&lt;li&gt;What M3 handles separately&lt;/li&gt;
&lt;li&gt;Decoys, ablations, and failed history&lt;/li&gt;
&lt;li&gt;Reproduce and review the code&lt;/li&gt;
&lt;li&gt;Previous and next in this series&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Project and study recap
&lt;/h2&gt;

&lt;p&gt;GenesisCore converts linked astrological rules into testable data structures. The accompanying study asks whether frozen rule chains are associated with five documented social-expression functions: advocacy, authored symbolic production, collective realization, technology or product implementation, and competitive performance.&lt;/p&gt;

&lt;p&gt;Version 7 uses 420 unique people in a development dataset. All five risk differences remained positive after adding birth era, evidence-measurement regime, and collection source. Earlier v3–v5 person-out tests remain non-positive. We therefore report v7 as a development-set result with measured-confound robustness, with an independently frozen person-out replication still open.&lt;/p&gt;

&lt;p&gt;The multiplicity problem is concrete. The package contains several functions and more than one exposure surface per function. Reading five small p-values after searching freely across that structure would tell us very little. The code must preserve the declared family, preserve person-level dependence, and calculate the threshold from the maximum statistic in each draw.&lt;/p&gt;

&lt;h2&gt;
  
  
  What enters the script
&lt;/h2&gt;

&lt;p&gt;The public matrix contains 420 anonymous rows. &lt;code&gt;analysis_order&lt;/code&gt; fixes their order. Each row carries an opaque &lt;code&gt;release_id&lt;/code&gt;, measured-factor groups, observed functions, and binary surface values.&lt;/p&gt;

&lt;p&gt;The structure is approximately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"release_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"opaque-id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"analysis_order"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"birth_era"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source_evidence_regime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"collection_source_group"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"observed_functions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"surfaces"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"function-name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"pp_both_system"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"any_tier_both_system"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The reproduction script sorts on &lt;code&gt;analysis_order&lt;/code&gt;, asserts the exact 1–420 sequence, builds outcome arrays from &lt;code&gt;observed_functions&lt;/code&gt;, and builds exposure arrays from &lt;code&gt;surfaces&lt;/code&gt;. The order check matters because a person-level sign vector only has meaning when it is applied to the same fixed row order on every run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the family has 22 surfaces
&lt;/h2&gt;

&lt;p&gt;The five new outcomes are the primary reporting targets, while the multiplicity family spans 11 functions. Two frozen exposure surfaces are evaluated per function, giving 22 surfaces.&lt;/p&gt;

&lt;p&gt;Eighteen surfaces are estimable. Four are structural zeros: their exposure column is constant, so a statistic cannot be estimated. The script records those four cases and asserts that exactly 18 influence vectors remain.&lt;/p&gt;

&lt;p&gt;Dropping the four zeros silently and renaming the remaining 18 as the original family would make the family depend on what happened to be estimable. Keeping the 22-surface declaration visible makes that choice auditable.&lt;/p&gt;

&lt;p&gt;For each estimable surface, the script calculates a null-score influence vector after residualizing against the M3 design. Stacking those vectors produces a 420-by-18 matrix.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four lines that generate maxT
&lt;/h2&gt;

&lt;p&gt;The implementation is short enough to inspect directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;rng&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;default_rng&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SEED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;signs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rng&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;integers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MAXT_DRAWS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;420&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;int8&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;astype&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;
&lt;span class="n"&gt;max_t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signs&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;column_stack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;influences&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;critical&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;quantile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;signs&lt;/code&gt; has shape &lt;code&gt;(9999, 420)&lt;/code&gt;. One row is one draw; one column is one person. Multiplication by the 420-by-18 influence matrix gives an array of shape &lt;code&gt;(9999, 18)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The key design choice is reuse. During a draw, a person's &lt;code&gt;-1&lt;/code&gt; or &lt;code&gt;+1&lt;/code&gt; sign is reused across all 18 estimable surfaces. If the same person contributes to several functions, that dependence is retained inside the draw. Each draw then contributes one value: the maximum statistic across the 18 columns.&lt;/p&gt;

&lt;p&gt;The 95th percentile of those 9,999 maxima was approximately &lt;code&gt;2.59217&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adjusted p-values and simultaneous lower bounds
&lt;/h2&gt;

&lt;p&gt;For a primary surface, the script compares its observed t-statistic with the full &lt;code&gt;max_t&lt;/code&gt; distribution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;adjusted_p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_t&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;observed_t&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MAXT_DRAWS&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;lower&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;risk_difference&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;critical&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;hc3_standard_error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The five reported outcomes were:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;M3 difference&lt;/th&gt;
&lt;th&gt;maxT adjusted p&lt;/th&gt;
&lt;th&gt;Simultaneous one-sided 95% lower bound&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Advocacy / public cause&lt;/td&gt;
&lt;td&gt;+33.60 pp&lt;/td&gt;
&lt;td&gt;0.0001&lt;/td&gt;
&lt;td&gt;+18.48 pp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authored symbolic production&lt;/td&gt;
&lt;td&gt;+39.08 pp&lt;/td&gt;
&lt;td&gt;0.0001&lt;/td&gt;
&lt;td&gt;+27.79 pp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Collective realization&lt;/td&gt;
&lt;td&gt;+27.95 pp&lt;/td&gt;
&lt;td&gt;0.0001&lt;/td&gt;
&lt;td&gt;+16.01 pp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Technology / product&lt;/td&gt;
&lt;td&gt;+32.49 pp&lt;/td&gt;
&lt;td&gt;0.0008&lt;/td&gt;
&lt;td&gt;+9.64 pp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Competitive performance&lt;/td&gt;
&lt;td&gt;+32.14 pp&lt;/td&gt;
&lt;td&gt;0.0047&lt;/td&gt;
&lt;td&gt;+6.93 pp&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F03ho6hpvzfaeskye4vo1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F03ho6hpvzfaeskye4vo1.png" alt="M0 and M3 differences with fixed22 maxT lower bounds" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All five simultaneous lower bounds remained above zero. That is the selection-aware result we want reviewers to inspect. A single attractive raw p-value is not carrying the claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  What M3 handles separately
&lt;/h2&gt;

&lt;p&gt;The maxT layer controls multiplicity across the fixed family. It does not make historical records comparable by itself. The model sequence handles measured differences in the data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;M0: no added blocks;&lt;/li&gt;
&lt;li&gt;M1: birth era, five levels;&lt;/li&gt;
&lt;li&gt;M2: evidence-measurement regime, three levels;&lt;/li&gt;
&lt;li&gt;M3: collection source, six levels.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main table reports M3 risk differences. Additional checks include within-era and within-source permutations, raw strata summaries, leave-one-source-out fits, and separate opportunity-data adjustments for 311 and 109 people.&lt;/p&gt;

&lt;p&gt;These checks address recorded factors. Unmeasured confounding remains possible, which is one reason the next external dataset matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decoys, ablations, and failed history
&lt;/h2&gt;

&lt;p&gt;The repository also contains 7,634 adversarial-decoy rows representing 708 unique exposure sets. They were constructed after outcome information was available. Their purpose is to attack specificity: does an observed surface exceed the 95th percentile of these necessary-condition alternatives?&lt;/p&gt;

&lt;p&gt;They are not a random null distribution. The chance-control statement comes from maxT. Decoy performance answers a different question.&lt;/p&gt;

&lt;p&gt;Western-only, Jyotish-only, and full-system exposures are also refit. Those ablations describe which rule family may carry a result under the present specification. No Western-by-Jyotish interaction test has been run, so the ablations do not establish synergy.&lt;/p&gt;

&lt;p&gt;Finally, the non-positive v3–v5 person-out results remain in the repository. v7 adds robustness inside the development set; it does not turn the earlier external tests into successes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz7tyt8ehv21u29rcp7xq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz7tyt8ehv21u29rcp7xq.png" alt="Current support and the next decisive tests" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproduce and review the code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/AETHER-CORE1219/Genesis-Core-route-research-public.git
&lt;span class="nb"&gt;cd &lt;/span&gt;Genesis-Core-route-research-public
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; independent_social_expression_v7/requirements.txt
&lt;span class="nv"&gt;PYTHONDONTWRITEBYTECODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 python3 independent_social_expression_v7/scripts/reproduce_v7.py
&lt;span class="nv"&gt;PYTHONDONTWRITEBYTECODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 python3 independent_social_expression_v7/scripts/validate_public_v7_privacy.py
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;independent_social_expression_v7 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sha256sum&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; CHECKSUMS.sha256&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A focused review can start with six questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Does &lt;code&gt;analysis_order&lt;/code&gt; lock the same opaque 420 rows?&lt;/li&gt;
&lt;li&gt;Is the 18-column influence matrix derived from the declared 22-surface family correctly?&lt;/li&gt;
&lt;li&gt;Are person-level signs shared across every estimable surface in a draw?&lt;/li&gt;
&lt;li&gt;Is &lt;code&gt;axis=1&lt;/code&gt; taking the intended per-draw maximum?&lt;/li&gt;
&lt;li&gt;Do the critical value, adjusted p-values, and lower bounds match &lt;code&gt;RESULTS.json&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Do the privacy validator and checksums pass?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;AETHERCORE develops and operates GenesisCore, which provides free results, paid detailed analysis interfaces, and emailed PDF reports. The commercial relationship is disclosed here because it is relevant context; the research code and result files can be reviewed without using the service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Previous and next in this series
&lt;/h2&gt;

&lt;p&gt;The previous article introduced AETHERCORE, the GenesisCore product, the v1–v7 history, and the public package. This article followed the maxT implementation from the anonymous matrix to the simultaneous bounds. Next, we will inspect &lt;code&gt;analysis_order&lt;/code&gt;, the privacy validator, and the checksum chain that make the package reproducible without publishing identities.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/AETHER-CORE1219/Genesis-Core-route-research-public/blob/main/independent_social_expression_v7/README_JA.md" rel="noopener noreferrer"&gt;GenesisCore v7 primary materials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AETHER-CORE1219/Genesis-Core-route-research-public" rel="noopener noreferrer"&gt;Full public repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aether-core.org/en/genesiscore?utm_source=devto&amp;amp;utm_medium=community&amp;amp;utm_campaign=route_v7_launch&amp;amp;utm_content=post02" rel="noopener noreferrer"&gt;GenesisCore product and report surfaces&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you find a flaw in the fixed family, influence calculation, sign reuse, or adjusted-bound calculation, please include the code path and the result produced by the alternative specification.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>statistics</category>
      <category>python</category>
      <category>research</category>
    </item>
    <item>
      <title>Who We Are, What GenesisCore Builds, and Why Our Astrology Research Is Open</title>
      <dc:creator>AETHERCORE / Sora Attilas</dc:creator>
      <pubDate>Tue, 25 Aug 2026 15:34:54 +0000</pubDate>
      <link>https://dev.to/takatsusora/who-we-are-what-genesiscore-builds-and-why-our-astrology-research-is-open-5fbi</link>
      <guid>https://dev.to/takatsusora/who-we-are-what-genesiscore-builds-and-why-our-astrology-research-is-open-5fbi</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Publisher:&lt;/strong&gt; AETHERCORE, the research and business organization behind GenesisCore.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;What we build:&lt;/strong&gt; an analysis system combining Western astrology, Jyotish, AI-assisted interpretation, numerical processing, interactive results, and PDF reports.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;What we will publish here:&lt;/strong&gt; data structures, reproducible code, statistical design, failed tests, product boundaries, and new research results.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hello. We are AETHERCORE.&lt;/p&gt;

&lt;p&gt;Our main project is &lt;strong&gt;GenesisCore&lt;/strong&gt;. It is both an astrology-analysis product and a research program. Users can receive a free result, explore a paid detailed analysis interface, and obtain an extended PDF report by email.&lt;/p&gt;

&lt;p&gt;The subject is astrology. The work we want to discuss with the developer community is broader: how to turn a large symbolic rule system into structured data, how to connect it to auditable real-world records, how to limit researcher freedom, and how to release a result that another person can recalculate.&lt;/p&gt;

&lt;p&gt;This first post introduces the organization, the product, the reason for the research, the failed steps from v1 through v5, and the new v7 result. Later posts will examine the implementation in detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;What GenesisCore provides&lt;/li&gt;
&lt;li&gt;Why developers may care&lt;/li&gt;
&lt;li&gt;What we mean by a route&lt;/li&gt;
&lt;li&gt;From a chart to a public matrix row&lt;/li&gt;
&lt;li&gt;How the research reached v7&lt;/li&gt;
&lt;li&gt;The question and result in plain language&lt;/li&gt;
&lt;li&gt;How M0, M3, and maxT differ&lt;/li&gt;
&lt;li&gt;What is in the public package&lt;/li&gt;
&lt;li&gt;How the result can enter the product&lt;/li&gt;
&lt;li&gt;What we will publish next&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What GenesisCore provides
&lt;/h2&gt;

&lt;p&gt;GenesisCore calculates Western and Jyotish structures from birth date, birth time, and birthplace. It then organizes many interacting rules into explanations, scores, graphs, timelines, and thematic analyses.&lt;/p&gt;

&lt;p&gt;The current user-facing surfaces are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a free result interface;&lt;/li&gt;
&lt;li&gt;a paid detailed analysis interface;&lt;/li&gt;
&lt;li&gt;a long-form PDF report delivered by email.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The image below shows verified GenesisCore product surfaces. It is not a generated product mockup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fexp49d6gkvp2xqp74dy8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fexp49d6gkvp2xqp74dy8.png" alt="Verified GenesisCore Western and Jyotish result screens, free result UI, and PDF reports" width="800" height="1300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why developers may care
&lt;/h2&gt;

&lt;p&gt;A large symbolic system creates a technical and epistemic problem. When hundreds of rules can apply to one person, it is easy to select a convincing interpretation after seeing the outcome.&lt;/p&gt;

&lt;p&gt;This is a familiar engineering problem in an unusual domain: a flexible rule engine can produce plausible outputs while making its own error rate hard to measure. We therefore separate two activities.&lt;/p&gt;

&lt;p&gt;The product calculates and explains a chart. The research layer asks whether a frozen group of astrological chains has a measurable relationship with documented activity across people.&lt;/p&gt;

&lt;p&gt;The questions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do different chart expressions converge on the same real-world function?&lt;/li&gt;
&lt;li&gt;Can one function be reached through several mechanisms?&lt;/li&gt;
&lt;li&gt;Does a result persist after accounting for era and data-collection differences?&lt;/li&gt;
&lt;li&gt;Does it survive correction across a declared family of tests?&lt;/li&gt;
&lt;li&gt;What should happen when a selected route fails on unused people?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What we mean by a route
&lt;/h2&gt;

&lt;p&gt;A route is not a single placement-to-job lookup. It is a structured chain of chart factors that can converge on a documented social function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chart factors
  -&amp;gt; frozen relationship pattern
  -&amp;gt; route surface (present / absent)
  -&amp;gt; documented social function (present / absent)
  -&amp;gt; person-level analysis row
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The current research focuses on five non-exclusive functions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;advocacy or public-cause action;&lt;/li&gt;
&lt;li&gt;authored symbolic production;&lt;/li&gt;
&lt;li&gt;organized collective realization;&lt;/li&gt;
&lt;li&gt;technology or product implementation;&lt;/li&gt;
&lt;li&gt;embodied competitive performance.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A person may express several functions. We code documented activity, not an occupation label inferred from a chart.&lt;/p&gt;

&lt;h2&gt;
  
  
  From a chart to a public matrix row
&lt;/h2&gt;

&lt;p&gt;The public package reduces each person to an anonymous row. &lt;code&gt;observed_functions&lt;/code&gt; records the real-world side from fixed evidence. &lt;code&gt;surfaces&lt;/code&gt; records whether the frozen chart-side chains were present. This is an abridged public row:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"analysis_order"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"release_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"R0001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"birth_era"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BEFORE_1900"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"observed_functions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"AUTHORED_SYMBOLIC_PRODUCTION"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"KNOWLEDGE_OR_DISCOVERY_PRODUCTION"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"ORGANIZED_COLLECTIVE_REALIZATION"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"surfaces"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"AUTHORED_SYMBOLIC_PRODUCTION"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"any_tier_jyotish"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"any_tier_western"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"primary_jyotish"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"primary_western"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The release ID and analysis order replace a personal name. The public package contains no identity lookup table.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the research reached v7
&lt;/h2&gt;

&lt;p&gt;The history matters because v7 was not our first attempt.&lt;/p&gt;

&lt;h3&gt;
  
  
  v1: the first measurement method failed
&lt;/h3&gt;

&lt;p&gt;A 12-person pilot tested whether real-world activity could be labelled consistently from public evidence. It did not meet the predefined standard, so we stopped before chart comparison and recorded the failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  v2: five functions in 420 people
&lt;/h3&gt;

&lt;p&gt;We built an anonymous, duplicate-free development set of 420 people. Five social functions and related astrological candidates were organized into a person-level matrix.&lt;/p&gt;

&lt;h3&gt;
  
  
  v3–v5: selected candidates did not reproduce on separated people
&lt;/h3&gt;

&lt;p&gt;We tested selected authorship, collective-realization, and competitive-performance candidates on people who were not used to select them. None produced a clear positive result. Those results remain public.&lt;/p&gt;

&lt;h3&gt;
  
  
  v6: multiple paths and failed tests were integrated
&lt;/h3&gt;

&lt;p&gt;We integrated five functions, 136 groups of related meanings, person-level paths, and the v3–v5 results. This made room for several mechanisms leading toward the same function while preserving the failed tests.&lt;/p&gt;

&lt;h3&gt;
  
  
  v7: a different question
&lt;/h3&gt;

&lt;p&gt;v7 does not rerun the failed person-out tests with new thresholds. It asks whether the five development-set results survive measured external factors and a declared multiple-testing family.&lt;/p&gt;

&lt;h2&gt;
  
  
  The question and result in plain language
&lt;/h2&gt;

&lt;p&gt;The core question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Among people whose charts contained the corresponding frozen chains, was the documented social function more common than among people whose charts did not? Did the difference remain after adding birth era, measurement regime, and collection source? Did it remain when 22 testing surfaces were evaluated together?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;M0 is the raw difference between the two rates. M3 is the adjusted difference after adding birth era, evidence-measurement regime, and collection source.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Chains present&lt;/th&gt;
&lt;th&gt;Chains absent&lt;/th&gt;
&lt;th&gt;M0&lt;/th&gt;
&lt;th&gt;M3&lt;/th&gt;
&lt;th&gt;maxT p&lt;/th&gt;
&lt;th&gt;Simultaneous 95% lower&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Advocacy / public cause&lt;/td&gt;
&lt;td&gt;74.65% (71)&lt;/td&gt;
&lt;td&gt;37.82% (349)&lt;/td&gt;
&lt;td&gt;+36.83&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+33.60&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.0001&lt;/td&gt;
&lt;td&gt;+18.48&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authored symbolic production&lt;/td&gt;
&lt;td&gt;89.41% (85)&lt;/td&gt;
&lt;td&gt;50.45% (335)&lt;/td&gt;
&lt;td&gt;+38.96&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+39.08&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.0001&lt;/td&gt;
&lt;td&gt;+27.79&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Collective realization&lt;/td&gt;
&lt;td&gt;82.50% (120)&lt;/td&gt;
&lt;td&gt;55.00% (300)&lt;/td&gt;
&lt;td&gt;+27.50&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+27.95&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.0001&lt;/td&gt;
&lt;td&gt;+16.01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Technology / product&lt;/td&gt;
&lt;td&gt;64.71% (34)&lt;/td&gt;
&lt;td&gt;27.46% (386)&lt;/td&gt;
&lt;td&gt;+37.24&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+32.49&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.0008&lt;/td&gt;
&lt;td&gt;+9.64&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Competitive performance&lt;/td&gt;
&lt;td&gt;64.00% (25)&lt;/td&gt;
&lt;td&gt;18.48% (395)&lt;/td&gt;
&lt;td&gt;+45.52&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+32.14&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.0047&lt;/td&gt;
&lt;td&gt;+6.93&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzg7kkskslj3298kjhlbu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzg7kkskslj3298kjhlbu.png" alt="Five v7 function results showing M0, M3, and simultaneous maxT lower bounds" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The primary multiplicity control used 9,999 person-package maxT draws across a fixed 22-surface family. All five simultaneous lower bounds remained above zero.&lt;/p&gt;

&lt;p&gt;The result is strong inside the defined development study. It is not an independent person-out replication. It does not establish causality, universal validity, or deterministic career and future prediction.&lt;/p&gt;

&lt;h2&gt;
  
  
  How M0, M3, and maxT differ
&lt;/h2&gt;

&lt;p&gt;M0 through M3 add measured factors in stages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;M0: chain presence only;&lt;/li&gt;
&lt;li&gt;M1: add birth era;&lt;/li&gt;
&lt;li&gt;M2: add evidence-measurement regime;&lt;/li&gt;
&lt;li&gt;M3: add collection source.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Multiple-testing control is a separate layer. The fixed 22 surfaces share the same person-level sign flips in each draw, preserving dependence among surfaces. The following is a shortened version of the public implementation's core idea:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;

&lt;span class="n"&gt;rng&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;default_rng&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20260821&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;shared_signs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rng&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9_999&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;

&lt;span class="n"&gt;influence_matrix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;column_stack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;surface_influences&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;null_max_t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shared_signs&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;influence_matrix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;critical_95&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;quantile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;null_max_t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;adjusted_p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;null_max_t&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;observed_t&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;10_000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using a shared 420-person sign package for every surface keeps cross-surface dependence in the null distribution. The complete calculation, including studentization and simultaneous bounds, is in &lt;code&gt;scripts/reproduce_v7.py&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is in the public package
&lt;/h2&gt;

&lt;p&gt;The repository contains more than a narrative README:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;methods and function definitions;&lt;/li&gt;
&lt;li&gt;an anonymous 420-person analysis matrix;&lt;/li&gt;
&lt;li&gt;machine-readable &lt;code&gt;RESULTS.json&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;a machine-readable claim boundary;&lt;/li&gt;
&lt;li&gt;failure and limitation history;&lt;/li&gt;
&lt;li&gt;a reproduction script;&lt;/li&gt;
&lt;li&gt;a public-privacy validator;&lt;/li&gt;
&lt;li&gt;SHA-256 checksums.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From the repository root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; independent_social_expression_v7/requirements.txt
&lt;span class="nv"&gt;PYTHONDONTWRITEBYTECODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 python3 independent_social_expression_v7/scripts/reproduce_v7.py
&lt;span class="nv"&gt;PYTHONDONTWRITEBYTECODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 python3 independent_social_expression_v7/scripts/validate_public_v7_privacy.py
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;independent_social_expression_v7 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sha256sum&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; CHECKSUMS.sha256&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How the result can enter the product
&lt;/h2&gt;

&lt;p&gt;AETHERCORE operates both the research and the GenesisCore service. We disclose that commercial relationship.&lt;/p&gt;

&lt;p&gt;v7 can support explanation, hypothesis formation, and dialogue. It cannot currently serve as a validated predictor of occupation, behavior, or future events. Product UI must display the research status and the open replication boundary.&lt;/p&gt;

&lt;p&gt;Readers can evaluate the public package without using or purchasing the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we will publish next
&lt;/h2&gt;

&lt;p&gt;The next DEV post will explain the shared-sign person-package maxT design and why multiplicity and measured-confound adjustment are separate layers.&lt;/p&gt;

&lt;p&gt;Later posts will cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;public-data privacy and anonymous reproducibility;&lt;/li&gt;
&lt;li&gt;the v3–v5 failed person-out tests;&lt;/li&gt;
&lt;li&gt;Western-only and Jyotish-only ablations;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;the claim boundary between research output and product UI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/AETHER-CORE1219/Genesis-Core-route-research-public/blob/main/independent_social_expression_v7/README_JA.md" rel="noopener noreferrer"&gt;GenesisCore v7 primary page&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/AETHER-CORE1219/Genesis-Core-route-research-public" rel="noopener noreferrer"&gt;Full public research repository&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://aether-core.org/en/genesiscore?utm_source=devto&amp;amp;utm_medium=community&amp;amp;utm_campaign=route_v7_launch&amp;amp;utm_content=post01" rel="noopener noreferrer"&gt;See the actual GenesisCore product&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>research</category>
      <category>datascience</category>
      <category>opensource</category>
      <category>astrology</category>
    </item>
  </channel>
</rss>
