cleaning up repo, lots of moved files

This commit is contained in:
Oam Patel 2025-02-15 23:53:48 +00:00
parent 74e99213ac
commit 5f5dfdf1a6
20 changed files with 1 additions and 594 deletions

2
.gitattributes vendored
View file

@ -1,2 +0,0 @@
# Auto detect text files and perform LF normalization
* text=auto

425
.pylintrc
View file

@ -1,425 +0,0 @@
[MASTER]
# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code
extension-pkg-whitelist=
# Add files or directories to the blacklist. They should be base names, not
# paths.
ignore=CVS
# Add files or directories matching the regex patterns to the blacklist. The
# regex matches against base names, not paths.
ignore-patterns=
# Python code to execute, usually for sys.path manipulation such as
# pygtk.require().
#init-hook=
# Use multiple processes to speed up Pylint.
jobs=8
# List of plugins (as comma separated values of python modules names) to load,
# usually to register additional checkers.
load-plugins=
# Pickle collected data for later comparisons.
persistent=yes
# Specify a configuration file.
#rcfile=
# Allow loading of arbitrary C extensions. Extensions are imported into the
# active Python interpreter and may run arbitrary code.
unsafe-load-any-extension=no
[MESSAGES CONTROL]
# Only show warnings with the listed confidence levels. Leave empty to show
# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED
confidence=
# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifiers separated by comma (,) or put this
# option multiple times (only on the command line, not in the configuration
# file where it should appear only once).You can also use "--disable=all" to
# disable everything first and then reenable specific checks. For example, if
# you want to run only the similarities checker, you can use "--disable=all
# --enable=similarities". If you want to run only the classes checker, but have
# no Warning level messages displayed, use"--disable=all --enable=classes
# --disable=W"
disable=locally-disabled,suppressed-message,useless-suppression,not-context-manager
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once). See also the "--disable" option for examples.
enable=
[REPORTS]
# Python expression which should return a note less than 10 (10 is the highest
# note). You have access to the variables errors warning, statement which
# respectively contain the number of errors / warnings messages and the total
# number of statements analyzed. This is used by the global evaluation report
# (RP0004).
evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
# Template used to display messages. This is a python new-style format string
# used to format the message information. See doc for all details
#msg-template=
# Set the output format. Available formats are text, parseable, colorized, json
# and msvs (visual studio).You can also give a reporter class, eg
# mypackage.mymodule.MyReporterClass.
output-format=text
# Tells whether to display a full report or only the messages
reports=no
# Activate the evaluation score.
score=yes
[REFACTORING]
# Maximum number of nested blocks for function / method body
max-nested-blocks=5
[MISCELLANEOUS]
# List of note tags to take in consideration, separated by a comma.
notes=FIXME,XXX,TODO
[VARIABLES]
# List of additional names supposed to be defined in builtins. Remember that
# you should avoid to define new builtins when possible.
additional-builtins=
# Tells whether unused global variables should be treated as a violation.
allow-global-unused-variables=yes
# List of strings which can identify a callback function by name. A callback
# name must start or end with one of those strings.
callbacks=cb_,_cb
# A regular expression matching the name of dummy variables (i.e. expectedly
# not used).
dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_
# Argument names that match this expression will be ignored. Default to name
# with leading underscore
ignored-argument-names=_.*|^ignored_|^unused_
# Tells whether we should check for unused import in __init__ files.
init-import=no
# List of qualified module names which can have objects that can redefine
# builtins.
redefining-builtins-modules=six.moves,future.builtins
[LOGGING]
# Logging modules to check that the string format arguments are in logging
# function parameter format
logging-modules=logging
[BASIC]
# Naming hint for argument names
argument-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$
# Regular expression matching correct argument names
argument-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$
# Naming hint for attribute names
attr-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$
# Regular expression matching correct attribute names
attr-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$
# Bad variable names which should always be refused, separated by a comma
bad-names=foo,bar,baz,toto,tutu,tata
# Naming hint for class attribute names
class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
# Regular expression matching correct class attribute names
class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
# Naming hint for class names
class-name-hint=[A-Z_][a-zA-Z0-9]+$
# Regular expression matching correct class names
class-rgx=[A-Z_][a-zA-Z0-9]+$
# Naming hint for constant names
const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$
# Regular expression matching correct constant names
const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$
# Minimum line length for functions/classes that require docstrings, shorter
# ones are exempt.
docstring-min-length=-1
# Naming hint for function names
function-name-hint=(([a-z][a-z0-9_]{2,35})|(_[a-z0-9_]*))$
# Regular expression matching correct function names
function-rgx=(([a-z][a-z0-9_]{2,35})|(_[a-z0-9_]*))$
# Good variable names which should always be accepted, separated by a comma
good-names=i,j,k,ex,Run,_
# Include a hint for the correct naming format with invalid-name
include-naming-hint=no
# Naming hint for inline iteration names
inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$
# Regular expression matching correct inline iteration names
inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
# Naming hint for method names
method-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$
# Regular expression matching correct method names
method-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$
# Naming hint for module names
module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
# Regular expression matching correct module names
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
# Colon-delimited sets of names that determine each other's naming style when
# the name regexes allow several styles.
name-group=
# Regular expression which should only match function or class names that do
# not require a docstring.
no-docstring-rgx=^__
# List of decorators that produce properties, such as abc.abstractproperty. Add
# to this list to register other decorators that produce valid properties.
property-classes=abc.abstractproperty
# Naming hint for variable names
variable-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$
# Regular expression matching correct variable names
variable-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$
[SIMILARITIES]
# Ignore comments when computing similarities.
ignore-comments=yes
# Ignore docstrings when computing similarities.
ignore-docstrings=yes
# Ignore imports when computing similarities.
ignore-imports=no
# Minimum lines number of a similarity.
min-similarity-lines=4
[TYPECHECK]
# List of decorators that produce context managers, such as
# contextlib.contextmanager. Add to this list to register other decorators that
# produce valid context managers.
contextmanager-decorators=contextlib.contextmanager
# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E1101 when accessed. Python regular
# expressions are accepted.
generated-members=
# Tells whether missing members accessed in mixin class should be ignored. A
# mixin class is detected if its name ends with "mixin" (case insensitive).
ignore-mixin-members=yes
# This flag controls whether pylint should warn about no-member and similar
# checks whenever an opaque object is returned when inferring. The inference
# can return multiple potential results while evaluating a Python object, but
# some branches might not be evaluated, which results in partial inference. In
# that case, it might be useful to still emit no-member and other checks for
# the rest of the inferred objects.
ignore-on-opaque-inference=yes
# List of class names for which member attributes should not be checked (useful
# for classes with dynamically set attributes). This supports the use of
# qualified names.
ignored-classes=optparse.Values,thread._local,_thread._local
# List of module names for which member attributes should not be checked
# (useful for modules/projects where namespaces are manipulated during runtime
# and thus existing member attributes cannot be deduced by static analysis. It
# supports qualified module names, as well as Unix pattern matching.
ignored-modules=numpy,numpy.random,tensorflow,ujson,h5py._hl.*,tensorflow.tools.api.generator.api.contrib,diplomacy_research.proto.diplomacy_proto.*
# Show a hint with possible names when a member name was not found. The aspect
# of finding the hint is based on edit distance.
missing-member-hint=yes
# The minimum edit distance a name should have in order to be considered a
# similar match for a missing member name.
missing-member-hint-distance=1
# The total number of similar names that should be taken in consideration when
# showing a hint for a missing member.
missing-member-max-choices=1
[SPELLING]
# Spelling dictionary name. Available dictionaries: none. To make it working
# install python-enchant package.
spelling-dict=
# List of comma separated words that should not be checked.
spelling-ignore-words=
# A path to a file that contains private dictionary; one word per line.
spelling-private-dict-file=
# Tells whether to store unknown words to indicated private dictionary in
# --spelling-private-dict-file option instead of raising a message.
spelling-store-unknown-words=no
[FORMAT]
# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
expected-line-ending-format=
# Regexp for a line that is allowed to be longer than the limit.
ignore-long-lines=^\s*(# )?<?https?://\S+>?$
# Number of spaces of indent required inside a hanging or continued line.
indent-after-paren=4
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
# tab).
indent-string=' '
# Maximum number of characters on a single line.
max-line-length=120
# Maximum number of lines in a module
max-module-lines=1000
# List of optional constructs for which whitespace checking is disabled. `dict-
# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}.
# `trailing-comma` allows a space between comma and closing bracket: (a, ).
# `empty-line` allows space-only lines.
no-space-check=trailing-comma,dict-separator
# Allow the body of a class to be on the same line as the declaration if body
# contains single statement.
single-line-class-stmt=no
# Allow the body of an if to be on the same line as the test if there is no
# else.
single-line-if-stmt=no
[IMPORTS]
# Allow wildcard imports from modules that define __all__.
allow-wildcard-with-all=no
# Analyse import fallback blocks. This can be used to support both Python 2 and
# 3 compatible code, which means that the block might have code that exists
# only in one or another interpreter, leading to false positives when analysed.
analyse-fallback-blocks=no
# Deprecated modules which should not be used, separated by a comma
deprecated-modules=optparse
# Create a graph of external dependencies in the given file (report RP0402 must
# not be disabled)
ext-import-graph=
# Create a graph of every (i.e. internal and external) dependencies in the
# given file (report RP0402 must not be disabled)
import-graph=
# Create a graph of internal dependencies in the given file (report RP0402 must
# not be disabled)
int-import-graph=
# Force import order to recognize a module as part of the standard
# compatibility libraries.
known-standard-library=
# Force import order to recognize a module as part of a third party library.
known-third-party=enchant
[CLASSES]
# List of method names used to declare (i.e. assign) instance attributes.
defining-attr-methods=__init__,__new__,setUp
# List of member names, which should be excluded from the protected access
# warning.
exclude-protected=_asdict,_fields,_replace,_source,_make
# List of valid names for the first argument in a class method.
valid-classmethod-first-arg=cls
# List of valid names for the first argument in a metaclass class method.
valid-metaclass-classmethod-first-arg=mcs
[DESIGN]
# Maximum number of arguments for function / method
max-args=8
# Maximum number of attributes for a class (see R0902).
max-attributes=25
# Maximum number of boolean expressions in a if statement
max-bool-expr=5
# Maximum number of branch for function / method body
max-branches=30
# Maximum number of locals for function / method body
max-locals=100
# Maximum number of parents for a class (see R0901).
max-parents=7
# Maximum number of public methods for a class (see R0904).
max-public-methods=100
# Maximum number of return / yield for function / method body
max-returns=6
# Maximum number of statements in function / method body
max-statements=100
# Minimum number of public methods for a class (see R0903).
min-public-methods=1
[EXCEPTIONS]
# Exceptions that will emit a warning when being caught. Defaults to
# "Exception"
overgeneral-exceptions=Exception

View file

@ -1,19 +0,0 @@
# .readthedocs.yml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# Required
version: 2
# Build documentation in the docs/ directory with Sphinx
sphinx:
configuration: docs/conf.py
# Optionally build your docs in additional formats such as PDF and ePub
formats: all
# Optionally set the version of Python and requirements required to build your docs
python:
version: 3.7
install:
- requirements: requirements_dev.txt

View file

@ -1,29 +0,0 @@
cache:
directories:
- $HOME/.cache/pip
- $HOME/.cache/diplomacy
install:
- mkdir -p $HOME/.cache/diplomacy
- wget -nv https://storage.googleapis.com/ppaquette-diplomacy/cache-jenkins/convoy_paths_cache.pkl -O $HOME/.cache/diplomacy/convoy_paths_cache.pkl
- pip install -r requirements.txt
- pip install -r requirements_dev.txt
- touch run_install_nvm.sh
- chmod +x run_install_nvm.sh
- ./run_install_nvm.sh
script: ./run_tests.sh
jobs:
include:
- os: linux
sudo: required
language: python
python: 3.5
- os: linux
sudo: required
language: python
python: 3.6
- os: linux
sudo: required
language: python
python: 3.7

View file

@ -1,9 +0,0 @@
include ACKNOWLEDGEMENTS
include CODE_OF_CONDUCT.md
include LICENSE
include README.md
include requirements.txt
include requirements_dev.txt
include run_install_nvm.sh
include run_tests.sh
recursive-include diplomacy *

View file

@ -1,4 +0,0 @@
DEEPSEEK_API_KEY=
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
GEMINI_API_KEY=

View file

@ -1,3 +1,4 @@
-e .
bcrypt bcrypt
coloredlogs coloredlogs
python-dateutil python-dateutil

View file

@ -1,8 +0,0 @@
-e .
-r requirements.txt
pylint>=2.3.0
pytest>=4.4.0
pytest-xdist
sphinx
sphinx_copybutton
sphinx_rtd_theme

View file

@ -1,6 +0,0 @@
{
"claude-3-5-haiku-20241022": {
"conversation_errors": 0,
"order_decoding_errors": 1
}
}

View file

@ -1,21 +0,0 @@
=== S1901M ===
PARSABLE OUTPUT:
{
"summary": "In the S1901M phase, most powers maintained their positions without any territorial gains. Austrias orders to hold Bud and Tri were successful, while Viennas attempt to move toward Boh did not effect a change. Similarly, Englands fleets ordered to move from Edinburgh to NWG and from London to ENG, as well as the armys order from Liverpool to Yorkshire, ended up holding their original positions. Frances orders—Brest holding, Marseille holding, and Pariss attempted move toward Burgundy—left their centers unchanged. Germanys orders to maneuver from Kiel to Holland and Berlin to Kiel, with Munich held solid, also resulted in no change. Italys coordinated move, with Rome advancing toward Apulia and supported by Venice, did not alter the board, leaving all Italian units in their home centers. Russia and Turkey likewise issued orders that left their units in place. Overall, no moves or supports managed to dislodge an enemy or capture additional centers this turn, and the board remains as it was, with no retreats necessary."
}
=== F1901M ===
This turn was marked primarily by holds and bounced moves rather than successful offensives. Austria solidified its position by holding in BUD, TRI, and its newly gained BOH after losing VIE. Englands units (NWG, ENG, and YOR) largely remained in place even though NWG attempted a move toward NAO and ENG toward NTH, suggesting these advances were rebuffed. France tried to expand with BRE moving toward ENG and coordinated MARs move to GAS supported by BUR; however, none of these efforts resulted in a change of position, even as Frances unit composition shifted with the gain of BUR and loss of PAR.
On the German side, although KIE attempted to provide support (for a move on RUH) that was ultimately voided, both MUN and HOL stayed put. Germanys overall composition was adjusted by gaining HOL and KIE while losing BER and its previous KIE. Italys maneuver to send VEN to TRI bounced, and even though ION was ordered to convoy APU toward GRE, both APU and VEN were forced to remain in their starting positions, highlighting a failed attempt to contest territory.
Russia also saw mixed results: while FINs planned move to SWE held, SEVs advance toward BLA bounced. UKR and WAR held steady, maintaining Russias influence. In Turkeys case, BLA and BUL held firm while the attempt to move CON toward BUL was bounced, even as Turkey gained BUL and BLA and lost SMY and ANK.
Overall, this phase saw several attempted advances and support orders (including a voided support from Germanys KIE) that ultimately resulted in a board state where most units held their positions despite the underlying shifts in power composition from previous gains and losses.
=== W1901A ===
PARSABLE OUTPUT:
{
"summary": "In the W1901A phase, several orders had mixed outcomes. Germanys fleet from Berlin acted as ordered, while Italys orders split: the army in Naples appears to have executed its move, but the fleet from Rome had its order voided. Russias fleet from St. Petersburg successfully carried out its action, and Turkeys order from Ankara was implemented while its Smyrna order was voided. In addition, notable board changes took place. England bolstered its forces with new fleets (F NTH and F NAO) even as it lost others (F NWG and F ENG). France improved its position by gaining A GAS and F ENG while losing F BRE and A MAR. Germany expanded by acquiring the HOL center, and Italy both adjusted its unit complement—gaining A GRE while losing A APU—and secured the GRE center. Russia added a fleet (F SWE), shed F FIN, and claimed the SWE center, while Turkey captured the BUL center. There were no retreats, and overall, the phase featured a mixture of successful orders and voided moves that led to subtle shifts in unit placement and territorial influence."
}

File diff suppressed because one or more lines are too long

View file

@ -1,6 +0,0 @@
=== S1901M ===
PARSABLE OUTPUT:
{
"summary": "In phase S1901M all powers largely held their positions. Austria, France, Italy, Russia, and Turkey successfully executed hold orders, resulting in no changes to their unit placements or centers. England attempted to move its fleet from Edinburgh to the North Sea (with support from its fleet in London), but the move bounced, likely due to an equal contest of force or a miscalculation in strength, so F EDI remained in Edinburgh. Similarly, Germanys attempt to move its unit from Munich to Ruhr (A MUN - RUH) failed after bouncing, probably due to insufficient support or issues with valid adjacencies, leaving the unit in Munich. There were no changes to supply centers, and the status quo persists, setting up the stage for any future strategic adjustments."
}

View file

@ -1,60 +0,0 @@
=== S1901M ===
PARSABLE OUTPUT:
{
"orders": [
"Austria attempted to support moves into Galicia and advance its fleet from Trieste to the Adriatic, but both orders were void, leaving its units in BUD, VIE, and TRI.",
"Englands orders to move its fleets (from LON to ENG and EDI to NTH) and its army from LVP to YOR did not succeed, so their units remain in their original positions.",
"Similarly, Frances moves (F BRE to PIC, A PAR to BUR) and Italys maneuvers (F NAP to ION, A ROM to APU, A VEN to TYR) failed to yield any relocation, while Germany opted to hold all units.",
"Russias support moves (A MOS supporting F STP/SC and A WAR supporting a move into Galicia) and its fleet actions (F SEV to RUM, F STP/SC hold) did not change its positions, and Turkeys orders aimed at ARM, BUL, and BLA also fizzled.",
"Overall, no moves were successful this turn, no territories changed hands, and the board state remained exactly as before with no captures or retreats."
]
}
=== F1901M ===
PARSABLE OUTPUT:
{
"orders": [
"Austria built a new fleet in Adriatic (F ADR) to replace its lost fleet in Trieste, and attempted a coordinated move with its Budapest army to Serbia while also trying to support that army moving from Budapest to Trieste; however, the support from Vienna was cut (its order became void), so the intended boost did not materialize.",
"England replaced its losses by building new units—an army in York, a fleet in English Channel, and a fleet in North Sea. The fleet in the Channel tried to move to the North Sea but bounced, meaning all new units remained in their original positions.",
"France built two new units (an army in Burgundy and a fleet in Picardy) while losing its previous unit placements in Paris and Brest. Orders to move the new fleet from Picardy to Brest did not succeed, so the French units stayed put, with the army holding in Marseilles.",
"Germanys forces (Munich, Berlin, and the fleet in Kiel) held their positions. A support order from Berlin to Munich was issued but did not lead to any change, so German units remained in place.",
"Italy constructed new forces—a new army in Apulia (attempting a convoy move to Albania via Ionian Sea) and an army in Tyrol, alongside the fleet in Ionian Sea—as part of a reconstitution after losing units in Naples, Rome, and Venice. The convoy order did not result in a relocation, so the units retained their current positions.",
"Russia attempted to send its army in Warsaw to Ukraine with support from the Moscow army, but the support order was cut (void), and the Warsaw army remained in place. Meanwhile, Russia built a new fleet in the Black Sea (F RUM) to replace its lost fleet in Sevastopol, and its units held in the other designated areas.",
"Turkeys orders were straightforward as all three units (the army in Arm, the fleet in Black Sea area BLA, and the army in Bulgaria) held. Turkey replaced its lost units (from Smyrna, Ankara, and Constantinople) with these new units, maintaining its current positions."
]
}
=== W1901A ===
PARSABLE OUTPUT:
{
"orders": [
"In the W1901A phase, Austrias move from Budapest (A BUD) was executed successfully while its Trieste move (A TRI) failed (void). As a result, Austria lost its unit in Budapest but added a new unit in Serbia and secured the SER center.",
"Russia's order from Sevastopol (A SEV) was carried out successfully, reinforcing its position in the southeast.",
"Turkey saw a mixed result: the move from Constantinople (A CON) succeeded, but the order from Smyrna (A SMY) was void. Turkey further expanded its influence by adding the BUL center.",
"Additional adjustments were noted off the board: France replaced lost units (losing F PIC and A BUR) by gaining A PAR and F BRE, while Italy substituted A APU with A ALB. Russia and Turkey also expanded their respective center holdings with the gains of RUM and BUL.",
"The current board position now reflects these changes with updated placements for Austria, Russia, Turkey, and the remaining powers, marking significant shifts in unit composition and center control this turn."
]
}
=== S1901M ===
{
"summary": "During the Spring 1901 Movement phase, nearly all attempted moves failed to alter the board state. Austrias fleet ordered to move from Trieste to Albania and its support order from Budapest for the Vienna-to-Trieste maneuver did not result in a change, leaving all units in their original positions. Similarly, Englands orders to shift its fleet and army, Frances moves and support action, Germanys attempted advances, Italys moves toward the Ionian Sea and Apulia, Russias offensives and support, and Turkeys actions (including a hold by its fleet in Ankara) all resolved without dislodging opposing forces or capturing new centers. In summary, no units changed locations and each power maintained its current supply centers and positions on the board."
}
=== F1901M ===
PARSABLE OUTPUT:
{
"summary": "In phase F1901M, most attempted offensives were stymied by bounces or held positions. Austrias attempted move from BUD to SER did not dislodge its unit, which remained at BUD, while it strengthened its presence by adding units in BOH and ALB and losing TRI and VIE. Englands forces held their posts at ENG, NTH, and YOR, consolidating a defensive stance despite a reshuffle that saw losses at EDI, LVP, and LON alongside new gains. Frances orders, which included a support from BRE for MARs move, resulted in a stable board with BRE, MAR, and the addition of BUR (offset by the loss of PAR). Germanys moves—such as the attempted advance from KIE to HOL and F DENs push—failed to relocate units, leaving MUN, DEN, and KIE in place though the power shifted influence with the loss of BER and F KIE and gaining KIE and DEN. Italys coordinated support and move orders involving TYR, APU, and ION did not dislodge opponents, so its units (APU, TYR, and ION) remained in their previous positions, even as it adjusted its roster by losing VEN, NAP, and ROM. Russias aggressive orders met setbacks with notable bounces on A WAR and F LVN, leaving its fleet and army at WAR, UKR, BLA, and LVN, while its attempt to move F BLA to SEV also did not materialize. Meanwhile, Turkeys units (ANK, ARM, and BUL) simply held, maintaining their established positions despite a change in their build composition. Overall, the turn was characterized by defensive postures, several failed advances, and reshuffling of unit inventories across the powers."
}
=== W1901A ===
During the Spring 1901 adjustment phase several significant changes occurred. Austrias build orders did not go as planned; while attempts were made at Budapest, Trieste, and Vienna, only an army in Serbia appeared as a new unit and the center SER was gained, with the unit in BUD being lost and the orders in TRI and VIE turning void. In Germanys case, orders aimed at Berlin and Kiel instead resulted in the creation of an army in Holstein and a fleet in the Swedish coast, with the country acquiring the HOL and SWE centers despite losing units originally in Kiel and in a position designated as DEN. France saw unit adjustments as well, gaining an army in GAS and one in PAR while losing forces previously positioned in MAR and BUR, reflecting internal rebalancing. Italy replaced its loss of an army in TYR with a successful addition in VEN, and Russia replaced a fleet in BLA with one in SEV. Finally, Turkeys build order for a fleet in CON was successful and secured the BUL center even though its attempt to build an army in SMY turned void. Overall, the turn was marked by mixed results in build orders, with several intended units not materializing while new units and centers shifted the balance of power on the board.
=== S1901M ===
PARSABLE OUTPUT:
{
"orders": [
"During the S1901M phase, most attempted moves failed to alter the balance on the board. Austrias fleet in Trieste tried moving to the Adriatic but was held, and its support order from Vienna for Budapest moving to Trieste ended up void. Likewise, Russias fleet in Sevastopol and Turkeys fleet in Ank attempted moves that were both bounced. All powers, including England, France, Germany, Italy, Russia, and Turkey, ended up holding their positions with no successful advances or captures, leaving the unit placements and control of supply centers unchanged."
]
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,2 +0,0 @@
[metadata]
description-file = README.md