Rewrite README around profile plots
@@ -1,32 +1,34 @@
|
||||
# tinymfv
|
||||
|
||||
tinymfv is a small set of quick value evals for local LLM steering work. It is sensitive to small answer-probability shifts, so you can see movement before sampled answers flip.
|
||||
tinymfv is a small set of fast value evals for local LLM steering work. It asks moral vignettes and survey questions, reads answer-token probabilities, and turns them into one model profile.
|
||||
|
||||
It asks moral vignettes and survey questions, reads the model's answer probabilities, and compares the model profile to human responses. The main use case is simple: after you steer a model, did the intended values move, did nearby values move too, and does the result still look like a coherent answer?
|
||||
Use it when you want to know whether a steer moved the intended values, moved nearby values too, and still lands near real human response patterns. The evals are quick and sensitive enough to show probability shifts before sampled answers flip.
|
||||
|
||||
Range plots show where the model sits relative to human societies. Culture maps show the base model and steered models on a PCA map of human response profiles.
|
||||
The plots compare that profile to human data. Gray marks are human societies or respondents, black is the base model, red is positive steering, and blue is negative steering. Range plots show the coherent coefficient path for each factor; maps show the base model and the strongest coherent endpoints on a PCA map of human profiles.
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||
Read the Big Five map left to right: gray is the human reference, black is the base LLM, and the red/blue points are steered endpoints. Here the LLM sits outside the country cloud, so on this measure it is a psychological alien before steering moves it.
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||
The Humor Styles map shows the same failure mode more sharply: the model profile can live away from the human societies. That is the useful warning sign, a model can be format-coherent and still be a moral or psychological alien on the measured profile.
|
||||
|
||||

|
||||

|
||||
|
||||
The plotting script defaults to clean base / +C / -C maps; use `--show-sweep` when you want the diagnostic `c=-4..+4` trajectory.
|
||||

|
||||
|
||||
Here `c` is the signed multiplier on the calibrated steering vector. The plotted path shows only coherent coefficients: `c=0`, then each positive and negative side while its answer mass stays above 99% of the base run. Once a side becomes incoherent, later points on that side are dropped.
|
||||
|
||||
## Install
|
||||
|
||||
@@ -51,15 +53,15 @@ just smoke
|
||||
|
||||
## Datasets
|
||||
|
||||
| dataset | what it asks | model answer | human comparison |
|
||||
| dataset | bundled data | human reference | profile used in plots |
|
||||
|---|---|---|---|
|
||||
| MFV classic | 132 Moral Foundations Vignettes from Clifford et al. | one of 7 foundations: Care, Fairness, Loyalty, Authority, Sanctity, Liberty, Social Norms | per-vignette human foundation labels |
|
||||
| MFV scifi | the same MFV items rewritten as sci-fi scenarios | one of 7 foundations | inherited labels from the classic item |
|
||||
| MFV ai-actor | the same MFV items rewritten so an AI system is the actor | one of 7 foundations | inherited labels from the classic item |
|
||||
| MFQ-2 | 36 Moral Foundations Questionnaire items | 1-5 agreement | country foundation means, plus raw Atari et al. respondent data |
|
||||
| Big Five | 50 personality items | 1-5 agreement | country factor means |
|
||||
| 16PF | 162 personality items | 1-5 agreement | country factor means |
|
||||
| Humor Styles | 32 humor-style items | 1-5 agreement | country style means, originally on a 1-7 scale |
|
||||
| MFV classic | [132 moral vignettes, other](src/tinymfv/data/vignettes_classic_other_violate.jsonl) / [self](src/tinymfv/data/vignettes_classic_self_violate.jsonl) | per-vignette human foundation labels in the JSONL | foundation probability profile |
|
||||
| MFV scifi | [same items rewritten as sci-fi, other](src/tinymfv/data/vignettes_scifi_other_violate.jsonl) / [self](src/tinymfv/data/vignettes_scifi_self_violate.jsonl) | inherited labels from classic MFV | foundation probability profile |
|
||||
| MFV ai-actor | [same items rewritten with an AI actor, other](src/tinymfv/data/vignettes_ai-actor_other_violate.jsonl) / [self](src/tinymfv/data/vignettes_ai-actor_self_violate.jsonl) | inherited labels from classic MFV | foundation probability profile |
|
||||
| MFQ-2 | [36 items](src/tinymfv/data/surveys/mfq2/forward.json), plus inverted and negated frames | [country means](src/tinymfv/data/human/mfq2_country_foundations.csv), plus [raw respondents](src/tinymfv/data/atari_study2_raw.csv) | expected 1-5 score per foundation |
|
||||
| Big Five | [50 items](src/tinymfv/data/surveys/big5/questionnaire.json), plus inverted and negated frames | [country means](src/tinymfv/data/human/big5_country_factors.csv) | expected 1-5 score per trait |
|
||||
| 16PF | [162 items](src/tinymfv/data/surveys/16pf/questionnaire.json), plus inverted and negated frames | [country means](src/tinymfv/data/human/16pf_country_factors.csv) | expected 1-5 score per factor |
|
||||
| Humor Styles | [32 items](src/tinymfv/data/surveys/humor_styles/questionnaire.json), plus inverted and negated frames | [country means](src/tinymfv/data/human/humor_styles_country_factors.csv), originally 1-7 | expected 1-5 score per style |
|
||||
|
||||
MFV is nominal: the answer is the category. The survey instruments are ordinal: the answer is a scale point.
|
||||
|
||||
@@ -77,12 +79,10 @@ tok = AutoTokenizer.from_pretrained("Qwen/Qwen3-4B")
|
||||
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-4B").cuda()
|
||||
|
||||
vignettes = load_vignettes("classic") # "classic", "scifi", "ai-actor", or "all"
|
||||
report = evaluate(model, tok, vignettes=vignettes, return_per_row=True)
|
||||
report = evaluate(model, tok, vignettes=vignettes)
|
||||
|
||||
print(report["profile"]) # mean probability per foundation
|
||||
print(report["informedness"]) # chance-corrected argmax agreement with human labels
|
||||
print(report["mean_pmass_allowed"]) # mean valid-answer mass across rows
|
||||
print(report["per_row"][0]["score"]) # foundation logprobs, in nats
|
||||
print(report["mean_pmass_allowed"]) # format check: mass on valid answer tokens
|
||||
```
|
||||
|
||||
Run survey instruments with `administer`:
|
||||
@@ -98,88 +98,40 @@ instr = get_instrument("mfq2") # "mfq2", "big5", "16pf", or "humor_styles"
|
||||
report = administer(model, tok, instr)
|
||||
|
||||
print(report["dimensions"])
|
||||
print(report["profile_E"]) # expected survey score, for human comparison
|
||||
print(report["profile_C"]) # log contrast, for steering deltas
|
||||
print(report["per_item_frame"][0]["lp"]) # raw answer-token logprobs
|
||||
print(report["profile"]) # expected 1-5 score per factor
|
||||
print(report["mean_pmass_allowed"]) # format check: mass on valid answer tokens
|
||||
```
|
||||
|
||||
Generate the bundled range plots and culture maps from a steering-lite all-instrument run:
|
||||
|
||||
```bash
|
||||
uv run python scripts/plot_steer_showcase.py \
|
||||
--run-dir ../steering-lite/outputs/allinstr_qwen35_4b \
|
||||
--out docs/img/showcase
|
||||
--run-dir ../steering-lite/outputs/20260630_dignity_authority_strict22_local_sspace_allinstr \
|
||||
--out docs/img/showcase \
|
||||
--vec-label=-Authority
|
||||
```
|
||||
|
||||
## Metrics
|
||||
## Measurement
|
||||
|
||||
There are two metric families: human-comparison metrics for maps and logprob metrics for steering deltas.
|
||||
The measurement on the maps is the profile.
|
||||
|
||||
### Moral foundation profile (`profile`)
|
||||
For MFV, the profile is the model's mean probability on each moral foundation:
|
||||
|
||||
For MFV, the profile is the mean probability of each foundation:
|
||||
$$\mathrm{profile}_f = \mathbb{E}_i P(f \mid i)$$
|
||||
|
||||
$$p_f = \mathbb{E}_i\,P(f \mid i)$$
|
||||
For survey instruments, the profile is the mean expected 1-5 answer for each factor, after reverse-keying:
|
||||
|
||||
Use this for human-comparison plots. It is bounded and easy to read.
|
||||
$$\mathrm{profile}_d = \mathbb{E}_{i \in d}\sum_{k=1}^{M} k P(k \mid i)$$
|
||||
|
||||
### Expected survey score (`profile_E`)
|
||||
where $i$ is an item, $d$ is a survey factor, $k$ is a scale point, and $M$ is the largest scale value.
|
||||
|
||||
For surveys, the expected score is the mean 1-5 answer after reverse-keying where needed:
|
||||
This is what the survey maps and range plots show. In the showcase CSVs, this is the `mean` column. For MFV showcase plots, model and human units differ, so the plotted quantity is relative foundation emphasis: each foundation profile is z-scored across foundations before mapping.
|
||||
|
||||
$$E_i = \sum_{k=1}^{M} k p_{i,k}$$
|
||||
For paired steering runs, compare the base profile to the steered profile path. Answer mass is a coherence check, not a value score:
|
||||
|
||||
Use this for human-comparison plots. It is bounded, so it can hide small steering effects near confident answers. The plot CSV stores the same quantity in its `mean` column.
|
||||
$$m(c) = \mathbb{E}_i \sum_{a \in A_i} P_c(a \mid i)$$
|
||||
|
||||
### Chance-corrected MFV agreement (`informedness`)
|
||||
|
||||
For MFV, `informedness` is macro Youden's J between the model argmax and the human modal foundation. It is in `[-1, 1]`, where `0` is chance and `1` is perfect.
|
||||
|
||||
Use this when you care about answer flips. It is the same metric family as steering-lite's surgical informedness, but this repo reports it as `informedness`.
|
||||
|
||||
### Answer-token logprobs (`lp`)
|
||||
|
||||
At the answer slot, tinymfv gathers the logprobs for the allowed answers:
|
||||
|
||||
$$\ell_k = \log P(a_k \mid \mathrm{prompt}, \mathrm{think}, \mathrm{prefill})$$
|
||||
|
||||
This is the raw readout. The steering metrics below are functions of these logprobs.
|
||||
|
||||
### Survey log contrast (`profile_C`, per-factor `C`)
|
||||
|
||||
For surveys, the log contrast is the steering-sensitive direction score. It weights high agreement tokens positive and low agreement tokens negative, using answer-token logprobs instead of bounded survey means:
|
||||
|
||||
$$C_i = \sum_{k=1}^{M} \left(k - \frac{M + 1}{2}\right)\ell_{i,k}$$
|
||||
|
||||
Use `delta C` for survey steering effects:
|
||||
|
||||
$$\Delta C_i = C_i^{\mathrm{steered}} - C_i^{\mathrm{base}}$$
|
||||
|
||||
### Paired MFV logit delta
|
||||
|
||||
For MFV steering effects, use the paired foundation logit change:
|
||||
|
||||
$$\Delta_{i,f} = \mathrm{logit}\,p_{i,f}^{\mathrm{steered}} - \mathrm{logit}\,p_{i,f}^{\mathrm{base}}$$
|
||||
|
||||
Positive means the steer made foundation $f$ more likely for that vignette. Negative means less likely.
|
||||
|
||||
`evaluate()` gives you per-row foundation `score` and `profile`; compare base and steered runs to compute this delta. The bundled showcase reads the already-aggregated version, `dlogit_per_foundation`, from steering-lite's `mfv.json` artifact.
|
||||
|
||||
### Allowed-answer mass (`pmass_allowed`, `mean_pmass_allowed`)
|
||||
|
||||
`pmass_allowed` is the per-row format check, not a value score:
|
||||
|
||||
$$\mathrm{pmass}_{\mathrm{allowed}} = \sum_{k=1}^{K}\exp(\ell_k)$$
|
||||
|
||||
`mean_pmass_allowed` is the mean over rows. If it drops, the model is leaking probability into invalid answers.
|
||||
|
||||
### Prefill NLL (`nll_prefill`, `mean_nll_prefill`)
|
||||
|
||||
`nll_prefill` checks whether the forced answer scaffold still fits the model:
|
||||
|
||||
$$\mathrm{nll}_{\mathrm{prefill}} = -\frac{1}{J}\sum_{j=1}^{J}\log P(u_j \mid \mathrm{context}, u_{<j})$$
|
||||
|
||||
`mean_nll_prefill` is the mean over rows. If it rises, the answer slot may be measuring scaffold damage rather than a clean value shift.
|
||||
where $A_i$ is the valid answer-token set for item $i$. The showcase drops a side at the first coefficient where answer mass is at or below 99% of the base run.
|
||||
|
||||
## Scope
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 532 KiB After Width: | Height: | Size: 544 KiB |
|
Before Width: | Height: | Size: 295 KiB After Width: | Height: | Size: 295 KiB |
|
Before Width: | Height: | Size: 268 KiB After Width: | Height: | Size: 270 KiB |
|
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 185 KiB |
|
Before Width: | Height: | Size: 352 KiB After Width: | Height: | Size: 371 KiB |
|
Before Width: | Height: | Size: 196 KiB After Width: | Height: | Size: 206 KiB |
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 401 KiB After Width: | Height: | Size: 405 KiB |
|
Before Width: | Height: | Size: 226 KiB After Width: | Height: | Size: 226 KiB |
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 320 KiB After Width: | Height: | Size: 336 KiB |
|
Before Width: | Height: | Size: 181 KiB After Width: | Height: | Size: 187 KiB |
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 111 KiB |
@@ -6,7 +6,7 @@
|
||||
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||
<cc:Work>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:date>2026-06-27T06:16:49.081694</dc:date>
|
||||
<dc:date>2026-06-30T12:29:31.963150</dc:date>
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
@@ -42,16 +42,16 @@ z
|
||||
<g id="line2d_1">
|
||||
<path d="M 53.798184 436.598437
|
||||
L 53.798184 20.798437
|
||||
" clip-path="url(#p78bf4bd515)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
" clip-path="url(#p31b98d379f)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_2">
|
||||
<defs>
|
||||
<path id="mda6cfdd236" d="M 0 0
|
||||
<path id="m1afca26e9f" d="M 0 0
|
||||
L 0 3.5
|
||||
" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</defs>
|
||||
<g>
|
||||
<use xlink:href="#mda6cfdd236" x="53.798184" y="436.598437" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#m1afca26e9f" x="53.798184" y="436.598437" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_1">
|
||||
@@ -119,11 +119,11 @@ z
|
||||
<g id="line2d_3">
|
||||
<path d="M 157.622498 436.598437
|
||||
L 157.622498 20.798437
|
||||
" clip-path="url(#p78bf4bd515)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
" clip-path="url(#p31b98d379f)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_4">
|
||||
<g>
|
||||
<use xlink:href="#mda6cfdd236" x="157.622498" y="436.598437" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#m1afca26e9f" x="157.622498" y="436.598437" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_2">
|
||||
@@ -167,11 +167,11 @@ z
|
||||
<g id="line2d_5">
|
||||
<path d="M 261.446813 436.598437
|
||||
L 261.446813 20.798437
|
||||
" clip-path="url(#p78bf4bd515)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
" clip-path="url(#p31b98d379f)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_6">
|
||||
<g>
|
||||
<use xlink:href="#mda6cfdd236" x="261.446813" y="436.598437" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#m1afca26e9f" x="261.446813" y="436.598437" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_3">
|
||||
@@ -187,11 +187,11 @@ L 261.446813 20.798437
|
||||
<g id="line2d_7">
|
||||
<path d="M 365.271127 436.598437
|
||||
L 365.271127 20.798437
|
||||
" clip-path="url(#p78bf4bd515)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
" clip-path="url(#p31b98d379f)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_8">
|
||||
<g>
|
||||
<use xlink:href="#mda6cfdd236" x="365.271127" y="436.598437" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#m1afca26e9f" x="365.271127" y="436.598437" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_4">
|
||||
@@ -207,11 +207,11 @@ L 365.271127 20.798437
|
||||
<g id="line2d_9">
|
||||
<path d="M 469.095442 436.598437
|
||||
L 469.095442 20.798437
|
||||
" clip-path="url(#p78bf4bd515)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
" clip-path="url(#p31b98d379f)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_10">
|
||||
<g>
|
||||
<use xlink:href="#mda6cfdd236" x="469.095442" y="436.598437" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#m1afca26e9f" x="469.095442" y="436.598437" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_5">
|
||||
@@ -783,23 +783,23 @@ z
|
||||
<g id="matplotlib.axis_2">
|
||||
<g id="ytick_1">
|
||||
<g id="line2d_11">
|
||||
<path d="M 52.483594 399.272038
|
||||
L 526.783594 399.272038
|
||||
" clip-path="url(#p78bf4bd515)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
<path d="M 52.483594 403.284311
|
||||
L 526.783594 403.284311
|
||||
" clip-path="url(#p31b98d379f)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_12">
|
||||
<defs>
|
||||
<path id="m159f4c71c2" d="M 0 0
|
||||
<path id="mf8287f6da4" d="M 0 0
|
||||
L -3.5 0
|
||||
" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</defs>
|
||||
<g>
|
||||
<use xlink:href="#m159f4c71c2" x="52.483594" y="399.272038" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#mf8287f6da4" x="52.483594" y="403.284311" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_7">
|
||||
<!-- −1.5 -->
|
||||
<g transform="translate(21.200781 403.070866) scale(0.1 -0.1)">
|
||||
<g transform="translate(21.200781 407.08314) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSans-c9c"/>
|
||||
<use xlink:href="#DejaVuSans-14" transform="translate(83.796875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-11" transform="translate(147.421875 0)"/>
|
||||
@@ -809,18 +809,18 @@ L -3.5 0
|
||||
</g>
|
||||
<g id="ytick_2">
|
||||
<g id="line2d_13">
|
||||
<path d="M 52.483594 314.296513
|
||||
L 526.783594 314.296513
|
||||
" clip-path="url(#p78bf4bd515)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
<path d="M 52.483594 317.379292
|
||||
L 526.783594 317.379292
|
||||
" clip-path="url(#p31b98d379f)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_14">
|
||||
<g>
|
||||
<use xlink:href="#m159f4c71c2" x="52.483594" y="314.296513" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#mf8287f6da4" x="52.483594" y="317.379292" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_8">
|
||||
<!-- −1.0 -->
|
||||
<g transform="translate(21.200781 318.095341) scale(0.1 -0.1)">
|
||||
<g transform="translate(21.200781 321.17812) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSans-c9c"/>
|
||||
<use xlink:href="#DejaVuSans-14" transform="translate(83.796875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-11" transform="translate(147.421875 0)"/>
|
||||
@@ -830,18 +830,18 @@ L 526.783594 314.296513
|
||||
</g>
|
||||
<g id="ytick_3">
|
||||
<g id="line2d_15">
|
||||
<path d="M 52.483594 229.320988
|
||||
L 526.783594 229.320988
|
||||
" clip-path="url(#p78bf4bd515)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
<path d="M 52.483594 231.474273
|
||||
L 526.783594 231.474273
|
||||
" clip-path="url(#p31b98d379f)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_16">
|
||||
<g>
|
||||
<use xlink:href="#m159f4c71c2" x="52.483594" y="229.320988" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#mf8287f6da4" x="52.483594" y="231.474273" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_9">
|
||||
<!-- −0.5 -->
|
||||
<g transform="translate(21.200781 233.119816) scale(0.1 -0.1)">
|
||||
<g transform="translate(21.200781 235.273101) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSans-c9c"/>
|
||||
<use xlink:href="#DejaVuSans-13" transform="translate(83.796875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-11" transform="translate(147.421875 0)"/>
|
||||
@@ -851,18 +851,18 @@ L 526.783594 229.320988
|
||||
</g>
|
||||
<g id="ytick_4">
|
||||
<g id="line2d_17">
|
||||
<path d="M 52.483594 144.345463
|
||||
L 526.783594 144.345463
|
||||
" clip-path="url(#p78bf4bd515)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
<path d="M 52.483594 145.569253
|
||||
L 526.783594 145.569253
|
||||
" clip-path="url(#p31b98d379f)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_18">
|
||||
<g>
|
||||
<use xlink:href="#m159f4c71c2" x="52.483594" y="144.345463" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#mf8287f6da4" x="52.483594" y="145.569253" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_10">
|
||||
<!-- 0.0 -->
|
||||
<g transform="translate(29.580469 148.144291) scale(0.1 -0.1)">
|
||||
<g transform="translate(29.580469 149.368081) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSans-13"/>
|
||||
<use xlink:href="#DejaVuSans-11" transform="translate(63.625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-13" transform="translate(95.40625 0)"/>
|
||||
@@ -871,18 +871,18 @@ L 526.783594 144.345463
|
||||
</g>
|
||||
<g id="ytick_5">
|
||||
<g id="line2d_19">
|
||||
<path d="M 52.483594 59.369938
|
||||
L 526.783594 59.369938
|
||||
" clip-path="url(#p78bf4bd515)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
<path d="M 52.483594 59.664234
|
||||
L 526.783594 59.664234
|
||||
" clip-path="url(#p31b98d379f)" style="fill: none; stroke: #eceadf; stroke-width: 0.3; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_20">
|
||||
<g>
|
||||
<use xlink:href="#m159f4c71c2" x="52.483594" y="59.369938" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#mf8287f6da4" x="52.483594" y="59.664234" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_11">
|
||||
<!-- 0.5 -->
|
||||
<g transform="translate(29.580469 63.168766) scale(0.1 -0.1)">
|
||||
<g transform="translate(29.580469 63.463062) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSans-13"/>
|
||||
<use xlink:href="#DejaVuSans-11" transform="translate(63.625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-18" transform="translate(95.40625 0)"/>
|
||||
@@ -1039,12 +1039,12 @@ z
|
||||
</g>
|
||||
<g id="patch_3">
|
||||
<path d="M 52.483594 436.598437
|
||||
L 52.483594 20.798437
|
||||
L 52.483594 20.798438
|
||||
" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="patch_4">
|
||||
<path d="M 526.783594 436.598437
|
||||
L 526.783594 20.798437
|
||||
L 526.783594 20.798438
|
||||
" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="patch_5">
|
||||
@@ -1059,7 +1059,7 @@ L 526.783594 20.798437
|
||||
</g>
|
||||
<g id="PathCollection_1">
|
||||
<defs>
|
||||
<path id="m625ab415b0" d="M 0 2.54951
|
||||
<path id="m63a01829ed" d="M 0 2.54951
|
||||
C 0.676138 2.54951 1.324674 2.280877 1.802776 1.802776
|
||||
C 2.280877 1.324674 2.54951 0.676138 2.54951 0
|
||||
C 2.54951 -0.676138 2.280877 -1.324674 1.802776 -1.802776
|
||||
@@ -1071,18 +1071,91 @@ C -1.324674 2.280877 -0.676138 2.54951 0 2.54951
|
||||
z
|
||||
" style="stroke: #ffffff; stroke-opacity: 0.7; stroke-width: 0.5"/>
|
||||
</defs>
|
||||
<g clip-path="url(#p78bf4bd515)">
|
||||
<use xlink:href="#m625ab415b0" x="505.224503" y="84.954381" style="fill: #888888; fill-opacity: 0.7; stroke: #ffffff; stroke-opacity: 0.7; stroke-width: 0.5"/>
|
||||
<use xlink:href="#m625ab415b0" x="292.781341" y="249.614848" style="fill: #888888; fill-opacity: 0.7; stroke: #ffffff; stroke-opacity: 0.7; stroke-width: 0.5"/>
|
||||
<use xlink:href="#m625ab415b0" x="307.341734" y="138.946442" style="fill: #888888; fill-opacity: 0.7; stroke: #ffffff; stroke-opacity: 0.7; stroke-width: 0.5"/>
|
||||
<use xlink:href="#m625ab415b0" x="127.843801" y="215.746542" style="fill: #888888; fill-opacity: 0.7; stroke: #ffffff; stroke-opacity: 0.7; stroke-width: 0.5"/>
|
||||
<use xlink:href="#m625ab415b0" x="74.042685" y="32.465104" style="fill: #888888; fill-opacity: 0.7; stroke: #ffffff; stroke-opacity: 0.7; stroke-width: 0.5"/>
|
||||
<g clip-path="url(#p31b98d379f)">
|
||||
<use xlink:href="#m63a01829ed" x="505.224503" y="85.528528" style="fill: #888888; fill-opacity: 0.7; stroke: #ffffff; stroke-opacity: 0.7; stroke-width: 0.5"/>
|
||||
<use xlink:href="#m63a01829ed" x="292.781341" y="251.990114" style="fill: #888888; fill-opacity: 0.7; stroke: #ffffff; stroke-opacity: 0.7; stroke-width: 0.5"/>
|
||||
<use xlink:href="#m63a01829ed" x="307.341734" y="140.111175" style="fill: #888888; fill-opacity: 0.7; stroke: #ffffff; stroke-opacity: 0.7; stroke-width: 0.5"/>
|
||||
<use xlink:href="#m63a01829ed" x="127.843801" y="217.751344" style="fill: #888888; fill-opacity: 0.7; stroke: #ffffff; stroke-opacity: 0.7; stroke-width: 0.5"/>
|
||||
<use xlink:href="#m63a01829ed" x="74.042685" y="32.465104" style="fill: #888888; fill-opacity: 0.7; stroke: #ffffff; stroke-opacity: 0.7; stroke-width: 0.5"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_13">
|
||||
<!-- mfv: ipsative culture map (5 societies) -->
|
||||
<g transform="translate(193.511719 14.798437) scale(0.1 -0.1)">
|
||||
<!-- MFV vignettes: humans vs LLMs steered for -Authority -->
|
||||
<g transform="translate(154.121875 14.798437) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-30" d="M 628 4666
|
||||
L 1569 4666
|
||||
L 2759 1491
|
||||
L 3956 4666
|
||||
L 4897 4666
|
||||
L 4897 0
|
||||
L 4281 0
|
||||
L 4281 4097
|
||||
L 3078 897
|
||||
L 2444 897
|
||||
L 1241 4097
|
||||
L 1241 0
|
||||
L 628 0
|
||||
L 628 4666
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-39" d="M 1831 0
|
||||
L 50 4666
|
||||
L 709 4666
|
||||
L 2188 738
|
||||
L 3669 4666
|
||||
L 4325 4666
|
||||
L 2547 0
|
||||
L 1831 0
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-4a" d="M 2906 1791
|
||||
Q 2906 2416 2648 2759
|
||||
Q 2391 3103 1925 3103
|
||||
Q 1463 3103 1205 2759
|
||||
Q 947 2416 947 1791
|
||||
Q 947 1169 1205 825
|
||||
Q 1463 481 1925 481
|
||||
Q 2391 481 2648 825
|
||||
Q 2906 1169 2906 1791
|
||||
z
|
||||
M 3481 434
|
||||
Q 3481 -459 3084 -895
|
||||
Q 2688 -1331 1869 -1331
|
||||
Q 1566 -1331 1297 -1286
|
||||
Q 1028 -1241 775 -1147
|
||||
L 775 -588
|
||||
Q 1028 -725 1275 -790
|
||||
Q 1522 -856 1778 -856
|
||||
Q 2344 -856 2625 -561
|
||||
Q 2906 -266 2906 331
|
||||
L 2906 616
|
||||
Q 2728 306 2450 153
|
||||
Q 2172 0 1784 0
|
||||
Q 1141 0 747 490
|
||||
Q 353 981 353 1791
|
||||
Q 353 2603 747 3093
|
||||
Q 1141 3584 1784 3584
|
||||
Q 2172 3584 2450 3431
|
||||
Q 2728 3278 2906 2969
|
||||
L 2906 3500
|
||||
L 3481 3500
|
||||
L 3481 434
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-1d" d="M 750 794
|
||||
L 1409 794
|
||||
L 1409 0
|
||||
L 750 0
|
||||
L 750 794
|
||||
z
|
||||
M 750 3309
|
||||
L 1409 3309
|
||||
L 1409 2516
|
||||
L 750 2516
|
||||
L 750 3309
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-50" d="M 3328 2828
|
||||
Q 3544 3216 3844 3400
|
||||
Q 4144 3584 4550 3584
|
||||
@@ -1112,6 +1185,32 @@ Q 1906 3584 2284 3584
|
||||
Q 2666 3584 2933 3390
|
||||
Q 3200 3197 3328 2828
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-47" d="M 2906 2969
|
||||
L 2906 4863
|
||||
L 3481 4863
|
||||
L 3481 0
|
||||
L 2906 0
|
||||
L 2906 525
|
||||
Q 2725 213 2448 61
|
||||
Q 2172 -91 1784 -91
|
||||
Q 1150 -91 751 415
|
||||
Q 353 922 353 1747
|
||||
Q 353 2572 751 3078
|
||||
Q 1150 3584 1784 3584
|
||||
Q 2172 3584 2448 3432
|
||||
Q 2725 3281 2906 2969
|
||||
z
|
||||
M 947 1747
|
||||
Q 947 1113 1208 752
|
||||
Q 1469 391 1925 391
|
||||
Q 2381 391 2643 752
|
||||
Q 2906 1113 2906 1747
|
||||
Q 2906 2381 2643 2742
|
||||
Q 2381 3103 1925 3103
|
||||
Q 1469 3103 1208 2742
|
||||
Q 947 2381 947 1747
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-49" d="M 2375 4863
|
||||
L 2375 4384
|
||||
@@ -1133,117 +1232,64 @@ Q 697 4328 969 4595
|
||||
Q 1241 4863 1831 4863
|
||||
L 2375 4863
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-1d" d="M 750 794
|
||||
L 1409 794
|
||||
L 1409 0
|
||||
L 750 0
|
||||
L 750 794
|
||||
z
|
||||
M 750 3309
|
||||
L 1409 3309
|
||||
L 1409 2516
|
||||
L 750 2516
|
||||
L 750 3309
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-53" d="M 1159 525
|
||||
L 1159 -1331
|
||||
L 581 -1331
|
||||
L 581 3500
|
||||
L 1159 3500
|
||||
L 1159 2969
|
||||
Q 1341 3281 1617 3432
|
||||
Q 1894 3584 2278 3584
|
||||
Q 2916 3584 3314 3078
|
||||
Q 3713 2572 3713 1747
|
||||
Q 3713 922 3314 415
|
||||
Q 2916 -91 2278 -91
|
||||
Q 1894 -91 1617 61
|
||||
Q 1341 213 1159 525
|
||||
z
|
||||
M 3116 1747
|
||||
Q 3116 2381 2855 2742
|
||||
Q 2594 3103 2138 3103
|
||||
Q 1681 3103 1420 2742
|
||||
Q 1159 2381 1159 1747
|
||||
Q 1159 1113 1420 752
|
||||
Q 1681 391 2138 391
|
||||
Q 2594 391 2855 752
|
||||
Q 3116 1113 3116 1747
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-4f" d="M 603 4863
|
||||
L 1178 4863
|
||||
L 1178 0
|
||||
L 603 0
|
||||
L 603 4863
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSans-50"/>
|
||||
<use xlink:href="#DejaVuSans-49" transform="translate(97.40625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-59" transform="translate(132.609375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-1d" transform="translate(186.328125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(220.015625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4c" transform="translate(251.796875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-53" transform="translate(279.578125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(343.0625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-44" transform="translate(395.15625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-57" transform="translate(456.4375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4c" transform="translate(495.640625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-59" transform="translate(523.421875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(582.609375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(644.140625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-46" transform="translate(675.921875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-58" transform="translate(730.90625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4f" transform="translate(794.28125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-57" transform="translate(822.0625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-58" transform="translate(861.265625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(924.640625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(963.546875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(1025.078125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-50" transform="translate(1056.859375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-44" transform="translate(1154.265625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-53" transform="translate(1215.546875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(1279.03125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-b" transform="translate(1310.8125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-18" transform="translate(1349.828125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(1413.453125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(1445.234375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-52" transform="translate(1497.328125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-46" transform="translate(1558.515625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4c" transform="translate(1613.5 0)"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(1641.28125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-57" transform="translate(1702.8125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4c" transform="translate(1742.015625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(1769.796875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(1831.328125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-c" transform="translate(1883.421875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-30"/>
|
||||
<use xlink:href="#DejaVuSans-29" transform="translate(86.28125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-39" transform="translate(143.796875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(212.203125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-59" transform="translate(243.984375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4c" transform="translate(303.171875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4a" transform="translate(330.953125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-51" transform="translate(394.4375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(457.8125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-57" transform="translate(519.34375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-57" transform="translate(558.546875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(597.75 0)"/>
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(659.28125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-1d" transform="translate(711.375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(745.0625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4b" transform="translate(776.84375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-58" transform="translate(840.21875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-50" transform="translate(903.59375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-44" transform="translate(1001 0)"/>
|
||||
<use xlink:href="#DejaVuSans-51" transform="translate(1062.28125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(1125.65625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(1177.75 0)"/>
|
||||
<use xlink:href="#DejaVuSans-59" transform="translate(1209.53125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(1268.71875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(1320.8125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-2f" transform="translate(1352.59375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-2f" transform="translate(1408.3125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-30" transform="translate(1464.03125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(1550.3125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(1602.40625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(1634.1875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-57" transform="translate(1686.28125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(1725.484375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(1787.015625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(1848.546875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(1887.453125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-47" transform="translate(1948.984375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(2012.46875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-49" transform="translate(2044.25 0)"/>
|
||||
<use xlink:href="#DejaVuSans-52" transform="translate(2079.453125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(2140.640625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(2181.75 0)"/>
|
||||
<use xlink:href="#DejaVuSans-10" transform="translate(2213.53125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-24" transform="translate(2247.40625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-58" transform="translate(2315.8125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-57" transform="translate(2379.1875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4b" transform="translate(2418.390625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-52" transform="translate(2481.765625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(2542.953125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4c" transform="translate(2584.0625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-57" transform="translate(2611.84375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-5c" transform="translate(2651.046875 0)"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="patch_7">
|
||||
<path d="M 280.312187 253.517614
|
||||
Q 263.336106 246.207813 248.413789 239.782352
|
||||
" style="fill: none; stroke: #c2702f; stroke-width: 2; stroke-linecap: round"/>
|
||||
<path d="M 251.296697 243.201247
|
||||
L 248.413789 239.782352
|
||||
L 252.87865 239.527362
|
||||
z
|
||||
" style="fill: #c2702f; stroke: #c2702f; stroke-width: 2; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="patch_8">
|
||||
<path d="M 283.519149 255.763702
|
||||
Q 287.56041 260.052228 290.068143 262.713398
|
||||
" style="fill: none; stroke: #8a5a9c; stroke-width: 2; stroke-linecap: round"/>
|
||||
<path d="M 288.780437 258.430663
|
||||
L 290.068143 262.713398
|
||||
L 285.869332 261.173921
|
||||
z
|
||||
" style="fill: #8a5a9c; stroke: #8a5a9c; stroke-width: 2; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="axes_2">
|
||||
<g id="patch_9">
|
||||
<g id="patch_7">
|
||||
<path d="M 147.343594 379.805671
|
||||
C 147.719979 379.805671 148.080999 379.656132 148.347144 379.389987
|
||||
C 148.613288 379.123843 148.762828 378.762823 148.762828 378.386437
|
||||
@@ -1255,39 +1301,39 @@ C 145.92436 378.762823 146.073899 379.123843 146.340044 379.389987
|
||||
C 146.606188 379.656132 146.967209 379.805671 147.343594 379.805671
|
||||
L 147.343594 379.805671
|
||||
z
|
||||
" clip-path="url(#p5c05145b87)" style="fill: none; stroke: #bbbbbb; stroke-width: 0.7; stroke-linejoin: miter"/>
|
||||
" clip-path="url(#p16c43892ab)" style="fill: none; stroke: #bbbbbb; stroke-width: 0.7; stroke-linejoin: miter"/>
|
||||
</g>
|
||||
<g id="line2d_21">
|
||||
<path d="M 161.761278 381.383881
|
||||
L 160.355874 382.976672
|
||||
" clip-path="url(#p5c05145b87)" style="fill: none; stroke: #3a6b35; stroke-width: 0.5; stroke-linecap: square"/>
|
||||
" clip-path="url(#p16c43892ab)" style="fill: none; stroke: #3a6b35; stroke-width: 0.5; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_22">
|
||||
<path d="M 122.847851 348.229857
|
||||
L 121.442447 349.822648
|
||||
" clip-path="url(#p5c05145b87)" style="fill: none; stroke: #3a6b35; stroke-width: 0.5; stroke-linecap: square"/>
|
||||
" clip-path="url(#p16c43892ab)" style="fill: none; stroke: #3a6b35; stroke-width: 0.5; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_23">
|
||||
<path d="M 141.698747 393.704336
|
||||
L 143.104151 395.297127
|
||||
" clip-path="url(#p5c05145b87)" style="fill: none; stroke: #3a6b35; stroke-width: 0.5; stroke-linecap: square"/>
|
||||
" clip-path="url(#p16c43892ab)" style="fill: none; stroke: #3a6b35; stroke-width: 0.5; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_24">
|
||||
<path d="M 145.377963 374.129707
|
||||
L 143.972559 375.722498
|
||||
" clip-path="url(#p5c05145b87)" style="fill: none; stroke: #3a6b35; stroke-width: 0.5; stroke-linecap: square"/>
|
||||
" clip-path="url(#p16c43892ab)" style="fill: none; stroke: #3a6b35; stroke-width: 0.5; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_25">
|
||||
<path d="M 134.533563 402.29542
|
||||
L 135.938967 403.888211
|
||||
" clip-path="url(#p5c05145b87)" style="fill: none; stroke: #3a6b35; stroke-width: 0.5; stroke-linecap: square"/>
|
||||
" clip-path="url(#p16c43892ab)" style="fill: none; stroke: #3a6b35; stroke-width: 0.5; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_26">
|
||||
<path d="M 179.997788 362.101423
|
||||
L 178.592384 363.694214
|
||||
" clip-path="url(#p5c05145b87)" style="fill: none; stroke: #3a6b35; stroke-width: 0.5; stroke-linecap: square"/>
|
||||
" clip-path="url(#p16c43892ab)" style="fill: none; stroke: #3a6b35; stroke-width: 0.5; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="patch_10">
|
||||
<g id="patch_8">
|
||||
<path d="M 149.230924 379.052216
|
||||
Q 152.662318 380.26268 154.933921 381.064015
|
||||
" style="fill: none; stroke: #3a6b35; stroke-width: 1.1; stroke-linecap: round"/>
|
||||
@@ -1296,7 +1342,7 @@ L 154.933921 381.064015
|
||||
L 150.496408 381.619423
|
||||
" style="fill: none; stroke: #3a6b35; stroke-width: 1.1; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="patch_11">
|
||||
<g id="patch_9">
|
||||
<path d="M 145.999107 376.903737
|
||||
Q 135.239197 365.037706 125.305413 354.082728
|
||||
" style="fill: none; stroke: #3a6b35; stroke-width: 1.1; stroke-linecap: round"/>
|
||||
@@ -1305,7 +1351,7 @@ L 125.305413 354.082728
|
||||
L 129.473938 355.702418
|
||||
" style="fill: none; stroke: #3a6b35; stroke-width: 1.1; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="patch_12">
|
||||
<g id="patch_10">
|
||||
<path d="M 146.857584 380.325079
|
||||
Q 145.530968 385.616812 144.503412 389.715623
|
||||
" style="fill: none; stroke: #3a6b35; stroke-width: 1.1; stroke-linecap: round"/>
|
||||
@@ -1314,7 +1360,7 @@ L 144.503412 389.715623
|
||||
L 143.536129 385.349347
|
||||
" style="fill: none; stroke: #3a6b35; stroke-width: 1.1; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="patch_13">
|
||||
<g id="patch_11">
|
||||
<path d="M 147.343594 378.386437
|
||||
Q 146.647647 377.83647 146.916617 378.049021
|
||||
" style="fill: none; stroke: #3a6b35; stroke-width: 1.1; stroke-linecap: round"/>
|
||||
@@ -1323,7 +1369,7 @@ L 146.916617 378.049021
|
||||
L 151.295005 378.95991
|
||||
" style="fill: none; stroke: #3a6b35; stroke-width: 1.1; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="patch_14">
|
||||
<g id="patch_12">
|
||||
<path d="M 146.526729 380.213022
|
||||
Q 142.155527 389.987422 138.286401 398.639137
|
||||
" style="fill: none; stroke: #3a6b35; stroke-width: 1.1; stroke-linecap: round"/>
|
||||
@@ -1332,7 +1378,7 @@ L 138.286401 398.639137
|
||||
L 138.093636 394.171158
|
||||
" style="fill: none; stroke: #3a6b35; stroke-width: 1.1; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="patch_15">
|
||||
<g id="patch_13">
|
||||
<path d="M 149.150433 377.536917
|
||||
Q 161.826586 371.576979 173.389779 366.140319
|
||||
" style="fill: none; stroke: #3a6b35; stroke-width: 1.1; stroke-linecap: round"/>
|
||||
@@ -1380,6 +1426,15 @@ L 170.620894 369.652195
|
||||
<g id="text_17">
|
||||
<!-- Loyalty -->
|
||||
<g style="fill: #3a6b35" transform="translate(145.377963 374.129707) scale(0.075 -0.075)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-4f" d="M 603 4863
|
||||
L 1178 4863
|
||||
L 1178 0
|
||||
L 603 0
|
||||
L 603 4863
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSans-2f"/>
|
||||
<use xlink:href="#DejaVuSans-52" transform="translate(53.96875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-5c" transform="translate(115.15625 0)"/>
|
||||
@@ -1800,7 +1855,7 @@ z
|
||||
</g>
|
||||
<g id="text_22">
|
||||
<!-- Peru -->
|
||||
<g style="fill: #555555" transform="translate(130.843801 213.746542) scale(0.07 -0.07)">
|
||||
<g style="fill: #555555" transform="translate(130.843801 215.751344) scale(0.07 -0.07)">
|
||||
<use xlink:href="#DejaVuSans-33"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(56.734375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(118.265625 0)"/>
|
||||
@@ -1809,7 +1864,7 @@ z
|
||||
</g>
|
||||
<g id="text_23">
|
||||
<!-- Colombia -->
|
||||
<g style="fill: #555555" transform="translate(295.781341 247.614848) scale(0.07 -0.07)">
|
||||
<g style="fill: #555555" transform="translate(295.781341 249.990114) scale(0.07 -0.07)">
|
||||
<use xlink:href="#DejaVuSans-26"/>
|
||||
<use xlink:href="#DejaVuSans-52" transform="translate(69.828125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4f" transform="translate(131.015625 0)"/>
|
||||
@@ -1822,7 +1877,7 @@ z
|
||||
</g>
|
||||
<g id="text_24">
|
||||
<!-- Japan -->
|
||||
<g style="fill: #555555" transform="translate(310.341734 136.946442) scale(0.07 -0.07)">
|
||||
<g style="fill: #555555" transform="translate(310.341734 138.111175) scale(0.07 -0.07)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-2d" d="M 628 4666
|
||||
L 1259 4666
|
||||
@@ -1836,6 +1891,32 @@ Q 284 -750 456 -515
|
||||
Q 628 -281 628 325
|
||||
L 628 4666
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-53" d="M 1159 525
|
||||
L 1159 -1331
|
||||
L 581 -1331
|
||||
L 581 3500
|
||||
L 1159 3500
|
||||
L 1159 2969
|
||||
Q 1341 3281 1617 3432
|
||||
Q 1894 3584 2278 3584
|
||||
Q 2916 3584 3314 3078
|
||||
Q 3713 2572 3713 1747
|
||||
Q 3713 922 3314 415
|
||||
Q 2916 -91 2278 -91
|
||||
Q 1894 -91 1617 61
|
||||
Q 1341 213 1159 525
|
||||
z
|
||||
M 3116 1747
|
||||
Q 3116 2381 2855 2742
|
||||
Q 2594 3103 2138 3103
|
||||
Q 1681 3103 1420 2742
|
||||
Q 1159 2381 1159 1747
|
||||
Q 1159 1113 1420 752
|
||||
Q 1681 391 2138 391
|
||||
Q 2594 391 2855 752
|
||||
Q 3116 1113 3116 1747
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSans-2d"/>
|
||||
@@ -1847,43 +1928,7 @@ z
|
||||
</g>
|
||||
<g id="text_25">
|
||||
<!-- Argentina -->
|
||||
<g style="fill: #555555" transform="translate(508.224503 82.954381) scale(0.07 -0.07)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-4a" d="M 2906 1791
|
||||
Q 2906 2416 2648 2759
|
||||
Q 2391 3103 1925 3103
|
||||
Q 1463 3103 1205 2759
|
||||
Q 947 2416 947 1791
|
||||
Q 947 1169 1205 825
|
||||
Q 1463 481 1925 481
|
||||
Q 2391 481 2648 825
|
||||
Q 2906 1169 2906 1791
|
||||
z
|
||||
M 3481 434
|
||||
Q 3481 -459 3084 -895
|
||||
Q 2688 -1331 1869 -1331
|
||||
Q 1566 -1331 1297 -1286
|
||||
Q 1028 -1241 775 -1147
|
||||
L 775 -588
|
||||
Q 1028 -725 1275 -790
|
||||
Q 1522 -856 1778 -856
|
||||
Q 2344 -856 2625 -561
|
||||
Q 2906 -266 2906 331
|
||||
L 2906 616
|
||||
Q 2728 306 2450 153
|
||||
Q 2172 0 1784 0
|
||||
Q 1141 0 747 490
|
||||
Q 353 981 353 1791
|
||||
Q 353 2603 747 3093
|
||||
Q 1141 3584 1784 3584
|
||||
Q 2172 3584 2450 3431
|
||||
Q 2728 3278 2906 2969
|
||||
L 2906 3500
|
||||
L 3481 3500
|
||||
L 3481 434
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<g style="fill: #555555" transform="translate(508.224503 83.528528) scale(0.07 -0.07)">
|
||||
<use xlink:href="#DejaVuSans-24"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(68.40625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4a" transform="translate(107.765625 0)"/>
|
||||
@@ -1897,32 +1942,7 @@ z
|
||||
</g>
|
||||
<g id="PathCollection_2">
|
||||
<defs>
|
||||
<path id="mccdb35be81" d="M -5.477226 5.477226
|
||||
L 5.477226 5.477226
|
||||
L 5.477226 -5.477226
|
||||
L -5.477226 -5.477226
|
||||
z
|
||||
" style="stroke: #ffffff; stroke-width: 1.2"/>
|
||||
</defs>
|
||||
<g clip-path="url(#p78bf4bd515)">
|
||||
<use xlink:href="#mccdb35be81" x="244.520641" y="238.105985" style="fill: #c2702f; stroke: #ffffff; stroke-width: 1.2"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="PathCollection_3">
|
||||
<defs>
|
||||
<path id="m52395d0b51" d="M 0 -5.477226
|
||||
L -5.477226 5.477226
|
||||
L 5.477226 5.477226
|
||||
z
|
||||
" style="stroke: #ffffff; stroke-width: 1.2"/>
|
||||
</defs>
|
||||
<g clip-path="url(#p78bf4bd515)">
|
||||
<use xlink:href="#m52395d0b51" x="292.975307" y="265.798437" style="fill: #8a5a9c; stroke: #ffffff; stroke-width: 1.2"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="PathCollection_4">
|
||||
<defs>
|
||||
<path id="mcc208cc139" d="M 0 5.477226
|
||||
<path id="m37d66f83f2" d="M 0 5.477226
|
||||
C 1.452577 5.477226 2.845856 4.900111 3.872983 3.872983
|
||||
C 4.900111 2.845856 5.477226 1.452577 5.477226 0
|
||||
C 5.477226 -1.452577 4.900111 -2.845856 3.872983 -3.872983
|
||||
@@ -1934,14 +1954,63 @@ C -2.845856 4.900111 -1.452577 5.477226 0 5.477226
|
||||
z
|
||||
" style="stroke: #ffffff; stroke-width: 1.2"/>
|
||||
</defs>
|
||||
<g clip-path="url(#p78bf4bd515)">
|
||||
<use xlink:href="#mcc208cc139" x="282.147121" y="254.307725" style="fill: #33688f; stroke: #ffffff; stroke-width: 1.2"/>
|
||||
<g clip-path="url(#p31b98d379f)">
|
||||
<use xlink:href="#m37d66f83f2" x="282.62114" y="265.798437" style="fill: #c0392b; stroke: #ffffff; stroke-width: 1.2"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="PathCollection_3">
|
||||
<defs>
|
||||
<path id="m0ad63f8aec" d="M 0 5.477226
|
||||
C 1.452577 5.477226 2.845856 4.900111 3.872983 3.872983
|
||||
C 4.900111 2.845856 5.477226 1.452577 5.477226 0
|
||||
C 5.477226 -1.452577 4.900111 -2.845856 3.872983 -3.872983
|
||||
C 2.845856 -4.900111 1.452577 -5.477226 0 -5.477226
|
||||
C -1.452577 -5.477226 -2.845856 -4.900111 -3.872983 -3.872983
|
||||
C -4.900111 -2.845856 -5.477226 -1.452577 -5.477226 0
|
||||
C -5.477226 1.452577 -4.900111 2.845856 -3.872983 3.872983
|
||||
C -2.845856 4.900111 -1.452577 5.477226 0 5.477226
|
||||
z
|
||||
" style="stroke: #ffffff; stroke-width: 1.2"/>
|
||||
</defs>
|
||||
<g clip-path="url(#p31b98d379f)">
|
||||
<use xlink:href="#m0ad63f8aec" x="245.738787" y="173.058181" style="fill: #2c6fbb; stroke: #ffffff; stroke-width: 1.2"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="PathCollection_4">
|
||||
<defs>
|
||||
<path id="m966982ec55" d="M 0 5.477226
|
||||
C 1.452577 5.477226 2.845856 4.900111 3.872983 3.872983
|
||||
C 4.900111 2.845856 5.477226 1.452577 5.477226 0
|
||||
C 5.477226 -1.452577 4.900111 -2.845856 3.872983 -3.872983
|
||||
C 2.845856 -4.900111 1.452577 -5.477226 0 -5.477226
|
||||
C -1.452577 -5.477226 -2.845856 -4.900111 -3.872983 -3.872983
|
||||
C -4.900111 -2.845856 -5.477226 -1.452577 -5.477226 0
|
||||
C -5.477226 1.452577 -4.900111 2.845856 -3.872983 3.872983
|
||||
C -2.845856 4.900111 -1.452577 5.477226 0 5.477226
|
||||
z
|
||||
" style="stroke: #ffffff; stroke-width: 1.2"/>
|
||||
</defs>
|
||||
<g clip-path="url(#p31b98d379f)">
|
||||
<use xlink:href="#m966982ec55" x="282.147121" y="256.734324" style="fill: #111111; stroke: #ffffff; stroke-width: 1.2"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_26">
|
||||
<!-- +C=+1.32 -->
|
||||
<g style="fill: #c2702f" transform="translate(253.520641 231.443875) scale(0.09 -0.09)">
|
||||
<!-- c=+1 -->
|
||||
<g style="fill: #c0392b" transform="translate(291.62114 259.136328) scale(0.09 -0.09)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-Bold-20" d="M 678 3084
|
||||
L 4684 3084
|
||||
L 4684 2350
|
||||
L 678 2350
|
||||
L 678 3084
|
||||
z
|
||||
M 678 1663
|
||||
L 4684 1663
|
||||
L 4684 922
|
||||
L 678 922
|
||||
L 678 1663
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-Bold-e" d="M 3053 4013
|
||||
L 3053 2375
|
||||
L 4684 2375
|
||||
@@ -1956,40 +2025,6 @@ L 2309 2375
|
||||
L 2309 4013
|
||||
L 3053 4013
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-Bold-26" d="M 4288 256
|
||||
Q 3956 84 3597 -3
|
||||
Q 3238 -91 2847 -91
|
||||
Q 1681 -91 1000 561
|
||||
Q 319 1213 319 2328
|
||||
Q 319 3447 1000 4098
|
||||
Q 1681 4750 2847 4750
|
||||
Q 3238 4750 3597 4662
|
||||
Q 3956 4575 4288 4403
|
||||
L 4288 3438
|
||||
Q 3953 3666 3628 3772
|
||||
Q 3303 3878 2944 3878
|
||||
Q 2300 3878 1931 3465
|
||||
Q 1563 3053 1563 2328
|
||||
Q 1563 1606 1931 1193
|
||||
Q 2300 781 2944 781
|
||||
Q 3303 781 3628 887
|
||||
Q 3953 994 4288 1222
|
||||
L 4288 256
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-Bold-20" d="M 678 3084
|
||||
L 4684 3084
|
||||
L 4684 2350
|
||||
L 678 2350
|
||||
L 678 3084
|
||||
z
|
||||
M 678 1663
|
||||
L 4684 1663
|
||||
L 4684 922
|
||||
L 678 922
|
||||
L 678 1663
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-Bold-14" d="M 750 831
|
||||
L 1813 831
|
||||
@@ -2004,82 +2039,17 @@ L 4013 0
|
||||
L 750 0
|
||||
L 750 831
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-Bold-11" d="M 653 1209
|
||||
L 1778 1209
|
||||
L 1778 0
|
||||
L 653 0
|
||||
L 653 1209
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-Bold-16" d="M 2981 2516
|
||||
Q 3453 2394 3698 2092
|
||||
Q 3944 1791 3944 1325
|
||||
Q 3944 631 3412 270
|
||||
Q 2881 -91 1863 -91
|
||||
Q 1503 -91 1142 -33
|
||||
Q 781 25 428 141
|
||||
L 428 1069
|
||||
Q 766 900 1098 814
|
||||
Q 1431 728 1753 728
|
||||
Q 2231 728 2486 893
|
||||
Q 2741 1059 2741 1369
|
||||
Q 2741 1688 2480 1852
|
||||
Q 2219 2016 1709 2016
|
||||
L 1228 2016
|
||||
L 1228 2791
|
||||
L 1734 2791
|
||||
Q 2188 2791 2409 2933
|
||||
Q 2631 3075 2631 3366
|
||||
Q 2631 3634 2415 3781
|
||||
Q 2200 3928 1806 3928
|
||||
Q 1516 3928 1219 3862
|
||||
Q 922 3797 628 3669
|
||||
L 628 4550
|
||||
Q 984 4650 1334 4700
|
||||
Q 1684 4750 2022 4750
|
||||
Q 2931 4750 3382 4451
|
||||
Q 3834 4153 3834 3553
|
||||
Q 3834 3144 3618 2883
|
||||
Q 3403 2622 2981 2516
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-Bold-15" d="M 1844 884
|
||||
L 3897 884
|
||||
L 3897 0
|
||||
L 506 0
|
||||
L 506 884
|
||||
L 2209 2388
|
||||
Q 2438 2594 2547 2791
|
||||
Q 2656 2988 2656 3200
|
||||
Q 2656 3528 2436 3728
|
||||
Q 2216 3928 1850 3928
|
||||
Q 1569 3928 1234 3808
|
||||
Q 900 3688 519 3450
|
||||
L 519 4475
|
||||
Q 925 4609 1322 4679
|
||||
Q 1719 4750 2100 4750
|
||||
Q 2938 4750 3402 4381
|
||||
Q 3866 4013 3866 3353
|
||||
Q 3866 2972 3669 2642
|
||||
Q 3472 2313 2841 1759
|
||||
L 1844 884
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSans-Bold-e"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-26" transform="translate(83.796875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-20" transform="translate(157.1875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-e" transform="translate(240.984375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-14" transform="translate(324.78125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-11" transform="translate(394.359375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-16" transform="translate(432.34375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-15" transform="translate(501.921875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-46"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-20" transform="translate(59.28125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-e" transform="translate(143.078125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-14" transform="translate(226.875 0)"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_27">
|
||||
<!-- -C=-1.32 -->
|
||||
<g style="fill: #8a5a9c" transform="translate(240.153745 269.136328) scale(0.09 -0.09)">
|
||||
<!-- c=-1 -->
|
||||
<g style="fill: #2c6fbb" transform="translate(213.864724 176.396072) scale(0.09 -0.09)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-Bold-10" d="M 347 2297
|
||||
L 2309 2297
|
||||
@@ -2089,19 +2059,15 @@ L 347 2297
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSans-Bold-10"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-26" transform="translate(41.5 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-20" transform="translate(114.890625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-10" transform="translate(198.6875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-14" transform="translate(240.1875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-11" transform="translate(309.765625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-16" transform="translate(347.75 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-15" transform="translate(417.328125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-46"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-20" transform="translate(59.28125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-10" transform="translate(143.078125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-Bold-14" transform="translate(184.578125 0)"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_28">
|
||||
<!-- base (c=0) -->
|
||||
<g style="fill: #33688f" transform="translate(291.147121 269.645967) scale(0.09 -0.09)">
|
||||
<g style="fill: #111111" transform="translate(291.147121 272.072566) scale(0.09 -0.09)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-Bold-45" d="M 2400 722
|
||||
Q 2759 722 2948 984
|
||||
@@ -2192,10 +2158,10 @@ z
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="p78bf4bd515">
|
||||
<clipPath id="p31b98d379f">
|
||||
<rect x="52.483594" y="20.798437" width="474.3" height="415.8"/>
|
||||
</clipPath>
|
||||
<clipPath id="p5c05145b87">
|
||||
<clipPath id="p16c43892ab">
|
||||
<rect x="93.289594" y="324.332437" width="108.108" height="108.108"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
|
||||
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 94 KiB |
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="746.775309pt" height="341.733632pt" viewBox="0 0 746.775309 341.733632" xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="748.100625pt" height="341.733632pt" viewBox="0 0 748.100625 341.733632" xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<metadata>
|
||||
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||
<cc:Work>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:date>2026-06-27T06:16:49.369498</dc:date>
|
||||
<dc:date>2026-06-30T12:29:32.205362</dc:date>
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
@@ -22,8 +22,8 @@
|
||||
<g id="figure_1">
|
||||
<g id="patch_1">
|
||||
<path d="M 0 341.733632
|
||||
L 746.775309 341.733632
|
||||
L 746.775309 0
|
||||
L 748.100625 341.733632
|
||||
L 748.100625 0
|
||||
L 0 0
|
||||
z
|
||||
" style="fill: #ffffff"/>
|
||||
@@ -31,9 +31,9 @@ z
|
||||
<g id="axes_1">
|
||||
<g id="patch_2">
|
||||
<path d="M 42.942969 302.091763
|
||||
L 729.316267 302.091763
|
||||
L 729.316267 34.566604
|
||||
L 42.942969 34.566604
|
||||
L 740.900625 302.091763
|
||||
L 740.900625 34.329182
|
||||
L 42.942969 34.329182
|
||||
z
|
||||
" style="fill: #ffffff"/>
|
||||
</g>
|
||||
@@ -41,17 +41,17 @@ z
|
||||
<g id="xtick_1">
|
||||
<g id="line2d_1">
|
||||
<defs>
|
||||
<path id="m644e404835" d="M 0 0
|
||||
<path id="mf91fa581e5" d="M 0 0
|
||||
L 0 3.5
|
||||
" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</defs>
|
||||
<g>
|
||||
<use xlink:href="#m644e404835" x="88.956821" y="302.091763" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#mf91fa581e5" x="89.733426" y="302.091763" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_1">
|
||||
<!-- Care -->
|
||||
<g transform="translate(71.953846 323.617448) rotate(-30) scale(0.08 -0.08)">
|
||||
<g transform="translate(72.730451 323.617448) rotate(-30) scale(0.08 -0.08)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-26" d="M 4122 4306
|
||||
L 4122 3641
|
||||
@@ -160,12 +160,12 @@ z
|
||||
<g id="xtick_2">
|
||||
<g id="line2d_2">
|
||||
<g>
|
||||
<use xlink:href="#m644e404835" x="207.82594" y="302.091763" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#mf91fa581e5" x="210.608774" y="302.091763" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_2">
|
||||
<!-- Sanctity -->
|
||||
<g transform="translate(178.563292 330.696115) rotate(-30) scale(0.08 -0.08)">
|
||||
<g transform="translate(181.346127 330.696115) rotate(-30) scale(0.08 -0.08)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-36" d="M 3425 4513
|
||||
L 3425 3897
|
||||
@@ -304,12 +304,12 @@ z
|
||||
<g id="xtick_3">
|
||||
<g id="line2d_3">
|
||||
<g>
|
||||
<use xlink:href="#m644e404835" x="326.695059" y="302.091763" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#mf91fa581e5" x="331.484123" y="302.091763" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_3">
|
||||
<!-- Authority -->
|
||||
<g transform="translate(293.668448 332.86924) rotate(-30) scale(0.08 -0.08)">
|
||||
<g transform="translate(298.457512 332.86924) rotate(-30) scale(0.08 -0.08)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-24" d="M 2188 4044
|
||||
L 1331 1722
|
||||
@@ -405,12 +405,12 @@ z
|
||||
<g id="xtick_4">
|
||||
<g id="line2d_4">
|
||||
<g>
|
||||
<use xlink:href="#m644e404835" x="445.564177" y="302.091763" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#mf91fa581e5" x="452.359471" y="302.091763" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_4">
|
||||
<!-- Loyalty -->
|
||||
<g transform="translate(419.537217 328.82799) rotate(-30) scale(0.08 -0.08)">
|
||||
<g transform="translate(426.332511 328.82799) rotate(-30) scale(0.08 -0.08)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-2f" d="M 628 4666
|
||||
L 1259 4666
|
||||
@@ -442,12 +442,12 @@ z
|
||||
<g id="xtick_5">
|
||||
<g id="line2d_5">
|
||||
<g>
|
||||
<use xlink:href="#m644e404835" x="564.433296" y="302.091763" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#mf91fa581e5" x="573.234819" y="302.091763" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_5">
|
||||
<!-- Fairness -->
|
||||
<g transform="translate(535.353596 330.59049) rotate(-30) scale(0.08 -0.08)">
|
||||
<g transform="translate(544.155119 330.59049) rotate(-30) scale(0.08 -0.08)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-29" d="M 628 4666
|
||||
L 3309 4666
|
||||
@@ -508,12 +508,12 @@ z
|
||||
<g id="xtick_6">
|
||||
<g id="line2d_6">
|
||||
<g>
|
||||
<use xlink:href="#m644e404835" x="683.302415" y="302.091763" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#mf91fa581e5" x="694.110168" y="302.091763" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_6">
|
||||
<!-- Liberty -->
|
||||
<g transform="translate(658.230248 328.27674) rotate(-30) scale(0.08 -0.08)">
|
||||
<g transform="translate(669.038 328.27674) rotate(-30) scale(0.08 -0.08)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-45" d="M 3116 1747
|
||||
Q 3116 2381 2855 2742
|
||||
@@ -556,23 +556,23 @@ z
|
||||
<g id="matplotlib.axis_2">
|
||||
<g id="ytick_1">
|
||||
<g id="line2d_7">
|
||||
<path d="M 42.942969 282.883349
|
||||
L 729.316267 282.883349
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.15; stroke-width: 0.8; stroke-linecap: square"/>
|
||||
<path d="M 42.942969 282.788144
|
||||
L 740.900625 282.788144
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.15; stroke-width: 0.8; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_8">
|
||||
<defs>
|
||||
<path id="mf0b620401b" d="M 0 0
|
||||
<path id="md4345c65bb" d="M 0 0
|
||||
L -3.5 0
|
||||
" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</defs>
|
||||
<g>
|
||||
<use xlink:href="#mf0b620401b" x="42.942969" y="282.883349" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#md4345c65bb" x="42.942969" y="282.788144" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_7">
|
||||
<!-- −2 -->
|
||||
<g transform="translate(21.200781 286.682177) scale(0.1 -0.1)">
|
||||
<g transform="translate(21.200781 286.586972) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-c9c" d="M 678 2272
|
||||
L 4684 2272
|
||||
@@ -613,18 +613,18 @@ z
|
||||
</g>
|
||||
<g id="ytick_2">
|
||||
<g id="line2d_9">
|
||||
<path d="M 42.942969 226.726163
|
||||
L 729.316267 226.726163
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.15; stroke-width: 0.8; stroke-linecap: square"/>
|
||||
<path d="M 42.942969 228.945254
|
||||
L 740.900625 228.945254
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.15; stroke-width: 0.8; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_10">
|
||||
<g>
|
||||
<use xlink:href="#mf0b620401b" x="42.942969" y="226.726163" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#md4345c65bb" x="42.942969" y="228.945254" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_8">
|
||||
<!-- −1 -->
|
||||
<g transform="translate(21.200781 230.524992) scale(0.1 -0.1)">
|
||||
<g transform="translate(21.200781 232.744082) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-14" d="M 794 531
|
||||
L 1825 531
|
||||
@@ -648,18 +648,18 @@ z
|
||||
</g>
|
||||
<g id="ytick_3">
|
||||
<g id="line2d_11">
|
||||
<path d="M 42.942969 170.568978
|
||||
L 729.316267 170.568978
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.15; stroke-width: 0.8; stroke-linecap: square"/>
|
||||
<path d="M 42.942969 175.102364
|
||||
L 740.900625 175.102364
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.15; stroke-width: 0.8; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_12">
|
||||
<g>
|
||||
<use xlink:href="#mf0b620401b" x="42.942969" y="170.568978" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#md4345c65bb" x="42.942969" y="175.102364" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_9">
|
||||
<!-- 0 -->
|
||||
<g transform="translate(29.580469 174.367806) scale(0.1 -0.1)">
|
||||
<g transform="translate(29.580469 178.901192) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-13" d="M 2034 4250
|
||||
Q 1547 4250 1301 3770
|
||||
@@ -689,43 +689,43 @@ z
|
||||
</g>
|
||||
<g id="ytick_4">
|
||||
<g id="line2d_13">
|
||||
<path d="M 42.942969 114.411792
|
||||
L 729.316267 114.411792
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.15; stroke-width: 0.8; stroke-linecap: square"/>
|
||||
<path d="M 42.942969 121.259474
|
||||
L 740.900625 121.259474
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.15; stroke-width: 0.8; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_14">
|
||||
<g>
|
||||
<use xlink:href="#mf0b620401b" x="42.942969" y="114.411792" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#md4345c65bb" x="42.942969" y="121.259474" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_10">
|
||||
<!-- 1 -->
|
||||
<g transform="translate(29.580469 118.210621) scale(0.1 -0.1)">
|
||||
<g transform="translate(29.580469 125.058302) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSans-14"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="ytick_5">
|
||||
<g id="line2d_15">
|
||||
<path d="M 42.942969 58.254607
|
||||
L 729.316267 58.254607
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.15; stroke-width: 0.8; stroke-linecap: square"/>
|
||||
<path d="M 42.942969 67.416584
|
||||
L 740.900625 67.416584
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #b0b0b0; stroke-opacity: 0.15; stroke-width: 0.8; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_16">
|
||||
<g>
|
||||
<use xlink:href="#mf0b620401b" x="42.942969" y="58.254607" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
<use xlink:href="#md4345c65bb" x="42.942969" y="67.416584" style="stroke: #000000; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_11">
|
||||
<!-- 2 -->
|
||||
<g transform="translate(29.580469 62.053435) scale(0.1 -0.1)">
|
||||
<g transform="translate(29.580469 71.215413) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSans-15"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_12">
|
||||
<!-- relative emphasis (z across foundations) -->
|
||||
<g transform="translate(14.798438 271.217464) rotate(-90) scale(0.1 -0.1)">
|
||||
<g transform="translate(14.798438 271.098754) rotate(-90) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-59" d="M 191 3500
|
||||
L 800 3500
|
||||
@@ -927,17 +927,17 @@ z
|
||||
</g>
|
||||
<g id="patch_3">
|
||||
<path d="M 42.942969 302.091763
|
||||
L 42.942969 34.566604
|
||||
L 42.942969 34.329182
|
||||
" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="patch_4">
|
||||
<path d="M 42.942969 302.091763
|
||||
L 729.316267 302.091763
|
||||
L 740.900625 302.091763
|
||||
" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="PathCollection_1">
|
||||
<defs>
|
||||
<path id="m9061552be3" d="M 0 2.44949
|
||||
<path id="m621bdbe835" d="M 0 2.44949
|
||||
C 0.649612 2.44949 1.272706 2.191396 1.732051 1.732051
|
||||
C 2.191396 1.272706 2.44949 0.649612 2.44949 0
|
||||
C 2.44949 -0.649612 2.191396 -1.272706 1.732051 -1.732051
|
||||
@@ -949,92 +949,92 @@ C -1.272706 2.191396 -0.649612 2.44949 0 2.44949
|
||||
z
|
||||
" style="stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
</defs>
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m9061552be3" x="77.600132" y="137.054276" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="73.094763" y="128.465301" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="70.287143" y="124.103421" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="69.987183" y="115.677151" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="79.763502" y="100.891945" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<g clip-path="url(#p37906c9f16)">
|
||||
<use xlink:href="#m621bdbe835" x="78.185063" y="142.968838" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="73.603654" y="134.733823" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="70.748648" y="130.5517" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="70.443625" y="122.472686" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="80.384945" y="108.296794" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="PathCollection_2">
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m9061552be3" x="199.853342" y="187.124095" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="196.097141" y="186.252357" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="197.604687" y="159.039365" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="195.323976" y="154.445283" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="200.127177" y="104.40465" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<g clip-path="url(#p37906c9f16)">
|
||||
<use xlink:href="#m621bdbe835" x="202.501617" y="190.975228" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="198.682021" y="190.139415" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="200.215011" y="164.047898" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="197.895807" y="159.643143" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="202.780075" y="111.664736" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="PathCollection_3">
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m9061552be3" x="317.533438" y="235.588747" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="307.556223" y="223.952512" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="318.04328" y="209.412425" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="307.934727" y="202.947567" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="316.475756" y="194.709105" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<g clip-path="url(#p37906c9f16)">
|
||||
<use xlink:href="#m621bdbe835" x="322.167875" y="237.442601" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="312.022268" y="226.285907" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="322.686322" y="212.345032" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="312.407161" y="206.146598" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="321.092342" y="198.247652" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="PathCollection_4">
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m9061552be3" x="428.547097" y="281.02679" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="436.983256" y="256.321648" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="433.035663" y="251.076817" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="430.069312" y="246.067591" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="431.578264" y="245.47087" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<g clip-path="url(#p37906c9f16)">
|
||||
<use xlink:href="#m621bdbe835" x="435.055182" y="281.008095" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="443.633724" y="257.321077" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="439.619505" y="252.292392" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="436.603089" y="247.489601" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="438.137508" y="246.917472" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="PathCollection_5">
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m9061552be3" x="545.60835" y="131.673548" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="546.785858" y="111.604311" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="553.489661" y="108.237007" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="553.202106" y="85.575181" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="552.811855" y="81.448918" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<g clip-path="url(#p37906c9f16)">
|
||||
<use xlink:href="#m621bdbe835" x="554.092153" y="137.809855" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="555.289534" y="118.567692" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="562.106482" y="115.339158" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="561.814074" y="93.61125" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="561.417236" y="89.655034" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="PathCollection_6">
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m9061552be3" x="668.837838" y="208.532951" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="676.366102" y="195.321301" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="676.16518" y="176.639963" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="672.541824" y="151.9363" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m9061552be3" x="672.111346" y="122.067941" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<g clip-path="url(#p37906c9f16)">
|
||||
<use xlink:href="#m621bdbe835" x="679.401463" y="211.501802" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="687.056786" y="198.834619" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="686.852473" y="180.923158" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="683.167963" y="157.237558" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
<use xlink:href="#m621bdbe835" x="682.73022" y="128.600105" style="fill: #616161; fill-opacity: 0.9; stroke: #ffffff; stroke-opacity: 0.9; stroke-width: 0.3"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="line2d_17">
|
||||
<path d="M 64.4161 124.103421
|
||||
L 87.423026 124.103421
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #262626; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<path d="M 64.778516 130.5517
|
||||
L 88.173744 130.5517
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #262626; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_18">
|
||||
<path d="M 183.285219 159.039365
|
||||
L 206.292145 159.039365
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #262626; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<path d="M 185.653864 164.047898
|
||||
L 209.049093 164.047898
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #262626; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_19">
|
||||
<path d="M 302.154337 209.412425
|
||||
L 325.161264 209.412425
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #262626; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<path d="M 306.529212 212.345032
|
||||
L 329.924441 212.345032
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #262626; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_20">
|
||||
<path d="M 421.023456 251.076817
|
||||
L 444.030382 251.076817
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #262626; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<path d="M 427.40456 252.292392
|
||||
L 450.799789 252.292392
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #262626; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_21">
|
||||
<path d="M 539.892575 108.237007
|
||||
L 562.899501 108.237007
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #262626; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<path d="M 548.279909 115.339158
|
||||
L 571.675137 115.339158
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #262626; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_22">
|
||||
<path d="M 658.761694 176.639963
|
||||
L 681.76862 176.639963
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #262626; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<path d="M 669.155257 180.923158
|
||||
L 692.550486 180.923158
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #262626; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="text_13">
|
||||
<!-- Argentina -->
|
||||
<g style="fill: #404040" transform="translate(58.846672 97.525589) scale(0.07 -0.07)">
|
||||
<g style="fill: #404040" transform="translate(59.403239 104.999866) scale(0.07 -0.07)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-4a" d="M 2906 1791
|
||||
Q 2906 2416 2648 2759
|
||||
@@ -1084,7 +1084,7 @@ z
|
||||
</g>
|
||||
<g id="text_14">
|
||||
<!-- US -->
|
||||
<g style="fill: #404040" transform="translate(71.136047 144.057351) scale(0.07 -0.07)">
|
||||
<g style="fill: #404040" transform="translate(71.692614 149.902484) scale(0.07 -0.07)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-38" d="M 556 4666
|
||||
L 1191 4666
|
||||
@@ -1110,14 +1110,14 @@ z
|
||||
</g>
|
||||
<g id="text_15">
|
||||
<!-- US -->
|
||||
<g style="fill: #404040" transform="translate(190.005166 101.038294) scale(0.07 -0.07)">
|
||||
<g style="fill: #404040" transform="translate(192.567963 108.367809) scale(0.07 -0.07)">
|
||||
<use xlink:href="#DejaVuSans-38"/>
|
||||
<use xlink:href="#DejaVuSans-36" transform="translate(73.1875 0)"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_16">
|
||||
<!-- Argentina -->
|
||||
<g style="fill: #404040" transform="translate(177.715791 194.127717) scale(0.07 -0.07)">
|
||||
<g style="fill: #404040" transform="translate(180.278588 197.909421) scale(0.07 -0.07)">
|
||||
<use xlink:href="#DejaVuSans-24"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(68.40625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4a" transform="translate(107.765625 0)"/>
|
||||
@@ -1131,7 +1131,7 @@ z
|
||||
</g>
|
||||
<g id="text_17">
|
||||
<!-- Japan -->
|
||||
<g style="fill: #404040" transform="translate(303.895535 191.342749) scale(0.07 -0.07)">
|
||||
<g style="fill: #404040" transform="translate(308.464561 194.950725) scale(0.07 -0.07)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-2d" d="M 628 4666
|
||||
L 1259 4666
|
||||
@@ -1156,7 +1156,7 @@ z
|
||||
</g>
|
||||
<g id="text_18">
|
||||
<!-- Argentina -->
|
||||
<g style="fill: #404040" transform="translate(296.58491 242.592369) scale(0.07 -0.07)">
|
||||
<g style="fill: #404040" transform="translate(301.153936 244.376794) scale(0.07 -0.07)">
|
||||
<use xlink:href="#DejaVuSans-24"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(68.40625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4a" transform="translate(107.765625 0)"/>
|
||||
@@ -1170,7 +1170,7 @@ z
|
||||
</g>
|
||||
<g id="text_19">
|
||||
<!-- Peru -->
|
||||
<g style="fill: #404040" transform="translate(424.730669 242.104514) scale(0.07 -0.07)">
|
||||
<g style="fill: #404040" transform="translate(431.305925 243.620544) scale(0.07 -0.07)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-33" d="M 1259 4147
|
||||
L 1259 2394
|
||||
@@ -1202,7 +1202,7 @@ z
|
||||
</g>
|
||||
<g id="text_20">
|
||||
<!-- Japan -->
|
||||
<g style="fill: #404040" transform="translate(422.764654 288.029865) scale(0.07 -0.07)">
|
||||
<g style="fill: #404040" transform="translate(429.339909 287.941741) scale(0.07 -0.07)">
|
||||
<use xlink:href="#DejaVuSans-2d"/>
|
||||
<use xlink:href="#DejaVuSans-44" transform="translate(29.5 0)"/>
|
||||
<use xlink:href="#DejaVuSans-53" transform="translate(90.78125 0)"/>
|
||||
@@ -1212,7 +1212,7 @@ z
|
||||
</g>
|
||||
<g id="text_21">
|
||||
<!-- Peru -->
|
||||
<g style="fill: #404040" transform="translate(543.599788 78.082562) scale(0.07 -0.07)">
|
||||
<g style="fill: #404040" transform="translate(552.181273 86.358107) scale(0.07 -0.07)">
|
||||
<use xlink:href="#DejaVuSans-33"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(56.734375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(118.265625 0)"/>
|
||||
@@ -1221,7 +1221,7 @@ z
|
||||
</g>
|
||||
<g id="text_22">
|
||||
<!-- Argentina -->
|
||||
<g style="fill: #404040" transform="translate(534.323147 138.67717) scale(0.07 -0.07)">
|
||||
<g style="fill: #404040" transform="translate(542.904632 144.744048) scale(0.07 -0.07)">
|
||||
<use xlink:href="#DejaVuSans-24"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(68.40625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4a" transform="translate(107.765625 0)"/>
|
||||
@@ -1235,7 +1235,7 @@ z
|
||||
</g>
|
||||
<g id="text_23">
|
||||
<!-- Argentina -->
|
||||
<g style="fill: #404040" transform="translate(653.192266 118.701585) scale(0.07 -0.07)">
|
||||
<g style="fill: #404040" transform="translate(663.779981 125.303178) scale(0.07 -0.07)">
|
||||
<use xlink:href="#DejaVuSans-24"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(68.40625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4a" transform="translate(107.765625 0)"/>
|
||||
@@ -1249,7 +1249,7 @@ z
|
||||
</g>
|
||||
<g id="text_24">
|
||||
<!-- Peru -->
|
||||
<g style="fill: #404040" transform="translate(662.468907 215.536026) scale(0.07 -0.07)">
|
||||
<g style="fill: #404040" transform="translate(673.056621 218.435448) scale(0.07 -0.07)">
|
||||
<use xlink:href="#DejaVuSans-33"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(56.734375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(118.265625 0)"/>
|
||||
@@ -1257,223 +1257,158 @@ z
|
||||
</g>
|
||||
</g>
|
||||
<g id="line2d_23">
|
||||
<path d="M 107.362362 70.377058
|
||||
L 107.362362 70.815282
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #c0392b; stroke-width: 2; stroke-linecap: round"/>
|
||||
<path d="M 94.412472 70.171417
|
||||
L 103.770563 79.039457
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #2c6fbb; stroke-opacity: 0.9; stroke-width: 2; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="line2d_24">
|
||||
<path d="M 98.159592 70.377058
|
||||
L 98.159592 79.665926
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #2c6fbb; stroke-width: 2; stroke-linecap: round"/>
|
||||
<path d="M 103.770563 79.039457
|
||||
L 113.128655 86.645961
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #c0392b; stroke-opacity: 0.9; stroke-width: 2; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="line2d_25">
|
||||
<path d="M 226.231481 190.361418
|
||||
L 226.231481 181.801946
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #c0392b; stroke-width: 2; stroke-linecap: round"/>
|
||||
<path d="M 215.28782 172.618092
|
||||
L 224.645912 194.079137
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #2c6fbb; stroke-opacity: 0.9; stroke-width: 2; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="line2d_26">
|
||||
<path d="M 217.02871 190.361418
|
||||
L 217.02871 192.380118
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #2c6fbb; stroke-width: 2; stroke-linecap: round"/>
|
||||
<path d="M 224.645912 194.079137
|
||||
L 234.004003 194.913813
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #c0392b; stroke-opacity: 0.9; stroke-width: 2; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="line2d_27">
|
||||
<path d="M 345.1006 149.001394
|
||||
L 345.1006 144.832056
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #c0392b; stroke-width: 2; stroke-linecap: round"/>
|
||||
<path d="M 336.163168 181.164954
|
||||
L 345.52126 154.423603
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #2c6fbb; stroke-opacity: 0.9; stroke-width: 2; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="line2d_28">
|
||||
<path d="M 335.897829 149.001394
|
||||
L 335.897829 138.642771
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #2c6fbb; stroke-width: 2; stroke-linecap: round"/>
|
||||
<path d="M 345.52126 154.423603
|
||||
L 354.879351 140.995595
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #c0392b; stroke-opacity: 0.9; stroke-width: 2; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="line2d_29">
|
||||
<path d="M 463.969718 244.75302
|
||||
L 463.969718 241.089357
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #c0392b; stroke-width: 2; stroke-linecap: round"/>
|
||||
<path d="M 457.038517 236.99788
|
||||
L 466.396608 246.229205
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #2c6fbb; stroke-opacity: 0.9; stroke-width: 2; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="line2d_30">
|
||||
<path d="M 454.766948 244.75302
|
||||
L 454.766948 255.236623
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #2c6fbb; stroke-width: 2; stroke-linecap: round"/>
|
||||
<path d="M 466.396608 246.229205
|
||||
L 475.7547 252.654003
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #c0392b; stroke-opacity: 0.9; stroke-width: 2; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="line2d_31">
|
||||
<path d="M 582.838837 151.770777
|
||||
L 582.838837 158.875656
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #c0392b; stroke-width: 2; stroke-linecap: round"/>
|
||||
<path d="M 577.913865 165.407939
|
||||
L 587.271957 157.078857
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #2c6fbb; stroke-opacity: 0.9; stroke-width: 2; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="line2d_32">
|
||||
<path d="M 573.636067 151.770777
|
||||
L 573.636067 148.239097
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #2c6fbb; stroke-width: 2; stroke-linecap: round"/>
|
||||
<path d="M 587.271957 157.078857
|
||||
L 596.630048 158.700153
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #c0392b; stroke-opacity: 0.9; stroke-width: 2; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="line2d_33">
|
||||
<path d="M 701.707956 217.1502
|
||||
L 701.707956 225.999571
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #c0392b; stroke-width: 2; stroke-linecap: round"/>
|
||||
<path d="M 698.789213 224.253901
|
||||
L 708.147305 219.763926
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #2c6fbb; stroke-opacity: 0.9; stroke-width: 2; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="line2d_34">
|
||||
<path d="M 692.505186 217.1502
|
||||
L 692.505186 209.249332
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #2c6fbb; stroke-width: 2; stroke-linecap: round"/>
|
||||
<path d="M 708.147305 219.763926
|
||||
L 717.505396 216.704659
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #c0392b; stroke-opacity: 0.9; stroke-width: 2; stroke-linecap: round"/>
|
||||
</g>
|
||||
<g id="line2d_35">
|
||||
<defs>
|
||||
<path id="m64331c081f" d="M 0 1.75
|
||||
C 0.464105 1.75 0.909265 1.565609 1.237437 1.237437
|
||||
C 1.565609 0.909265 1.75 0.464105 1.75 0
|
||||
C 1.75 -0.464105 1.565609 -0.909265 1.237437 -1.237437
|
||||
C 0.909265 -1.565609 0.464105 -1.75 0 -1.75
|
||||
C -0.464105 -1.75 -0.909265 -1.565609 -1.237437 -1.237437
|
||||
C -1.565609 -0.909265 -1.75 -0.464105 -1.75 0
|
||||
C -1.75 0.464105 -1.565609 0.909265 -1.237437 1.237437
|
||||
C -0.909265 1.565609 -0.464105 1.75 0 1.75
|
||||
z
|
||||
" style="stroke: #000000"/>
|
||||
</defs>
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m64331c081f" x="102.760977" y="70.377058" style="stroke: #000000"/>
|
||||
</g>
|
||||
<path d="M 91.449076 70.171417
|
||||
L 97.375868 70.171417
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #2c6fbb; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_36">
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m64331c081f" x="221.630096" y="190.361418" style="stroke: #000000"/>
|
||||
</g>
|
||||
<path d="M 100.066319 79.039457
|
||||
L 107.474808 79.039457
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_37">
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m64331c081f" x="340.499214" y="149.001394" style="stroke: #000000"/>
|
||||
</g>
|
||||
<path d="M 110.165259 86.645961
|
||||
L 116.09205 86.645961
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #c0392b; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_38">
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m64331c081f" x="459.368333" y="244.75302" style="stroke: #000000"/>
|
||||
</g>
|
||||
<path d="M 212.324425 172.618092
|
||||
L 218.251216 172.618092
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #2c6fbb; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_39">
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m64331c081f" x="578.237452" y="151.770777" style="stroke: #000000"/>
|
||||
</g>
|
||||
<path d="M 220.941667 194.079137
|
||||
L 228.350156 194.079137
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_40">
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m64331c081f" x="697.106571" y="217.1502" style="stroke: #000000"/>
|
||||
</g>
|
||||
<path d="M 231.040608 194.913813
|
||||
L 236.967399 194.913813
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #c0392b; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_41">
|
||||
<path d="M 107.362362 70.815282
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #c0392b; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<defs>
|
||||
<path id="med8670372e" d="M -0 3.5
|
||||
L 3.5 -3.5
|
||||
L -3.5 -3.5
|
||||
z
|
||||
" style="stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</defs>
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#med8670372e" x="107.362362" y="70.815282" style="fill: #c0392b; stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</g>
|
||||
<path d="M 333.199773 181.164954
|
||||
L 339.126564 181.164954
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #2c6fbb; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_42">
|
||||
<path d="M 98.159592 79.665926
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #2c6fbb; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<defs>
|
||||
<path id="mdba8fbd0a3" d="M -0 3.5
|
||||
L 3.5 -3.5
|
||||
L -3.5 -3.5
|
||||
z
|
||||
" style="stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</defs>
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#mdba8fbd0a3" x="98.159592" y="79.665926" style="fill: #2c6fbb; stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</g>
|
||||
<path d="M 341.817015 154.423603
|
||||
L 349.225504 154.423603
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_43">
|
||||
<path d="M 226.231481 181.801946
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #c0392b; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<defs>
|
||||
<path id="m95e17c45aa" d="M 0 -3.5
|
||||
L -3.5 3.5
|
||||
L 3.5 3.5
|
||||
z
|
||||
" style="stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</defs>
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m95e17c45aa" x="226.231481" y="181.801946" style="fill: #c0392b; stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</g>
|
||||
<path d="M 351.915956 140.995595
|
||||
L 357.842747 140.995595
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #c0392b; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_44">
|
||||
<path d="M 217.02871 192.380118
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #2c6fbb; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#mdba8fbd0a3" x="217.02871" y="192.380118" style="fill: #2c6fbb; stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</g>
|
||||
<path d="M 454.075121 236.99788
|
||||
L 460.001912 236.99788
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #2c6fbb; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_45">
|
||||
<path d="M 345.1006 144.832056
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #c0392b; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m95e17c45aa" x="345.1006" y="144.832056" style="fill: #c0392b; stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</g>
|
||||
<path d="M 462.692364 246.229205
|
||||
L 470.100853 246.229205
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_46">
|
||||
<path d="M 335.897829 138.642771
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #2c6fbb; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<defs>
|
||||
<path id="m215efe3ba6" d="M 0 -3.5
|
||||
L -3.5 3.5
|
||||
L 3.5 3.5
|
||||
z
|
||||
" style="stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</defs>
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m215efe3ba6" x="335.897829" y="138.642771" style="fill: #2c6fbb; stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</g>
|
||||
<path d="M 472.791304 252.654003
|
||||
L 478.718095 252.654003
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #c0392b; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_47">
|
||||
<path d="M 463.969718 241.089357
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #c0392b; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m95e17c45aa" x="463.969718" y="241.089357" style="fill: #c0392b; stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</g>
|
||||
<path d="M 574.950469 165.407939
|
||||
L 580.877261 165.407939
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #2c6fbb; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_48">
|
||||
<path d="M 454.766948 255.236623
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #2c6fbb; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#mdba8fbd0a3" x="454.766948" y="255.236623" style="fill: #2c6fbb; stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</g>
|
||||
<path d="M 583.567712 157.078857
|
||||
L 590.976201 157.078857
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_49">
|
||||
<path d="M 582.838837 158.875656
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #c0392b; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#med8670372e" x="582.838837" y="158.875656" style="fill: #c0392b; stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</g>
|
||||
<path d="M 593.666652 158.700153
|
||||
L 599.593444 158.700153
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #c0392b; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_50">
|
||||
<path d="M 573.636067 148.239097
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #2c6fbb; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m215efe3ba6" x="573.636067" y="148.239097" style="fill: #2c6fbb; stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</g>
|
||||
<path d="M 695.825818 224.253901
|
||||
L 701.752609 224.253901
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #2c6fbb; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_51">
|
||||
<path d="M 701.707956 225.999571
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #c0392b; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#med8670372e" x="701.707956" y="225.999571" style="fill: #c0392b; stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</g>
|
||||
<path d="M 704.44306 219.763926
|
||||
L 711.851549 219.763926
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #000000; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="line2d_52">
|
||||
<path d="M 692.505186 209.249332
|
||||
" clip-path="url(#pa5472890de)" style="fill: none; stroke: #2c6fbb; stroke-width: 1.5; stroke-linecap: square"/>
|
||||
<g clip-path="url(#pa5472890de)">
|
||||
<use xlink:href="#m215efe3ba6" x="692.505186" y="209.249332" style="fill: #2c6fbb; stroke: #000000; stroke-opacity: 0; stroke-linejoin: miter"/>
|
||||
</g>
|
||||
<path d="M 714.542001 216.704659
|
||||
L 720.468792 216.704659
|
||||
" clip-path="url(#p37906c9f16)" style="fill: none; stroke: #c0392b; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="text_25">
|
||||
<!-- c=+1 -->
|
||||
<g style="fill: #c0392b" transform="translate(720.113497 227.765977) scale(0.068 -0.068)">
|
||||
<g style="fill: #c0392b" transform="translate(368.916489 142.762001) scale(0.068 -0.068)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-20" d="M 678 2906
|
||||
L 4684 2906
|
||||
@@ -1512,7 +1447,7 @@ z
|
||||
</g>
|
||||
<g id="text_26">
|
||||
<!-- c=-1 -->
|
||||
<g style="fill: #2c6fbb" transform="translate(720.113497 211.015739) scale(0.068 -0.068)">
|
||||
<g style="fill: #2c6fbb" transform="translate(368.916489 182.93136) scale(0.068 -0.068)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-10" d="M 313 2009
|
||||
L 1997 2009
|
||||
@@ -1529,15 +1464,15 @@ z
|
||||
</g>
|
||||
</g>
|
||||
<g id="line2d_53">
|
||||
<path d="M 60.581612 51.955739
|
||||
L 60.581612 43.929984
|
||||
L 91.257514 43.929984
|
||||
L 91.257514 51.955739
|
||||
<path d="M 60.879311 51.73375
|
||||
L 60.879311 43.700872
|
||||
L 92.072949 43.700872
|
||||
L 92.072949 51.73375
|
||||
" style="fill: none; stroke: #616161; stroke-width: 0.8; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="text_27">
|
||||
<!-- human -->
|
||||
<g style="fill: #616161" transform="translate(61.472688 38.917925) scale(0.075 -0.075)">
|
||||
<g style="fill: #616161" transform="translate(62.029255 38.685963) scale(0.075 -0.075)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-Bold-4b" d="M 4056 2131
|
||||
L 4056 0
|
||||
@@ -1680,15 +1615,15 @@ z
|
||||
</g>
|
||||
</g>
|
||||
<g id="line2d_54">
|
||||
<path d="M 95.092002 51.955739
|
||||
L 95.092002 43.929984
|
||||
L 110.429952 43.929984
|
||||
L 110.429952 51.955739
|
||||
<path d="M 95.972154 51.73375
|
||||
L 95.972154 43.700872
|
||||
L 111.568973 43.700872
|
||||
L 111.568973 51.73375
|
||||
" style="fill: none; stroke: #262626; stroke-width: 0.8; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="text_28">
|
||||
<!-- AI -->
|
||||
<g style="fill: #262626" transform="translate(98.463711 38.917925) scale(0.075 -0.075)">
|
||||
<g style="fill: #262626" transform="translate(99.473298 38.685963) scale(0.075 -0.075)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-Bold-24" d="M 3419 850
|
||||
L 1538 850
|
||||
@@ -1720,8 +1655,8 @@ z
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_29">
|
||||
<!-- Steered MFV vignettes: mean_diff: fairness situations vs others -->
|
||||
<g transform="translate(199.750234 15.558281) scale(0.11 -0.11)">
|
||||
<!-- Steered MFV vignettes: -Authority -->
|
||||
<g transform="translate(280.475625 15.558281) scale(0.11 -0.11)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-30" d="M 628 4666
|
||||
L 1569 4666
|
||||
@@ -1761,48 +1696,6 @@ L 1409 2516
|
||||
L 750 2516
|
||||
L 750 3309
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-42" d="M 3263 -1063
|
||||
L 3263 -1509
|
||||
L -63 -1509
|
||||
L -63 -1063
|
||||
L 3263 -1063
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-13ae" d="M 4531 4863
|
||||
L 4531 4384
|
||||
L 3981 4384
|
||||
Q 3672 4384 3551 4259
|
||||
Q 3431 4134 3431 3809
|
||||
L 3431 3500
|
||||
L 4378 3500
|
||||
L 4378 3053
|
||||
L 3431 3053
|
||||
L 3431 0
|
||||
L 2853 0
|
||||
L 2853 3053
|
||||
L 1275 3053
|
||||
L 1275 0
|
||||
L 697 0
|
||||
L 697 3053
|
||||
L 147 3053
|
||||
L 147 3500
|
||||
L 697 3500
|
||||
L 697 3744
|
||||
Q 697 4328 969 4595
|
||||
Q 1241 4863 1831 4863
|
||||
L 2375 4863
|
||||
L 2375 4384
|
||||
L 1825 4384
|
||||
Q 1516 4384 1394 4259
|
||||
Q 1275 4134 1275 3809
|
||||
L 1275 3500
|
||||
L 2853 3500
|
||||
L 2853 3744
|
||||
Q 2853 4328 3125 4595
|
||||
Q 3397 4863 3988 4863
|
||||
L 4531 4863
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSans-36"/>
|
||||
@@ -1828,51 +1721,22 @@ z
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(1080.734375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-1d" transform="translate(1132.828125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(1166.515625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-50" transform="translate(1198.296875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(1295.703125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-44" transform="translate(1357.234375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-51" transform="translate(1418.515625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-42" transform="translate(1481.890625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-47" transform="translate(1531.890625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4c" transform="translate(1595.375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-13ae" transform="translate(1623.15625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-1d" transform="translate(1692.046875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(1725.734375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-49" transform="translate(1757.515625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-44" transform="translate(1792.71875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4c" transform="translate(1854 0)"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(1881.78125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-51" transform="translate(1921.140625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(1984.515625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(2046.046875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(2098.140625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(2150.234375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(2182.015625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4c" transform="translate(2234.109375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-57" transform="translate(2261.890625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-58" transform="translate(2301.09375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-44" transform="translate(2364.46875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-57" transform="translate(2425.75 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4c" transform="translate(2464.953125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-52" transform="translate(2492.734375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-51" transform="translate(2553.921875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(2617.296875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(2669.390625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-59" transform="translate(2701.171875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(2760.359375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-3" transform="translate(2812.453125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-52" transform="translate(2844.234375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-57" transform="translate(2905.421875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4b" transform="translate(2944.625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-48" transform="translate(3008 0)"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(3069.53125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-56" transform="translate(3110.640625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-10" transform="translate(1198.296875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-24" transform="translate(1232.171875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-58" transform="translate(1300.578125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-57" transform="translate(1363.953125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4b" transform="translate(1403.15625 0)"/>
|
||||
<use xlink:href="#DejaVuSans-52" transform="translate(1466.53125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-55" transform="translate(1527.71875 0)"/>
|
||||
<use xlink:href="#DejaVuSans-4c" transform="translate(1568.828125 0)"/>
|
||||
<use xlink:href="#DejaVuSans-57" transform="translate(1596.609375 0)"/>
|
||||
<use xlink:href="#DejaVuSans-5c" transform="translate(1635.8125 0)"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="pa5472890de">
|
||||
<rect x="42.942969" y="34.566604" width="686.373299" height="267.525159"/>
|
||||
<clipPath id="p37906c9f16">
|
||||
<rect x="42.942969" y="34.329182" width="697.957656" height="267.762581"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 55 KiB |
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"summary": "tinymfv is a lightweight evaluation suite that measures whether LLM steering interventions shift moral/value profiles (from vignettes and surveys) in the intended direction without moving nearby dimensions, and plots those profiles against human reference data. A researcher would use it to get fast, sensitive feedback on local steering experiments before sampled answers flip.",
|
||||
"datasets": ["MFV classic", "MFV scifi", "MFV ai-actor", "MFQ-2", "Big Five", "16PF", "Humor Styles"],
|
||||
"map_measurement": "For survey instruments (MFQ‑2, Big Five, 16PF, Humor Styles) it is the mean expected 1‑5 score per factor; for MFV instruments it is the relative foundation emphasis (foundation probabilities z‑scored across foundations) because model and human units differ.",
|
||||
"coherence_rule": "The plotted path includes only coefficients (starting from c=0 and proceeding by sign) whose answer mass stays above 99% of the base run's answer mass; once a side falls to or below 99%, later points on that side are dropped.",
|
||||
"plot_encoding": "Gray marks are human societies or respondents, black is the base model, red is positive steering, and blue is negative steering.",
|
||||
"own_words_use_case": "I would use tinymfv when iterating on steering vectors to confirm that a manipulation changes the intended moral or personality dimension without distorting unrelated ones, and that the resulting model profile remains plausible relative to actual human societies, all without needing heavy sampling or full behavioral evals.",
|
||||
"scores": {
|
||||
"clarity": 4,
|
||||
"conciseness": 5,
|
||||
"technical_accuracy": 5
|
||||
},
|
||||
"unclear": [
|
||||
"What exactly 'c' represents in the coherence rule or in the plot captions (+C, -C) is not defined.",
|
||||
"The phrase 'answer mass stays above 99% of the base run' is ambiguous: is it the absolute mass on valid tokens, or the ratio of the steered mass to the base mass?",
|
||||
"The map measurement description says 'the profile' but then distinguishes z‑scored foundation emphasis for MFV vs mean expected scores for surveys, which could confuse a first reader looking for a single definition.",
|
||||
"It's not explained how many coefficients or what range of c values are typically explored."
|
||||
],
|
||||
"misunderstandings": [
|
||||
"The coherence rule sentence could be read as though the 99% threshold applies to the answer mass of each individual coefficient, but it's not clear whether that mass is compared to the base run's mass or to an absolute cutoff.",
|
||||
"The phrase 'once a side becomes incoherent' may mislead readers into thinking 'incoherent' is a formal property, when it is simply defined by the 99% answer‑mass threshold.",
|
||||
"The map z‑score note for MFV could be overlooked, leading a user to interpret MFV maps as raw probabilities, which would be incomparable to human data."
|
||||
],
|
||||
"missing_to_act": [
|
||||
"A user needs to already have steering‑lite outputs in a specific directory structure to run the bundled plotting script; there is no standalone plotting API or example for custom data.",
|
||||
"The 99% coherence threshold is hard‑coded; users who want a different tolerance have no parameter to adjust.",
|
||||
"No guidance is given on how to produce the steered runs (coefficient‑stepping procedure) or what the 'c' values correspond to in the steering framework.",
|
||||
"The connection between the Python API (evaluate, administer) and the plotting workflow is not documented; the script appears to operate on saved run‑dirs, not on in‑memory reports."
|
||||
],
|
||||
"suggestions": [
|
||||
"Add a sentence that defines 'c' as the steering coefficient (or magnitude) and explains the usual progression (e.g., 0, ±0.5, ±1, …).",
|
||||
"Clarify the answer‑mass condition: e.g., 'the proportion of probability assigned to valid answer tokens for a steered run must be at least 99% of that proportion in the base run'.",
|
||||
"Distinguish the map measurement for MFV and surveys in a single concise line in the Measurement section, not just a parenthetical note.",
|
||||
"Provide a small plain‑Python example that loads a saved run‑dir and calls a plotting function, so users can adapt the threshold or data source.",
|
||||
"Explicitly mention that the user must have run steering‑lite (or equivalent coefficient‑based steering) to generate the required run‑dir structure; link to that repository."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"summary": "tinymfv is a lightweight tool for evaluating local LLMs by measuring moral vignette probabilities and psychological survey scores. Researchers use it to verify steering interventions, ensuring that probability shifts successfully track intended values without causing the model to lose coherence or become psychologically unrecognizable relative to human data.",
|
||||
"datasets": [
|
||||
"MFV classic",
|
||||
"MFV scifi",
|
||||
"MFV ai-actor",
|
||||
"MFQ-2",
|
||||
"Big Five",
|
||||
"16PF",
|
||||
"Humor Styles"
|
||||
],
|
||||
"map_measurement": "For MFV vignettes, it is the model's mean probability on each foundation (z-scored across foundations). For survey instruments, it is the mean expected 1-5 score for each factor.",
|
||||
"coherence_rule": "The path shows coefficients (c=0, plus/minus c) only as long as the answer mass remains above 99% of the base run; points are dropped once a side becomes incoherent.",
|
||||
"plot_encoding": "Gray marks represent human societies or respondents, black represents the base unsteered model, red depicts positive steering, and blue depicts negative steering.",
|
||||
"own_words_use_case": "I would use this during steering development to quickly detect if my proposed steering vectors are actually moving the model's latent value profile towards the target benchmarks, or—crucially—if they are pushing the model into 'psychological alien' territory where it maintains its format but lacks human-like response patterns.",
|
||||
"scores": {
|
||||
"clarity": "5",
|
||||
"conciseness": "5",
|
||||
"technical_accuracy": "5"
|
||||
},
|
||||
"unclear": [
|
||||
"The exact definition and setup of 'steering-lite', which is required for running the visual generation scripts despite not being clearly documented as a sub-repo or dependency.",
|
||||
"Whether the 'culture map' and 'range' plots automatically handle the mathematical discrepancy between MFV probability profiles and questionnaire 1-5 scales, or if they require distinct processing."
|
||||
],
|
||||
"misunderstandings": [
|
||||
"The text categorizes MFV vignettes and survey instruments under the same plotting umbrella, potentially misguiding the reader to assume they are directly comparable metrics despite their different underlying measurement methods (probability mass vs. ordinal scale)."
|
||||
],
|
||||
"missing_to_act": [
|
||||
"A sample of the output directory structure or an explanation of how to generate the 'steering-lite' data required for the plot generation script."
|
||||
],
|
||||
"suggestions": [
|
||||
"Clarify the 'steering-lite' dependency in the Install section, explaining if it is a library, a folder, or a separate tool, and provide an example of the input data format expected by plot_steer_showcase.py."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
```json
|
||||
{
|
||||
"summary": "tinymfv is a tool for quickly evaluating the impact of steering on language models, comparing their responses to human data. It uses moral vignettes and survey questions to measure changes in model behavior and assesses how those changes align with human preferences.",
|
||||
"datasets": ["MFV classic", "MFV scifi", "MFV ai-actor", "MFQ-2", "Big Five", "16PF", "Humor Styles"],
|
||||
"map_measurement": "The plots show the profile, which is the model's mean probability on each moral foundation (for MFV) or the mean expected 1-5 answer for each factor on a survey instrument.",
|
||||
"coherence_rule": "Only coherent coefficients (those where the answer mass remains above 99% of the base run) are plotted. Once a coefficient becomes incoherent, later points on that side are dropped.",
|
||||
"plot_encoding": "Gray marks represent human societies/respondents, black is the base model, red is positive steering, and blue is negative steering.",
|
||||
"own_words_use_case": "I would use this to rapidly test steering directions on a local LLM and see if they move the model's responses closer to human patterns or drift them further away, particularly useful when speed and sensitivity are key.",
|
||||
"scores": {
|
||||
"clarity": "4",
|
||||
"conciseness": "5",
|
||||
"technical_accuracy": "5"
|
||||
},
|
||||
"unclear": ["The specific process of 'canonicalizing' survey frames before averaging is unclear."],
|
||||
"misunderstandings": ["The text implies an equivalence between the datasets' foundations and psychological factors, which may not be precise."],
|
||||
"missing_to_act": ["It would be helpful to see example code on how to change steering prompts and re-evaluate."],
|
||||
"suggestions": ["Clarify the procedure for canonicalizing survey frames, providing a specific example would be helpful."]
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"summary": "tinymfv is a lightweight library that evaluates moral foundations and personality survey responses of local LLMs by turning answer‑token probabilities into a concise model profile. Researchers use it to quickly see how a steering or fine‑tuning change shifts the model’s values compared to human reference data, without needing full‑scale human evaluation.",
|
||||
"datasets": [
|
||||
"MFV classic",
|
||||
"MFV scifi",
|
||||
"MFV ai-actor",
|
||||
"MFQ-2",
|
||||
"Big Five",
|
||||
"16PF",
|
||||
"Humor Styles"
|
||||
],
|
||||
"map_measurement": "The maps and range plots show the model’s profile: for MFV the mean probability of each moral foundation (z‑scored across foundations for plotting), and for survey instruments the mean expected 1‑5 score for each factor after reverse‑keying.",
|
||||
"coherence_rule": "Only coefficients whose answer‑mass stays above 99 % of the base run are kept; the path starts at c = 0 and includes each positive and negative c while the mass threshold is met, dropping later points on a side once it falls at or below 99 %.",
|
||||
"plot_encoding": "Gray marks represent human societies or respondents, black marks the base model, red marks the positively steered endpoint, and blue marks the negatively steered endpoint.",
|
||||
"own_words_use_case": "In my research I often compare different prompting or fine‑tuning strategies; with tinymfv I could run a fast paired evaluation that quantifies how each method moves the model’s moral or personality profile toward or away from documented human norms, giving an early signal before costly human studies.",
|
||||
"scores": {
|
||||
"clarity": "5",
|
||||
"conciseness": "4",
|
||||
"technical_accuracy": "5"
|
||||
},
|
||||
"unclear": [
|
||||
"Exact definition of 'answer‑mass' and how it is computed from token probabilities is not spelled out.",
|
||||
"How to produce the '+C' and '-C' steering runs (the required steering command or configuration) is not described.",
|
||||
"The format and column meanings of the human reference CSV files (e.g., country means) are not documented.",
|
||||
"The phrase 'human societies' on range plots is vague—whether each point is a country, a demographic group, or an aggregate is unclear.",
|
||||
"'Canonicalizes these frames before averaging' is mentioned but the exact method is not explained."
|
||||
],
|
||||
"misunderstandings": [
|
||||
"The statement that MFV map values are z‑scored across foundations could be misread as raw probabilities being plotted.",
|
||||
"The term 'coherent coefficients' might be interpreted as always keeping all coefficients, whereas the rule actually drops them when answer‑mass falls below 99 %.",
|
||||
"Seeing 'human societies' as actual societies rather than averaged country scores could lead to incorrect interpretation of the axes.",
|
||||
"The note 'format check: mass on valid answer tokens' could be taken to mean an automatic validation step, which is not described.",
|
||||
"The comment 'MFV is nominal: the answer is the category' could be read as a categorical classification system rather than a probabilistic profile."
|
||||
],
|
||||
"missing_to_act": [
|
||||
"Step‑by‑step instructions for generating the '+C' and '-C' steered model checkpoints (e.g., which steering script, hyperparameters) are missing.",
|
||||
"Details on required hardware, Python version, and additional dependencies beyond uv pip install (e.g., torch, CUDA) are not provided.",
|
||||
"Explanation of the expected directory layout for the steering‑lite run‑dir argument used by the plotting script is absent.",
|
||||
"Specification of column names and units in the human reference CSV files to allow correct loading and comparison is lacking.",
|
||||
"A minimal example of interpreting the plotted axes (e.g., PCA component meaning) to understand the culture map would be helpful."
|
||||
],
|
||||
"suggestions": [
|
||||
"Add a short 'Steering workflow' section that shows how to obtain the base, +C, and -C model outputs and what files the plot script expects.",
|
||||
"Include a table describing the columns in each human reference CSV (e.g., country, foundation scores) and their units.",
|
||||
"Clarify in the Measurement section that MFV map values are z‑scored across foundations.",
|
||||
"Provide a concrete definition of 'answer‑mass' and the 99 % coherence threshold, perhaps with a small numeric example.",
|
||||
"Mention required Python and PyTorch versions and any GPU/CUDA requirements in the Install section."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"summary": "tinymfv provides fast, token‑level value evaluations for steering experiments by querying LLMs with moral vignettes and survey items, converting answer probabilities into a compact model profile. Researchers use it to detect whether a steering intervention shifted intended values, affected nearby values, and kept the model’s responses within human norms, catching probability shifts before sampled answers change.",
|
||||
"datasets": ["MFV classic", "MFV scifi", "MFV ai-actor", "MFQ-2", "Big Five", "16PF", "Humor Styles"],
|
||||
"map_measurement": "the model profile (mean probability per moral foundation for MFV vignettes, or mean expected 1‑5 score per factor for survey instruments)",
|
||||
"coherence_rule": "only coefficients whose answer‑mass remains above 99 % of the base‑run are plotted; once a side drops to ≤99 % it and further points on that side are omitted",
|
||||
"plot_encoding": "gray marks represent human societies or respondents, black is the base model, red indicates positive steering, and blue indicates negative steering",
|
||||
"own_words_use_case": "I would use tinymfv to quickly quantify how a steering intervention moves an LLM’s value profile relative to a human baseline, spotting subtle probability shifts that precede overt answer changes and revealing whether the steer unintentionally drags nearby values away from human norms.",
|
||||
"scores": {"clarity": "4", "conciseness": "3", "technical_accuracy": "5"},
|
||||
"unclear": [
|
||||
"What exactly constitutes 'answer mass' and how it is computed for each coefficient.",
|
||||
"Whether the MFV profile shown on maps is raw probability or z‑scored emphasis, and how the transformation is applied.",
|
||||
"How the 99 % threshold is applied separately to positive and negative steering sides.",
|
||||
"What specific files or outputs from a steering‑lite run are required by the plotting script."
|
||||
],
|
||||
"misunderstandings": [
|
||||
"Readers might assume the red/blue points always correspond to authority steering, while the examples are just one steer direction.",
|
||||
"The maps might be read as showing raw foundation probabilities, when they actually display z‑scored relative emphasis.",
|
||||
"The profile for MFV and surveys might be treated as directly comparable, though they are on different scales."
|
||||
],
|
||||
"missing_to_act": [
|
||||
"Instructions on how to generate a steering‑lite run directory (e.g., commands to produce the required steering outputs).",
|
||||
"Details on required hardware/software beyond uv (e.g., GPU, transformers version).",
|
||||
"Explicit description of the input format expected by the plotting script (CSV columns).",
|
||||
"A minimal, self‑contained example that runs from model loading to plot generation without external steering‑lite outputs."
|
||||
],
|
||||
"suggestions": [
|
||||
"Add a brief ‘Quick start’ section that shows how to produce a steering‑lite run, then call the plotting script with a toy dataset.",
|
||||
"Clarify the coherence rule with a formula: plot coefficient c if mass(c) > 0.99 × mass(base).",
|
||||
"Specify that MFV map values are z‑scored across foundations before PCA, and note the scaling in the figure caption.",
|
||||
"Define 'answer mass' in the Measurement section as the total probability mass on the allowed answer tokens for a given coefficient."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,167 @@
|
||||
You are reading the README below for the FIRST time as a cold researcher.
|
||||
Answer ONLY from what it says; where something is unstated or ambiguous, say so.
|
||||
Output ONE JSON object, no prose, no fences:
|
||||
{
|
||||
"summary": "<2-3 sentences: what is tinymfv and why would a researcher use it?>",
|
||||
"datasets": ["<datasets you think are included>"],
|
||||
"map_measurement": "<what measurement is shown on the maps and range plots?>",
|
||||
"coherence_rule": "<which steered coefficients are shown or dropped?>",
|
||||
"plot_encoding": "<what do gray, black, red, and blue marks mean?>",
|
||||
"own_words_use_case": "<why use this in your own research, stated in your own words with inference rather than copied phrasing>",
|
||||
"scores": {"clarity": "<1-5>", "conciseness": "<1-5>", "technical_accuracy": "<1-5>"},
|
||||
"unclear": ["<what was confusing, ambiguous, or you had to guess>"],
|
||||
"misunderstandings": ["<places the text invites a wrong reading>"],
|
||||
"missing_to_act": ["<what a reader still needs to reproduce or act on this>"],
|
||||
"suggestions": ["<concrete edit that would help>"]
|
||||
}
|
||||
|
||||
README:
|
||||
# tinymfv
|
||||
|
||||
tinymfv is a small set of fast value evals for local LLM steering work. It asks moral vignettes and survey questions, reads answer-token probabilities, and turns them into one model profile.
|
||||
|
||||
Use it when you want to know whether a steer moved the intended values, moved nearby values too, and still lands near real human response patterns. The evals are quick and sensitive enough to show probability shifts before sampled answers flip.
|
||||
|
||||
The plots compare that profile to human data. Gray marks are human societies or respondents, black is the base model, red is positive steering, and blue is negative steering. Range plots show the coherent coefficient path for each factor; maps show the base model and the strongest coherent endpoints on a PCA map of human profiles.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Read the Big Five map left to right: gray is the human reference, black is the base LLM, and the red/blue points are steered endpoints. Here the LLM sits outside the country cloud, so on this measure it is a psychological alien before steering moves it.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
The Humor Styles map shows the same failure mode more sharply: the model profile can live away from the human societies. That is the useful warning sign, a model can be format-coherent and still be a moral or psychological alien on the measured profile.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
The plotted path shows only coherent coefficients: `c=0`, then each positive and negative `c` while its answer mass stays above 99% of the base run. Once a side becomes incoherent, later points on that side are dropped.
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
uv pip install git+https://github.com/wassname/tinymfv
|
||||
```
|
||||
|
||||
For maps:
|
||||
|
||||
```bash
|
||||
uv pip install "tiny-mfv[maps] @ git+https://github.com/wassname/tinymfv"
|
||||
```
|
||||
|
||||
For repo development:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/wassname/tinymfv
|
||||
cd tinymfv
|
||||
uv sync --extra maps --dev
|
||||
just smoke
|
||||
```
|
||||
|
||||
## Datasets
|
||||
|
||||
| dataset | bundled data | human reference | profile used in plots |
|
||||
|---|---|---|---|
|
||||
| MFV classic | [132 moral vignettes, other](src/tinymfv/data/vignettes_classic_other_violate.jsonl) / [self](src/tinymfv/data/vignettes_classic_self_violate.jsonl) | per-vignette human foundation labels in the JSONL | foundation probability profile |
|
||||
| MFV scifi | [same items rewritten as sci-fi, other](src/tinymfv/data/vignettes_scifi_other_violate.jsonl) / [self](src/tinymfv/data/vignettes_scifi_self_violate.jsonl) | inherited labels from classic MFV | foundation probability profile |
|
||||
| MFV ai-actor | [same items rewritten with an AI actor, other](src/tinymfv/data/vignettes_ai-actor_other_violate.jsonl) / [self](src/tinymfv/data/vignettes_ai-actor_self_violate.jsonl) | inherited labels from classic MFV | foundation probability profile |
|
||||
| MFQ-2 | [36 items](src/tinymfv/data/surveys/mfq2/forward.json), plus inverted and negated frames | [country means](src/tinymfv/data/human/mfq2_country_foundations.csv), plus [raw respondents](src/tinymfv/data/atari_study2_raw.csv) | expected 1-5 score per foundation |
|
||||
| Big Five | [50 items](src/tinymfv/data/surveys/big5/questionnaire.json), plus inverted and negated frames | [country means](src/tinymfv/data/human/big5_country_factors.csv) | expected 1-5 score per trait |
|
||||
| 16PF | [162 items](src/tinymfv/data/surveys/16pf/questionnaire.json), plus inverted and negated frames | [country means](src/tinymfv/data/human/16pf_country_factors.csv) | expected 1-5 score per factor |
|
||||
| Humor Styles | [32 items](src/tinymfv/data/surveys/humor_styles/questionnaire.json), plus inverted and negated frames | [country means](src/tinymfv/data/human/humor_styles_country_factors.csv), originally 1-7 | expected 1-5 score per style |
|
||||
|
||||
MFV is nominal: the answer is the category. The survey instruments are ordinal: the answer is a scale point.
|
||||
|
||||
Each MFV item is asked in two perspectives, `other_violate` and `self_violate`. Each survey item is asked three ways, forward, scale-inverted, and content-negated. tinymfv canonicalizes these frames before averaging, so the profile is less tied to one wording.
|
||||
|
||||
## API
|
||||
|
||||
Run MFV vignettes with `evaluate`:
|
||||
|
||||
```python
|
||||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||||
from tinymfv import evaluate, load_vignettes
|
||||
|
||||
tok = AutoTokenizer.from_pretrained("Qwen/Qwen3-4B")
|
||||
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-4B").cuda()
|
||||
|
||||
vignettes = load_vignettes("classic") # "classic", "scifi", "ai-actor", or "all"
|
||||
report = evaluate(model, tok, vignettes=vignettes)
|
||||
|
||||
print(report["profile"]) # mean probability per foundation
|
||||
print(report["mean_pmass_allowed"]) # format check: mass on valid answer tokens
|
||||
```
|
||||
|
||||
Run survey instruments with `administer`:
|
||||
|
||||
```python
|
||||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||||
from tinymfv import administer, get_instrument
|
||||
|
||||
tok = AutoTokenizer.from_pretrained("Qwen/Qwen3-4B")
|
||||
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-4B").cuda()
|
||||
|
||||
instr = get_instrument("mfq2") # "mfq2", "big5", "16pf", or "humor_styles"
|
||||
report = administer(model, tok, instr)
|
||||
|
||||
print(report["dimensions"])
|
||||
print(report["profile"]) # expected 1-5 score per factor
|
||||
print(report["mean_pmass_allowed"]) # format check: mass on valid answer tokens
|
||||
```
|
||||
|
||||
Generate the bundled range plots and culture maps from a steering-lite all-instrument run:
|
||||
|
||||
```bash
|
||||
uv run python scripts/plot_steer_showcase.py \
|
||||
--run-dir ../steering-lite/outputs/20260630_dignity_authority_strict22_local_sspace_allinstr \
|
||||
--out docs/img/showcase \
|
||||
--vec-label=-Authority
|
||||
```
|
||||
|
||||
## Measurement
|
||||
|
||||
The measurement on the maps is the profile.
|
||||
|
||||
For MFV, the profile is the model's mean probability on each moral foundation:
|
||||
|
||||
$$\mathrm{profile}_f = \mathbb{E}_i P(f \mid i)$$
|
||||
|
||||
For survey instruments, the profile is the mean expected 1-5 answer for each factor, after reverse-keying:
|
||||
|
||||
$$\mathrm{profile}_d = \mathbb{E}_{i \in d}\sum_{k=1}^{M} k P(k \mid i)$$
|
||||
|
||||
where $i$ is an item, $d$ is a survey factor, $k$ is a scale point, and $M$ is the largest scale value.
|
||||
|
||||
This is what the survey maps and range plots show. In the showcase CSVs, this is the `mean` column. For MFV showcase plots, model and human units differ, so the plotted quantity is relative foundation emphasis: each foundation profile is z-scored across foundations before mapping.
|
||||
|
||||
For paired steering runs, compare the base profile to the steered profile path. The showcase drops a coefficient when its answer mass is at or below 99% of the base run.
|
||||
|
||||
## Scope
|
||||
|
||||
tinymfv is for fast paired steering comparisons, not full moral reasoning evaluation. It is useful when you want to compare base, positive-steer, and negative-steer runs against the same human reference plots.
|
||||
|
||||
For behavior-heavy moral evals, see [machiavelli](https://huggingface.co/datasets/wassname/machiavelli), [AIRiskDilemmas](https://huggingface.co/datasets/kellycyy/AIRiskDilemmas), and [ethics_expression_preferences](https://huggingface.co/datasets/wassname/ethics_expression_preferences).
|
||||
|
||||
Used in [steering-lite](https://github.com/wassname/steering-lite), [lora-lite](https://github.com/wassname/lora-lite), and [w2schar-mini](https://github.com/wassname/w2schar-mini).
|
||||
|
||||
## Citation
|
||||
|
||||
```bibtex
|
||||
@misc{clark2026tinymfv,
|
||||
title = {tinymfv: tiny moral/value eval for local LLMs},
|
||||
author = {Michael Clark},
|
||||
year = {2026},
|
||||
url = {https://github.com/wassname/tinymfv/}
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,31 @@
|
||||
# README Comprehension Panel Triage
|
||||
|
||||
## Inputs
|
||||
- Initial panel: `docs/reviews/readme_comprehension_20260630_123105/`
|
||||
- Confirmation panel: `docs/reviews/readme_comprehension_rerun_20260630_123527/`
|
||||
- README under review: `README.md`
|
||||
|
||||
## Expected Reader Answers
|
||||
- tinymfv is a fast answer-token reader for local LLM value steering work.
|
||||
- It includes MFV classic, MFV scifi, MFV ai-actor, MFQ-2, Big Five, 16PF, and Humor Styles.
|
||||
- The map/range measurement is the profile: MFV foundation probability profile, survey expected 1-5 factor profile.
|
||||
- For MFV showcase maps, profiles are z-scored across foundations before comparing to human country profiles.
|
||||
- Gray = human societies/respondents, black = base model, red = positive steering, blue = negative steering.
|
||||
- `c` is the signed multiplier on the calibrated steering vector.
|
||||
- Answer mass is total probability on valid answer tokens. The path is a per-side prefix from `c=0`; drop the side once answer mass is at or below 99% of base.
|
||||
|
||||
## Panel Result
|
||||
- Initial panel correctly recovered the main tool, dataset list, profile measurement, and researcher use case.
|
||||
- Initial repeated gaps: `c` was not defined, answer mass was not exact enough, and the per-side prefix rule was easy to infer but not explicit.
|
||||
- README fixes applied:
|
||||
- Defined `c` as the signed multiplier on the calibrated steering vector.
|
||||
- Defined answer mass as probability on valid answer tokens.
|
||||
- Stated that dropping is per side, at the first incoherent coefficient.
|
||||
- Added the compact answer-mass formula:
|
||||
`m(c) = E_i sum_{a in A_i} P_c(a | i)`.
|
||||
- Confirmation panel: all four usable reviewers correctly reconstructed `c`, answer mass, the 99% threshold, and the per-side drop rule.
|
||||
|
||||
## Not Changed
|
||||
- Did not add a steering-lite training recipe. This README links to steering-lite and shows the plot command; the full axis/template/scenario-selection workflow belongs in steering-lite or the persona-template skill.
|
||||
- Did not define the calibrated steering vector mathematically here. It would make the README longer and is not needed to understand tinymfv's measurement.
|
||||
- Did not add full human CSV schema docs. The dataset table links directly to the committed data files.
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"summary": "tinymfv is a compact, fast evaluation suite for local LLM steering that probes value shifts via moral vignettes and survey questions, reading answer-token probabilities to produce a single model profile. A researcher would use it to quickly determine whether a steering intervention moved intended values, whether it perturbed nearby values, and whether the steered profile remains plausible relative to human response data. The evals are sensitive enough to detect probability shifts before sampled answers flip.",
|
||||
"datasets": ["MFV classic", "MFV scifi", "MFV ai-actor", "MFQ-2", "Big Five", "16PF", "Humor Styles"],
|
||||
"map_measurement": "The measurement shown on maps and range plots is the profile: for MFV it is the model's mean probability per moral foundation; for survey instruments it is the mean expected 1-5 score per factor (after reverse‑keying). In showcase plots, MFV uses relative foundation emphasis (z-scored across foundations) to make model and human units comparable.",
|
||||
"coherence_rule": "The plotted path shows only coherent coefficients where c (the signed multiplier on the calibrated steering vector) starts at 0, then each positive and negative side is included while its answer mass (total probability on valid answer tokens) stays above 99% of the base run. Once a side's answer mass drops to ≤99% of the base run, later points on that side are dropped.",
|
||||
"plot_encoding": "Gray marks represent human societies or respondents, black marks are the base (unsteered) model, red marks are positive steering, and blue marks are negative steering.",
|
||||
"own_words_use_case": "I would use tinymfv for iterative steering development to rapidly compare base, positively‑steered, and negatively‑steered model runs against the same human reference plots. It quickly reveals whether a steering vector shifts value profiles in the intended direction and magnitude, whether it also shifts nearby values, and whether the steered model remains a plausible psychological entity rather than an outlier—avoiding the trap of format‑coherent but alien behavior.",
|
||||
"scores": {"clarity": 4, "conciseness": 4, "technical_accuracy": 5},
|
||||
"unclear": [
|
||||
"The variable 'c' is used in the coherence rule and paths but is only defined later in the Coherence rule paragraph, not earlier in the Plot encoding section.",
|
||||
"The phrase 'range plots' is not explicitly defined — it is unclear whether the gray marks represent individual data points, ranges (min‑max), or error bars around a mean.",
|
||||
"The 'answer mass' concept is introduced in the coherence rule but the API output 'mean_pmass_allowed' is not explicitly linked to it.",
|
||||
"The distinction between MFV plots (z-scored) and survey plots (raw expected scores) is explained only in the Measurement section, which could cause confusion when viewing MFV showcase plots without that context.",
|
||||
"The term 'psychological alien' is used qualitatively but never formally defined — it is inferred from being outside the human country cloud on a PCA map."
|
||||
],
|
||||
"misunderstandings": [
|
||||
"The statement 'still lands near real human response patterns' might imply the base model already does, whereas later examples show the base model can be a clear outlier (e.g., Big Five map shows 'psychological alien').",
|
||||
"The coherence rule says 'each positive and negative side while its answer mass stays above 99% of the base run' — a reader could misinterpret 'incoherent' as logically contradictory rather than format‑invalid (low probability on valid tokens).",
|
||||
"The plot encoding says 'Gray marks are human societies or respondents' but the range plots are described as showing 'human society ranges' — one might think the gray region is a continuous range rather than discrete points.",
|
||||
"The MFQ‑2 caption mentions 'culture map' but the general description uses 'culture map' interchangeably with 'map' — the reader may not know it is a PCA projection of human country profiles until the Measurement section explains it."
|
||||
],
|
||||
"suggestions": [
|
||||
"Define 'c' (signed multiplier on the calibrated steering vector) earlier, perhaps in the Plot encoding or before the coherence rule.",
|
||||
"Clarify in the Plot encoding that range plots show a box‑and‑whisker or min‑max line for human societies, with gray marks as summary points, not individual respondents.",
|
||||
"Add a brief note that 'answer mass' is the same as the API's 'mean_pmass_allowed' and is a format coherence metric, not a value score.",
|
||||
"Explicitly state in the dataset table or a footnote that MFV showcase plots use relative (z‑scored) emphasis for comparability, while survey plots use raw expected scores.",
|
||||
"Introduce the 'psychological alien' concept with a short definition, e.g., 'a model profile that lies far outside the convex hull of human country means on a PCA map.'"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"summary": "tinymfv is a lightweight evaluation toolkit designed to benchmark how steering interventions shift an LLM's moral and psychological value profiles against human reference populations. It allows researchers to quickly visualize and detect if steering successfully shifts model behavior or if it causes the model to diverge into incoherent, 'psychologically alien' territory before triggering full-text generation.",
|
||||
"datasets": [
|
||||
"MFV classic",
|
||||
"MFV scifi",
|
||||
"MFV ai-actor",
|
||||
"MFQ-2",
|
||||
"Big Five",
|
||||
"16PF",
|
||||
"Humor Styles"
|
||||
],
|
||||
"map_measurement": "The measurement is the 'profile,' representing either relative foundation emphasis (z-scored foundation probabilities) for MFV or mean expected 1-5 factor scores for survey instruments, plotted against human reference data.",
|
||||
"coherence_rule": "The plotted path includes coefficients (c) where the model's answer mass (total probability on valid answer tokens) remains above 99% of the base run; points are dropped once this coherence threshold is crossed. 'c' is the signed scalar multiplier applied to the calibrated steering vector.",
|
||||
"plot_encoding": "Gray represents human reference data (societies/individuals); black is the base model; red indicates positive steering; blue indicates negative steering.",
|
||||
"own_words_use_case": "I would use this during the prototyping phase of model steering to validate whether an intervention is hitting its intended target regarding cultural or moral dimensions. It functions as a 'sanity check' to ensure the model remains grounded in human-like response patterns and doesn't break its output format, allowing for rapid iteration on steering strength without needing to generate and manually review long-form model outputs.",
|
||||
"scores": {
|
||||
"clarity": "5",
|
||||
"conciseness": "5",
|
||||
"technical_accuracy": "5"
|
||||
},
|
||||
"unclear": [
|
||||
"The exact mathematical definition or implementation for the 'calibrated steering vector' is not provided.",
|
||||
"The text does not explicitly explain how the base model is 'outside the country cloud' in the PCA visualization, leaving the reader to infer the relationship between model-space and human-space.",
|
||||
"It is not entirely clear if the reference data is fixed per instrument or depends on external dependencies not listed in the snippet."
|
||||
],
|
||||
"misunderstandings": [
|
||||
"A reader might assume 'c' represents a raw logit bias rather than a scalar multiplier on a pre-calibrated steering vector.",
|
||||
"The usage of 'answer mass' might be confused with a value sentiment score, whereas it is strictly a measure of format coherence."
|
||||
],
|
||||
"suggestions": [
|
||||
"Add a definition or reference for 'calibrated steering vector' to clarify if it requires an external library or specific preparation.",
|
||||
"Explicitly define the PCA axes in the documentation graphics to clarify what the distance between the 'black' model point and the 'gray' culture cloud signifies."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"summary": "tinymfv is a lightweight suite of fast value evaluations for local LLM steering. It probes models with moral vignettes and survey items, reads token probabilities, and aggregates them into a profile that can be compared against human reference data to see if a steer shifts the intended values and how it affects related values.",
|
||||
"datasets": [
|
||||
"MFV classic",
|
||||
"MFV scifi",
|
||||
"MFV ai-actor",
|
||||
"MFQ-2",
|
||||
"Big Five",
|
||||
"16PF",
|
||||
"Humor Styles"
|
||||
],
|
||||
"map_measurement": "The maps display the model’s profile: for MFV the mean probability for each moral foundation, and for the survey instruments the mean expected 1‑5 answer for each factor after reverse‑keying (i.e., the averaged scale score).",
|
||||
"coherence_rule": "Only coefficient steps (c) that remain coherent are plotted: the path starts at c = 0 (base model) and then includes successive positive and negative c values while the answer‑mass (total probability on valid answer tokens) stays above 99 % of the base run. When answer‑mass falls to ≤ 99 % on a side, that side is considered incoherent and any later points on that side are omitted. Here c is the signed multiplier applied to the calibrated steering vector.",
|
||||
"plot_encoding": "Gray marks represent human societies or respondents; black marks the base (unsteered) model; red marks the positively steered endpoint; blue marks the negatively steered endpoint.",
|
||||
"own_words_use_case": "A researcher could use tinymfv to rapidly assess whether a proposed steering intervention nudges a LLM toward a desired moral or personality profile without causing unintended drift, by visualizing the shift against real human norms and detecting early inconsistencies before full generation testing.",
|
||||
"scores": {
|
||||
"clarity": "4",
|
||||
"conciseness": "3",
|
||||
"technical_accuracy": "4"
|
||||
},
|
||||
"unclear": [
|
||||
"The term \"human societies\" is used for both country‑level aggregates and raw respondent data without explicit distinction.",
|
||||
"The exact calculation of answer‑mass (whether it sums over all items or per‑item) is not spelled out.",
|
||||
"How the z‑scoring for MFV plots is performed (across foundations per model or across models) is not fully detailed.",
|
||||
"The meaning of \"format‑coherent\" is mentioned but not defined."
|
||||
],
|
||||
"misunderstandings": [
|
||||
"One might think the MFV map quantity is a raw probability, but the README says it is a z‑scored relative emphasis, which could be misread.",
|
||||
"The phrase \"coherent coefficients\" could be interpreted as mathematically coherent rather than referring to answer‑mass staying above a threshold.",
|
||||
"The description of \"human reference\" could be taken to mean a single dataset, whereas multiple country‑level and respondent‑level sources are used."
|
||||
],
|
||||
"suggestions": [
|
||||
"Add a concise legend in the README that maps gray, black, red, and blue colors to their meanings.",
|
||||
"Define explicitly what \"human societies\" (e.g., country‑level aggregates) and \"human respondents\" (individual data) refer to.",
|
||||
"Provide a short formula or description of how answer‑mass is computed and how the 99 % threshold is applied.",
|
||||
"Explain the z‑scoring process for MFV visualizations, including the axis of standardization.",
|
||||
"Clarify the term \"format‑coherent\" and its relevance to steering evaluation."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"summary": "tinymfv is a lightweight tool for evaluating how steering interventions affect a language model's moral and psychological profile by measuring answer-token probabilities on vignettes and survey items. Researchers can use it to quickly see whether a steer moves the model toward or away from intended values, detects unintended shifts on nearby dimensions, and compares the result to human baselines before sampled answers change.",
|
||||
"datasets": ["MFV classic", "MFV scifi", "MFV ai-actor", "MFQ-2", "Big Five", "16PF", "Humor Styles"],
|
||||
"map_measurement": "the model's profile (mean probability per moral foundation for MFV datasets; mean expected 1‑5 score per factor for survey datasets)",
|
||||
"coherence_rule": "Only coefficients where the answer mass remains above 99% of the base run are shown; the path starts at c=0 and extends in both positive and negative directions until answer mass drops to ≤99% of base, at which point further points on that side are dropped. Here c is the signed multiplier on the calibrated steering vector, and answer mass is the total probability assigned to valid answer tokens.",
|
||||
"plot_encoding": "Gray marks represent human societies or respondents, black is the base model, red indicates positive steering, and blue indicates negative steering.",
|
||||
"own_words_use_case": "I would use tinymfv to rapidly test whether a steering vector moves a model’s value profile in the desired direction without causing large, unintended shifts on related traits, and to instantly spot when the model’s profile drifts far from human norms, giving an early warning before qualitative sampling reveals the shift.",
|
||||
"scores": {"clarity": "4", "conciseness": "4", "technical_accuracy": "5"},
|
||||
"unclear": ["How answer mass is calculated from token probabilities", "Whether the profile shown on MFV maps is raw probability or z‑scored across foundations", "Exactly how the steering vector is calibrated and what units c has"],
|
||||
"misunderstandings": ["Readers might think that red/blue points always indicate better alignment with human values, when they only show the direction of steering", "Seeing the base model outside the human country cloud could be taken as a failure, but the text notes it merely shows the model is a 'psychological alien' on that measure", "The 99% answer‑mass cutoff might be interpreted as a strict coherence threshold rather than a practical display choice"],
|
||||
"suggestions": ["Add a caption or legend explaining the color encoding directly on the figures", "Include a brief example showing how answer mass is computed from the model’s output distribution", "Clarify in the text that MFV map profiles are z‑scored across foundations before plotting"]
|
||||
}
|
||||
@@ -0,0 +1,166 @@
|
||||
You are reading the README below for the FIRST time as a cold researcher.
|
||||
Answer ONLY from what it says; where something is unstated or ambiguous, say so.
|
||||
Output ONE JSON object, no prose, no fences:
|
||||
{
|
||||
"summary": "<2-3 sentences: what is tinymfv and why would a researcher use it?>",
|
||||
"datasets": ["<datasets you think are included>"],
|
||||
"map_measurement": "<what measurement is shown on the maps and range plots?>",
|
||||
"coherence_rule": "<which steered coefficients are shown or dropped? include what c and answer mass mean if the README lets you infer it>",
|
||||
"plot_encoding": "<what do gray, black, red, and blue marks mean?>",
|
||||
"own_words_use_case": "<why use this in your own research, stated in your own words with inference rather than copied phrasing>",
|
||||
"scores": {"clarity": "<1-5>", "conciseness": "<1-5>", "technical_accuracy": "<1-5>"},
|
||||
"unclear": ["<what was confusing, ambiguous, or you had to guess>"],
|
||||
"misunderstandings": ["<places the text invites a wrong reading>"],
|
||||
"suggestions": ["<concrete edit that would help>"]
|
||||
}
|
||||
|
||||
README:
|
||||
# tinymfv
|
||||
|
||||
tinymfv is a small set of fast value evals for local LLM steering work. It asks moral vignettes and survey questions, reads answer-token probabilities, and turns them into one model profile.
|
||||
|
||||
Use it when you want to know whether a steer moved the intended values, moved nearby values too, and still lands near real human response patterns. The evals are quick and sensitive enough to show probability shifts before sampled answers flip.
|
||||
|
||||
The plots compare that profile to human data. Gray marks are human societies or respondents, black is the base model, red is positive steering, and blue is negative steering. Range plots show the coherent coefficient path for each factor; maps show the base model and the strongest coherent endpoints on a PCA map of human profiles.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Read the Big Five map left to right: gray is the human reference, black is the base LLM, and the red/blue points are steered endpoints. Here the LLM sits outside the country cloud, so on this measure it is a psychological alien before steering moves it.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
The Humor Styles map shows the same failure mode more sharply: the model profile can live away from the human societies. That is the useful warning sign, a model can be format-coherent and still be a moral or psychological alien on the measured profile.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Here `c` is the signed multiplier on the calibrated steering vector. The plotted path shows only coherent coefficients: `c=0`, then each positive and negative side while its answer mass stays above 99% of the base run. Once a side becomes incoherent, later points on that side are dropped.
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
uv pip install git+https://github.com/wassname/tinymfv
|
||||
```
|
||||
|
||||
For maps:
|
||||
|
||||
```bash
|
||||
uv pip install "tiny-mfv[maps] @ git+https://github.com/wassname/tinymfv"
|
||||
```
|
||||
|
||||
For repo development:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/wassname/tinymfv
|
||||
cd tinymfv
|
||||
uv sync --extra maps --dev
|
||||
just smoke
|
||||
```
|
||||
|
||||
## Datasets
|
||||
|
||||
| dataset | bundled data | human reference | profile used in plots |
|
||||
|---|---|---|---|
|
||||
| MFV classic | [132 moral vignettes, other](src/tinymfv/data/vignettes_classic_other_violate.jsonl) / [self](src/tinymfv/data/vignettes_classic_self_violate.jsonl) | per-vignette human foundation labels in the JSONL | foundation probability profile |
|
||||
| MFV scifi | [same items rewritten as sci-fi, other](src/tinymfv/data/vignettes_scifi_other_violate.jsonl) / [self](src/tinymfv/data/vignettes_scifi_self_violate.jsonl) | inherited labels from classic MFV | foundation probability profile |
|
||||
| MFV ai-actor | [same items rewritten with an AI actor, other](src/tinymfv/data/vignettes_ai-actor_other_violate.jsonl) / [self](src/tinymfv/data/vignettes_ai-actor_self_violate.jsonl) | inherited labels from classic MFV | foundation probability profile |
|
||||
| MFQ-2 | [36 items](src/tinymfv/data/surveys/mfq2/forward.json), plus inverted and negated frames | [country means](src/tinymfv/data/human/mfq2_country_foundations.csv), plus [raw respondents](src/tinymfv/data/atari_study2_raw.csv) | expected 1-5 score per foundation |
|
||||
| Big Five | [50 items](src/tinymfv/data/surveys/big5/questionnaire.json), plus inverted and negated frames | [country means](src/tinymfv/data/human/big5_country_factors.csv) | expected 1-5 score per trait |
|
||||
| 16PF | [162 items](src/tinymfv/data/surveys/16pf/questionnaire.json), plus inverted and negated frames | [country means](src/tinymfv/data/human/16pf_country_factors.csv) | expected 1-5 score per factor |
|
||||
| Humor Styles | [32 items](src/tinymfv/data/surveys/humor_styles/questionnaire.json), plus inverted and negated frames | [country means](src/tinymfv/data/human/humor_styles_country_factors.csv), originally 1-7 | expected 1-5 score per style |
|
||||
|
||||
MFV is nominal: the answer is the category. The survey instruments are ordinal: the answer is a scale point.
|
||||
|
||||
Each MFV item is asked in two perspectives, `other_violate` and `self_violate`. Each survey item is asked three ways, forward, scale-inverted, and content-negated. tinymfv canonicalizes these frames before averaging, so the profile is less tied to one wording.
|
||||
|
||||
## API
|
||||
|
||||
Run MFV vignettes with `evaluate`:
|
||||
|
||||
```python
|
||||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||||
from tinymfv import evaluate, load_vignettes
|
||||
|
||||
tok = AutoTokenizer.from_pretrained("Qwen/Qwen3-4B")
|
||||
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-4B").cuda()
|
||||
|
||||
vignettes = load_vignettes("classic") # "classic", "scifi", "ai-actor", or "all"
|
||||
report = evaluate(model, tok, vignettes=vignettes)
|
||||
|
||||
print(report["profile"]) # mean probability per foundation
|
||||
print(report["mean_pmass_allowed"]) # format check: mass on valid answer tokens
|
||||
```
|
||||
|
||||
Run survey instruments with `administer`:
|
||||
|
||||
```python
|
||||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||||
from tinymfv import administer, get_instrument
|
||||
|
||||
tok = AutoTokenizer.from_pretrained("Qwen/Qwen3-4B")
|
||||
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-4B").cuda()
|
||||
|
||||
instr = get_instrument("mfq2") # "mfq2", "big5", "16pf", or "humor_styles"
|
||||
report = administer(model, tok, instr)
|
||||
|
||||
print(report["dimensions"])
|
||||
print(report["profile"]) # expected 1-5 score per factor
|
||||
print(report["mean_pmass_allowed"]) # format check: mass on valid answer tokens
|
||||
```
|
||||
|
||||
Generate the bundled range plots and culture maps from a steering-lite all-instrument run:
|
||||
|
||||
```bash
|
||||
uv run python scripts/plot_steer_showcase.py \
|
||||
--run-dir ../steering-lite/outputs/20260630_dignity_authority_strict22_local_sspace_allinstr \
|
||||
--out docs/img/showcase \
|
||||
--vec-label=-Authority
|
||||
```
|
||||
|
||||
## Measurement
|
||||
|
||||
The measurement on the maps is the profile.
|
||||
|
||||
For MFV, the profile is the model's mean probability on each moral foundation:
|
||||
|
||||
$$\mathrm{profile}_f = \mathbb{E}_i P(f \mid i)$$
|
||||
|
||||
For survey instruments, the profile is the mean expected 1-5 answer for each factor, after reverse-keying:
|
||||
|
||||
$$\mathrm{profile}_d = \mathbb{E}_{i \in d}\sum_{k=1}^{M} k P(k \mid i)$$
|
||||
|
||||
where $i$ is an item, $d$ is a survey factor, $k$ is a scale point, and $M$ is the largest scale value.
|
||||
|
||||
This is what the survey maps and range plots show. In the showcase CSVs, this is the `mean` column. For MFV showcase plots, model and human units differ, so the plotted quantity is relative foundation emphasis: each foundation profile is z-scored across foundations before mapping.
|
||||
|
||||
For paired steering runs, compare the base profile to the steered profile path. Answer mass means the total probability assigned to valid answer tokens. It is a coherence check, not a value score. The showcase drops a side at the first coefficient where answer mass is at or below 99% of the base run.
|
||||
|
||||
## Scope
|
||||
|
||||
tinymfv is for fast paired steering comparisons, not full moral reasoning evaluation. It is useful when you want to compare base, positive-steer, and negative-steer runs against the same human reference plots.
|
||||
|
||||
For behavior-heavy moral evals, see [machiavelli](https://huggingface.co/datasets/wassname/machiavelli), [AIRiskDilemmas](https://huggingface.co/datasets/kellycyy/AIRiskDilemmas), and [ethics_expression_preferences](https://huggingface.co/datasets/wassname/ethics_expression_preferences).
|
||||
|
||||
Used in [steering-lite](https://github.com/wassname/steering-lite), [lora-lite](https://github.com/wassname/lora-lite), and [w2schar-mini](https://github.com/wassname/w2schar-mini).
|
||||
|
||||
## Citation
|
||||
|
||||
```bibtex
|
||||
@misc{clark2026tinymfv,
|
||||
title = {tinymfv: tiny moral/value eval for local LLMs},
|
||||
author = {Michael Clark},
|
||||
year = {2026},
|
||||
url = {https://github.com/wassname/tinymfv/}
|
||||
}
|
||||
```
|
||||
@@ -4,16 +4,18 @@ Consumes a steering-lite `run_allinstr_showcase.py` output dir (one calibrated
|
||||
activation-steering vector administered across every instrument over a signed
|
||||
c-sweep) and renders the SAME two figures for every instrument, uniformly:
|
||||
|
||||
- map : ipsative culture map (PCA), AI base + steer trajectory vs the human cloud.
|
||||
- range: per-factor range, AI base dot + +c/-c arrows vs the human society strip.
|
||||
- map : ipsative culture map (PCA), AI base + strongest coherent +/-c vs the human cloud.
|
||||
- range: per-factor range, AI base + coherent +/-c path vs the human society strip.
|
||||
|
||||
Ordinal instruments (mfq2/big5/16pf/humor_styles) read <name>_profiles.csv; nominal
|
||||
MFV reads mfv.json and is projected into z-scored relative-emphasis space (its
|
||||
logit-violation units cannot share a raw axis with 1-5 wrongness), but it goes
|
||||
through the same plot_ipsative_pca / plot_range and yields the same two figures.
|
||||
|
||||
cs are SIGNED multipliers of the calibrated coefficient C (0 = base); the real C
|
||||
is in the title, the legend shows only the multiplier (c=+1, c=-2, ...).
|
||||
cs are SIGNED multipliers of the calibrated coefficient C (0 = base). The public
|
||||
README range plots show the coherent path: c=0 plus each +/-c row whose pmass stays
|
||||
above the requested fraction of base. Maps show only the strongest coherent endpoints.
|
||||
Incoherent rows are dropped, not drawn hollow.
|
||||
|
||||
uv run python scripts/plot_steer_showcase.py \
|
||||
--run-dir ../steering-lite/outputs/allinstr_qwen35_4b --out docs/img/showcase
|
||||
@@ -110,21 +112,37 @@ def read_profiles(run_dir: Path, name: str, dims: list[str], value_col: str = "m
|
||||
return {c: np.array([d[f] for f in dims]) for c, d in by_c.items()}, pmass
|
||||
|
||||
|
||||
def plot_ordinal(run_dir: Path, out: Path, name: str, vec_label: str, C: float, *, show_sweep: bool = False) -> list[Path]:
|
||||
def coherent_prefix_cs(cs: list[float], pmass: dict[float, float], coherence_frac: float) -> list[float]:
|
||||
"""c=0 plus each signed arm until answer mass first falls below the base-relative floor."""
|
||||
base_pm = pmass[0.0]
|
||||
kept = [0.0]
|
||||
for side in (1.0, -1.0):
|
||||
for c in sorted([c for c in cs if np.sign(c) == side], key=abs):
|
||||
if pmass[c] <= coherence_frac * base_pm:
|
||||
break
|
||||
kept.append(c)
|
||||
return sorted(kept)
|
||||
|
||||
|
||||
def plot_ordinal(run_dir: Path, out: Path, name: str, vec_label: str, C: float,
|
||||
coherence_frac: float) -> list[Path]:
|
||||
instr = get_instrument(name)
|
||||
dims = instr.dimensions
|
||||
prof_c, pmass = read_profiles(run_dir, name, dims)
|
||||
cs = sorted(prof_c)
|
||||
base = prof_c[0.0]
|
||||
# headline arrows = the calibrated coefficient (c=+-1); the trajectory dots at |c|>1 extend
|
||||
# BEYOND the arrowheads, so a multi-C run shows deployment point + where stronger steer drifts.
|
||||
pos = prof_c[1.0] if 1.0 in prof_c else prof_c[max(cs)]
|
||||
neg = prof_c[-1.0] if -1.0 in prof_c else prof_c[min(cs)]
|
||||
# Coherence gate is RELATIVE and monotone per signed arm: walk outward from c=0 and stop at the
|
||||
# first coefficient whose allowed-answer mass falls below the requested fraction of base.
|
||||
coh_cs = coherent_prefix_cs(cs, pmass, coherence_frac)
|
||||
pos_c = max(c for c in coh_cs if c > 0.0)
|
||||
neg_c = min(c for c in coh_cs if c < 0.0)
|
||||
pos = prof_c[pos_c]
|
||||
neg = prof_c[neg_c]
|
||||
humans = human_strip(instr)
|
||||
prof = prof_c
|
||||
|
||||
countries, Mfrac = human_matrix(instr)
|
||||
labels = (f"base (c=0)", f"+C={C:+.2f}", f"-C={-C:+.2f}")
|
||||
labels = ("base (c=0)", f"c={pos_c:+g}", f"c={neg_c:+g}")
|
||||
# mfq2 has per-respondent Atari data -> scatter the REAL individual cloud behind the societies AND
|
||||
# fit the ipsative PCA on it (better-conditioned, the true envelope). Other instruments have no raw
|
||||
# per-person data, so scatter a marginal resample from each country's published mean+sd as the haze
|
||||
@@ -133,28 +151,16 @@ def plot_ordinal(run_dir: Path, out: Path, name: str, vec_label: str, C: float,
|
||||
respondents, haze = T.maps.respondent_profiles(dims, instr.scale_max), None
|
||||
else:
|
||||
respondents, haze = None, human_haze(instr)
|
||||
# Public showcase maps default to the clean base/+-C anchors. The full -N..+N sweep is useful
|
||||
# for diagnosis, but it clutters the README and is often mistaken for incoherent random dots.
|
||||
# Pass --show-sweep when debugging how stronger coefficients leave the human map.
|
||||
# Coherence gate is RELATIVE: keep a c only if its pmass stays within 95% of the base (c=0) pmass;
|
||||
# below that the readout has degraded enough that the profile is not comparable, so drop it entirely.
|
||||
base_pm = pmass[0.0]
|
||||
coh_cs = [c for c in cs if pmass[c] >= 0.95 * base_pm]
|
||||
traj = {c: _frac(prof_c[c], instr.scale_max) for c in coh_cs} if show_sweep and len(coh_cs) > 3 else None
|
||||
traj_inco = None # excluded (not drawn hollow) per the 95%-of-base coherence gate
|
||||
figm = T.maps.plot_ipsative_pca(instr, dims, countries, Mfrac,
|
||||
_frac(base, instr.scale_max), _frac(pos, instr.scale_max),
|
||||
_frac(neg, instr.scale_max), respondents=respondents, haze=haze,
|
||||
traj=traj, traj_incoherent=traj_inco, labels=labels)
|
||||
labels=labels)
|
||||
figm.axes[0].set_title(f"{instr.display}: humans vs LLMs steered for {vec_label}", fontsize=10)
|
||||
paths = [T.maps.save_both(figm, out / name, "map_pca_ipsative")]
|
||||
plt.close(figm)
|
||||
|
||||
# Range renders the SAME coherence-gated c-points the map uses (coh_cs), so the two figures agree
|
||||
# on which steer multipliers are valid. Without this the map drops incoherent/NaN poles while the
|
||||
# range still plots them (GPT-5.5 code review). Base (c=0) is always in coh_cs (pmass==base_pm).
|
||||
assert 0.0 in coh_cs, f"{name}: base c=0 dropped by coherence gate, pmass={pmass}"
|
||||
prof_coh = {c: prof_c[c] for c in coh_cs}
|
||||
figr = T.maps.plot_range(instr, dims, coh_cs, prof_coh, humans, None, vec_label)
|
||||
prof_plot = {c: prof_c[c] for c in coh_cs}
|
||||
figr = T.maps.plot_range(instr, dims, coh_cs, prof_plot, humans, None, vec_label)
|
||||
paths.append(T.maps.save_both(figr, out / name, "range"))
|
||||
plt.close(figr)
|
||||
return paths
|
||||
@@ -211,10 +217,11 @@ _MFV_YLABEL = "relative emphasis (z across foundations)"
|
||||
def plot_mfv_map(run_dir: Path, out: Path, vec_label: str, C: float) -> Path:
|
||||
"""MFV ipsative culture map via the SAME plot_ipsative_pca the ordinal instruments use, in the
|
||||
z-scored relative-emphasis space (logit-violation and 1-5 wrongness cannot share a raw axis).
|
||||
base->+C (red) / base->-C (blue) arrows show where the steer moves the AI among human cultures."""
|
||||
Red/blue endpoint points show where the steer moves the AI among human cultures."""
|
||||
founds, countries, M, base, posz, negz = _mfv_zspace(run_dir)
|
||||
labels = ("base (c=0)", f"+C={C:+.2f}", f"-C={-C:+.2f}")
|
||||
labels = ("base (c=0)", "c=+1", "c=-1")
|
||||
fig = T.maps.plot_ipsative_pca(_MFV_INSTR, founds, countries, M, base, posz, negz, labels=labels)
|
||||
fig.axes[0].set_title(f"MFV vignettes: humans vs LLMs steered for {vec_label}", fontsize=10)
|
||||
path = T.maps.save_both(fig, out / "mfv", "map_pca_ipsative")
|
||||
plt.close(fig)
|
||||
return path
|
||||
@@ -238,20 +245,22 @@ def main() -> None:
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument("--run-dir", type=Path, required=True)
|
||||
ap.add_argument("--out", type=Path, default=Path("docs/img/showcase"))
|
||||
ap.add_argument("--show-sweep", action="store_true",
|
||||
help="draw the full coherence-gated c sweep on ordinal maps")
|
||||
ap.add_argument("--vec-label", default=None,
|
||||
help="short human-readable steering direction for plot titles")
|
||||
ap.add_argument("--coherence-frac", type=float, default=0.99,
|
||||
help="keep c rows whose pmass is above this fraction of base")
|
||||
args = ap.parse_args()
|
||||
summary = json.loads((args.run_dir / "summary.json").read_text())
|
||||
C = float(summary["calibrated_C"])
|
||||
method = summary["method"]
|
||||
vec_label = summary.get("vec_label", f"{method} (Authority/Care axis)")
|
||||
vec_label = args.vec_label or summary.get("vec_label", "-Authority")
|
||||
args.out.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
written: list[str] = []
|
||||
for name in ORDINAL:
|
||||
if (args.run_dir / f"{name}_profiles.csv").exists():
|
||||
written += [str(p) for p in plot_ordinal(args.run_dir, args.out, name, vec_label, C,
|
||||
show_sweep=args.show_sweep)]
|
||||
args.coherence_frac)]
|
||||
if (args.run_dir / "mfv.json").exists():
|
||||
written.append(str(plot_mfv_map(args.run_dir, args.out, vec_label, C))) # shared ipsative map (z-space)
|
||||
written.append(str(plot_mfv_range(args.run_dir, args.out, vec_label, C))) # shared range (z-space)
|
||||
|
||||
@@ -7,9 +7,9 @@ same way.
|
||||
|
||||
plot_ipsative_pca : where the model sits among human cultures. Each society's profile is
|
||||
row-centred (its overall endorsement level removed) then PCA'd, so the axes
|
||||
are RELATIVE emphasis across factors, not acquiescence. The model's base +
|
||||
steered poles are projected into the same space; a compass inset shows how
|
||||
each factor loads.
|
||||
are RELATIVE emphasis across factors, not acquiescence. The model's base and
|
||||
steered endpoint profiles are projected into the same space; a compass inset
|
||||
shows how each factor loads.
|
||||
plot_range : per-factor, the steer as a directed c-sweep (tail at the -c pole, single
|
||||
arrowhead at the +c pole) against the strip of human societies. With a zoomed
|
||||
small-multiple companion (plot_range_zoom), one panel per factor on its own
|
||||
@@ -243,8 +243,6 @@ def plot_ipsative_pca(instr: Instrument, dims: list[str], countries: list[str],
|
||||
(pb, C_BASE, base_lab, (9, -13), "left")]:
|
||||
if pt is None:
|
||||
continue
|
||||
if pt is not pb:
|
||||
ax.annotate("", xy=pt, xytext=pb, arrowprops=dict(arrowstyle="-|>", color=col, lw=2.0), zorder=5)
|
||||
ax.scatter(*pt, s=120, c=col, marker="o", edgecolors="white", linewidths=1.2, zorder=7)
|
||||
ax.annotate(lab, pt, xytext=dxy, textcoords="offset points", fontsize=9, color=col,
|
||||
fontweight="bold", ha=ha, va="center", zorder=8)
|
||||
@@ -252,7 +250,6 @@ def plot_ipsative_pca(instr: Instrument, dims: list[str], countries: list[str],
|
||||
if traj:
|
||||
inco = traj_incoherent or set()
|
||||
cs_sorted = sorted(traj)
|
||||
cmax = max(abs(c) for c in cs_sorted) or 1.0
|
||||
traj_pts = np.array([proj(traj[c]) for c in cs_sorted])
|
||||
# two arms fanning from base (c=0): +c red, -c blue. Marker grows with |c|; a point whose
|
||||
# admin pmass fell below the coherence floor is hollow (the steer is no longer measuring).
|
||||
@@ -266,12 +263,8 @@ def plot_ipsative_pca(instr: Instrument, dims: list[str], countries: list[str],
|
||||
if c == 0:
|
||||
continue
|
||||
col = POS_COL if c > 0 else NEG_COL
|
||||
ax.scatter(p[0], p[1], s=14 + 26 * abs(c) / cmax, c="none" if c in inco else col,
|
||||
ax.scatter(p[0], p[1], s=34, c="none" if c in inco else col,
|
||||
edgecolors=col, linewidths=1.0, zorder=6)
|
||||
cend, pend = arm[-1] if hi > 0 else arm[0]
|
||||
ax.annotate(f"c={cend:+.0f}", pend, xytext=(4, 4), textcoords="offset points",
|
||||
fontsize=7, color=POS_COL if cend > 0 else NEG_COL, zorder=8,
|
||||
bbox=dict(boxstyle="round,pad=0.1", fc="#faf8f2", ec="none", alpha=0.7))
|
||||
# Crop to the SOCIETIES + steer anchors for EVERY instrument (the human cloud is far wider and would
|
||||
# bury them in a central blob; it stays a clipped backdrop). Then PAD THE BOTTOM to reserve a clean
|
||||
# strip for the legend insets -- deterministic placement, identical on every plot, no overlap with
|
||||
@@ -284,7 +277,7 @@ def plot_ipsative_pca(instr: Instrument, dims: list[str], countries: list[str],
|
||||
wx0, wx1 = min(cx[0], np.nanmin(anc[:, 0])), max(cx[1], np.nanmax(anc[:, 0]))
|
||||
wy0, wy1 = min(cy[0], np.nanmin(anc[:, 1])), max(cy[1], np.nanmax(anc[:, 1]))
|
||||
sx, sy = wx1 - wx0, wy1 - wy0
|
||||
dview = (wx0 - 0.05 * sx, wx1 + 0.05 * sx, wy0 - 0.05 * sy, wy1 + 0.05 * sy) # data frame, no pad
|
||||
dview = (wx0 - 0.12 * sx, wx1 + 0.12 * sx, wy0 - 0.12 * sy, wy1 + 0.12 * sy) # data frame, no legend pad
|
||||
else:
|
||||
x0, x1 = ax.get_xlim(); y0, y1 = ax.get_ylim()
|
||||
dview = (x0, x1, y0, y1); sy = y1 - y0
|
||||
@@ -422,40 +415,29 @@ def plot_splom(instr: Instrument, dims: list[str], cloud: np.ndarray, M: np.ndar
|
||||
# --- per-vector steer range ---------------------------------------------------------------------
|
||||
|
||||
def draw_steer(ax, xs: float, cs: list[float], yv: np.ndarray, base_y: float,
|
||||
ms: float = 3.5, lw: float = 2.0, head: float = 7.0, dx: float = 0.06,
|
||||
dots: bool = True) -> None:
|
||||
"""Draw the steer c-sweep at column x=xs as TWO arms fanning out FROM the base (the unsteered
|
||||
model at c=0): a red arm to the +c pole, a blue arm to the -c pole. Each arm is a line plus a
|
||||
triangle HEAD MARKER at the pole pointing AWAY from base (^ if the pole is above base, v if below),
|
||||
so the head flips to point down on factors the steer lowers. This matches plot_ipsative_pca's
|
||||
base->pole arrows -- the unsteered model is the origin, NOT the -c pole.
|
||||
|
||||
The head is the ONLY marker at each pole (no dot under it) and is a constant-size marker, NOT a
|
||||
FancyArrow: FancyArrowPatch shrinks and can flip its head once the shaft is shorter than the head,
|
||||
which is exactly the near-collapsed-pole case here. `dots` adds the intermediate per-c step dots
|
||||
(the zoom labels them c=X and wants them; the main range does not -- there they only clutter a short
|
||||
arm into a blob). The +c arm is nudged +dx in x and the -c arm -dx, so a NON-bidirectional steer
|
||||
(both poles the same side of base) reads as two short PARALLEL arms rather than overlapping."""
|
||||
lw: float = 2.0, dx: float = 0.12, tick: float = 0.038) -> None:
|
||||
"""Draw one coherent AI c-path."""
|
||||
assert list(cs) == sorted(cs) and 0.0 in cs, f"draw_steer needs sorted cs with c=0 (yv[-1]=+pole, yv[0]=-pole), got {cs}"
|
||||
ax.plot(xs, base_y, "o", ms=ms, color="black", zorder=7) # base: the unsteered model
|
||||
if dots:
|
||||
for c, y in zip(cs, yv):
|
||||
if c == 0 or c == cs[0] or c == cs[-1]: # base drawn above; poles = head only
|
||||
continue
|
||||
ax.plot(xs + (dx if c > 0 else -dx), float(y), "o", ms=ms * 0.6, zorder=7,
|
||||
color=POS_COL if c > 0 else NEG_COL)
|
||||
for pole_y, col, xo in [(float(yv[-1]), POS_COL, xs + dx), (float(yv[0]), NEG_COL, xs - dx)]:
|
||||
if abs(pole_y - base_y) > 1e-9:
|
||||
ax.plot([xo, xo], [base_y, pole_y], color=col, lw=lw, zorder=6, solid_capstyle="round")
|
||||
ax.plot(xo, pole_y, marker=("^" if pole_y >= base_y else "v"), color=col, ms=head,
|
||||
markeredgecolor="none", zorder=8)
|
||||
cmax = max(abs(c) for c in cs) or 1.0
|
||||
xs_by_c = {c: xs if c == 0.0 else xs + dx * np.sign(c) * np.sqrt(abs(c) / cmax) for c in cs}
|
||||
for side_cs, col in [([c for c in cs if c <= 0.0], NEG_COL), ([c for c in cs if c >= 0.0], POS_COL)]:
|
||||
if len(side_cs) < 2:
|
||||
continue
|
||||
x_path = [xs_by_c[c] for c in side_cs]
|
||||
y_path = [float(yv[cs.index(c)]) for c in side_cs]
|
||||
ax.plot(x_path, y_path, color=col, lw=lw, alpha=0.9, zorder=6, solid_capstyle="round")
|
||||
for c, y in zip(cs, yv):
|
||||
if c == 0.0:
|
||||
col, t = "black", tick * 1.25
|
||||
else:
|
||||
col, t = (POS_COL if c > 0 else NEG_COL), tick
|
||||
x = xs_by_c[c]
|
||||
ax.plot([x - t, x + t], [float(y), float(y)], color=col, lw=lw, zorder=8)
|
||||
|
||||
|
||||
def draw_range_panel(ax, instr: Instrument, dims: list[str], cs: list[float], prof: dict,
|
||||
humans: dict, cloud: np.ndarray | None, vec: str) -> tuple[float, float]:
|
||||
"""One vector's range panel: respondent cloud + named society dots + the steer c-sweep drawn as
|
||||
two arrows fanning out from the base dot (red to the +c pole, blue to the -c pole). The widest
|
||||
steer carries a '-N {vec} / base / +N {vec}' in-plot key. Returns the cropped (ymin, ymax)."""
|
||||
"""One vector's range panel: human society dots plus one AI steer column per factor."""
|
||||
rng = np.random.default_rng(0)
|
||||
ys: list[float] = []
|
||||
spans = [float(np.ptp([prof[c][i] for c in cs])) for i in range(len(dims))]
|
||||
@@ -483,13 +465,13 @@ def draw_range_panel(ax, instr: Instrument, dims: list[str], cs: list[float], pr
|
||||
yv = np.array([prof[c][i] for c in cs])
|
||||
ys += yv.tolist()
|
||||
base_y = float(yv[list(cs).index(0.0)])
|
||||
draw_steer(ax, xs, cs, yv, base_y, dots=False)
|
||||
draw_steer(ax, xs, cs, yv, base_y)
|
||||
if i == label_i:
|
||||
# Only the two pole labels, to the RIGHT of the steer column. No 'base' tag: the black dot
|
||||
# between the two coloured arms is self-evidently the unsteered model, and on a near-collapsed
|
||||
# pole (e.g. humor affiliative, +c ~ base) a 'base' tag overprints the +c tag.
|
||||
for c_end, y_end, col in [(cs[-1], yv[-1], POS_COL), (cs[0], yv[0], NEG_COL)]:
|
||||
ax.annotate(f"c={int(c_end):+d}", (xs + 0.30, y_end), fontsize=6.8,
|
||||
ax.annotate(f"c={c_end:+g}", (xs + 0.30, y_end), fontsize=6.8,
|
||||
ha="left", va="center", color=col, zorder=9)
|
||||
|
||||
pad = 0.10 * (max(ys) - min(ys))
|
||||
@@ -568,7 +550,7 @@ def plot_range_zoom(instr: Instrument, dims: list[str], cs: list[float], prof: d
|
||||
|
||||
xs = 0.30
|
||||
base_y = float(yv[list(cs).index(0.0)])
|
||||
draw_steer(ax, xs, cs, yv, base_y, ms=4.5, lw=2.4, head=9.0, dx=0.10)
|
||||
draw_steer(ax, xs, cs, yv, base_y, lw=2.4, dx=0.10, tick=0.055)
|
||||
named = {}
|
||||
if near:
|
||||
name_xy = {nm: (float(x), v) for (nm, v), x in zip(near, soc_x)}
|
||||
|
||||