Содержание

__VSBSLFLAGS Перечисление (Microsoft.VisualStudio.Shell.Interop) | Microsoft Docs

Были ли сведения на этой странице полезными?

Оцените свои впечатления

Да Нет

Хотите оставить дополнительный отзыв?

Отзывы будут отправляться в корпорацию Майкрософт. Нажав кнопку «Отправить», вы разрешаете использовать свой отзыв для улучшения продуктов и служб Майкрософт. Политика конфиденциальности.

Отправить

Определение

Важно!

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

В этой статье

public enum class __VSBSLFLAGS
public enum class __VSBSLFLAGS
enum __VSBSLFLAGS
[System.Flags]
public enum __VSBSLFLAGS
[<System.Flags>] type __VSBSLFLAGS =
Public Enum __VSBSLFLAGS
Наследование
Атрибуты

Поля

VSBSLFLAGS_ExpandProjectOnLoad4

Если проект загружен, раскройте его в обозревателе решений.

VSBSLFLAGS_LoadAllPendingProjects16

Принудительная загрузка всех проектов, кроме проектов PLP_ExplicitLoadOnly. По умолчанию Visual Studio выполняет загрузку только поля PLP_DemandLoad и PLP_BackgroundLoad проектов. Этот флаг допустим только для EnsureProjectIsLoaded(Guid, UInt32).

VSBSLFLAGS_LoadBuildDependencies2

Загрузите все зависимости построения, относящиеся к данному проекту. Сюда входят ссылки между проектами и определяемые пользователем зависимости на уровне решения. По умолчанию Visual Studio загружает только зависимости, необходимые для функций времени разработки (IntelliSense, конструкторы форм и т. д.).

VSBSLFLAGS_None0

Поведение по умолчанию.

VSBSLFLAGS_NotCancelable1

Отключить кнопку отмены в диалоговом окне ожидания во время загрузки проекта. (Кнопка отмены не реализована Visual Studio 2010).

VSBSLFLAGS_SelectProjectOnLoad8

Если проект загружен, выберите его в обозревателе решений.

Применяется к

НК РФ Статья 123. Невыполнение налоговым агентом обязанности по удержанию и (или) перечислению налогов / КонсультантПлюс

НК РФ Статья 123. Невыполнение налоговым агентом обязанности по удержанию и (или) перечислению налогов

Перспективы и риски арбитражных споров. Ситуации, связанные со ст. 123 НК РФ

1. Неправомерное неудержание и (или) неперечисление (неполное удержание и (или) перечисление) в установленный настоящим Кодексом срок сумм налога, подлежащего удержанию и перечислению налоговым агентом,

(в ред. Федеральных законов от 09.07.1999 N 154-ФЗ, от 27.07.2010 N 229-ФЗ)

влечет взыскание штрафа в размере 20 процентов от суммы, подлежащей удержанию и (или) перечислению.

(в ред. Федеральных законов от 09.07.1999 N 154-ФЗ, от 27.07.2010 N 229-ФЗ)

КонсультантПлюс: примечание.

Налоговый агент освобождается от ответственности в отношении НДФЛ по ставке 15% за I квартал 2021 года в случае самостоятельного перечисления неуплаченных сумм налога в срок до 01.07.2021 (ФЗ от 23.11.2020 N 372-ФЗ).

2. Налоговый агент освобождается от ответственности, предусмотренной настоящей статьей, при одновременном выполнении следующих условий:

налоговый расчет (расчет по налогу) представлен в налоговый орган в установленный срок;

в налоговом расчете (расчете по налогу) отсутствуют факты неотражения или неполноты отражения сведений и (или) ошибки, приводящие к занижению суммы налога, подлежащей перечислению в бюджетную систему Российской Федерации;

налоговым агентом самостоятельно перечислены в бюджетную систему Российской Федерации сумма налога, не перечисленная в установленный срок, и соответствующие пени до момента, когда ему стало известно об обнаружении налоговым органом факта несвоевременного перечисления суммы налога или о назначении выездной налоговой проверки по такому налогу за соответствующий налоговый период.

(п. 2 введен Федеральным законом от 27.12.2018 N 546-ФЗ)

Открыть полный текст документа

НАЗНАЧЕНИЕ И ПЕРЕЧИСЛЕНИЕ ЕЖЕМЕСЯЧНОГО ПОСОБИЯ ПО УХОДУ ЗА РЕБЕНКОМ ДО 1,5 лет

Дата публикации . Опубликовано в Новости

ПАМЯТКА

НАЗНАЧЕНИЕ И ПЕРЕЧИСЛЕНИЕ ЕЖЕМЕСЯЧНОГО ПОСОБИЯ ПО УХОДУ ЗА РЕБЕНКОМ ДО 1,5 лет

С 01.01.2021 в  соответствии с  Постановлением  Правительства Российской Федерации от 30.12.2020 № 2375 пособия назначаются и выплачиваются  официально работающим гражданам на основании сведений (документов),  необходимых для назначения и выплаты соответствующего вида пособия, поступающих от организации – работодателя, в т. ч. ежемесячное пособие по уходу за ребенком до 1,5 лет.

Ежемесячное пособие по уходу за ребенком до 1,5 лет перечисляется региональным отделением ФСС: с 1-го по 15-е число месяца следующего за месяцем, за который выплачивается такое пособие : за январь 2021 года — с 1 по 15 февраля 2021 года, за февраль — с 1 по 15 марта  2021года и т.

д.

Если Вы официально работаете, но не получили пособие: 

— необходимо уточнить у своего работодателя о направлении реестра сведений в Петербургское  отделение ФСС;

— либо направить обращение через «Личный кабинет получателя социальных услуг» на сайте Фонда социального страхования Российской Федерации по адресу https://lk.fss.ru, указав реквизиты работодателя (ИНН, наименование). Петербургское отделение ФСС на основании Вашего обращения направит запрос в адрес Вашего работодателя.

Возможно, что Вашим работодателем представлен реестр сведений, но в данном реестре допущены ошибки, не позволяющие провести начисление пособий, и Петербургское отделение ФСС работает с Вашим работодателем по получению уточненных данных.

О том, исправлены ли работодателем ошибки в реестре, Вы можете узнать в Личном кабинете получателя социальных услуг на сайте ФСС — http://lk.fss.ru/ или в бесплатном мобильном приложении «Социальный навигатор».

Для входа в «Личный кабинет» используется учетная запись (логин/пароль) портала Госуслуг. Через Личный кабинет Вы сможете подавать обращения, заявления о выдаче справок о начисленных пособиях, а также отслеживать этапы прохождения документов по начислению и перечислению Вам пособий Фондом.

Если Вы не состоите в трудовых отношениях, Вам необходимо обратиться в органы социальной защиты населения (СОБЕС) по месту жительства, в том числе через многофункциональные центры предоставления государственных услуг (МФЦ).

Как правильно оформить платежные документы на перечисление налогов и выбрать типовой устав для организации налоговики расскажут на вебинарах | ФНС России

Дата публикации: 17.05.2021 12:24

С 18 по 21 мая 2021 года в Межрайонных ИФНС России  по Псковской области для заинтересованных налогоплательщиков пройдут онлайн-вебинары, в рамках которых будут рассмотрены актуальные вопросы налогообложения.

Спикерами на вебинарах выступят специалисты инспекций по конкретным направлениям.

В частности, будут рассмотрены такие вопросы как:

  1. Оформление платежных документов на перечисление налогов, сборов и страховых взносов и иных обязательных платежей в бюджетную систему Российской Федерации в 2021 году. Изменение реквизитов платежных поручений при уплате налогов, сбор, страховых взносов и иных обязательный платежей, администратором которых являются налоговые органы. Использование при заполнении платежных документов и уплате налогов сервиса «Уплата налогов и пошлин».
  2. Порядок зачета и возврата, излишне уплаченных или излишне взысканных сумм налога, сбора, пеней и штрафа и страховых взносов.
  3. Легализация налоговой базы по налогу на доходы физических лиц и последствия выплаты зарплаты «в конвертах».
  4. Порядок заполнения расчета сумм налога на доходы физических лиц, исчисленных и удержанных налоговым агентом (форма 6-НДФЛ) по форме, утвержденной Приказом ФНС России от 15.10.2020 N ЕД-7-11/753@. Отмена предоставления справки о доходах физического лица по форме 2-НДФЛ.
  5. Ведение Единого реестра субъектов малого предпринимательства. Основные критерии для включения в реестр: представление сведений о среднесписочной численности работников в составе Расчета по страховым взносам; представление налоговой отчетности по итогам 2020 года.
  6. Типовые уставы. Использование типовых уставов как создаваемыми, так и действующими организациями. Основные преимущества использования типового устава.

Время проведения вебинаров: в 11:00.

С полным графиком проведения мероприятий можно ознакомиться на официальном сайте УФНС России по Псковской области, перейдя по ссылке: https://www.nalog.gov.ru/rn60/about_fts/seminars_plans/10726620/.

Регистрация на вебинары открыта по ссылкам: 

Зарплатные программы Банка | Кредит Европа Банк

Удобный, быстрый и простой способ получения заработной платы путем перечисления средств на счета банковских карт Ваших сотрудников.

Наше предложение:

  • Комиссия за перечисление заработной платы устанавливается согласно условиям договора;
  • Бесплатный выпуск и обслуживание зарплатных дебетовых карт;
  • Бесплатное открытие валютного счета к зарплатной дебетовой карте; 
  • Возможность бесплатного выпуска до 6-ти дополнительных карт;
  • Программа лояльности по картам Mastercard Standard и Mastercard Gold с возвратом 2% за покупки по картам. Подробные условия Программы «Вернем процент от покупок по картам Mastercard Standard/Gold» для сотрудников зарплатных программ — держателей расчетных карт Mastercard Standard/Gold, выпущенных АО «Кредит Европа Банк (Россия)» здесь.

Преимущества зарплатного проекта:

  • Снижение инкассаторских и рассчетно-кассовых издержек;
  • Предупреждение рисков, связанных с большими объемами наличных денежных средств; 
  • Обеспечение полной конфиденциальности данных о заработной плате сотрудников; 
  • Наличие персонального менеджера банка, курирующего Ваши вопросы; 
  • Телефонное обслуживание держателей зарплатных карт Центром Клиентской Поддержки,
  • Дистанционные каналы обслуживания клиентов: Интернет Банк и Мобильный банк.

Бонусные предложения зарплатного проекта:

  • Выпуск и обслуживание премиальных карт для руководства компании;
  • Бесплатное подключение (обслуживание) услуг СМС-информирование/Push — уведомлений, Интернет-банк; 
  • Оформление банковских продуктов для Ваших сотрудников на льготных условиях.

Наш представитель организует быстрое оформление и получение необходимых документов для открытия карт в рамках зарплатного проекта. Выпуск и доставка карт в офис осуществляются в течение 5 рабочих дней.

Позвоните нам по телефону (495) 995-75-00 или напишите на [email protected], и Вам ответят на все вопросы. 

Как защитить веб-приложение от атаки перебором

Недавно наши эксперты из Kaspersky Blockchain Security проверяли блокчейн-платформу на наличие уязвимостей.  В процессе они обнаружили, что механизм восстановления забытого пароля их веб-приложения уязвим к атаке перечислением пользовательских имен. Мы решили, что это неплохой повод рассказать в нашем блоге, что это за атака и чем она опасна.

Что значит атака перечислением

В веб-приложениях с аутентификацией при помощи пароля и логина, как правило, есть несколько механизмов, которые обращаются к базе пользователей. Это окно логина (по понятным причинам), форма регистрации (чтобы избежать дублирования имен пользователя) и страница сброса забытого пароля (чтобы удостовериться в том, что учетная запись, пароль от которой сбрасывают, существует). Если эти механизмы реализованы недостаточно безопасно, то злоумышленники могут попытаться использовать их для того, чтобы выявить, есть ли такой логин в базе.

Раньше все эти механизмы применялись без какой-либо защиты. Поэтому злоумышленник мог вооружиться списком логинов и программой, которая пробовала вводить все эти логины по очереди. Чтобы не давать потенциальным вредителям лишней информации, со временем разработчики стали применять различные защитные трюки (капчу, ограничение количества попыток входа, сокрытие деталей ответа).

В современных веб-приложениях окно логина практически всегда имеет такую защиту. А вот про форму регистрации и страницу сброса пароля иногда забывают. К тому же разработчики веб-приложений не всегда задумываются о том, что наличие или отсутствие имени пользователя в базе иногда можно определить по различиям во времени отклика сервера на запросы. Например, если имя в базе найдено, то ответ сервера приходит через две миллисекунды, а если не найдено, то через четыре. Человек разницы не заметит, а вот автоматизированные инструменты перебора — могут.

Чем опасна атака перечислением имени пользователя

Атака перечислением позволяет злоумышленнику удостовериться, что такое имя есть в базе. Да, это не позволит ему незамедлительно войти в систему, но даст половину требуемой информации. Например, при организации брутфорс-атаки он будет не перебирать пары имен и паролей, а подбирать пароли к проверенной учетной записи. Это сэкономит ему время и усилия.

К тому же не надо забывать, что в качестве имени пользователя сейчас практически повсеместно используется почтовый адрес. Соответственно, логин у среднестатистического человека един для множества сервисов. И не все они относятся к безопасности одинаково серьезно — новости об утечках пар логинов и паролей с разных сайтов появляются достаточно регулярно. И коллекции утекших данных доступны на хакерских форумах. А людям свойственно использовать одни и те же пароли на разных сервисах. Соответственно, удостоверившись, что имя пользователя есть на вашем сайте, злоумышленник обратится к коллекции логинов и паролей и посмотрит, нет ли там данных той же учетной записи на других сайтах. А потом попробует ввести эти данные.

Кроме того, атаку перечислением часто применяют операторы целевого фишинга на этапе разведки. Удостоверившись, что их цель имеет учетную запись в вашем сервисе, они могут послать от вашего имени письмо о необходимости смены пароля со ссылкой на фишинговую страницу, имитирующую ваш сайт. Ничего не подозревающий клиент введет новый пароль, подтвердит старый и тем самым снабдит мошенников всем тем, за чем они охотятся.

Как защититься от атаки перечислением?

Вы когда-нибудь обращали внимание, как современные сервисы реагируют на форму сброса пароля? Они не говорят: «Ссылка на сброс пароля выслана на почту» или «Введенной почты нет в базе», как это происходило раньше. Вместо этого они пишут: «Если ваш адрес есть в базе, то на него будет выслано письмо со ссылкой…». То есть прямо не подтверждают и не опровергают наличие такого имени пользователя. Это делается именно для того, чтобы защититься от атаки перечислением.

Точно так же и в окне логина никогда не нужно детально объяснять «неверный пароль» или «нет такого имени пользователя». Просто — пара логин/пароль не найдена. Да, с точки зрения UX-специалиста такие ответы не оптимальны. Они могут вызывать недовольство пользователя (меня, например, ужасно бесит, когда я забываю, при помощи какого адреса регистрировался, а сервис мне не подсказывает). Но безопасность практически всегда достигается в ущерб удобству. И в случае с сервисами авторизации небольшой перекос баланса в сторону безопасности оправдан.

Разумеется, капча и ограничение попыток также не помешают. Ну и кроме того, для обеспечения безопасности вашего веб-приложения имеет смысл проводить сторонний аудит. Если вы также занимаетесь блокчейн-технологиями, то наши коллеги из Kaspersky Blockchain Security могут помочь с анализом защищенности веб-приложений.

Можно ли вернуть деньги, переведенные на карту ошибочно

Способы аннулирования перевода денег

Моментальные перечисления платежа на карту стали привычными для каждого человека. Ежедневно по всему миру проходит миллионы операций перевода. Достаточно заполнить несколько полей в мобильном приложении на смартфоне, как деньги уже будут переведены на счет другого человека или организации. При этом часто возникают технические ошибки, как со стороны держателей карт, так и банка. Рассмотрим, как можно вернуть перечисленные деньги.

На выполнение денежных операций требуется, среднем, от пары минут до несколько часов. Если при переводе с карты через мобильный или интернет-банк была замечена ошибка, то пользователь может сразу отменить совершенное действие, где указана пометка «на исполнение».

Если нет приложения или денежный перевод уже был отправлен, то первое, что необходимо сделать, — это обратиться в банк, обслуживающий держателя пластиковой карты. Для отмены ошибочно совершенного платежа потребуется подать заявление. Если нет времени, чтобы приехать в офис банка, то стоит написать в онлайн-чат службы технической поддержки или позвонить оператору по горячей линии, телефон которой указан на оборотной стороне карты. Такие варианты помогут сэкономить время и оперативно решить вопрос. Самый надежный способ — написать заявление в отделение банка, где указать свои данные по счету, причину отмены перевода, доказать факт совершения ошибки, приложить копию чека при его наличии. Если при перечислении были указаны неправильные реквизиты, то деньги автоматически вернут владельцу.

Возможно лично обратиться к адресату, который по ошибке получил перевод. Возврат денег – это исключительно его волевое решение. Можно связаться с ним и убедить вернуть полученные деньги. Если человек не проигнорирует просьбу, то вопрос будет решен. В обратном случае – остается подать иск в суд.



Сроки возврата ошибочных перечислений на карту

Российское законодательство не предусматривает конкретные временные рамки, в течение которых должны будут возвращены деньги. Это напрямую зависит от банка.

  • В случае если платеж еще не успел быть зачисленным, то в течение 5 рабочих дней сумма может быть возвращена обратно.
  • Если деньги уже были перечислены физическому или юридическому лицу и составлен иск в суд, то получить возврат возможно в течение 7 суток с момента, когда ответчику будет доставлено письмо об ошибочном платеже.

Если процесс возвращения денежных средств затягивается, можно потребовать компенсацию в виде процентов за каждый день просрочки. Исковое заявление потребуется подать в судебные инстанции.


Можно ли вернуть отправленные мошеннику деньги

Возврат денежных средств, которые были ошибочно отправлены, происходит легче, чем в случае с незаконными действиями по счету. Банк не обязан компенсировать материальные потери людям, если они добровольно сообщили третьим лицам номер банковской карты и коды транзакции. По данным Центробанка, в 2019 года было возвращено только 15% от общего объема денежных средств, которые незаконно списаны со счетов пострадавших граждан.

Если вы самостоятельно совершили перевод мошенникам, то его можно вернуть, воспользовавшись описанной ниже схемой:

  • Позвоните в банк или посетите его офис. Напишите заявление о возврате перечисленных денежных средств и прикрепите доказательства обмана. Если финансы еще не были отправлены, то их вернут на счет, а карту заблокируют. Перевыпуск нового платежного инструмента потребуется ждать в течение двух недель
  • Подайте заявление в правоохранительные органы, если деньги уже были зачислены на интернет-кошелек, счет сторонней организации или в другом банке.

Для подтверждения факта незаконного снятия и перевода средств необходимо предоставить переписку, отправленные SMS-сообщения, имеющиеся данные о мошеннических действиях. Любой человек не должен терять бдительность и быть внимательным при заполнении формы перевода денежных средств на другой счет. Не стоит следовать инструкциям неизвестных лиц, которые пытаются получить реквизиты банковской карты. Проверяйте и контролируйте ее баланс, чтобы вовремя увидеть ошибку и нехватку денег. И не поддавайтесь на мошеннические уловки и схемы обмана.

Примеры и определение перечисления

Определение перечисления

Перечисление — это риторический прием, используемый для перечисления деталей или процесс пошагового упоминания слов или фраз. Фактически, это тип усиления или разделения, в котором субъект далее распределяется на компоненты или части. Писатели используют нумерацию, чтобы прояснить тему, сделать ее понятной для читателей. Это также помогает избежать двусмысленности в сознании читателей.

Примеры перечисления в литературе

Пример № 1:

У меня есть мечта (Мартин Лютер Кинг)

«[W] когда мы позволяем свободе звонить, когда мы позволяем ей звонить из каждой деревни и каждой деревушки , из каждого штата и каждого города, мы сможем ускорить тот день, когда все дети Божьи, черные и белые, евреи и язычники, протестанты и католики, смогут взяться за руки и петь в словах старый негр духовный: «Наконец-то свободен! Свободный наконец-то! Слава Богу Всемогущему, мы наконец-то свободны! »«

В этом примере, если мы удалим запятые, апострофы и кавычки, будет трудно понять текст.

Пример № 2:

Подсказки к эссе о разговоре (Джонатан Свифт)

«[А] например, говорить о множестве слов, ни одно из них не сравнимо с трезвым сознательным болтуном, который много думает и осторожность, делает его предисловие, разветвляется на несколько отступлений, находит намек, который напоминает ему другую историю, которую он обещает рассказать вам, когда это будет сделано; регулярно возвращается к своему предмету, не может вспомнить имя человека, держится за голову, жалуется на свою память; вся компания все это время в напряжении; наконец, говорит, неважно, и так далее. И, в довершение всего, это, возможно, доказывает, наконец, историю, которую компания слышала раньше пятьдесят раз; или, в лучшем случае, какое-нибудь безвкусное приключение родственника ».

В этом примере, используя перечисление, Свифт описывает трезвого, сознательного говорящего, а затем добавляет детали его качеств, делая его сообщение ясным для понимания.

Пример № 3:

Элегия для Джейн (Теодор Рётке)

«Я помню изгибы шеи, вялые и влажные, как усики;
И ее быстрый взгляд, косая, косая улыбка;
И как после того, как она заговорила, легкие слоги прыгнули для нее,
И она сбалансировалась в восторге своей мысли…

В приведенных выше строках говорящий вспоминает, как выглядела Джейн — мертвая ученица.Он передает детали, вспоминая ее улыбку, ее волосы и ее прекрасный дух.

Пример № 4:

Компромиссный адрес Атланты (Букер Т. Вашингтон)

«Бросьте свое ведро среди этих людей, которые без забастовок и трудовых войн возделывали ваши поля, очищали ваши леса, строили ваши железные дороги. и города, и принес сокровища из недр земли, и помог сделать возможным это великолепное изображение прогресса Юга.Опустив свое ведро среди моих людей, помогая и ободряя их, как вы это делаете на этой почве, и к воспитанию ума, рук и сердца, вы обнаружите, что они купят ваши излишки земли, заставят цвести пустыри на ваших полях. , и управляйте своими заводами ».

Букер описывает людей, добавляя их качества одно за другим, что помогает аудитории лучше понять идеи писателя.

Пример № 5:

Обращение к присяжным во время судебного процесса против призыва в Нью-Йорке, июль 1917 г. (Эмма Голдман)

«Мы говорим, что если Америка вступит в войну, чтобы сделать мир безопасным для демократии , она должна сначала сделать демократию безопасной в Америке.Как еще мир может воспринимать Америку всерьез, когда демократия внутри страны ежедневно возмущается, свобода слова подавляется, мирные собрания разгоняются властными и жестокими гангстерами в военной форме; когда свободная пресса ограничена, а всякое независимое мнение заткнуто кляпом «.

Эмма Гольдман обсуждает, как Америка может спасти демократию, ведя войну. Она перечисляет подробности того, что может случиться, если Америка не сделает дома безопасным.

Функция

Используя перечисление, авторы акцентируют внимание на определенных идеях, чтобы развить их дальше.На самом деле перечисление легко производит впечатление на читателей. Подробности и список позволяют им легко передать реальное сообщение, которое они хотят передать. Однако, если в тексте не используется нумерация, читателю может быть трудно понять истинное значение идей.

сообщить об этом объявлении

enum — Поддержка перечислений — документация Python 3.10.1

Исходный код: Lib / enum.py


Перечисление — это набор символических имен (членов), привязанных к уникальным, постоянные значения.Внутри перечисления члены можно сравнивать по идентификатору, а само перечисление можно повторять.

Примечание

Случай членов Enum

Поскольку перечисления используются для представления констант, мы рекомендуем использовать UPPER_CASE имен для членов перечисления и будет использовать этот стиль в наших примерах.

Состав модуля

Этот модуль определяет четыре класса перечисления, которые могут использоваться для определения уникальных наборы имен и значений: Enum , IntEnum , Flag и IntFlag .Он также определяет один декоратор, unique (), и один помощник, авто .

класс перечисление. Перечисление

Базовый класс для создания нумерованных констант. См. Раздел Функциональный API для альтернативного синтаксиса конструкции.

класс перечисление. IntEnum

Базовый класс для создания нумерованных констант, которые также подклассы int .

класс перечисление. Внутфлаг

Базовый класс для создания нумерованных констант, которые можно комбинировать с помощью побитовые операторы без потери членства IntFlag . Члены IntFlag также являются подклассами int .

класс перечисление. Флаг

Базовый класс для создания нумерованных констант, которые можно комбинировать с помощью поразрядные операции без потери своего членства Flag .

перечисление. уникальный ()

Декоратор класса Enum, обеспечивающий привязку только одного имени к любому значению.

класс перечисление. авто

Экземпляры заменяются соответствующим значением для членов Enum. По умолчанию начальное значение начинается с 1.

Новое в версии 3.6: Flag , IntFlag , auto

Создание Enum

Перечисления создаются с использованием синтаксиса class , что делает их легко читать и писать. Альтернативный метод создания описан в Функциональный API. Чтобы определить перечисление, создайте подкласс Enum как следует:

 >>> из enum import Enum
>>> Цвет класса (Enum):
... КРАСНЫЙ = 1
... ЗЕЛЕНЫЙ = 2
... СИНИЙ = 3
...
 

Примечание

Значения элементов перечисления

Значения элементов могут быть любыми: int , str и т. Д. Если точное значение неважно, вы можете использовать экземпляры auto и Для вас будет выбрано подходящее значение.Следует соблюдать осторожность, если вы смешиваете auto с другими значениями.

Примечание

Номенклатура

  • Класс Color является перечислением (или перечислением )

  • Атрибуты Color.RED , Color.GREEN и т. Д. элементов перечисления (или элементов перечисления ) и являются функциональными константами.

  • Члены перечисления имеют имен и значений (имя Цвет. КРАСНЫЙ — это КРАСНЫЙ , значение цветного . СИНИЙ — это 3 и др.)

Члены перечисления имеют удобочитаемые строковые представления:

 >>> печать (ЦВЕТ.КРАСНЫЙ)
Красный цвет
 

… в то время как их repr имеет дополнительную информацию:

 >>> печать (repr (Color.RED))
<Цвет.КРАСНЫЙ: 1>
 

Тип члена перечисления — это перечисление, которому он принадлежит:

 >>> тип (Color.КРАСНЫЙ)
<перечисление 'Цвет'>
>>> isinstance (Цвет.ЗЕЛЕНЫЙ, Цвет)
Истинный
>>>
 
Члены

Enum также имеют свойство, которое содержит только их имя элемента:

 >>> печать (Color.RED.name)
КРАСНЫЙ
 

Перечисления поддерживают итерацию в порядке определения:

 >>> класс Shake (Enum):
... ВАНИЛЬ = 7
... ШОКОЛАД = 4
... ПЕЧЕНЬЕ = 9
... MINT = 3
...
>>> для встряхивания в Shake:
... распечатать (встряхнуть)
...
Встряхнуть ВАНИЛЬ
Встряхнуть. ШОКОЛАД
Shake.COOKIES
Встряхнуть.
 

Элементы перечисления хешируются, поэтому их можно использовать в словарях и наборах:

 >>> яблоки = {}
>>> яблоки [Color.RED] = 'красное вкусное'
>>> яблоки [Color.GREEN] = 'бабушка кузнец'
>>> яблоки == {Color.RED: 'красный вкусный', Color.GREEN: 'бабушка смит'}
Истинный
 

Программный доступ к элементам перечисления и их атрибутам

Иногда бывает полезно получить доступ к элементам в перечислениях программно (т.е.е. ситуации, когда Color.RED не подходят, потому что точный цвет неизвестен во время написания программы). Enum разрешает такой доступ:

 >>> Цвет (1)
<Цвет.КРАСНЫЙ: 1>
>>> Цвет (3)
<Цвет СИНИЙ: 3>
 

Если вы хотите получить доступ к членам перечисления по имени , используйте доступ к элементу:

 >>> Цвет ['КРАСНЫЙ']
<Цвет.КРАСНЫЙ: 1>
>>> Цвет ["ЗЕЛЕНЫЙ"]
<Цвет.ЗЕЛЕНЫЙ: 2>
 

Если у вас есть член перечисления и вам нужно его имя или значение :

 >>> член = Цвет. КРАСНЫЙ
>>> member.name
'КРАСНЫЙ'
>>> member.value
1
 

Дублирование элементов и значений перечисления

Недопустимо наличие двух членов перечисления с одинаковым именем:

 >>> Форма класса (Enum):
... КВАДРАТ = 2
... КВАДРАТ = 3
...
Отслеживание (последний вызов последний):
...
TypeError: Попытка повторно использовать ключ: 'SQUARE'
 

Однако два члена перечисления могут иметь одно и то же значение. Учитывая два члена A и B с одинаковым значением (и A определен первым), B — это псевдоним A.По стоимости поиск значения A и B вернет A. Поиск по имени B также возврат A:

 >>> Форма класса (Enum):
... КВАДРАТ = 2
... АЛМАЗ = 1
... КРУГ = 3
... ALIAS_FOR_SQUARE = ​​2
...
>>> Форма. Квадрат
<Форма. КВАДРАТ: 2>
>>> Форма.ALIAS_FOR_SQUARE
<Форма. КВАДРАТ: 2>
>>> Форма (2)
<Форма. КВАДРАТ: 2>
 

Примечание

Попытка создать участника с тем же именем, что и уже определенный атрибут (другой член, метод и т. д.) или пытаясь создать атрибут с тем же именем, что и член, не допускается.

Обеспечение уникальности значений перечисления

По умолчанию перечисления позволяют использовать несколько имен в качестве псевдонимов для одного и того же значения. Если такое поведение нежелательно, можно использовать следующий декоратор для убедитесь, что каждое значение используется только один раз в перечислении:

@ перечисление. уникальный

Декоратор класса специально для перечислений.Он ищет перечисление __members__ , собирающее все найденные псевдонимы; если есть найдено ValueError возникает с деталями:

 >>> from enum import Enum, уникальный
>>> @unique
... ошибка класса (Enum):
... ОДИН = 1
... ДВА = 2
... ТРИ = 3
... ЧЕТЫРЕ = 3
...
Отслеживание (последний вызов последний):
...
ValueError: повторяющиеся значения найдены в : ЧЕТЫРЕ -> ТРИ
 

Использование автоматических значений

Если точное значение неважно, вы можете использовать auto :

 >>> из enum import Enum, auto
>>> Цвет класса (Enum):
. .. КРАСНЫЙ = авто ()
... СИНИЙ = авто ()
... ЗЕЛЕНЫЙ = авто ()
...
>>> список (цвет)
[, , ]
 

Значения выбираются функцией _generate_next_value_ () , которая может быть переопределено:

 >>> класс AutoName (Enum):
... def _generate_next_value_ (имя, начало, количество, последние_значения):
... вернуть имя
...
>>> Порядковый номер класса (AutoName):
... СЕВЕР = авто ()
... ЮГ = авто ()
...ВОСТОК = авто ()
... ЗАПАД = авто ()
...
>>> список (порядковый)
[, , , ]
 

Примечание

Цель метода _generate_next_value_ () по умолчанию — предоставить следующий int в последовательности с предоставленным последним int , но способ, которым это делается, является деталью реализации и может измениться.

Примечание

Метод _generate_next_value_ () должен быть определен перед любыми членами.

Итерация

Перебор элементов перечисления не дает псевдонимов:

 >>> список (Форма)
[, , ]
 

Специальный атрибут __members__ — это упорядоченное отображение имен только для чтения. членам. Он включает все имена, определенные в перечислении, включая псевдонимы:

 >>> для имени, член в Shape .__ members __. Items ():
... имя, член
...
('КВАДРАТ', )
('АЛМАЗ', <Форма АЛМАЗ: 1>)
('КРУГ', )
('ALIAS_FOR_SQUARE', )
 

Атрибут __members__ может использоваться для подробного программного доступа к члены перечисления. Например, поиск всех псевдонимов:

 >>> [имя для имени, член в Shape .__ members __. Items () if member.name! = Name]
['ALIAS_FOR_SQUARE']
 

Сравнения

Элементы перечисления сравниваются по идентичности:

 >>> Цвет.КРАСНЫЙ цвет. КРАСНЫЙ
Истинный
>>> Цвет.  КРАСНЫЙ цвет. СИНИЙ
Ложь
>>> Цвет. КРАСНЫЙ не цвет. СИНИЙ
Истинный
 

Упорядоченные сравнения между значениями перечисления не поддерживаются. Enum члены не являются целыми числами (но см. IntEnum ниже):

 >>> Цвет.КРАСНЫЙ <Цвет СИНИЙ
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
TypeError: '<' не поддерживается между экземплярами 'Color' и 'Color'
 

Сравнения на равенство определены, хотя:

 >>> Цвет.СИНИЙ == Цвет.КРАСНЫЙ
Ложь
>>> Color.BLUE! = Цвет.КРАСНЫЙ
Истинный
>>> Цвет СИНИЙ == Цвет СИНИЙ
Истинный
 

Сравнения с неперечисляемыми значениями всегда будут сравнивать не равные (опять же, IntEnum был явно разработан, чтобы вести себя иначе, см. ниже):

 >>> Цвет СИНИЙ == 2
Ложь
 

Допустимые элементы и атрибуты перечислений

В приведенных выше примерах в качестве значений перечисления используются целые числа. Использование целых чисел - это коротко и удобно (и предоставляется по умолчанию функциональным API), но не строго соблюдается. В подавляющем большинстве случаев использования все равно, что фактическое значение перечисления. Но если значение имеет значение , перечисления могут иметь произвольные значения.

Перечисления представляют собой классы Python и могут иметь методы и специальные методы как обычный. Если у нас есть это перечисление:

 >>> класс Mood (Enum):
... FUNKY = 1
... СЧАСТЛИВ = 3
...
... def описать (себя):
... # self является участником здесь
... вернуть self.name, self.value
...
... def __str __ (сам):
... вернуть 'my custom str! {0} '. Формат (собственное значение)
...
... @classmethod
... def избранное_mood (cls):
... # cls вот перечисление
... вернуть cls.HAPPY
...
 

Тогда:

 >>> Mood.favorite_mood ()
<Настроение.ДОВОЛЬСТВИЕ: 3>
>>> Mood.HAPPY.describe ()
('СЧАСТЛИВЫ', 3)
>>> str (Mood.FUNKY)
'my custom str! 1 '
 

Правила того, что разрешено, следующие: имена, начинающиеся и заканчивающиеся на одиночное подчеркивание зарезервировано enum и не может использоваться; все остальные атрибуты, определенные в перечислении, станут членами этого перечисление, за исключением специальных методов ( __str __ () , __add __ () и т. Д.), дескрипторы (методы также являются дескрипторами) и имена переменных перечислены в _ignore_ .

Примечание: если ваше перечисление определяет __new __ () и / или __init __ () , тогда любые значения, присвоенные члену перечисления, будут переданы этим методам. См. Например, «Планета».

Подкласс ограниченного перечисления

Новый класс Enum должен иметь один базовый класс Enum, до одного конкретного типа данных и столько классов примесей на основе объектов , сколько необходимо.В порядок этих базовых классов:

 класс EnumName ([mix-in, ...,] [data-type,] base-enum):
    проходят
 

Кроме того, создание подкласса перечисления разрешено только в том случае, если перечисление не определяет любые участники. Значит, это запрещено:

 >>> класс MoreColor (Цвет):
... РОЗОВЫЙ = 17
...
Отслеживание (последний вызов последний):
...
TypeError: MoreColor: невозможно расширить перечисление Color
 

Но это разрешено:

 >>> класс Foo (Enum):
. .. def some_behavior (сам):
...         проходят
...
>>> класс Bar (Foo):
... СЧАСТЛИВ = 1
... SAD = 2
...
 

Разрешение создания подклассов перечислений, определяющих элементы, приведет к нарушению некоторые важные инварианты типов и экземпляров. С другой стороны, это делает смысл разрешить разделять некоторое общее поведение между группой перечислений. (См. Пример в OrderedEnum.)

Травление

Перечисления могут быть маринованными и неотбираемыми:

 >>> из теста.test_enum import Fruit
>>> из завалов рассола, грузов
>>> Fruit.TOMATO загружается (свалки (Fruit.TOMATO))
Истинный
 

Применяются обычные ограничения для травления: травильные перечисления должны быть определены в верхний уровень модуля, поскольку для распаковки требуется, чтобы они были импортируемыми из этого модуля.

Примечание

С версией протокола pickle 4 можно легко перебирать перечисления. вложен в другие классы.

Можно изменить способ маринования / извлечения элементов Enum, указав __reduce_ex __ () в классе перечисления.

Функциональный API

Класс Enum является вызываемым, обеспечивая следующий функциональный API:

 >>> Animal = Enum ('Животное', 'МУРАВЬИНА, КОШКА, СОБАКА')
>>> Животное
<перечисление 'Животное'>
>>> Animal.ANT
<Животное.ANT: 1>
>>> Animal.ANT.value
1
>>> список (Животное)
[, , , ]
 

Семантика этого API напоминает namedtuple .Первое аргумент вызова Enum - это имя перечисления.

Второй аргумент - это источник имен членов перечисления. Это может быть разделенная пробелами строка имен, последовательность имен, последовательность 2-кортежи с парами ключ / значение или сопоставление (например, словарь) имен с ценности. Последние две опции позволяют назначать произвольные значения для перечисления; остальные автоматически присваивают возрастающие целые числа, начиная с 1 (используйте параметр start , чтобы указать другое начальное значение). А возвращается новый класс, производный от Enum . Другими словами, вышеуказанное присвоение Животное эквивалентно:

 >>> класс Animal (Enum):
... ANT = 1
... BEE = 2
... CAT = 3
... СОБАКА = 4
...
 

Причина, по которой в качестве начального номера по умолчанию используется 1 , а не 0 , что 0 - это Ложь в логическом смысле, но все члены перечисления оценивают to True .

Перечисления травления, созданные с помощью функционального API, могут быть сложными как стек фреймов. детали реализации используются, чтобы попытаться выяснить, какой модуль Перечисление создается в (e.г. он потерпит неудачу, если вы воспользуетесь утилитой функция в отдельном модуле, а также может не работать на IronPython или Jython). Решение состоит в том, чтобы явно указать имя модуля следующим образом:

 >>> Animal = Enum ('Animal', 'ANT BEE CAT DOG', модуль = __ name__)
 

Предупреждение

Если модуль не поставляется, и Enum не может определить, что это такое, новых членов Enum невозможно будет выбрать; чтобы ошибки были ближе к источник, травление будет отключено.

Новый протокол рассола 4 также, в некоторых случаях, полагается на __qualname__ устанавливается в место, где pickle сможет найти класс.Например, если класс был доступен в классе SomeData в глобальном масштабе:

 >>> Animal = Enum ('Animal', 'ANT BEE CAT DOG', qualname = 'SomeData.Animal')
 

Полная подпись:

 Enum (значение = 'NewEnumName', names = <...>, *, module = '...', qualname = '...', type = <смешанный класс>, начало = 1)
 
значение

Что новый класс Enum запишет в качестве своего имени.

наименований

Члены Enum.Это может быть строка, разделенная пробелами или запятыми. (значения начинаются с 1, если не указано иное):

 'КРАСНЫЙ ЗЕЛЕНЫЙ СИНИЙ' | «КРАСНЫЙ, ЗЕЛЕНЫЙ, СИНИЙ» | 'КРАСНЫЙ, ЗЕЛЕНЫЙ, СИНИЙ'
 

или итератор имен:

или итератор пар (имя, значение):

 [('CYAN', 4), ('MAGENTA', 5), ('YELLOW', 6)]
 

или отображение:

 {'CHARTREUSE': 7, 'SEA_GREEN': 11, 'ROSEMARY': 42}
 
модуль

имя модуля, в котором можно найти новый класс Enum.

qualname

, где в модуле можно найти новый класс Enum.

тип
Тип

для добавления в новый класс Enum.

начало

номер, с которого начинается отсчет, если указаны только имена.

Изменено в версии 3.5: Добавлен параметр start .

Производные перечисления

IntEnum

Первый предоставленный вариант Enum также является подклассом внутренний .Члены IntEnum можно сравнить с целыми числами; в более широком смысле, можно сравнивать целочисленные перечисления разных типов. друг другу:

 >>> из enum import IntEnum
>>> Форма класса (IntEnum):
... КРУГ = 1
... КВАДРАТ = 2
...
>>> Запрос класса (IntEnum):
... POST = 1
... GET = 2
...
>>> Форма == 1
Ложь
>>> Shape.CIRCLE == 1
Истинный
>>> Shape.CIRCLE == Request.POST
Истинный
 

Однако их все равно нельзя сравнивать со стандартными перечислениями Enum :

 >>> Форма класса (IntEnum):
. .. CIRCLE = 1
... КВАДРАТ = 2
...
>>> Цвет класса (Enum):
... КРАСНЫЙ = 1
... ЗЕЛЕНЫЙ = 2
...
>>> Shape.CIRCLE == Color.RED
Ложь
 

IntEnum значения ведут себя как целые числа и в других отношениях:

 >>> int (Shape.CIRCLE)
1
>>> ['a', 'b', 'c'] [Shape.CIRCLE]
'b'
>>> [i для i в диапазоне (Shape.SQUARE)]
[0, 1]
 

IntFlag

Следующая разновидность Enum , IntFlag , также основана на на внутр ., ~) и результат по-прежнему Член Международного Флага . Однако, как следует из названия, IntFlag члены также являются подклассом int и могут использоваться везде, где int использовал. Любая операция с элементом IntFlag , кроме побитового компании потеряют членство IntFlag .

Образец IntFlag класс:

 >>> из enum import IntFlag
>>> класс Пермь (IntFlag):
... R = 4
... W = 2
... X = 1
. ..
>>> Пермь.Р | Пермь З
<Перм.R | Ж: 6>
>>> Пермь.Р + Пермь.З
6
>>> RW = Перм.Р | Пермь З
>>> Пермь.Р в RW
Истинный
 

Также можно назвать комбинации:

 >>> класс Пермь (IntFlag):
... R = 4
... W = 2
... X = 1
... RWX = 7
>>> Perm.RWX
<Перм. RWX: 7>
>>> ~ Пермь.RWX
<Пермь-8: -8>
 

Еще одно важное различие между IntFlag и Enum заключается в том, что если флаги не установлены (значение 0), его логическая оценка - Ложь :

 >>> Пермь., ~). в отличие
  IntFlag , их нельзя комбинировать или сравнивать с любыми
other  Flag  enumeration, а также  int . Пока можно
указать значения напрямую, рекомендуется использовать  auto  в качестве
значение и позвольте  Flag  выбрать подходящее значение. 

Подобно IntFlag , если комбинация элементов Flag не приводит к флаги установлены, логическая оценка - Ложь :

 >>> from enum import Flag, auto
>>> Цвет класса (Флаг):
. .. КРАСНЫЙ = авто ()
... СИНИЙ = авто ()
... ЗЕЛЕНЫЙ = авто ()
...
>>> Color.RED и Color.GREEN
<Цвет.0: 0>
>>> bool (Color.RED & Color.GREEN)
Ложь
 

Отдельные флаги должны иметь значения, являющиеся степенями двойки (1, 2, 4, 8,…), а комбинаций флагов не будет:

 >>> Цвет класса (Флаг):
... КРАСНЫЙ = авто ()
... СИНИЙ = авто ()
... ЗЕЛЕНЫЙ = авто ()
... БЕЛЫЙ = КРАСНЫЙ | СИНИЙ | ЗЕЛЕНЫЙ
...
>>> Цвет.БЕЛЫЙ
<Цвет.БЕЛЫЙ: 7>
 

Присвоение имени условию «флаги не установлены» не изменяет его логическое значение. значение:

 >>> Цвет класса (Флаг):
... ЧЕРНЫЙ = 0
... КРАСНЫЙ = авто ()
... СИНИЙ = авто ()
... ЗЕЛЕНЫЙ = авто ()
...
>>> Цвет: ЧЕРНЫЙ
<Цвет ЧЕРНЫЙ: 0>
>>> bool (Цвет ЧЕРНЫЙ)
Ложь
 

Примечание

Для большинства нового кода Enum и Flag строго рекомендуется, поскольку IntEnum и IntFlag нарушают некоторые семантические обещания перечисления (будучи сопоставимы с целыми числами и таким образом, за счет транзитивности к другим несвязанным перечислениям). IntEnum и IntFlag следует использовать только в тех случаях, когда Enum и Флаг не годится; например, при замене целочисленных констант с перечислениями или для взаимодействия с другими системами.

прочие

Хотя IntEnum является частью модуля enum , это было бы очень просто реализовать самостоятельно:

 класс IntEnum (int, Enum):
    проходят
 

Это демонстрирует, как могут быть определены аналогичные производные перечисления; Например StrEnum , который смешивается с str вместо int .

Некоторые правила:

  1. При создании подкласса Enum , смешанные типы должны появляться перед Само Enum в последовательности оснований, как в IntEnum пример выше.

  2. В то время как Enum может иметь элементы любого типа, как только вы смешиваете дополнительный тип, все члены должны иметь значения этого типа, например int выше. Это ограничение не распространяется на микшеры, которые только добавьте методы и не указывайте другой тип.

  3. Когда добавлен другой тип данных, значение атрибута равно , а не тот же , что и сам член перечисления, хотя он эквивалентен и будет сравнивать равный.

  4. % -стилевое форматирование: % s и % r вызывают классы Enum __str __ () и __repr __ () соответственно; другие коды (например, % i или % h для IntEnum) рассматривать член перечисления как его смешанный тип.

  5. Форматированные строковые литералы, str.format () , и формат () будет использовать смешанный тип __format __ () если только __str __ () или __format __ () не переопределено в подклассе, в этом случае будут использоваться замещенные методы или методы Enum . Используйте коды формата! S и! R, чтобы принудительно использовать классы Enum __str __ () и __repr __ () методы.

Когда использовать

__new __ () vs. __init __ ()

__new __ () необходимо использовать всякий раз, когда вы хотите настроить фактическое значение член Enum . Любые другие модификации могут входить либо в __new __ () или __init __ () , при этом предпочтительнее __init __ () .

Например, если вы хотите передать конструктору несколько элементов, но только хочу, чтобы одним из них было значение:

 >>> Координата класса (байты, Enum):
... "" "
... Согласуйте с двоичными кодами, которые могут быть проиндексированы с помощью кода int.... "" "
... def __new __ (cls, value, label, unit):
... obj = байты .__ новый __ (cls, [значение])
... obj._value_ = значение
... obj.label = label
... obj.unit = unit
... вернуть объект
... PX = (0, 'P.X', 'km')
... PY = (1, 'P.Y', 'km')
... VX = (2, 'V.X', 'км / с')
... VY = (3, 'V.Y', 'км / с')
...

>>> print (Координата ['PY'])
Координата. PY

>>> print (Координата (3))
Координата.VY
 

Интересные примеры

В то время как Enum , IntEnum , IntFlag и Flag являются ожидается, что они охватят большинство вариантов использования, но они не могут охватить их все.Здесь являются рецептами для различных типов перечислений, которые можно использовать напрямую, или как примеры для создания своего собственного.

Без значений

Во многих случаях использования все равно, каково реальное значение перечисления. является. Есть несколько способов определить этот тип простого перечисления:

  • использовать экземпляры auto для значения

  • использовать экземпляры объекта в качестве значения

  • использовать описательную строку в качестве значения

  • использовать кортеж в качестве значения и пользовательский __new __ () для замены кортеж со значением int

Использование любого из этих методов означает для пользователя, что эти значения не важно, а также позволяет добавлять, удалять или изменять порядок членов без необходимо изменить нумерацию остальных членов.

Какой бы метод вы ни выбрали, вы должны предоставить repr () , который также скрывает (неважное) значение:

 >>> класс NoValue (Enum):
... def __repr __ (сам):
... return '<% s.% s>'% (self .__ class __.__ name__, self.name)
...
 
Использование
auto

При использовании auto будет выглядеть так:

 >>> цвет класса (NoValue):
... КРАСНЫЙ = авто ()
... СИНИЙ = авто ()
... ЗЕЛЕНЫЙ = авто ()
...
>>> Цвет.ЗЕЛЕНЫЙ
<Цвет.ЗЕЛЕНЫЙ>
 
Использование объекта

Использование объекта будет выглядеть так:

 >>> цвет класса (NoValue):
... КРАСНЫЙ = объект ()
... ЗЕЛЕНЫЙ = объект ()
... СИНИЙ = объект ()
...
>>> Color.GREEN
<Цвет.ЗЕЛЕНЫЙ>
 
Использование описательной строки

Использование строки в качестве значения будет выглядеть так:

 >>> цвет класса (NoValue):
... КРАСНЫЙ = 'стоп'
... ЗЕЛЕНЫЙ = 'идти'
... СИНИЙ = 'слишком быстро!'
. ..
>>> Color.GREEN
<Цвет.ЗЕЛЕНЫЙ>
>>> Color.GREEN.value
'идти'
 
Использование пользовательского
__new __ ()

Использование автоматической нумерации __new __ () будет выглядеть так:

 >>> класс AutoNumber (NoValue):
... def __new __ (cls):
... значение = len (cls .__ members__) + 1
... obj = объект .__ новый __ (cls)
... obj._value_ = значение
... вернуть объект
...
>>> Цвет класса (AutoNumber):
... КРАСНЫЙ = ()
... ЗЕЛЕНЫЙ = ()
... СИНИЙ = ()
...
>>> Color.GREEN
<Цвет.ЗЕЛЕНЫЙ>
>>> Color.GREEN.value
2
 

Чтобы сделать AutoNumber более универсальным, добавьте в подпись * args :

 >>> класс AutoNumber (NoValue):
... def __new __ (cls, * args): # это единственное изменение сверху
... значение = len (cls .__ members__) + 1
... obj = объект .__ новый __ (cls)
... obj._value_ = значение
... вернуть объект
...
 

Затем, когда вы наследуете AutoNumber , вы можете написать свой собственный __init__ для обработки любых дополнительных аргументов:

 >>> Образец класса (AutoNumber):
. .. def __init __ (self, pantone = 'unknown'):
... self.pantone = pantone
... AUBURN = '3497'
... SEA_GREEN = '1246'
... BLEACHED_CORAL = () # Новый цвет, кода Pantone пока нет!
...
>>> Образец.SEA_GREEN
<Образец.SEA_GREEN>
>>> Свотчи.SEA_GREEN.pantone
'1246'
>>> Swatch.BLEACHED_CORAL.pantone
'неизвестный'
 

Примечание

Метод __new __ () , если он определен, используется во время создания Enum члены; затем он заменяется Enum __new __ () , который используется после создание класса для поиска существующих членов.

OrderedEnum

Упорядоченное перечисление, которое не основано на IntEnum и поэтому поддерживает нормальные инварианты Enum (например, несопоставимые с другими перечислений):

 >>> класс OrderedEnum (Enum):
... def __ge __ (себя, другое):
... если self .__ class__ другой .__ class__:
... вернуть self.value> = other.value
... вернуть NotImplemented
... def __gt __ (себя, другое):
. .. если self .__ class__ другой.__класс__:
... вернуть self.value> other.value
... вернуть NotImplemented
... def __le __ (себя, другое):
... если self .__ class__ другой .__ class__:
... вернуть self.value <= other.value
... вернуть NotImplemented
... def __lt __ (себя, другое):
... если self .__ class__ другой .__ class__:
... вернуть self.value <другое.value
... вернуть NotImplemented
...
>>> Класс Grade (OrderedEnum):
... А = 5
... B = 4
... C = 3
... D = 2
... F = 1
...
>>> Оценка.C <Оценка.A
Истинный
 

DuplicateFreeEnum

Вызывает ошибку, если обнаруживается повторяющееся имя члена вместо создания псевдоним:

 >>> класс DuplicateFreeEnum (Enum):
... def __init __ (self, * args):
... cls = self .__ class__
... если есть (self.value == e.value для e в cls):
... a = self.name
... e = cls (self.value) .name
... поднять ValueError (
... "псевдонимы не разрешены в DuplicateFreeEnum:% r ->% r"
...% (а, д))
...
>>> Класс Color (DuplicateFreeEnum):
... КРАСНЫЙ = 1
. .. ЗЕЛЕНЫЙ = 2
... СИНИЙ = 3
... ГРЕНА = 2
...
Отслеживание (последний вызов последний):
...
ValueError: псевдонимы не разрешены в DuplicateFreeEnum: 'GRENE' -> 'GREEN'
 

Примечание

Это полезный пример создания подкласса Enum для добавления или изменения других поведения, а также запрещающие псевдонимы. Если единственное желаемое изменение - запрещая псевдонимы, вместо них можно использовать декоратор unique () .

Планета

Если определено __new __ () или __init __ () , то значение члена перечисления будут переданы этим методам:

 >>> планета класса (Enum):
... МЕРКУРИЙ = (3.303e + 23, 2.4397e6)
... ВЕНЕРА = (4.869e + 24, 6.0518e6)
... ЗЕМЛЯ = (5.976e + 24, 6.37814e6)
... MARS = (6.421e + 23, 3.3972e6)
... ЮПИТЕР = (1.9e + 27, 7.1492e7)
... САТУРН = (5.688e + 26, 6.0268e7)
... УРАН = (8.686e + 25, 2.5559e7)
... НЕПТУН = (1.024e + 26, 2.4746e7)
... def __init __ (себя, масса, радиус):
... self. mass = масса # в килограммах
... self.radius = радиус # в метрах
...     @имущество
... def surface_gravity (self):
... # универсальная гравитационная постоянная (м3 кг-1 с-2)
... G = 6.67300E-11
... вернуть G * self.mass / (self.radius * self.radius)
...
>>> Planet.EARTH.value
(5.976e + 24, 6378140.0)
>>> Planet.EARTH.surface_gravity
9.802652743337129
 

TimePeriod

Пример использования атрибута _ignore_ :

 >>> from datetime import timedelta
>>> Период класса (timedelta, Enum):
... "разное время"
... _ignore_ = 'Период i'
... Период = vars ()
... для i в диапазоне (367):
... Период ['day_% d'% i] = i
...
>>> список (Точка) [: 2]
[, ]
>>> list (Точка) [- 2:]
[, ]
 

Чем отличаются перечисления?

Enums имеет настраиваемый метакласс, который влияет на многие аспекты обоих производных Enum. классы и их экземпляры (члены).

Классы перечисления

Метакласс EnumMeta отвечает за предоставление __contains __ () , __dir __ () , __iter __ () и другие методы, которые позволяют делать вещи с классом Enum , которые не работают на типичном class, например list (Color) или some_enum_var в Color . EnumMeta - это отвечает за обеспечение того, чтобы различные другие методы в конечном Enum класс правильные (например, __new __ () , __getnewargs __ () , __str __ () и __repr __ () ).

Enum Members (также известные как экземпляры)

Самым интересным в членах Enum является то, что они одиночки. EnumMeta создает их все, пока создает Enum класс, а затем помещает пользовательский __new __ () на место, чтобы гарантировать что новые экземпляры никогда не создаются путем возврата только существующих экземпляры-члены.

Finer Points

Поддерживается
__dunder__ имен

__members__ - это упорядоченное отображение только для чтения member_name : member Предметы.Доступно только в классе.

__new __ () , если он указан, должен создавать и возвращать элементы перечисления; это также очень хорошая идея установить соответствующее значение _value_ участника. Один раз все участники созданы, он больше не используется.

Поддерживается
_sunder_ имен
  • _name_ - имя участника

  • _value_ - значение члена; можно установить / изменить в __new__

  • _missing_ - функция поиска, используемая, когда значение не найдено; может быть переопределено

  • _ignore_ - список имен в виде списка или str , которые не будут преобразованы в участников и будут удалены из окончательного класс

  • _order_ - используется в коде Python 2/3 для обеспечения согласованности порядка элементов (атрибут класса, удален при создании класса)

  • _generate_next_value_ - используется функциональным API и auto , чтобы получить подходящее значение для члена перечисления; может быть переопределено

Новое в версии 3. 6: _missing_ , _order_ , _generate_next_value_

Новое в версии 3.7: _ignore_

Чтобы обеспечить синхронизацию кода Python 2 / Python 3, атрибут _order_ может предоставляться. Он будет сверяться с фактическим порядком перечисления. и выдаст ошибку, если они не совпадают:

 >>> Цвет класса (Enum):
... _order_ = 'КРАСНЫЙ ЗЕЛЕНЫЙ СИНИЙ'
... КРАСНЫЙ = 1
... СИНИЙ = 3
... ЗЕЛЕНЫЙ = 2
...
Отслеживание (последний вызов последний):
...
TypeError: порядок элементов не соответствует _order_
 

Примечание

В коде Python 2 атрибут _order_ необходим как определение заказ теряется до того, как его можно будет записать.

_Private__names

Частные имена будут обычными атрибутами в Python 3.11 вместо ошибки или члена (в зависимости от того, заканчивается ли имя на подчеркивание). Использование этих имен в 3.10 приведет к выдаче DeprecationWarning .

Enum тип элемента

Члены Enum являются экземплярами своего класса Enum и являются обычно используется как EnumClass. member . При определенных обстоятельствах они также можно получить доступ как EnumClass.member.member , но вы никогда не должны этого делать это, поскольку этот поиск может потерпеть неудачу или, что еще хуже, вернуть что-то помимо Enum член, которого вы ищете (это еще одна веская причина использовать имена участников в верхнем регистре):

 >>> класс FieldTypes (Enum):
... name = 0
... значение = 1
... размер = 2
...
>>> FieldTypes.value.size

>>> FieldTypes.size.value
2
 

Примечание

Это поведение устарело и будет удалено в 3.11.

Логическое значение
Enum классов и членов

Элементы Enum , которые смешаны с типами, отличными от Enum (например, int , str и т. Д.) Оцениваются согласно смешанному правила типа; в противном случае все элементы оцениваются как True .Сделать ваш логическая оценка собственного Enum зависит от значения члена, добавьте следующее к ваш класс:

 def __bool __ (сам):
    return bool (self.value)
 

Классы Enum всегда оцениваются как True .

Enum классы с методами

Если вы дадите своему подклассу Enum дополнительные методы, такие как Planet класс выше, эти методы будут отображаться в dir () члена, но не класса:

 >>> реж (Планета)
['ЗЕМЛЯ', 'ЮПИТЕР', 'МАРС', 'МЕРКУРИЙ', 'НЕПТУН', 'САТУРН', 'УРАН', 'ВЕНЕРА', '__class__', '__doc__', '__members__', '__module__']
>>> реж (Planet.ЗЕМНОЙ ШАР)
['__class__', '__doc__', '__module__', 'mass', 'name', 'radius', 'surface_gravity', 'value']
 
Объединение элементов
Флаг

Если комбинация членов Flag не названа, repr () будет включать все именованные флаги и все именованные комбинации флагов, которые находятся в значении:

 >>> Цвет класса (Флаг):
. .. КРАСНЫЙ = авто ()
... ЗЕЛЕНЫЙ = авто ()
... СИНИЙ = авто ()
... ПУРПУРНЫЙ = КРАСНЫЙ | СИНИЙ
... ЖЕЛТЫЙ = КРАСНЫЙ | ЗЕЛЕНЫЙ
... CYAN = GREEN | СИНИЙ
...
>>> Color (3) # названная комбинация
<Цвет.ЖЕЛТЫЙ: 3>
>>> Color (7) # комбинация без имени

 

Примечание

В 3.11 безымянные комбинации флагов будут производить только канонический флаг. члены (также известные как однозначные флаги). Итак, Color (7) произведет что-то как <Цвет СИНИЙ | ЗЕЛЕНЫЙ | КРАСНЫЙ: 7> .

Полное перечисление - обзор

Модель и авторитет классической геометрической парадигмы простираются далеко за пределы самой математики.В этом разделе мы увидим, как некоторые ключевые принципы геометрического метода были обобщены и перенесены в общие философские программы Декарта и Лейбница. Позже мы сделаем то же самое в отношении физической науки. 109 Мы считаем, что помнить об этой математической основе имеет решающее значение для понимания мысли 17-го века в целом, но в настоящем исследовании наша главная цель проведения этих параллелей - осветить и укрепить наше понимание философии геометрии 17-го века.

3.3.4.1 Декарт

Декарт очень ясно и недвусмысленно заявляет о том, что его философский метод непосредственно основан на геометрии. Наиболее полное объяснение этого - его Рассуждение о методе (1637). Здесь Декарт с самого начала дает понять, что его намерение состоит в том, чтобы расширить сферу применения математического метода до философии в целом:

Я больше всего увлекался математикой из-за ее достоверности и неопровержимости ее доказательств ... [и] I был удивлен, что ничего более возвышенного не было построено на таком прочном и прочном основании. 110

В самом деле, исчерпывающее изложение своего метода Декартом является настолько удачным описанием элементов , что его легко мог бы написать сам Евклид в качестве предисловия к этой работе. Здесь я цитирую его полностью и указываю на очевидные параллели с Евклидом.

Первый [принцип моего метода] состоял в том, чтобы никогда не принимать за истину то, о чем я неопровержимо не знал; иными словами, осторожно, чтобы избежать как предубеждений, так и преждевременных выводов; и не включать в свои суждения ничего, кроме того, что представлялось мне так ясно и отчетливо, что у меня не было бы повода в этом сомневаться. 111

Это легко увидеть как идеальное описание того, как Евклид основывает всю свою работу на нескольких самоочевидных постулатах и ​​общих представлениях.

Второй заключался в том, чтобы разделить все исследуемые трудности на как можно больше частей и столько, сколько требуется для их решения наилучшим образом. 112

Так же, как, например, доказательство Евклида теоремы Пифагора опирается на около 28 предыдущих предложений, и так далее для всех других теорем.

Третье - вести свои мысли в заданном порядке, начиная с самых простых и понятных объектов и постепенно восходя, как бы шаг за шагом, к познанию самых сложных… 113

Опять же, трудно представить, как какая-либо работа могла бы соответствовать этому описанию лучше, чем « Elements » Евклида с ее тщательно выстроенной цепочкой утверждений, каждое из которых в решающей степени опирается на предыдущие.

… и размещение заказа даже на тех, которые не имеют естественного порядка или приоритета. 114

Это своего рода особенность математики, когда, сталкиваясь с двумя эквивалентными утверждениями, каждый произвольно выбирает, что доказывать первым, а какое из него выводить, таким образом искусственно навязывая порядок даже там, где его нет в природа вещей.

Последнее должно было провести такие полные переписи и такие общие обследования, что я бы наверняка ничего не упустил. 115

Это можно сравнить, например, с исчерпывающими и систематическими трактовками Евклида некоторых иррациональных величин в Книге X и правильных многогранников в Книге XIII.

Перечислив эти пункты, Декарт сразу же снова подчеркивает, что его метод моделируется на математике:

Длинные цепочки совершенно простых и легких причин, которые геометры привыкли использовать для своих самых трудных демонстраций. дало мне основание полагать, что все вещи, которые могут подпадать под познание человека, следуют друг за другом таким же образом, и это при условии, что только мы воздерживаемся от принятия как истинных любых мнений, которые не являются истинными, и всегда соблюдаем необходимый порядок при выводе один от другого, не может быть никого настолько удаленного, чтобы к ним нельзя было добраться, или настолько скрытого, что их нельзя было бы обнаружить.И мне не пришлось очень беспокоиться, чтобы выяснить, с чего нужно было начать, потому что я уже знал, что это было с самого простого и легко известного; и учитывая, что из всех тех, кто до сих пор искал истину в науках, только математики смогли найти доказательства, то есть ясные и определенные причины, я не сомневался, что должен начать с тех же вещей, которые они обдумывали, хотя я надеялся, что никакой другой выгоды от них не будет, кроме того, что они приучат мой разум питаться истинами, а не довольствоваться ложными причинами. 116

Таким образом, в программном трактате, определяющем его знаменитый метод сомнения, Декарт с гордостью признает, что есть одна вещь, «я не сомневался», а именно: «что я должен начать» так же, как и математики.

Этот однозначный статус математики как модели всего знания подтверждается Декартом и во многих других местах. Так, например, в Regulae мы читаем:

В поисках правильного пути к истине мы не должны беспокоиться ни о чем, в чем мы не можем иметь уверенность, равную уверенности, равной демонстрации арифметики и геометрии. 117

И хотя я много говорю здесь о цифрах и числах ... тем не менее, любой, кто уделяет пристальное внимание моему значению, легко заметит, что я вовсе не думаю об общей математике, но я излагаю некую новую дисциплину … Достаточно широким, чтобы раскрыть истину по любому предмету. 118

В предисловии к французскому переводу Принципов философии мы снова находим это обобщение математического метода:

Надо начать с поиска ... первопричин, то есть Принципов [ которые] должны быть настолько ясными и очевидными, чтобы человеческий разум не мог сомневаться в их истинности, когда он внимательно рассматривает их . .. И затем нужно попытаться вывести из этих Принципов знание вещей, которые от них зависят, таким образом, чтобы во всей последовательности выводов, которые делают из них, нет ничего не очень явного. 119

Но Декарт не довольствуется простым принятием геометрического метода - он также хочет его оправдать. Он делает это, показывая, что она выдерживает даже самое критическое исследование, а именно провозглашенное в первом предложении его Принципов философии : «Тот, кто ищет истину, должен хотя бы раз в жизни усомниться во всем». 120 Геометрический метод - это единственный философский метод, позволяющий пережить эту критическую бездну с помощью следующей цепочки рассуждений.

Сначала докажем собственное существование.

Мы действительно можем легко предположить, что нет ни Бога, ни неба, ни материальных тел; и все же даже то, что у нас самих нет рук или ног, короче говоря, нет тела; тем не менее, по этой причине мы не предполагаем, что мы, которые думаем о таких вещах, ничто: для нас противоречиво верить в то, что то, что думает, в то самое время, когда оно думает, не существует. И, соответственно, это знание, , я думаю, следовательно, я , является первым и наиболее достоверным, которое можно получить и представить каждому, кто философствует в правильном порядке. 121

«Знание всего остального зависит от познания Бога» 122 , потому что следующие вещи, в которых разум чувствует уверенность, являются основными математическими фактами, но он не может доверять этим суждениям, если не знает, что его создатель является не лживый. Таким образом, «разум… обнаруживает [в себе] определенные общие понятия и формирует из них различные доказательства; и пока он концентрируется на этих доказательствах, он полностью убежден в их истинности. Так, например, ум имеет в себе идеи чисел и цифр, а также имеет среди своих общих понятий , что если равные добавляются к равным, результаты будут равны и другим подобным; из которого легко доказывается, что три угла треугольника равны двум прямым и т. д. 123 Но разум «еще не знает, возможно ли, что он был создан такой природы, что он ошибается даже в тех вещах, которые кажутся ему наиболее очевидными». 124 Следовательно, «разум видит, что он справедливо сомневается в таких вещах, и не может иметь никакого определенного знания, пока не узнает автора его происхождения». 125

Существование Бога доказывается к удовлетворению Декарта несколькими аргументами, в первую очередь следующими. «Так же, как, например, ум полностью убежден в том, что треугольник имеет три угла, которые равны двум прямым углам, потому что он воспринимает тот факт, что его три угла равны двум прямым углам, обязательно содержится в идее треугольника; Итак, только потому, что он осознает, что необходимое и вечное существование содержится в идее в высшей степени совершенного существа, ум должен ясно заключить, что в высшей степени совершенное существо существует. 126 И тем более, что это «очень хорошо известно из [нашего] естественного просветления… то, что более совершенное, не создается действенной и тотальной причиной, которая менее совершенна; и более того, что в нас не может быть идеи или образа чего-либо, чего не существует где-то (ни в нас, ни вне нас), некоего Оригинала, который действительно содержит все его совершенства. И потому что мы никоим образом не находим в себе тех высших совершенств, о которых имеем представление; только на основании этого факта мы делаем правильный вывод, что они существуют или определенно когда-то существовали в чем-то отличном от нас; то есть в Боге.» 127

« Из этого следует, что все вещи, которые мы ясно воспринимаем, истинны, и что ранее перечисленные сомнения устранены », 128 , поскольку« Бог не является причиной ошибок »благодаря своему совершенству , поскольку «воля к обману определенно никогда не исходит ни от чего, кроме злого умысла, страха или слабости; и, следовательно, не может происходить в Боге ». 129 Главный вывод из всего этого состоит в том, что «Таким образом, мы не должны больше доверять математическим истинам, поскольку они наиболее очевидны. 130

В этом свете аргумент Декарта cogito и его доказательство существования Бога - которые, конечно, являются традиционными фокусами философских комментариев к Декарту - кажутся не чем иным, как случайными ступенями к его Истинная цель, а именно обоснование геометрического метода. Было бы глупо отрицать, что эти вещи также имели большое эпистемологическое и богословское значение независимо от этого отношения к математике, но я считаю, что их использование геометрического метода внесло значительный вклад в оценку этих аргументов Декартом.

3.3.4.2 Лейбниц

Лейбниц был ярым критиком Декарта во всех областях, о которых только можно подумать. Короче говоря,

Я убежден, что его механика полна ошибок, что его физика идет слишком быстро, что его геометрия слишком узка, и что его метафизика - все это вместе. 131

Но в более широком плане эти различия весьма поверхностны, поскольку Лейбниц страстно и искренне соглашается с геометрическим ядром программы Декарта - его критика сводится к тому, что Декарт не доводил ее до конца с достаточной строгостью.

В самом деле, Лейбниц восхвалял математику как модель всего знания примерно в тех же терминах, что и Декарт:

В математике греки рассуждали с максимально возможной точностью и . .. завещали человечеству модели искусства демонстрации; … Но удивительно, как далеко те же самые греки отошли от этого стандарта в тот момент, когда они отошли, пусть даже немного, от чисел и цифр, чтобы заняться философией. 132

Таким образом, он поставил перед собой цель «расширить границы науки демонстрации ... которые до сих пор почти совпадали с границами области математики. 133 Действительно: «Я лелеял математику только потому, что нашел в ней следы искусства изобретения в целом» 134 во многом как Декарт.

Однако Лейбниц в конечном итоге счел философскую систему Декарта слишком упрощенной. Здесь не место прослеживать сложности его собственных философских взглядов, но для наших целей важно то, что даже когда Лейбниц выходит за рамки Декарта, он все еще стремится закрепить свои новые принципы в геометрической традиции.Это особенно заметно в его оправдании принципа достаточного разума, краеугольного камня лейбницкой метафизики. Здесь можно почти прочитать между строк, как Лейбниц сравнивает себя, идущего дальше Декарта, с Архимедом, выходящим за пределы Евклида в расширении области применения своего метода:

Чтобы перейти от математики к натурфилософии, необходим другой принцип…; Я имею в виду принцип достаточной причины , а именно, что ничего не происходит без причины, почему так должно быть, а не иначе.И поэтому Архимед, желая перейти от математики к натурфилософии, в своей книге De aequilibrio был вынужден использовать частный случай великого принципа достаточного основания. Он считает само собой разумеющимся, что если есть весы, в которых все одинаково с обеих сторон, и если на обоих концах этих весов подвешены одинаковые грузы, все будет в состоянии покоя. Это потому, что не может быть объяснено, почему одна сторона должна давить больше, чем другая.Итак, с помощью этого единственного принципа, а именно, что должна быть достаточная причина, почему все должно быть так, а не иначе, можно продемонстрировать бытие Бога и всех других частей метафизики или естественного богословия и даже, в некоторой степени, те принципы естественной философии, которые не зависят от математики; Я имею в виду принципы динамики или принципы силы. 135

Этот аргумент является еще одним ярким примером принципа, которым руководствовались философии Декарта и Лейбница: обобщить метод древних геометров.

Перечисление - обзор | Темы ScienceDirect

Методология V.A

Исчерпывающее компьютерное перечисление часто выполняется с помощью метода программирования, называемого поиском с возвратом . Версия задачи поиска может быть определена следующим образом:

Задача поиска:

Дана совокупность наборов кандидатов C 1 , C 2 , C 3 ,…, C m и логический предикат совместимости P ( x , y ), определенный для всех x ε C i и y ε C j , найти набор m ( x 1 ,…, x m ) с x i ε C i такое, что P ( x i , x j ) верно для всех i j .

Набор м , удовлетворяющий вышеуказанному условию, называется решением .

Например, если мы возьмем m = n 2 + n + 1 и пусть C i будет набором всех кандидатов в строку i матрицы инцидентности проекционная плоскость, то P ( x , y ) можно определить как

P (x, y) = {true, если 〈x, y〉 = 1, иначе

, где 〈 x , y 〉 обозначает внутреннее произведение строк x и y .Тогда решение представляет собой полную матрицу инцидентности.

В подходе с возвратом мы генерируем k-кортежей с k m . k -элементов ( x 1 ,…, x k ) - это частичное решение на уровне k if P ( x i , x j ) верно для всех i j k . Основная идея подхода с возвратом - расширить частичное решение на уровне k до одного на уровне k + 1, а если это расширение невозможно, то вернуться к частичному решению на уровне k - 1 и попытаться сгенерировать другое частичное решение на уровне k .

Например, рассмотрим поиск проективной плоскости порядка 1. В терминах матрицы инцидентности задача состоит в том, чтобы найти 3 × 3 (0,1) -матрицу A , удовлетворяющую матричному уравнению

AAT = И + Дж.

Предположим, матрица A генерируется строка за строкой. Поскольку каждая строка A должна иметь две единицы, все наборы кандидатов C i равны {[110], [101], [011]}. Частичное решение на уровне 1 можно сформировать, выбрав любую из этих трех строк как x 1 .Если x 1 выбрано как [110], то есть только два варианта для x 2 , которые удовлетворяют предикату P ( x l , x 2 ), а именно [101] и [011]. Каждый из этих вариантов для x 2 имеет уникальное расширение для решения.

Хороший способ систематизировать информацию, присущую частичным решениям, - это дерево поиска с возвратом .Здесь пустое частичное решение () берется в качестве корня, а частичное решение ( x 1 ,…, x k ) представляется как дочерний элемент частичного решения ( x 1 ,…, x k −1 ). Следуя терминологии информатики, мы называем частичное решение узлом . Также принято маркировать узел ( x 1 ,…, x k ) только x k , потому что это выбор, сделанный на этом уровне.Полное частичное решение можно прочитать в дереве, проследив ветвь от корня до рассматриваемого узла. На рисунке 6 показано дерево поиска для проективной плоскости порядка 1. Возможные кандидаты помечены как r 1 , r 2 и r 3 . Крайняя правая ветвь, например, представляет выбор r 3 или [011] в качестве первой строки, r 2 в качестве второй строки и r 1 в качестве третьей строки.

РИСУНОК 6. Дерево поиска для проективной плоскости порядка 1.

Часто верно, что вычислительные затраты на обработку узла не зависят от его уровня k . При этом предположении общие вычислительные затраты на поиск равны количеству узлов в дереве поиска, умноженному на затраты на обработку узла. Следовательно, количество узлов в дереве поиска является важным параметром при поиске. Это число может быть получено путем подсчета узлов на каждом уровне, причем α i определяется как количество узлов на уровне i дерева.Например, в дереве поиска проективной плоскости порядка 1, показанном на рис. 6, α 1 = 3, α 2 = 6 и α 3 = 6.

Пункт перечисления | Аннотированная Конституция | Congress.

gov

Статья I, Раздел 2, Пункт 3:

Представители и прямые налоги распределяются между несколькими штатами, которые могут быть включены в этот Союз, согласно их соответствующему количеству, которое определяется путем сложения всех Количество свободных лиц, включая тех, которые обязаны служить в течение нескольких лет, и исключая не облагаемых налогом индейцев, три пятых всех остальных лиц. Фактический подсчет будет производиться в течение трех лет после первого собрания Конгресса Соединенных Штатов и в течение каждого последующего десятилетнего срока в порядке, установленном законом. Число представителей не должно превышать одного на каждые тридцать тысяч, но каждый штат должен иметь как минимум одного представителя; и до тех пор, пока не будет произведен такой подсчет, штат Нью-Гэмпшир будет иметь право выделить три, Массачусетс восемь, Род-Айленд и Плантации Провиденс один, Коннектикут пять, Нью-Йорк шесть, Нью-Джерси четыре, Пенсильвания восемь, Делавэр один, Мэриленд шесть. , Вирджиния - десять, Северная Каролина - пять, Южная Каролина - пять, и Джорджия - три.

Статья о переписи населения отражает несколько важных конституционных определений: сравнительная политическая власть штата в Палате представителей должна отражать сравнительное население, а не сравнительное богатство; что сравнительная сила будет меняться каждые 10 лет, чтобы отразить изменения населения; что федеральный налоговый орган будет опираться на ту же основу; и что Конгресс, а не штаты, будет определять способ проведения переписи. Все эти определения свидетельствуют о сильном конституционном интересе к точности.

Используемый язык - фактический счет - требует фактического подсчета, но дает Конгрессу широкую свободу действий в определении методологии этого подсчета. Слово перечисление относится к процессу подсчета без описания методологических деталей подсчета. Слово фактический просто относится к перечню, который будет использоваться для распределения Третьего Конгресса, и тем самым отличает преднамеренно взятый подсчет от гипотетического подхода, который использовался для Первого Конгресса. Наконец, наделение Конгрессом полномочий прямого порядка подсчета подчеркивает широту методологических полномочий Конгресса. Таким образом, суд постановил, что в деле «Юта против Эванса», вменение по горячим следам, метод, используемый для заполнения недостающих данных путем вменения в адрес числа лиц, найденных по соседнему адресу или в единице того же типа, не работает. нарушает действующее требование переписи . Суд отличил вменение от статистической выборки и указал, что его применение было относительно узким.Вменение было разрешено , когда были приложены все усилия, чтобы охватить каждое домохозяйство, где используемые методы состоят не из статистической выборки, а из умозаключений, где этот вывод затрагивает крошечный процент населения, где альтернативой является гораздо менее точная оценка населения, и, следовательно, манипулирование методом маловероятно.

Хотя статья о переписи прямо предусматривает подсчет лиц, Конгресс исторически собирал дополнительную демографическую информацию - в некоторые годы задавая более подробные вопросы, касающиеся личных и экономических дел подгруппы респондентов.

Суд подтвердил такое понимание пункта о перечислении в деле Министерство торговли против Нью-Йорка. В заключении от имени Суда главный судья Робертс рассмотрел вопрос о том, нарушает ли решение министра торговли задать вопрос о гражданстве в анкете переписи положения о перечислении, поскольку вопрос не имел отношения к выполнению фактического подсчета. Главный судья начал свой анализ с признания того факта, что статья предоставляет Конгрессу практически неограниченные полномочия по проведению переписи, которые Конгресс, в свою очередь, в значительной степени делегировал Секретарю. Суд отметил, что демографические вопросы задавались при каждой переписи населения с 1790 года, что дает давнюю и последовательную историческую практику , которая информировала о допустимости основной практики. Из-за такого понимания значения статьи Суд постановил, что Конгресс и, в более широком смысле, Секретарь имеют право использовать перепись для более широких целей сбора информации, не нарушая положения о перечислении.

Несмотря на то, что Конгресс рассматривает свои полномочия по переписи в более широком смысле, Конгресс не всегда выполнял свой положительный мандат по перераспределению представителей между штатами после проведения переписи. Он не смог провести такое перераспределение после переписи 1920 года, так как не смог прийти к соглашению о распределении представительства без дальнейшего увеличения размера Палаты. В конечном итоге, законом от 18 июня 1929 г., было предусмотрено, что членский состав Палаты представителей отныне должен быть ограничен до 435 членов, которые будут распределены между штатами по так называемому методу основных дробей , ранее использовался при распределении 1911 года, а теперь заменен методом равных пропорций . После переписи 1990 года штат, потерявший место в Палате представителей в результате использования этой формулы, подал в суд, утверждая, что нарушено правило - один человек - один голос , вытекающее из пункта 2 статьи I. Конгресс и заявившая оценка трудностей в достижении межгосударственного равенства, Верховный суд поддержал формулу и вытекающее из этого распределение. Цель абсолютного равенства населения между округами реалистична и уместна в пределах одного штата, но конституционная гарантия наличия одного представителя для каждого штата ограничивает применение в округах в разных штатах и ​​делает цель иллюзорной для нации в целом .

Хотя требует избрания представителей по округам, Конгресс оставил определение границ округов на усмотрение штатов. Это вызвало ряд споров. В Огайо отн. Davis v. Hildebrant, , требование о вынесении закона о перераспределении округов на всенародный референдум было оспорено и поддержано. После перераспределения, произведенного в соответствии с переписью 1930 года, тупиковые ситуации между губернатором и законодательным органом в нескольких штатах привели к серии дел, в которых право губернатора наложить вето на законопроект о перераспределении населения было поставлено под сомнение. Сопоставляя эту функцию с другими обязанностями, возложенными на законодательные органы штата Конституцией, Суд решил, что она носит законодательный характер и подлежит губернаторскому вето в той же степени, что и обычное законодательство в соответствии с положениями конституции штата.

Редактировать объекты для создания счетных областей

Счетная зона - это географическая зона, которую опрашивает один или несколько представителей переписи (известных как счетчики). Счетные участки охватывают всю территорию данной страны и состоят из одной или нескольких прилегающих территорий, часто кварталов.Создание эффективных счетных участков имеет важное значение для успешной и точной переписи.

В этом уроке вы будете использовать ArcGIS Pro для создания и изменения счетных участков и других географических данных, связанных с переписью, в Замбии. В процессе вы изучите основы редактирования объектов в ArcGIS.

Последний раз этот урок тестировался 11 ноября 2021 г. с использованием ArcGIS Pro 2.9. Если вы используете другую версию ArcGIS Pro, вы можете столкнуться с другими функциями и результатами.

План урока

Редактировать точечные объекты

Создайте векторный слой для точек геолокации, добавьте новые точки на карту и исправьте ошибки в существующих точках.

Редактировать полигональные объекты

Создайте области перечисления на основе ряда направляющих и измените существующие области, чтобы удалить пробелы и другие ошибки.

Объекты ArcGIS могут быть точками, линиями или полигонами. Счетные площади отображаются в виде многоугольников, а здания, такие как школы, больницы или культовые сооружения, обычно отображаются в виде точек. Здания могут использоваться как точки геолокации, которые помогают переписчикам находить счетные участки.

Сначала вы создадите и измените точечные данные, представляющие точки геолокации и кластеры домохозяйств. Кластеры домохозяйств представляют собой группы домохозяйств, и их также можно использовать в качестве ориентира для счетчиков.

Откройте проект

Сначала вы загрузите и откроете пакет проекта ArcGIS Pro, содержащий географическую информацию и данные переписи населения Замбии, интересующей вас области.

  1. Загрузите пакет проекта «Счетные районы Южной Лусаки».

    На ваш компьютер загружается файл с именем Southern_Lusaka_Enumeration_Areas.ppkx. Файл .ppkx представляет собой пакет проекта ArcGIS Pro и может содержать карты, данные и другие файлы, которые вы можете открыть в ArcGIS Pro.

  2. Запустите ArcGIS Pro. При появлении запроса войдите в систему, используя свою лицензионную учетную запись ArcGIS.

    Если у вас нет ArcGIS Pro или учетной записи ArcGIS, вы можете подписаться на бесплатную пробную версию ArcGIS.

    Когда вы открываете ArcGIS Pro, вам предоставляется возможность создать новый проект или открыть существующий.Если вы создавали проект раньше, вы увидите список последних проекты.

  3. Щелкните Открыть другой проект.

  4. В окне «Открыть проект» найдите и дважды щелкните загруженный пакет проекта Southern_Lusaka_Enumeration_Areas.

    Проект открывается. На нем показаны границы провинций Южная и Лусака на юге Замбии. Он также показывает базовую карту OpenStreetMap. Базовая карта содержит основную географическую информацию о местности, такую ​​как дороги, политические границы и водоемы.

    На панели Содержание перечислены все слои на карте. Карта включает в себя точечный слой с названием Южные и Лусакские домохозяйства (желтые точки на карте), который представляет кластеры домохозяйств, и слой с названием «Счетные районы». Данные кластера домохозяйств и счетного участка были придуманы для целей этого урока.

Создание класса точечных объектов

Затем вы перейдете к интересующей области с помощью закладки, которая была включена в проект.Затем вы создадите класс точечных объектов, содержащий точки геолокации, которые специалисты по переписи могут использовать для определения местоположения счетных участков.

  1. На ленте на вкладке «Карта» нажмите «Закладки» и выберите «Итежи-Тежи».

    Карта указывает на местоположение закладки, область в южной провинции Итежи-Тежи, которая находится рядом с большим озером.

    Когда карта приближается, становятся видны три синих многоугольника. Эти многоугольники представляют собой счетные участки.

    Работники переписи в полевых условиях обычно используют достопримечательности для определения местоположения счетных участков, но не все работники переписи имеют точные устройства GPS, а в некоторых районах сотовая связь может быть ограничена или отсутствовать. Добавление точечных объектов на карту для обозначения достопримечательностей имеет важное значение, поскольку работники переписи могут просматривать эти точки даже в автономном режиме.

    Вы создадите слой для захвата этих геолокационных точек интереса.

  2. На панели Каталог разверните папку Базы данных.Разверните Southern_lusaka_enumeration_areas.gdb.

    Если вы не видите панель «Каталог», щелкните вкладку «Просмотр» на ленте. В группе Windows щелкните Панель каталога.

    Файл .gdb - это база геоданных. Базы геоданных - это тип файловой папки, которая в основном содержит пространственные данные, которые вы можете добавить на карту в ArcGIS. База геоданных Southern_lusaka_enumeration_areas содержит два класса пространственных объектов, оба из которых находятся на карте. Вы создадите класс пространственных объектов точек геолокации в этой базе геоданных.

  3. Щелкните правой кнопкой мыши базу геоданных Southern_lusaka_enumeration_areas, выберите «Создать» и выберите «Класс пространственных объектов».

    Появится панель «Создать класс пространственных объектов». Эта панель проведет вас пошагово через процесс создания класса пространственных объектов.

    Сначала вы назовете класс пространственных объектов. Имя класса пространственных объектов не может содержать пробелы или несколько других типов специальных символов. Однако вы можете добавить необязательный псевдоним, содержащий любые символы. В большинстве мест вместо имени отображается псевдоним.

  4. В поле «Имя» введите Geolocation_Points (включая подчеркивание). В качестве псевдонима введите точки геолокации (без подчеркивания).

    Затем вы выберите тип класса пространственных объектов. Есть несколько вариантов на выбор, но основными типами классов пространственных объектов являются точки, линии и полигоны. Линии лучше всего подходят для дорог или рек, а полигоны - для областей или географических границ. Точки лучше всего подходят для данных, которые охватывают только одну точку на карте, например, здание или достопримечательность.

  5. В поле Тип класса объектов выберите Точка.

  6. В нижней части панели «Создать класс пространственных объектов» нажмите «Далее».

    Затем вы добавите поля атрибутов в класс пространственных объектов. Атрибуты - это текстовые или числовые данные, связанные с каждой функцией. Они могут включать такую ​​информацию, как имена или координаты.

    Для класса пространственных объектов точек геолокации вы добавите поле идентификатора, поле для отслеживания того, кто добавил каждую точку, и общее поле для дополнительных комментариев.

  7. Щелкните Щелкните здесь, чтобы добавить новое поле. В поле «Имя поля» введите «ID» и убедитесь, что тип данных - «Текст».

    Вы также можете изменить псевдоним поля, добавить значение по умолчанию и настроить длину поля. Идентификаторы, которые вы будете использовать для точек геолокации, будут состоять из пяти символов, поэтому вы измените длину соответствующим образом.

  8. Щелкните серое поле рядом с полем идентификатора, чтобы выбрать поле. В разделе «Свойства поля» для параметра «Длина» введите 5.

  9. Добавьте поле со следующей информацией:
    • В поле «Имя поля» введите Plotted_By.
    • Убедитесь, что для типа данных установлено значение «Текст».
    • В качестве псевдонима введите Plotted By.
    • В поле «Длина» введите 30.
  10. Добавьте поле со следующей информацией:
    • В поле «Имя поля» введите «Комментарии».
    • Убедитесь, что для типа данных установлено значение «Текст».
    • В поле Длина введите 150.

    Совет:

    Вы также можете импортировать поля из другого класса пространственных объектов. Для этого нажмите Импорт и перейдите к классу пространственных объектов с полями, которые вы хотите добавить. Этот метод полезен для сохранения согласованности полей между похожими слоями.

  11. Щелкните Далее.

    Следующая панель предназначена для выбора системы координат, используемой классом пространственных объектов. Системы координат - это математические модели для определения местоположения на Земле.

    Вы выберете вариант по умолчанию, WGS 1984, который является системой координат, используемой большинством устройств GPS. Хотя не каждый работник переписи имеет доступ к точному GPS, у некоторых есть доступ, поэтому использование совместимой системы координат полезно.

  12. Щелкните Далее.

    Следующая панель определяет допуск класса пространственных объектов или минимальное расстояние между координатами, прежде чем они будут считаться равными. Допуск по умолчанию (чрезвычайно малая доля градуса) подходит для большинства наборов данных, поэтому вы оставите его без изменений.

  13. Щелкните Далее.

    Следующая панель определяет разрешение. Как и допуск, значение по умолчанию (которое также составляет чрезвычайно малую долю градуса) подходит для большинства наборов данных.

  14. Щелкните Далее.

    Наконец, у вас есть возможность указать конфигурацию хранилища базы данных. Конфигурация по умолчанию подходит для большинства наборов данных.

  15. Нажмите Готово.

    Создан класс пространственных объектов Geolocation_Points. Он добавляется в базу геоданных на панели Каталог и на карту на панели Содержание. Точечные объекты не отображаются на карте, потому что вы еще не добавили никаких объектов.

Оцифровка точек геолокации

Процесс создания новых объектов называется оцифровкой.Вы оцифруете одну точку геолокации на счетную зону. Поскольку полевые работники должны уметь определять точки, лучше всего размещать их на очевидных ориентирах, например на перекрестках крупных улиц.

  1. Увеличьте масштаб карты до трех счетных областей.
    Совет:

    Для увеличения или уменьшения масштаба используйте кнопку колеса мыши. Или нажмите Shift и нарисуйте рамку вокруг области, которую вы хотите увеличить.

  2. На ленте щелкните вкладку Правка. В группе «Возможности» нажмите «Создать».

    Появится панель «Создать компоненты». Он содержит список всех редактируемых классов пространственных объектов на карте.

  3. На панели «Создать объекты» щелкните «Точки геолокации».

    Цвет символа точки геолокации случайный. Ваш символ может отличаться от изображений в примерах.

    Слой выбран, и становятся доступными параметры для редактирования. Параметр по умолчанию «Точка» позволяет добавить точку в любом месте карты, где вы щелкаете мышью. Вы будете использовать эту опцию редактирования, чтобы добавить точки геолокации для каждой области перечисления.

    По умолчанию у вас может быть включена привязка. Привязка приводит к тому, что объекты, которые вы оцифровываете, привязываются к существующим объектам, гарантируя, что два объекта точно примыкают друг к другу, без промежутков или зазоров между ними. Хотя привязка полезна для редактирования смежных объектов (и вы будете использовать ее позже в уроке), вам не нужно привязывать точки геолокации к краям областей перечисления, поэтому вы отключите привязку.

  4. На вкладке «Правка» в группе «Привязка» щелкните «Привязка» и убедитесь, что отображается сообщение «Привязка отключена».Если появляется сообщение «Привязка включена», нажмите кнопку рядом с сообщением, чтобы отключить привязку.

    Затем вы добавите первую точку геолокации.

  5. В правой области перечисления щелкните перекресток улиц.

    Точка геолокации добавляется в то место, где вы щелкнули.

  6. В средней области перечисления щелкните перекресток улиц.

    На остальной счетной территории нет дорог с твердым покрытием и перекрестков.Единственная дорога - грунтовая или грунтовая, обозначенная на базовой карте коричневой пунктирной линией. Вместо перекрестка вы разместите точку геолокации на повороте дороги, которая находится в центре счетной области. Хотя это не идеальное место, есть несколько других достопримечательностей, так что в данном случае это приемлемо.

  7. В крайней левой области перечисления щелкните изгиб пунктирной линии.

    Вы добавили точку геолокации в каждую счетную область.

  8. Закройте панель «Создать элементы».

    Закрытие панели завершает сеанс редактирования и возвращает указатель в нормальное состояние. Затем вы откроете таблицу атрибутов для слоя и отредактируете информацию об атрибутах для каждой добавленной точки.

  9. На панели «Содержание» щелкните правой кнопкой мыши «Точки геолокации» и выберите «Таблица атрибутов».

    Появится таблица. Он содержит пять полей. Поля OBJECTID и Форма - это поля по умолчанию, которые заполняются автоматически.Остальные три поля - это те, которые вы добавили при создании класса пространственных объектов.

    Вы добавите информацию для полей ID и Plotted By. Значение поля ID будет соответствовать полю ID для области перечисления точки геолокации. Вы можете проверить идентификатор каждой области перечисления, щелкнув его на карте, но для целей этого урока вам будет предоставлен правильный идентификатор. Каждый идентификатор представляет собой буквенно-цифровую строку, в которой буквы EZ сочетаются с трехзначным числом.

  10. Для первой записи в таблице в столбце ID дважды щелкните и введите EZ003.Нажмите Ввод.

    Информация об атрибутах обновлена.

  11. Для первой записи в таблице в столбце Plotted By дважды щелкните и введите свое имя или инициалы (или вымышленное имя).
  12. Измените следующую информацию об атрибуте:
    • Для второй записи в поле ID введите EZ002. В поле «Автор печати» введите свое имя или инициалы.
    • В качестве третьей записи для идентификатора введите EZ001. В поле «Автор печати» введите свое имя или инициалы.

    Вы оставите столбец «Комментарии» без изменений, так как у вас нет комментариев ни к одному из пунктов.

  13. Закройте таблицу атрибутов.

    Вы внесли несколько изменений, включая оцифровку трех точек и добавление атрибутивной информации. После завершения редактирования важно сохранить изменения. Сохранение ваших правок отличается от сохранения вашего проекта.

  14. На ленте на вкладке Правка в группе Управление изменениями щелкните Сохранить.

  15. В окне «Сохранить изменения» нажмите «Да».

    Ваши правки сохраняются в наборе данных. Если вы добавите тот же слой Geolocation Points на другую карту, вы все равно увидите оцифрованные точки.

Измените точки для устранения ошибок

Вы оцифровали новые точечные объекты. Затем вы отредактируете существующие точечные объекты. Иногда объект может быть расположен в неправильном месте. Для обеспечения точности данных может потребоваться перемещение и удаление функций.

  1. На ленте щелкните вкладку Карта. В группе «Навигация» нажмите «Закладки» и выберите закладку Kazungula.

    Карта указывает на область на юго-западной границе Южной провинции.

    В этом пункте есть три счетных участка. Он также имеет пять точек кластера домохозяйств. Точки кластера домохозяйств представляют собой агрегированную демографическую информацию о домохозяйствах в счетной зоне. Вы также можете использовать эти точки кластера домашних хозяйств в качестве точек геолокации. Однако ни один из кластеров домохозяйств в этом месте не находится на счетных участках.

    Две точки кластера домохозяйств расположены за пределами района. Вы измените базовую карту, чтобы попытаться понять, почему.

  2. На вкладке «Карта» в группе «Слой» щелкните «Базовая карта» и выберите «Изображения».

    Базовая карта изменится на карту, на которой показаны спутниковые снимки местности.

    На карте две точки кластера домохозяйств, расположенные за пределами квартала, расположены в реке. Вероятно, эти точки добавлены ошибочно.

  3. Измените базовую карту обратно на OpenStreetMap.

    Обычно не рекомендуется удалять данные из исходного набора данных без предварительного создания копии.Однако для целей этого урока вы предположите, что две точки, расположенные на реке, ошибочны, и что вы проверили этот факт, связавшись с полевым работником, который изначально собирал эти точки.

    Теперь, когда у вас есть абсолютная уверенность в том, что они ошибочны, вы удалите два кластера домашних хозяйств, которые не расположены в районе проживания людей. Затем вы переместите остальные три кластера домохозяйств в соответствующие счетные участки.

  4. Щелкните вкладку Правка.В группе «Выбор» нажмите кнопку «Выбрать».

  5. На карте щелкните точку кластера домохозяйств возле моста Казунгула.

    Точка выбрана (выделена синим). Вы можете удалить точку по отдельности, а затем выбрать вторую ошибочную точку и удалить ее, или вы можете выбрать обе точки и удалить их сразу. Второй вариант более эффективен.

  6. Нажмите Shift и щелкните кластер домохозяйств рядом с линией Замбези к югу от счетных участков.

    Нажав Shift, вы можете выбрать несколько функций одновременно. Обе точки выбраны.

    Совет:

    Если вы щелкнете не в том месте, вы можете выбрать другую функцию, чем предполагалось. Чтобы отменить выбор, в группе «Выбор» нажмите «Очистить».

  7. На вкладке Правка в группе Компоненты нажмите Удалить.
    Внимание:

    Удаление данных необратимо. После сохранения изменений удаленные объекты полностью удаляются из набора данных.В обычном рабочем процессе рекомендуется сначала сделать копию исходного набора данных, прежде чем удалять какие-либо объекты.

    Точки удаляются с карты и набора данных. Затем вы переместите другие кластеры домохозяйств в центральное место в каждой счетной зоне.

  8. На вкладке Правка в группе Инструменты щелкните Переместить.

    Появится панель «Изменить компоненты». На панели будет предложено выбрать одну или несколько функций.

  9. На карте выберите точку кластера домохозяйств к югу от трех счетных участков.

    Точка будет выбрана, и указатель изменится. Теперь вы можете переместить точку, перетащив ее на карту.

  10. Перетащите выбранную точку в центр ближайшей области перечисления.
    Совет:

    Если вам нужно увеличить масштаб или панорамировать карту, вы можете временно вернуть указатель в режим навигации, нажав клавишу C.

    Затем вы переместите две другие точки.

  11. На панели «Изменить компоненты» щелкните «Изменить выбор».

  12. Выберите точку кластера домохозяйств к северо-западу от счетных участков. Переместите точку в центр дороги в ближайший счетный участок.
  13. Щелкните Изменить выбор. Выберите точку кластера домохозяйств к северу от счетных участков и переместите точку в центр ближайшего счетного участка в конце тупика.
  14. Закройте панель «Изменить компоненты».

    Вы переместили три точки кластера домашних хозяйств.

  15. На вкладке «Правка» в группе «Управление изменениями» нажмите «Сохранить».В окне "Сохранить изменения" нажмите "Да".

    Изменения, внесенные в этот раздел, сохранены. Вы также сохраните проект.

  16. На панели быстрого доступа нажмите кнопку Сохранить.

Вы узнали, как создавать, изменять и удалять точечные объекты с помощью инструментов редактирования в ArcGIS Pro. Затем вы отредактируете многоугольники области перечисления и изучите несколько более сложных методов редактирования.


Счетные участки - это относительно небольшие участки, которые обычно проходят пешком один или несколько счетчиков. Соответствующее картирование и определение размеров счетных участков имеет важное значение для проведения переписи. Вы оцифруете новые счетные области, а также измените области, чтобы исключить ошибки.

Оцифровка счетной области

Сначала вы перейдете к интересующей области и оцифруете счетную область на основе стандартных критериев.

  1. При необходимости откройте проект «Перечислимые области Южной Лусаки» в ArcGIS Pro.
  2. На ленте щелкните вкладку Карта. В группе "Навигация" нажмите "Закладки" и выберите закладку для Габона.

    Карта указывает на городок Габон в Лусаке, столице Замбии.

    Как и в других областях, к которым вы переходили в этом уроке, в этой области уже есть несколько счетных областей. Счетные области обычно рисуются вокруг точечных местоположений. Ранее вы создавали точки геолокации для каждой счетной области, но вы также можете основывать счетные области вокруг точек кластера домашних хозяйств, которые отображаются на карте. (Местоположение каждой точки обычно определяется с использованием процесса статистической выборки, чтобы гарантировать, что местоположения являются репрезентативными для более широкого региона.)

    Счетные участки соответствуют следующим критериям:

    • Площадь должна составлять от 3 до 5 гектаров (чтобы группа исследователей могла пройти по ним).
    • Границы участка не должны пересекать реки.
    • Границы территории по возможности должны примыкать к дорогам.

    Вы создадите область перечисления для одной из точек на карте. Сначала вы измерите площадь от 3 до 5 гектаров вокруг точки, чтобы спланировать размеры счетной области.

  3. Увеличьте масштаб до точки скопления домохозяйств в северо-западном углу исследуемой области.

    Дороги вокруг этого участка могут служить границей счетного участка. Здесь вы выполните свои измерения.

  4. На ленте на вкладке «Карта» в группе «Запрос» нажмите кнопку «Измерить» и выберите «Область измерения».

    Появится окно «Измерение площади», и указатель изменится. Вы можете нарисовать многоугольник, щелкнув места на карте, и инструмент рассчитает площадь многоугольника.

    Вы измеряете высокую, несколько прямоугольную область, окруженную дорогами вокруг точки скопления домашних хозяйств.

  5. На карте щелкните в юго-западном углу района вокруг точки кластера домохозяйств.

    Теперь, когда вы перемещаете указатель, линия соединяет указатель с точкой, по которой вы щелкнули. Щелкая последующие точки, вы нарисуете многоугольник. (Ваш рисунок не обязательно должен быть идеальным; вы только оцениваете площадь.)

  6. Следуя по дорогам, щелкайте по точкам, чтобы нарисовать высокий наклонный прямоугольный многоугольник вокруг точки.В качестве последней точки дважды щелкните, чтобы завершить рисунок.

    В окне «Измерение площади» отображается площадь многоугольника, хотя в вашей организации используется стандартная единица измерения, которая, вероятно, является британской или метрической. Вы измените его на гектары.

  7. В окне «Измерение площади» щелкните единицу измерения и выберите «Гектары».

    Единица измерения изменяется. Хотя точное число, которое вы получите, может немного отличаться, площадь нарисованного вами многоугольника составляет около 3.25 га. Эта площадь находится в рекомендуемом диапазоне от 3 до 5 гектаров. Этот район также не пересекает рек и использует дороги на всех своих границах, что означает, что это приемлемый счетный участок.

  8. Закройте окно измерения площади.

    При закрытии окна рисунок удаляется с карты. Вы снова нарисуете эту область, на этот раз при оцифровке новой функции счетной области.

    Процесс оцифровки многоугольника аналогичен процессу оцифровки точки. Однако вместо того, чтобы щелкать одну точку на карте, вы нарисуете многоугольник так же, как вы рисовали область измерения, щелкнув несколько точек, которые служат вершинами многоугольника.

  9. На ленте щелкните вкладку Правка. В группе «Возможности» нажмите «Создать».
  10. На панели «Создание компонентов» щелкните шаблон компонента «Области перечисления».

    Инструмент редактирования по умолчанию для этого шаблона - Многоугольник. Другие шаблоны предоставляют возможность рисовать определенные геометрические фигуры или рисовать от руки. Инструмент «Многоугольник» работает так же, как и инструмент «Измерить».

  11. На карте нарисуйте многоугольник, похожий на многоугольник, который вы нарисовали с помощью инструмента «Измерить», используя дороги в качестве границ.Дважды щелкните последнюю вершину, чтобы завершить многоугольник.

    Вы оцифровали счетную зону.

  12. Закройте панель «Создать элементы».
  13. На вкладке «Правка» в группе «Управление изменениями» нажмите кнопку «Сохранить». В окне "Сохранить изменения" нажмите "Да".

Устранение промежутков между областями

Оцифрованная вами счетная область не примыкает к другим областям. Однако другие счетные участки на карте есть. Важно обеспечить точное совпадение границ прилегающих территорий.В противном случае в ваших данных могут быть пробелы или осколки, которые могут привести к проблемам при анализе или навигации.

Затем вы отредактируете вершины области перечисления, используя привязку, чтобы удалить пробел.

  1. Прокрутите карту до границы между двумя крайними на востоке счетными участками.

    Граница выглядит несколько неровной. Возможно, при оцифровке этих счетных участков произошла ошибка, которая привела к пропуску.

  2. Увеличьте масштаб границы.

    При увеличении становится виден зазор. Несколько вершин не совпадают точно. Вы отредактируете вершины, чтобы они выровнялись.

  3. На ленте на вкладке Правка в группе Инструменты щелкните Редактировать вершины.

    Появится панель «Изменить объекты» с инструментом «Редактировать вершины». Инструмент предложит вам выбрать функцию, которую вы хотите отредактировать.

  4. На карте щелкните южную область перечисления, чтобы выбрать ее.

    Появятся вершины объекта, представленные зелеными и красными квадратами.

    Три вершины не выровнены. Когда вершины активны, вы можете перетаскивать их на карту, чтобы переместить. Но даже если вы перетащите их так, чтобы они идеально совпадали с вершинами другой области перечисления, объекты могут быть смещены при увеличении масштаба. Чтобы гарантировать точное совпадение вершин, вы включите привязку.

    Как вы узнали ранее, при привязке точки и вершины, которые вы создаете или изменяете, привязываются к частям других объектов. Они удобны для создания или редактирования смежных объектов.

  5. На ленте на вкладке Правка в группе Привязка щелкните Привязка. Щелкните символ рядом с параметром «Привязка отключена».

    Привязка включается.

    Другие кнопки в меню «Привязка» определяют части объектов, к которым вы будете привязываться. Вы можете привязаться к точечным объектам, конечным точкам полигонов или полилиний, вершинам, ребрам, пересечениям, средним точкам или точкам касания. Какие настройки привязки включены или отключены, зависит от ваших настроек по умолчанию и от того, использовали ли вы привязку раньше.Единственная необходимая настройка привязки - это настройка привязки к вершинам.

  6. В меню «Привязка» убедитесь, что включена привязка «Вершина к ближайшей вершине полилинии или полигонального объекта».

    Остальные настройки привязки не имеют значения для этого урока, но они могут быть полезны вам в другом контексте. Затем вы измените вершины на карте, чтобы они соединялись вместе.

  7. На карте перетащите крайнюю восточную смещенную вершину, чтобы она привязалась к ближайшей вершине.

    Из-за привязки две вершины точно совпадают.

  8. Перетащите две другие смещенные вершины, чтобы они привязались к ближайшей вершине.

    Выделенная синяя линия показывает исходное положение границы многоугольника, а пунктирная линия показывает новое местоположение. Граница между двумя счетными областями теперь точно выровнена.

  9. Закройте панель «Изменить компоненты». На ленте на вкладке Правка в группе Выбор щелкните Очистить.
  10. В группе «Управление изменениями» нажмите «Сохранить». В окне "Сохранить изменения" нажмите "Да".

Изменить общие границы

Что делать, если вы хотите отредактировать границу, разделяемую двумя или более объектами? Неудобно редактировать вершины одного объекта, а затем повторять те же изменения для соседних объектов. Используя топологическое редактирование, вы можете редактировать ребра и вершины смежных объектов одновременно. Топологическое редактирование сокращает количество повторений в обычном рабочем процессе редактирования и помогает избежать ошибок, таких как пропуски или осколки, при редактировании.

Вы будете использовать топологию карты для изменения общей границы между двумя счетными областями.

  1. Перейдите к закладке Габон.
  2. Увеличьте масштаб общей границы между счетными площадками на южном конце закладки, рядом с Объединенной церковью Замбии на базовой карте.

    Эта граница должна прилегать к дороге, но граница не очень хорошо совпадает с дорогой. Вы отредактируете край, используя топологию карты.

  3. На вкладке «Правка» в группе «Управление изменениями» щелкните «Нет топологии» и выберите «Топология карты».

    Включение топологии карты дает вам больше возможностей при использовании инструмента для изменения объектов. Эти параметры включают сохранение непрерывности смежных объектов при редактировании.

  4. В группе Инструменты щелкните Редактировать вершины.

    Появится панель «Изменить компоненты». Раньше вы использовали эту панель, но теперь она включает возможность редактировать кромки между элементами, а не отдельные элементы.

  5. На панели «Изменить элементы» перейдите на вкладку «Кромки».

    На панели будет предложено выбрать кромку.Края всех объектов на карте выделены фиолетовым цветом, что указывает на то, какие грани вы можете выбрать.

  6. На карте щелкните край между двумя счетными областями.

    Ребро выбрано. Он содержит две вершины, по одной на каждом конце. Вы отрегулируете положение этих вершин, чтобы они лучше соответствовали дороге на базовой карте. Вы также добавите новую вершину, соответствующую небольшому изгибу дороги.

    Для этого редактирования вам нужно привязать только к краям, а не к вершинам, поэтому вы настроите параметры привязки.

  7. На ленте на вкладке Правка в группе Привязка щелкните Привязка. Отключите все параметры привязки, кроме привязки к ближайшему краю полилинии или сегмента многоугольника.

  8. На карте перетащите западную конечную точку края до места нахождения дороги.

    Пунктирная линия показывает положение границы на основе перемещенной вершины. Он по-прежнему не соответствует местоположению дороги, потому что дорога немного изгибается ближе к середине. Вы добавите новую вершину, чтобы включить этот изгиб.

  9. Щелкните правой кнопкой мыши середину пунктирной линии и выберите «Добавить вершину». (При необходимости увеличьте масштаб.)

    Вершина добавляется в точку, по которой вы щелкнули. Вы можете перемещать эту вершину, как любую другую вершину. Местоположение, в которое вы хотите переместить эту вершину, близко к местоположению исходной линии, поэтому привязка может затруднить перемещение вершины в правильное место.

  10. Отключить защелкивание.
  11. Перетащите новую вершину на изгиб дороги, расположенный на перекрестке.

    Кромка теперь включает небольшой изгиб дороги. Можно сделать границу еще более точной с дорогой, добавив еще одну вершину, но созданной границы достаточно для целей этого урока.

  12. При необходимости уменьшите масштаб, пока не увидите всю границу.
  13. Внизу карты нажмите кнопку Готово.

    Правка применяется, и отображается новая кромка.

    Поскольку вы включили топологию карты, редактирование применяется к обоим смежным объектам счетной области.Граница остается непрерывной, нет пропусков, осколков или других ошибок редактирования.

  14. Закройте панель «Изменить компоненты» и сохраните изменения.

Объединить и разделить объекты

Вы отредактировали объекты, изменив вершины и ребра. Затем вы объедините две функции в одну и разделите одну функцию на две.

  1. Перейдите к закладке Габон.

    Некоторые счетные участки в этом регионе не соответствуют критериям счетных участков.Например, два небольших счетных участка в середине изучаемого участка меньше рекомендованного размера от 3 до 5 га для счетных участков. Вы объедините эти области в одну.

  2. На ленте на вкладке Правка в группе Инструменты щелкните Объединить.

    Появится панель «Изменить компоненты». Он предлагает вам выбрать две или более функций, которые вы хотите объединить.

  3. На карте нажмите Shift и выберите две небольшие счетные области около середины исследуемой области.

    Панель обновляется атрибутами для объекта, который будет создан, когда вы подтвердите слияние. Вы можете редактировать атрибуты на панели, но атрибуты по умолчанию подходят для этой функции.

  4. На панели «Изменить компоненты» нажмите «Объединить».

    Выбранные объекты объединяются в один объект.

    Счетная зона непосредственно к северу от объединенного объекта больше рекомендованного максимального размера в 5 гектаров. Вдобавок в середине счетного участка протекает река, что может затруднить переход переписных работников.

    В данном случае, возможно, река представляет собой канал, построенный после создания счетной зоны. Также возможно, что счетная зона настолько велика, потому что в прошлом на ней не было столько жилья, как сейчас, или что здесь есть мост или переход, позволяющий пересечь реку. В текущем состоянии область перечисления слишком велика, поэтому вы разделите ее на две части.

  5. На вкладке Правка в группе Инструменты щелкните Разделить.

    На панели «Изменить элементы» появится инструмент «Разделить».

  6. Щелкните Изменить выбор. На карте выделите большой счетный участок в северо-восточном углу исследуемой территории.

    Чтобы разделить объект, вы оцифруете линию посередине. Вы оцифруете эту линию, чтобы она следовала за рекой в ​​центре объекта.

  7. Включить привязку.
  8. Оцифруйте на карте линию, идущую вдоль реки в середине выбранной счетной области.Убедитесь, что ваша линия точно соединяется с верхним и нижним краем элемента, и дважды щелкните, когда рисунок будет закончен.

    Если вы попытаетесь разделить объект, не проведя линию от одного края объекта к другому, разделение не сработает.

    Как только вы закончите рисование, будет применено разделение.

    Обе счетные области аналогичны размеру других счетных областей на карте.

  9. Закройте панель «Изменить компоненты».
  10. На ленте на вкладке Правка в группе Выбор щелкните Очистить.
  11. В группе «Управление изменениями» нажмите «Сохранить». В окне "Сохранить изменения" нажмите "Да".
  12. Сохраните проект.

На этом уроке вы создавали и редактировали данные, относящиеся к работникам переписи в полевых условиях. Вы работали как с точечными, так и с полигональными данными в ArcGIS Pro и узнали, как создать класс пространственных объектов; как добавлять, перемещать и удалять объекты; и как редактировать вершины. Вы также использовали топологию карты для редактирования краев, не оставляя зазоров или перекрытий. Вы оцифровали счетные области, а также разделили и объединили счетные области, чтобы лучше соответствовать стандартам размера.

Хотя вы многому научились в этом рабочем процессе, доступно гораздо больше инструментов редактирования. Вам предлагается изучить некоторые из этих инструментов самостоятельно, и вы можете узнать о них больше в разделе «Редактирование в ArcGIS Pro».

Дополнительные уроки можно найти в уроке Learn ArcGIS. Галерея.


Благодарности

  • Вымышленные данные кластера домашних хозяйств и счетных участков, предоставленные GRID3.Распространяется по лицензии CC BY-SA 4.0.
  • Этот урок был адаптирован с разрешения учебника, созданного GRID3. Рабочий процесс урока был изменен для использования ArcGIS Pro. Авторские права © 2020 GRID3; grid3.org.

Отправьте нам отзыв

Пожалуйста, отправьте нам свой отзыв об этом уроке. Расскажите нам, что вам понравилось, а что нет. Если что-то в уроке не сработало, сообщите нам, что это было и где на уроке вы с этим столкнулись (название раздела и номер шага). Используйте эту форму, чтобы отправить нам отзыв.

Положение о перечислении

| UpCounsel 2022

Пункт о перечислении существует для того, чтобы узнать, сколько членов Конгресса (членов Палаты представителей США) может избрать каждый штат в зависимости от численности населения этого штата. 3 мин. Чтения

1. Пункт о перечислении
2. Где находится пункт о перечислении и что он означает?
3. Фактический подсчет vs.Оценка
4. Дополнительная информация

Перечень пунктов

Пункт о перечислении существует для того, чтобы узнать, сколько членов Конгресса (членов Палаты представителей Соединенных Штатов) может избрать каждый штат в зависимости от численности населения этого штата.

Где находится пункт о перечислении и что он означает?

Пункт о перечислении в Конституции США также известен как пункт о переписи (содержится в статьях 1, разделах 1 и 2 Конституции) и гласит следующее: «Представители . .. распределяются между несколькими штатами ... согласно их количеству ... Фактический подсчет будет производиться в течение трех лет и первого заседания Конгресса Соединенных Штатов Америки, а также в течение каждого последующего десятилетнего срока в порядке, установленном законом.«Хорошо, так что на самом деле означает? Что ж, это в основном утверждение, что Соединенные Штаты проводят перепись каждые 10 лет, и что первая должна быть проведена в течение трех лет после создания вышеупомянутой статьи.

Как и многие другие формулировки Конституции Соединенных Штатов, есть некоторые вещи, которые можно интерпретировать. Например:

  • Формулировка «… как они должны по закону» поднимает вопрос о том, нужно ли правительству на самом деле всех и каждого человека, или можно использовать оценку? На Первом Континентальном Конгрессе, по-видимому, не было конкретной дискуссии по этому поводу.
  • Применимо ли это только к штатам, входящим в состав Соединенных Штатов Америки, или это разрешение применяется к территориям США? Правительство США решило применить перепись также к территориям США, таким как Пуэрто-Рико и Виргинские острова США, даже несмотря на то, что их конгрессменам и женщинам-конгрессменам не разрешается голосовать в Палате представителей.

При первоначальном зачатии афроамериканец учитывался только как 3/5 человека, насколько это касалось переписи.Только свободные люди (читай: белые) должны были считаться целыми людьми. Это было изменено с созданием Раздела 2 Четырнадцатой поправки к Конституции.

Фактический подсчет по сравнению с расчетным

Есть те, кто довольно сильно придерживается обеих сторон спора о том, нужно ли считать каждого человека и допустимость оценок. Некоторые из аргументов включают:

  • Некоторые люди считают, что фраза «фактический подсчет» позволяет правительственным чиновникам использовать свои здравые суждения для получения наилучшей оценки.
  • Некоторые считают, что «фактический подсчет» применим только к первой переписи, которая была проведена через три года после заседания Первого Континентального Конгресса.
  • Для людей, которые считают, что каждый человек предназначен для подсчета и, следовательно, оценки недопустимы, выражение «фактический подсчет» приобретает буквальное значение «фактический».
  • Поскольку одним из основополагающих вопросов, которые привели к провозглашению независимости Соединенных Штатов Америки от Англии, было налогообложение без представительства (это означает, что Соединенные Штаты не имели права голоса в британском парламенте, но колонии должны были платить налоги в корона), есть те, кто считает, что история совершенно ясно показывает, что фактический подсчет означает, что следует использовать не оценки, а точный подсчет всех U.Жители С.

Именно Закон о переписи 1790 года, когда была проведена первая перепись, установил фактический подсчет. Фактически, счетчики должны были дать присягу, заявив, что будет произведен точный и точный подсчет всех лиц.

Дополнительная информация

Конституция Соединенных Штатов - это органический документ, который всегда открыт для интерпретации и изменения (посредством поправок), и интересно рассмотреть некоторые из формулировок, которые решили использовать разработчики.Например, в переписи используется «отдельные лица», а не «жители» или «граждане». Это означает, что следует учитывать каждого человека, проживающего в Соединенных Штатах, независимо от его иммиграционного статуса или статуса гражданства. Однако есть те, кто не согласен с этим, поскольку перепись предназначена для определения количества членов в Палате представителей, и считают, что, не ограничивая перепись только гражданами или законными жителями, она обеспечивает «несправедливое преимущество. »Тем выборным должностным лицам, которые представляют штаты с большим иммигрантом или населением DACA / Dreamer.

Если вам нужна помощь с перечислением, вы можете опубликовать свою юридическую потребность на торговой площадке UpCounsel. UpCounsel принимает на свой сайт только 5% лучших юристов. Юристы UpCounsel являются выпускниками юридических школ, таких как Harvard Law и Yale Law, и имеют в среднем 14 лет юридического опыта, включая работу с такими компаниями, как Google, Menlo Ventures и Airbnb, или от их имени.

.
Автор записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *